Azure IoT Hub能否向网关设备通过3个不同MQTT主题发送C2D消息?
当然可行!换个思路就能实现你的需求
Azure IoT Hub原生的云到设备(C2D)消息确实默认是通过devices/{deviceid}/messages/devicebound/#这个主题下发给网关设备的,但咱们可以通过两种常用方式,实现给网关下挂的3台设备分主题发送不同命令的效果:
方案一:利用直接方法实现定向命令下发
直接方法是IoT Hub里带请求响应机制的交互方式,非常适合下发命令:
- 先给你的网关设备注册3个不同的直接方法,比如
SendCommandToDeviceA、SendCommandToDeviceB、SendCommandToDeviceC - 云端需要给某台下挂设备发命令时,就调用对应名称的直接方法,把命令内容放在方法的payload里
- 网关收到直接方法请求后,就可以把命令转发到下挂设备对应的本地主题上,同时还能把执行结果返回给云端,确认命令是否生效
方案二:结合消息路由与自定义属性实现分设备转发
如果更倾向于用消息的方式下发,也可以这么操作:
- 云端发送C2D消息时,给消息添加自定义属性,比如
TargetDevice: DeviceA(不同设备对应不同属性值) - 网关收到所有发往它的C2D消息后,解析消息里的自定义属性,判断这条命令是给哪台下挂设备的,然后转发到对应的本地主题
- 要是想让网关侧的主题划分更清晰,还可以把网关部署为Azure IoT Edge模块,利用Edge Hub的本地消息路由能力,云端发消息到Edge模块的特定输入端口,Edge Hub直接把消息路由到下挂设备对应的本地主题,流程会更顺畅
注意点
IoT Hub原生的C2D消息本身不支持自定义主题,但通过上面两种方式,完全可以间接实现你要的“给3个不同主题发不同命令”的需求。另外要确保你的网关设备在IoT Hub里有足够的权限接收消息、处理直接方法调用哦。
内容的提问来源于stack exchange,提问作者user1602387
相关产品推荐
相关产品推荐

