Azure IoT 中心如何与嵌入式/IoT 设备交互?

物联网 硬件 沟通 aws-iot 微软视窗物联网 天蓝色
2021-06-13 23:45:21

我在 Azure IoT 平台上工作,我了解设备如何将数据发送到 IoT 中心(如果我没记错的话,这只是 Web 服务调用或类似的东西)。

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

我在某处读到,如果 IoT 中心有任何输入,设备会不断向 IoT 中心请求,然后 IoT 中心将数据/命令/输入发送到设备作为响应。真的吗?如果不是,那么请解释。

1个回答

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

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

物联网中心通过两种方式做到这一点:

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

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