1

需要什么?

我需要获取设备/网关的当前 IP 地址以确定其位置。

如何做到这一点?

我找到了 2 个选项:

  1. 通过 Bluemix API 获取网关 IP 地址,因为我在管理面板中看到它,所以决定它可以通过 API 获得(但不能)。但找不到合适的 API 调用。请建议一个,如果它已实施。
  2. 在设备详细信息的 API 响应中,我看到了额外的位置参数,但找不到完整的描述如何使用它。此参数发送回日志和错误代码的链接。但是对于任何 API 请求,location 参数都会返回一个空字符串。

任何人都可以帮助我解决这些选项或提出其他解决方案吗?

PS 当前的解决方法是直接从网关发送 IP 地址,但它看起来不是最好的选择。

4

3 回答 3

2

没有直接的“给我这个设备的 IP 地址”API,但有几个不同的信息来源:

对于以下内容,假设设备存在type = "testDeviceType"id = "testDeviceId"org = "123456"

  1. 连接日志 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" } ]

  2. 使用 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 }

  3. 如问题中所述,它始终可以在消息有效负载中指定,但也许有一些理由不信任设备发布的此信息?

  4. 设备上的 DeviceInfo 字段包含一个descriptive location字段,该字段只是一个字符串,从技术上讲可以设置为设备的 IP 地址……但这可能有点牵强。

  5. 设备地理位置也可以通过 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) 中提到的连接日志和监控主题仅与直接连接到平台的设备相关。

于 2016-11-08T21:17:01.193 回答
1

调用连接日志 api ...您将在 IIRC 中找到设备/网关最后连接的 IP 地址 ...

或者,通过 Mqtt 订阅监控主题,您可以从该主题上可用的消息中获取 IP,对于当前连接的设备,它将是当前 IP,对于先前连接的设备,它将是最后一个已知的IP地址,对于从未连接过的人,将没有可用的信息。

于 2016-11-06T15:22:03.940 回答
0

如果您连接的设备尚未发布其位置,您将无法接收任何内容。由您的应用程序或设备代码来更新其位置。没有基于 IP 的自动位置查找。

要检索连接的 IP,您有 2 个选项:

  • 连接日志

https://docs.internetofthings.ibmcloud.com/swagger/v0002.html#!/Problem_Determination/get_logs_connection

请记住,/mon/ 主题中的消息可能不会无限期保留。

于 2016-11-07T09:19:25.737 回答