在一些用于处理Azure IoT集线器的Microsoft documentation中,它提到在多个简单设备通话的情况下,可以在单个TLS连接(使用AMQP协议)下多路复用多个设备的通信到本地集线器设备,其功能足以与IoT Hub通信。有没有人会如何实现这种多路复用? DeviceClient library似乎不支持这一点(尽管我可能错了)。此方案还提到了物联网网关SDK,但我还没有找到如何使用它设置多路复用的明确示例。任何有关其他材料的建议或参考将不胜感激。
答案 0 :(得分:4)
C#DeviceClient支持使用单个Amqp / TLS连接多路复用多个设备。以下是使用单个Amqp连接将三个设备连接到IotHub的示例:
var devices = new Device[3];
for(int i = 0; i < 3; i++)
{
devices[i] = new Device();
devices[i].Id = Guid.NewGuid().ToString();
devices[i] = await registryManager.RegisterDeviceAsync(device);
}
var deviceClients = new DeviceClient[3];
for(int i = 0; i < 3; i++)
{
var auth = new DeviceAuthenticationWithRegistrySymmetricKey(devices[i].Id, devices[i].Authentication.SymmetricKey.PrimaryKey);
var deviceClients[i] = DeviceClient.Create(
<IotHubHostName>,
auth,
new ITransportSettings[]
{
new AmqpTransportSettings(Client.TransportType.Amqp_Tcp_Only)
{
AmqpConnectionPoolSettings = new AmqpConnectionPoolSettings()
{
Pooling = true,
MaxPoolSize = 1
}
}
});
await deviceClients[i].OpenAsync()
}
答案 1 :(得分:2)
我最近建立了这样一个架构,也许它会帮助你作为参考。 我们的球员:
边缘传感器将其遥测发送到现场网关。 Field Gateway维护与IoT Hub的连接,IoT Hub知道的唯一设备是Field Gateway。
边缘传感器在现场网关中接收的每个遥测都包含消息有效负载中的唯一ID。
当物联网中心收到消息时,物联网中心只知道现场网关。但是当后端处理消息时,它会从有效负载中获取唯一的ID,因此知道哪个是发送遥测的正确设备。
所以我们有多个设备都在一个连接上“骑”。
希望它会有所帮助。
答案 2 :(得分:1)
我认为Azure物联网网关仍然处于测试阶段,这可能解释了缺少示例。
这里有几页提供更多见解:
介绍Azure IoT网关SDK (2016年4月发布)
https://azure.microsoft.com/en-gb/blog/introducing-the-azure-iot-gateway-sdk-beta/
支持IoT Hub的其他协议 (2016年8月更新)
https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-protocol-gateway/
最后是GitHub上的实际测试版SDK,但假设你已经有了这个:
https://github.com/Azure/azure-iot-gateway-sdk
我有兴趣知道这个的输出。到目前为止,我遇到的大多数架构只是让设备直接与集线器通信,因此不需要网关 。
答案 3 :(得分:1)
您可能会发现此演练很有用:https://azure.microsoft.com/documentation/articles/iot-hub-linux-gateway-sdk-simulated-device/
它使用模拟设备来展示如何通过使用Gateway SDK构建的网关连接多个设备。