【问题标题】:How to get a device/gateway IP address from Bluemix IoT service?如何从 Bluemix IoT 服务获取设备/网关 IP 地址?
【发布时间】:2016-11-03 16:14:37
【问题描述】:

需要什么?

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

如何做到这一点?

我找到了 2 个选项:

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

谁能帮助我解决这些问题或提出其他解决方案?

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

【问题讨论】:

  • API中的location参数是纬度和经度,不是IP地址。 docs.internetofthings.ibmcloud.com/swagger/v0002.html#!/Devices/…
  • 是的,这也是一个解决方案。但是对于这里的任何请求,正如我在问题中提到的那样,我得到了一个空的回复。
  • 我怀疑 location 参数是否会在所有客户端/网关代码实现中填充。也许这仅适用于网关的一个子集。因此,手动将 IP 地址包含到来自网关的消息中似乎是一个可行的解决方案
  • @RomeoKienzler 不需要直接包含 IP。到目前为止,有关网关的 Bluemix 信息(当网关出现在线时的 IP 地址)对我们来说足够了。
  • 完美,感谢更新

标签: ibm-cloud watson-iot


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我也试过/diag/logs API 调用,但它总是发送一个空回复。但是订阅监控主题的另一种解决方案对我来说似乎更容易、更方便。谢谢!
    【解决方案3】:

    如果您连接的设备尚未发布其位置,您将无法接收任何信息。由您的应用程序或设备代码来更新其位置。不会根据 IP 自动查找位置。

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

    • 连接日志

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

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

    【讨论】:

    • 当然,我明白了。谢谢!也许您还有一个示例,如何设置设备以适当的格式向 Bluemix IoT 发送位置信息?
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2017-11-27
    • 1970-01-01
    • 2011-08-29
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多