如何使用Python在事件中心中接收设备消息?我看到了来自事件中心的摘要消息,但是缺少详细的设备消息。
使用Azure IOT远程监视示例(https://github.com/Azure/azure-iot-remote-monitoring,https://www.azureiotsolutions.com/Accelerators)和IOT Hub资源管理器https://github.com/Azure/iothub-explorer提供以下消息:
====来自:'chiller-01.0'在'2018-06-27T17:35:13.835Z'==== { “温度”:74.8813305672404, “ temperature_unit”:“ F”, “湿度”:67.345695720448, “ humidity_unit”:“%”, “压力”:155.648674178239, “ pressure_unit”:“ psig” } ----应用程序属性---- { “ iothub-message-schema”:“制冷传感器; v1”, “ iothub-creation-time-utc”:“ 2018-06-27T17:35:13.5066336Z”, “ $$ CreationTimeUtc”:“ 2018-06-27T17:35:13 + 00:00”, “ $$ MessageSchema”:“制冷传感器; v1”, “ $$ ContentType”:“ JSON” }
要在python中获取这些消息,我使用https://github.com/Azure/azure-event-hubs-python中的azure-event-hubs-python库和示例,使用为IOT Hub上指定的事件中心连接字符串从事件中心读取IOT消息。操作选项卡。用Node JS编写的IOT Hub Explorer使用IOT Hub连接字符串,但是使用python编写相应的代码失败,并且EventHubClient.from_connection_string失败,因为'EndPoint'不在连接字符串中。在连接字符串中将“ HostName”更改为“ EndPoint”会导致connection.pyx错误:
uamqp.c_uamqp.create_connection中的文件“ ./src/connection.pyx”,第20行 TypeError:预期的字节,找不到NoneType
将协议sb://附加到端点之前会抱怨未指定EventHub:
ValueError:未指定EventHub
添加; EntityPath =进一步,但由于CBS令牌身份验证错误而失败:
azure.eventhub.EventHubError:接收失败:CBS令牌身份验证失败。 状态码:401 说明:b'指定的SAS令牌具有无效的签名。它与主键或辅助键均不匹配。'
使用IOT集线器的事件集线器连接字符串连接和接收消息可解决这些错误,但仅接收汇总数据而无需任何设备遥测,例如:
{
"count": 0,
"total": 0,
"minimum": 0,
"maximum": 0,
"average": 0,
"resourceId": "/SUBSCRIPTIONS/{SUBSCRIPTION}/RESOURCEGROUPS/{RESOURCEGROUP}/PROVIDERS/MICROSOFT.DEVICES/IOTHUBS/{IOTHUB}",
"time": "2018-06-27T16:59:00.0000000Z",
"metricName": "jobs.failed",
"timeGrain": "PT1M"
}
由于缺少设备数据,因此不确定是否将正确的参数传递给Python EventHubClient,或者客户端是否不返回它们。一年前How can I receive from Azure IoT Hub messages sent by devices?进行的堆栈交换表明无法使用Python读取遥测数据,但是由于Python EventHub SDK已经存在,所以我希望此问题已得到解决。
答案 0 :(得分:0)
是的,最新的EventHubs SDK提供了使用python读取遥测技术的功能。 我不知道您是否提到了发布在GitHub上的issue(#28)。我认为annatisch在4月28日发表的评论对此问题很有帮助。