首页 > 编程问答 >如何使用 python 更新设备孪生?

如何使用 python 更新设备孪生?

时间:2024-07-21 12:33:21浏览次数:11  
标签:python azure ssl-certificate azure-iot-hub azure-python-sdk

我目前正在尝试使用 python 更新设备孪生中的属性。但由于 SSL 错误而无法执行此操作。

下面是代码

from azure.iot.hub import IoTHubRegistryManager
import certifi
import ssl

# Connect to IoT Hub and send message to device
CONNECTION_STRING = "HostName=iothub-jein02-np-eas-ua-eztr01.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=Mmjc..."
DEVICE_ID = "NodeMCU"

'''first used this method'''
#ca_cert_path = "D:/new/cacert.pem"

'''later used this method'''
# Set the CA certificates globally
ssl_context = ssl.create_default_context(cafile=certifi.where())

try:
    # Create IoTHubRegistryManager
    registry_manager = IoTHubRegistryManager.from_connection_string(CONNECTION_STRING, connection_verify = False)
   
    # Update the desired properties
    twin = registry_manager.update_twin(DEVICE_ID, {
        "properties": {
            "desired": {
                "temp": "100"
                }
        }
    })

except Exception as ex:
    print(f"Error sending message to device: {str(ex)}")
    raise

以下是我收到的错误

msrest.exceptions.ClientRequestError: 请求中发生错误。,SSLError: HTTPSConnectionPool(host=' iothub-jein02-np-eas-ua-eztr01.azure-devices.net',端口=443):超过最大重试次数,网址:/twins/NodeMCU?api-version=2021-04-12(由 SSLError(SSLCertVerificationError 引起) (1, '[SSL: CERTIFICATE_VERIFY_FAILED] 证书验证失败: 无法获取本地颁发者证书 (_ssl.c:997)')))

另外,如何在 443 端口(开放端口)中执行此操作,它尝试了 connection_verify =错误的。 它说connection_verify命令错误

如何纠正此错误。


该 SSL 错误表明的 Python 脚本无法验证 IoT 中心证书。下面介绍了如何解决该问题以及一些优秀的做法:

1. 使用 certifi 包(推荐):

看起来正试图使用 certifi ,但并未以正确的方式使用。无需直接修改 ssl_context certifi 应该通过 Python 的 requests 库自动处理。请尝试如下简化代码:

from azure.iot.hub import IoTHubRegistryManager

CONNECTION_STRING = "HostName=iothub-jein02-np-eas-ua-eztr01.azure-devices.net;SharedAccessKeyName=service;SharedAccessKey=Mmjc..."
DEVICE_ID = "NodeMCU"

try:
    registry_manager = IoTHubRegistryManager.from_connection_string(CONNECTION_STRING)

    twin = registry_manager.update_twin(DEVICE_ID, {
        "properties": {
            "desired": {
                "temp": "100"
            }
        }
    })

    print("孪生更新成功")

except Exception as ex:
    print(f"错误:{ex}") 

说明:

  • certifi 应该自动工作: certifi 包附带了 Python 安装程序,并提供根证书的精选列表。 requests 库(由 azure.iot.hub 内部使用)默认使用 certifi
  • 不要禁用 SSL 验证: connection_verify=False 会使的连接易受攻击,因为它允许中间人攻击。应始终使用适当的 SSL 验证。

如果问题仍然存在:

  1. 检查 IoT 中心主机名: 确保的 CONNECTION_STRING 中的 IoT 中心主机名正确无误。

  2. 网络连接: 确认的机器可以连接到的 IoT 中心。如果是在企业网络之后,可能需要配置代理服务器或防火墙例外。

  3. Python 版本和依赖关系: 请确保使用的是最新版本的 azure-iot-hub 库。可以使用 pip install --upgrade azure-iot-hub 进行更新。

其他提示:

  • 错误处理: try...except 块做得很好。考虑添加更具体的异常处理以获得更好的调试体验。
  • 日志记录: 为了进行更深入的故障排除,请使用 Python 的日志记录模块来记录调试信息。

如果已尝试以上步骤并且仍然遇到问题,请提供以下信息,以便我可以更好地帮助:

  • 的操作系统和 Python 版本
  • 是否使用任何代理服务器或公司防火墙?
  • 是否可以连接到其他使用 SSL 的服务?

标签:python,azure,ssl-certificate,azure-iot-hub,azure-python-sdk
From: 78757874

相关文章

  • 【Python将字符串连接在一起】
    当然,Python是一个功能丰富且灵活的语言,有许多技巧和最佳实践可以帮助你更有效地编写代码。以下是一些常见的Python技巧:列表推导式(ListComprehensions):这是一种简洁的构建列表的方法。它比使用循环更加清晰和Pythonic。[x*2forxinrange(5)]#输出:[0,2,4,6,......
  • 我心中的王者:Python-第2章 认识变量与基本数学运算
    我心中的王者:Python-第2章认识变量与基本数学运算本章将从基本数学运算开始,一步一步讲解变量的使用与命名,接着介绍Python的算术运算。2-1用Python做计算假设读者到麦当劳打工,一小时可以获得120元时薪,如果想计算一天工作8小时,可以获得多少工资?我们可以用计算器执行“1......
  • 【Dison夏令营 Day 25】用Python写个2048
    在本文中,我们将用python代码和逻辑来设计一款你经常在智能手机上玩的2048游戏。如果您对该游戏不熟悉,强烈建议您先玩一下该游戏,以便了解其基本功能。如何玩2048.NET?1.有一个4*4的网格,可以填入任何数字。一开始,随机填入两个2的单元格。其余单元格为空。我们......
  • python入门基础——新手必看
    前言随着人工智能,大数据的发展。python是当前时代最流行,可以在数据处理、web开发、人工智能等多个领域。它的语法简洁、开发效率高、可移植性强,并且可以和其他变成语言(比如C++)轻松衔接,本文主要讲述一些python的变量,基本数据类型,输入、输出,数据类型的转换,运算符等一些必需的......
  • python中逗号运算符的含义
    我理解了python中逗号运算符的简单概念。例如,x0,sigma=0,0.1表示x0=0,sigma=0.1。但我获得了一个代码,其中有一行如下所示。y,xe=np.histogram(np.random.normal(x0,sigma,1000))其中y和xe的输出如下。yOut[10]:array([3,17,58,136,216,25......
  • 【科大讯飞笔试题汇总】2024-07-20-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/
    ......
  • Python - Pandas - loc vs iloc (DataFrame.loc[:,['column_name':]])
    原文链接:https://blog.csdn.net/weixin_48964486/article/details/123150832————————————————————————————————————————————————关于python数据分析常用库pandas中的DataFrame的loc和iloc取数据基本方法总结归纳及示例如下:1.......
  • 在 Python 中将 2 列的数据框转换为一系列 2 列
    我正在尝试处理一些时间序列数据,并且对pandas数据框相当陌生。我有一个包含两列的数据框,如下所示:+---+-----------------------+-------+--+||0|1||+---+-----------------------+-------+--+|1|2018-08-0223:00:00|456.8||......
  • 基于python的非平稳时间序列模型
    前言平稳时间序列指的是宽平稳时间序列,就是指时间序列的均值、方差和协方差等一二阶矩存在但不随时间改变,表现为时间的常数。若三个条件有一个不成立,那么就称该序列为非平稳时间序列。包括确定性趋势时间序列和随机性趋势时间序列。要想把非平稳的时间序列转化为平稳的时......
  • 猫头虎 Python知识点分享:pandas--read_csv()用法详解
    ......