根据IoT Hub中直接方法的文档,声明用户通过面向服务的URI " {iot hub} / twins / {device id}调用直接方法/ methods /" ,设备在MQTT主题" $ iothub / methods / POST / {method name} /" 上接收它
我对这种映射的工作原理有些困惑。
物联网集线器中是否有任何内部映射将请求重定向到特定设备?
其他设备如何识别该方法不适用于它们,因为设备正在侦听的主题似乎不是特定于设备的,我们只需要一个特定的设备来接收该方法调用?
答案 0 :(得分:0)
当设备使用IoT Hub进行身份验证时,它会包含其设备ID。请参阅:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-mqtt-support#using-the-mqtt-protocol-directly
IoT Hub可以确保设备接收正确的直接方法调用。
答案 1 :(得分:0)
每个直接方法都针对单个设备,即使多个直接方法具有相同的名称,只有目标设备才能接收该方法。
所以随时测试并使用它。
答案 2 :(得分:0)
Azure IoT Hub是设备和云(IoT堆栈)之间的双向集成网关。其主要目标是通过默认(内置)或自定义端点将设备遥测数据快速提取到云流管道。
基本上,Azure IoT Hub有两种端点,例如面向设备的端点和面向服务的端点。 有关这些端点的更多详细信息是here。
在内部,Azure IoT Hub不是面向总线的,它不是通用的MQTT Broker,它不是通用的通信代理,它是具有点对点星型拓扑通信的集成网关,例如Device-To-云(D2C)和云到设备(C2D)消息传递。没有直接的设备到设备消息传递。
C2D消息传递有一些限制,请参阅IoT Hub quotas and throttling。 使用设备双功能,C2D消息传递可以采用异步或同步方式。
基本上,C2D消息传递基于点对点星型通信,换句话说,您无法向设备发送多播广播消息。在这种情况下,推荐的方法是创建一个作业,逐个向设备发送消息。
通过Azure IoT Hub在设备上调用直接方法只能通过使用Http协议的面向服务的端点进行。另一方面,例如面向设备的端点,只能由具有面向连接的协议(如MQTT或AMQP)的设备使用。
面向设备的端点支持MQTT v3.1.1通信协议,请参阅更多详细信息here。
使用Azure IoT Hub评估MQTT设备的行为可以使用第三方工具完成,例如MQTTBox客户端,https://iotdevtool.com,Azure IoT Hub Tester等。
以下屏幕截图显示在MQTT设备上调用Direct方法。请注意使用带有Azure IoT Hub的直接MQTT协议的Azure IoT Hub Tester。