我们有一个在物联网中心应用程序中注册的网关设备。该网关设备通过ZigBee连接到多个类似的传感器设备,例如飞利浦色调灯泡。我们通过简单的JSON 将传感器的遥测数据发送到物联网中心
{"mac":"<mac address>","illumination":"200","bulb_status":"1"}
在物联网中心,我们已将网关设备注册为具有设备模板的物联网设备,该设备模板具有与飞利浦灯泡和其他传感器相关的遥测属性。
现在我们面临的挑战是,如何区分物联网中心1号房间的飞利浦灯泡和2号房间的菲利普灯泡发送的数据,因为我们只有1台设备在物联网中心注册。
JSON对灯泡和IoT Central中的遥测值都具有类似的属性,无论哪个设备发送最后一条消息,它都将被替换。
请为我提供适用于这种情况的正确的可扩展方法。
注意:考虑到我们的网关设备目前无法运行IoT Edge运行时。所以我们不能把它用作Edge设备。
有两种方法可以解决这个问题。第一种方法是对网关设备进行编程,为每个灯泡提供身份信息。这意味着你所有的灯都将成为物联网中心的一个独立设备(你将为此充电(。您的网关设备需要具有它发送遥测数据的所有设备的连接详细信息。
第二种(不那么漂亮(方法是为每个灯的接口添加一个遥测点。所以你应该有lamp1_brightness
和lamp2_brightness
而不是brightness
。我只是在回答中包含了这一点,因为这是可行的,并且将导致在物联网中心看到每个灯的仪表板。它的规模也不好。
最终Azure IoT Edge将支持身份翻译,这可以解决的这一问题和其他问题
我举了一个Nano BLE设备的E2E示例,该设备使用Azure IoT Python SDK通过基于Raspberry Pi的中央网关捕获数据。这个例子是";进行中";,但我想你可能会发现两个文件很有用。。。
主要项目https://github.com/Larouex/IoTCRaspberryPiProtocolTranslationGateway
BLE项目https://github.com/Larouex/IoTCNanoBLESense33
您可能想要签出的文件。。。
丑闻.py
https://github.com/Larouex/IoTCRaspberryPiProtocolTranslationGateway/blob/master/scandevices.py
此脚本使用BLEScan查找与命名模式匹配的BLE设备,并将它们写入配置文件。
临时性
https://github.com/Larouex/IoTCRaspberryPiProtocolTranslationGateway/blob/master/provisiondevices.py
此脚本和关联类使用Azure IoT SDK for Devices读取配置文件中的设备,并在Azure IoT Central中提供这些设备。当前的代码采用透明的方法,使用BLE设备的身份进行配置,看起来像Iot Central中的真实设备。
在接下来的几周里,我将继续添加其他场景,如不透明和协议翻译(看起来像您感兴趣的场景(。
你可能想通过建模位置和分离遥测值(相对于绘制mac地址(来考虑色调的差异,但当你添加或尝试删除灯泡时,你会在版本控制方面遇到一些困难。
我建议确定翻译,并将每个灯泡与一个模型关联起来。将设备组用于聚合视图。然后设备属性,因为对定位等有用