没有直接的“给我这个设备的 IP 地址”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 key 订阅监控主题:
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) 中提到的连接日志和监控主题仅与直接连接到平台的设备相关。