我一直在尝试将IOTEdge设备设置为透明网关,以通过IOTEdge将叶子遥测转发到IOTHub。我已经按照并阅读了Azure官方文档中的步骤。我将总结一下它的作用
PS我在leafDevice中使用的连接字符串中的主机名是一个IP地址(DNS似乎将其弄乱了,在config.yaml主机中给出的名称似乎在这里无法解析从网络上的另一个设备我们可以ping通。因此,我决定在主机名后面提及IP地址-属于IOTEdge)。另外,我在门户网站中创建IOTEdgeDevice时将其设置为Leaf的父级设备,并且我选择了对称身份验证来保存自己的所有手动X509混乱信息以用于测试目的
我从edgeHub容器日志中得到的错误是多个。我列出了其中的一些
- Error authenticating token for hmspi because the audience hostname
192.168.100.14 does not match IoTHub hostname mps-hms.azure-devices.net or the EdgeHub hostname
edgeuser-virtual-machine.
- Client hmspi in device scope not authenticated locally.
2019-07-19 05:29:13.979 +00:00 [WRN]
- 0x05 not Authorized
这里要提到的是,docker容器(EdgeHub)中的时间与EdgeDevice或LeafDevice的时间都不相同(这两个timeZones相同,设置为GMT + 5,而docker容器EdgeHub似乎具有时区UTC-我认为它与iotEdgeHub在Azure Servers上的位置相同-但我怀疑它会产生问题,因为带有带有证书的openSSL的bash测试命令返回“ Verified Ok”。非常感谢任何输入,因为我现在似乎想解决此问题。
更新: **所以我从较短的版本更改了连接字符串 **
HostName=myGatewayDevice;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz
到
HostName=myiothub.azure-devices.net;DeviceId=myDownstreamDevice;SharedAccessKey=xxxyyyzzz;GatewayHostName=myGatewayDevice
它现在可以正常工作,但我感到困惑,为什么不行,因为我已经在EdgeDevice和我的LeafDevice之间建立了父/子关系(如此处所述) https://docs.microsoft.com/en-us/azure/iot-edge/how-to-authenticate-downstream-device可以在设置父/子时使用较短版本的连接字符串。我正在使用python SDK-我也解析了DNS,但是无法知道数据是否只是通过直接的IOT HUB连接而忽略了gatewayHostname参数,或者是否利用了gatewayHostName参数并通过发送网关)
答案 0 :(得分:0)
1)和2)之类的声音可能正是您遇到的问题。您在config.yaml中设置的主机名需要解析为正确的IP