如何从 Bluemix IoT 服务获取 device/gateway IP 地址?

How to get a device/gateway IP address from Bluemix IoT service?

需要什么?

我需要获取 device/gateway 当前 IP 地址以确定其位置。

如何实现?

我找到了 2 个选项:

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

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

P.S。当前的解决方法是直接从网关发送 IP 地址,但这看起来不是最佳选择。

调用连接日志 api ...您会在 IIRC 中找到 device/gateway 上次连接的 IP 地址...

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

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

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

  • 连接日志

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

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

没有直接的 "give me the IP address of this device" 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键订阅监控主题:

    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) 中提到的连接日志和监控主题仅与直接连接到平台的设备相关。