如何从 Bluemix IoT 服务获取 device/gateway IP 地址?
How to get a device/gateway IP address from Bluemix IoT service?
需要什么?
我需要获取 device/gateway 当前 IP 地址以确定其位置。
如何实现?
我找到了 2 个选项:
- 通过 Bluemix API 获取网关 IP 地址,因为我在管理面板中看到它,所以决定它可以通过 API 使用(但也可以不使用)。但是找不到合适的 API 调用。如果实现了,请推荐一个。
- 在设备详细信息的 API 响应中,我看到了额外的位置参数,但找不到如何使用它的完整说明。此参数发送回日志和错误代码的链接。但是在任何 API 请求中,位置参数 returns 是一个空字符串。
任何人都可以帮助我解决这些选项或提出其他解决方案吗?
P.S。当前的解决方法是直接从网关发送 IP 地址,但这看起来不是最佳选择。
调用连接日志 api ...您会在 IIRC 中找到 device/gateway 上次连接的 IP 地址...
或者,通过 Mqtt 订阅监控主题,您可以从该主题可用的消息中获取 IP,对于当前连接的设备,它将是当前 IP,对于之前连接它的设备将是最后一个已知的 IP 地址,对于从未连接过的 IP 地址,将没有可用信息。
如果您连接的设备尚未发布其位置,您将无法收到任何信息。更新其位置取决于您的应用程序或您设备的代码。没有基于IP的位置自动查找。
要检索连接的 IP,您有 2 个选项:
- 连接日志
请记住,/mon/ 主题中的消息可能不会无限期保留。
没有直接的 "give me the IP address of this device" API,但有几个不同的信息来源:
对于以下内容,假设设备存在 type = "testDeviceType"
和 id = "testDeviceId"
以及 org = "123456"
。
连接日志API
GET
/api/v0002/logs/connection?typeId=testDeviceType&deviceId=testDeviceId
回复:
[
{
"timestamp": "2016-10-22T05:07:36.064Z",
"message": "Closed connection from 127.0.0.1. The connection was closed by the client. Error=Connection timed out(110)"
},
{
"timestamp": "2016-10-22T03:59:36.182Z",
"message": "Token auth succeeded: ClientID='d:123456:testDeviceType:testDeviceId', ClientIP=127.0.0.1"
}
]
正在使用api键订阅监控主题:
topic = iot-2/type/+/id/+/mon
消息负载:
RCV [iot-2/type/testDeviceType/id/testDeviceId/mon][retained] {"Action":"Connect","Time":"2016-11-01T14:18:36.550Z","ClientAddr":"127.0.0.1","ClientID":"d:123456:testDeviceType:testDeviceId","Port":8883,"Secure":true,"Protocol":"mqtt4","Durable":false }
如问题中所述,它始终可以在消息有效负载中指定,但可能有一些理由不相信设备发布的此信息?
设备上的 DeviceInfo 字段包括一个 descriptive location
字段,它只是一个字符串,从技术上讲可以设置为设备的 IP 地址……这可能有点远-虽然取了。
也可以通过 HTTP 或使用设备管理 MQTT 主题设置设备地理位置。
https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/index.html#update-location
{
"d": {
"longitude": number,
"latitude": number,
"elevation": number,
"measuredDateTime": "string in ISO8601 format",
"updatedDateTime": "string in ISO8601 format",
"accuracy": number
},
"reqId": "string"
}
另一件事要记住,既然提到了网关,那么 (1) 和 (2) 中提到的连接日志和监控主题仅与直接连接到平台的设备相关。
需要什么?
我需要获取 device/gateway 当前 IP 地址以确定其位置。
如何实现?
我找到了 2 个选项:
- 通过 Bluemix API 获取网关 IP 地址,因为我在管理面板中看到它,所以决定它可以通过 API 使用(但也可以不使用)。但是找不到合适的 API 调用。如果实现了,请推荐一个。
- 在设备详细信息的 API 响应中,我看到了额外的位置参数,但找不到如何使用它的完整说明。此参数发送回日志和错误代码的链接。但是在任何 API 请求中,位置参数 returns 是一个空字符串。
任何人都可以帮助我解决这些选项或提出其他解决方案吗?
P.S。当前的解决方法是直接从网关发送 IP 地址,但这看起来不是最佳选择。
调用连接日志 api ...您会在 IIRC 中找到 device/gateway 上次连接的 IP 地址...
或者,通过 Mqtt 订阅监控主题,您可以从该主题可用的消息中获取 IP,对于当前连接的设备,它将是当前 IP,对于之前连接它的设备将是最后一个已知的 IP 地址,对于从未连接过的 IP 地址,将没有可用信息。
如果您连接的设备尚未发布其位置,您将无法收到任何信息。更新其位置取决于您的应用程序或您设备的代码。没有基于IP的位置自动查找。
要检索连接的 IP,您有 2 个选项:
- 连接日志
请记住,/mon/ 主题中的消息可能不会无限期保留。
没有直接的 "give me the IP address of this device" API,但有几个不同的信息来源:
对于以下内容,假设设备存在 type = "testDeviceType"
和 id = "testDeviceId"
以及 org = "123456"
。
连接日志API
GET /api/v0002/logs/connection?typeId=testDeviceType&deviceId=testDeviceId
回复:
[ { "timestamp": "2016-10-22T05:07:36.064Z", "message": "Closed connection from 127.0.0.1. The connection was closed by the client. Error=Connection timed out(110)" }, { "timestamp": "2016-10-22T03:59:36.182Z", "message": "Token auth succeeded: ClientID='d:123456:testDeviceType:testDeviceId', ClientIP=127.0.0.1" } ]
正在使用api键订阅监控主题:
topic = iot-2/type/+/id/+/mon
消息负载:
RCV [iot-2/type/testDeviceType/id/testDeviceId/mon][retained] {"Action":"Connect","Time":"2016-11-01T14:18:36.550Z","ClientAddr":"127.0.0.1","ClientID":"d:123456:testDeviceType:testDeviceId","Port":8883,"Secure":true,"Protocol":"mqtt4","Durable":false }
如问题中所述,它始终可以在消息有效负载中指定,但可能有一些理由不相信设备发布的此信息?
设备上的 DeviceInfo 字段包括一个
descriptive location
字段,它只是一个字符串,从技术上讲可以设置为设备的 IP 地址……这可能有点远-虽然取了。也可以通过 HTTP 或使用设备管理 MQTT 主题设置设备地理位置。
https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/index.html#update-location
{
"d": {
"longitude": number,
"latitude": number,
"elevation": number,
"measuredDateTime": "string in ISO8601 format",
"updatedDateTime": "string in ISO8601 format",
"accuracy": number
},
"reqId": "string"
}
另一件事要记住,既然提到了网关,那么 (1) 和 (2) 中提到的连接日志和监控主题仅与直接连接到平台的设备相关。