需要什么?
我需要获取设备/网关当前IP地址以确定其位置。
如何实现这一目标?
我找到了2个选项:
任何人都可以帮助我解决这些问题或提出另一种解决方案吗?
P.S。目前的解决方法是直接从网关发送IP地址,但它看起来不是最好的选择。
答案 0 :(得分:2)
没有直接的"给我这个设备的IP地址" API,但这些信息有几个不同的来源:
对于以下情况,假设设备存在$ git clone git@github.com:discoproject/disco.git
...
$ cd disco
$ make
...
$ PATH=$PWD/bin:$PATH ./bin/disco start
Master bignosk:8989 started
和type = "testDeviceType"
以及id = "testDeviceId"
。
连接记录API
org = "123456"
响应:
GET
/api/v0002/logs/connection?typeId=testDeviceType&deviceId=testDeviceId
使用api密钥订阅监控主题:
[
{
"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"
}
]
消息有效负载:
topic = iot-2/type/+/id/+/mon
正如问题所述,它总是可以在消息有效负载中指定,但也许有些理由不相信设备发布此信息?
设备上的DeviceInfo字段包含一个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 }
字段,该字段只是一个字符串,技术上可以设置为设备的IP地址......但这可能有点牵强。 / p>
还可以通过HTTP或使用设备管理MQTT主题设置设备地理位置。
https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/index.html#update-location
descriptive location
另外要记住的是,自提到网关以来,(1)和(2)中提到的连接日志和监控主题仅与直接连接到平台的设备相关。
答案 1 :(得分:1)
调用连接日志api ...你会在那里找到设备/网关最后连接的IP地址... II / ...
或者,通过Mqtt订阅监视器主题,您可以从该主题上可用的消息中获取IP,对于当前连接的设备,它将是当前的IP,对于先前连接它的设备将是最后一个已知的IP地址,对于从未连接的IP地址,将没有可用的信息。
答案 2 :(得分:0)
如果您的已连接设备尚未发布其位置,您将无法接收任何内容。您的应用程序或设备的代码可以更新其位置。没有基于IP的位置自动查找。
要检索连接的IP,您有两个选项:
请注意/ mon / topics中的消息可能无法无限期保留。