如何使用Python接收Azure设备遥测?

时间:2018-06-27 18:06:28

标签: python azure azure-iot-hub azure-eventhub azure-iot-sdk

如何使用Python在事件中心中接收设备消息?我看到了来自事件中心的摘要消息,但是缺少详细的设备消息。

使用Azure IOT远程监视示例(https://github.com/Azure/azure-iot-remote-monitoringhttps://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已经存在,所以我希望此问题已得到解决。

1 个答案:

答案 0 :(得分:0)

是的,最新的EventHubs SDK提供了使用python读取遥测技术的功能。 我不知道您是否提到了发布在GitHub上的issue(#28)。我认为annatisch在4月28日发表的评论对此问题很有帮助。