我正在使用Azure IoT平台,并且我了解设备如何将数据发送到IoT中心(如果我没有记错,那只是Web服务调用或类似的调用)。

但是我想知道IoT中心如何将数据/命令/输入发送到设备,因为我们不在IoT中心上进行设备通信(我们没有任何将数据推送到设备的要求)。 IoT中心可以直接与设备交互吗? (使用设备的唯一ID或使用IP,Mac地址等任何唯一身份)。

我读过一些地方,如果IoT中心有任何输入,设备会不断向IoT中心发出请求,然后IoT中心将数据/命令/输入发送到设备作为响应。真的吗?如果没有,请解释。

#1 楼

IoT中心连接的设备使用的模型是它们将永远不接受传入连接。 IoT中心设备永远不会充当“服务器”,这是Azure IoT安全模型的关键部分。最终的模型封装在Clemens Vasters的“服务辅助通信”中。

因此,设备始终“轮询”外部服务以发送数据或接收命令。 API使它看起来像是在将数据发送到设备,但始终是进行传出连接的设备。

IoT中心通过两种方式做到这一点:


通过将数据发送到设备端点/devices/{deviceId}/messages/devicebound。这是一个AMQP消息传递终结点,类似于队列或主题订阅。该设备在读取命令时需要根据需要确认接收,这是基础AMQP协议的一部分。这与MQTT相同,并且https是有效的备用。
API为您完成了所有这些工作。还有其他概念,例如“直接方法”,它们是使用相同的底层消息协议围绕API进行包装的方法,
通过使用服务器端设备对,这是一种使属性在逻辑上保持设备与服务器之间同步的方法。您在设备twin上设置了一个属性,当设备同步时,该属性将同步到设备。这是基于消息的,并且是基于LWM2M设备管理协议构建的。

许多“轮询”,连接,共享连接,收据等都应作为其中的一部分来处理。 AMQP(或MQTT)协议,该协议又包装在IoT中心SDK中。因此,上述内容经过了高度简化,但是重申一下,IoT中心不能也不会(永远)尝试将数据发送到设备上的IP地址/端口。

评论


感谢@Simon,现在我很清楚,仅负责呼叫IoT中心以发送或接收数据的设备。您在答案中提到了“ Azure IoT”,因此只想确认一下,您在所有IoT平台上的答案应用程序?或仅适用于Azure IoT。

– Shri
17 Mar 9 '17 at 13:20



@ShrikantBhusalwad答案并不适用于所有平台,因为尚未开发许多平台。这是一个通用模型,对安全性有好处,但其他模型可能是合理的-特别是在新环境中。

– Sean Houlihane
17 Mar 9 '17 at 13:29

我并不熟悉所有平台,但是大多数云平台都将是相似的。 AWS使用MQTT,这几乎是相同的。正如@sean所观察到的,它不能适用于所有平台,但是很少有云平台会预先接受危险的安全实践。使用“设备即服务器”模型的方法将是旧的或具有更高的安全性(随着边缘或网格模式的发展)。 Azure IoT在架构上支持现场和云网关,以解决旧版或基于边缘的设备的问题

–西蒙·蒙罗(Simon Munro)
17年3月9日在19:17

在docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-mqtt-support上阐明了Azure IoT中心MQTT规则

–Gambit支持
19年7月18日在12:14