Azure IoT 허브 작업을위한 Microsoft documentation 중 일부에서는 다중 TLS 연결 (AMQP 프로토콜 사용)에서 여러 장치의 통신을 멀티플렉싱 할 수 있음을 언급합니다. 장치는 IoT 허브와 통신하기에 충분히 강력한 로컬 허브 장치와 통신합니다. 이 멀티플렉싱을 구현하는 방법에 대한 예가 있습니까? DeviceClient library은이 문제를 지원하지 않는 것으로 나타났습니다 (잘못된 것일 수도 있음). 이 시나리오에 대한 IoT Gateway SDK에 대한 언급도 있지만,이를 사용하여 멀티플렉싱을 설정하는 방법에 대한 명확한 예제를 찾지 못했습니다. 다른 자료에 대한 조언이나 참고 사항은 인정 될 것입니다.Azure IoT 허브 AMQP 통신 멀티플렉싱
답변
저는 최근에 이와 같은 아키텍처를 만들었습니다. 참고로 도움이 될 수 있습니다. 플레이어 - 필드 게이트웨이 - Iot Hub와의 통신을 처리하고 가장자리 센서로부터 데이터를 수신 할 수있을 정도로 강한 로컬 허브. 가장자리 센서 - Iot 허브에 직접 연결할 수 없지만 필드 게이트웨이 (Zwave, Zigbee ...)에 연결할 수있는 일부 통신 프로토콜을 구현하는 장치. Iot 허브 - 필드 게이트웨이와 허브 사이의 D2C 및 C2D를 처리합니다. 백엔드 서버 - Iot 허브에서 데이터를 수신합니다.
에지 센서는 텔레 메 트리를 필드 게이트웨이로 전송합니다. 필드 게이트웨이는 Iot Hub에 대한 연결을 유지하고 Iot Hub는 Field Gateway를 인식합니다. 에지 센서에서 필드 게이트웨이로 수신되는 각 원격 측정에는 메시지 페이로드에 고유 ID가 포함되어 있습니다. 메시지가 Iot 허브에서 수신되면, Iot 허브는 필드 게이트웨이에 대해서만 알고 있습니다. 그러나 메시지가 백 엔드에 의해 처리되고있을 때 페이로드에서 고유 ID를 취하므로 원격 측정을 보낸 올바른 장치가 무엇인지를 알고 있습니다. 그래서 우리는 하나의 연결에서 모두 "타고"있는 여러 장치를 보유하고 있습니다.
희망이 있으면 도움이 될 것입니다.
저는 Azure IoT Gateway가 예제가 없다는 것을 설명 할 수있는 Beta에 있다고 생각합니다. 만약 IoT 허브에 대한 추가 프로토콜을 지원하는 푸른 만약 IoT 게이트웨이 SDK (2016 게시 년 4 월)
https://azure.microsoft.com/en-gb/blog/introducing-the-azure-iot-gateway-sdk-beta/
소개
: 여기
좀 더 통찰력을 제공 페이지의 부부의 (2016 년 8 월 업데이트)https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-protocol-gateway/
GitHub의에 마지막으로 실제 베타 SDK 있지만 가정 당신은 이미이 있습니다
https://github.com/Azure/azure-iot-gateway-sdk
나는이의 출력을 알고 싶네. 지금까지 내가 직면 한 대부분의 아키텍처는 허브와 직접 통신하는 장치가 있으므로 게이트웨이에 대한 요구 사항이 없습니다. 아직입니다.
이 유용 둘러 보지 찾을 수 있습니다 : https://azure.microsoft.com/documentation/articles/iot-hub-linux-gateway-sdk-simulated-device/
그것은 당신이 게이트웨이 SDK를 사용하여 구축 게이트웨이를 통해 여러 장치를 연결하는 방법을 보여 시뮬레이션 장치를 사용합니다.
C# DeviceClient은 단일 Amqp/TLS 연결을 사용하여 여러 장치를 다중화하는 것을 지원합니다. 다음은 단일 Amqp 연결을 사용하여 3 개의 장치를 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()
}
매우 흥미로운 접근 방법입니다. 합리적인 해결책처럼 보입니다. –