Ibm cloud 如何从Bluemix IoT服务获取设备/网关IP地址?

Ibm cloud 如何从Bluemix IoT服务获取设备/网关IP地址?,ibm-cloud,watson-iot,Ibm Cloud,Watson Iot,需要什么? 我需要获取设备/网关当前IP地址以确定其位置 如何实现这一点? 我找到了两个选择: 通过bluemixapi获取网关IP地址,因为我在管理面板中看到它,所以决定它通过API可用(但可以不可用)。但找不到合适的API调用。如果已经实施,请建议一个 在设备详细信息的API响应中,我看到了附加的位置参数,但找不到如何使用它的完整描述。此参数发送回日志和错误代码的链接。但在任何API请求中,location参数都返回一个空字符串 有人能帮我做任何选择或提出另一个解决方案吗 另外,当前的解决方

需要什么?

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

如何实现这一点?

我找到了两个选择:

  • 通过bluemixapi获取网关IP地址,因为我在管理面板中看到它,所以决定它通过API可用(但可以不可用)。但找不到合适的API调用。如果已经实施,请建议一个
  • 在设备详细信息的API响应中,我看到了附加的位置参数,但找不到如何使用它的完整描述。此参数发送回日志和错误代码的链接。但在任何API请求中,location参数都返回一个空字符串
  • 有人能帮我做任何选择或提出另一个解决方案吗


    另外,当前的解决方法是直接从网关发送IP地址,但这似乎不是最好的选择。

    调用连接日志api。。。您将在IIRC中找到设备/网关上次连接的IP地址


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

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

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

    • 连接日志

    • 周一话题 订阅设备状态消息
    请记住,/mon/topics中的消息可能不会无限期地保留。

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

    对于以下内容,假设存在具有
    type=“testDeviceType”
    id=“testDeviceId”
    org=“123456”
    的设备

  • 连接日志API

    GET
    /api/v0002/日志/连接?类型ID=testDeviceType&deviceId=testDeviceId

    答复:

    
    [
    {
    “时间戳”:“2016-10-22T05:07:36.064Z”,
    “消息”:“已从127.0.0.1关闭连接。该连接已由客户端关闭。错误=连接超时(110)”
    },
    {
    “时间戳”:“2016-10-22T03:59:36.182Z”,
    “消息”:“令牌身份验证成功:ClientID='d:123456:testDeviceType:testDeviceId',ClientIP=127.0.0.1”
    }
    ]
    

  • 使用api密钥订阅监控主题:

    topic=iot-2/type/+/id/+/mon

    消息有效负载:

    RCV[iot-2/type/testDeviceType/id/testDeviceId/mon][reserved]{“操作”:“连接”,“时间”:“2016-11-01T14:18:36.550Z”,“客户端地址”:“127.0.0.1”,“客户端id”:“d:123456:testDeviceType:testDeviceId”,“端口”:8883,“安全”:true,“协议”:“mqtt4”,“持久”:false}

  • 如问题中所述,它总是可以在消息负载中指定,但可能有一些原因不信任设备发布的此信息

  • 设备上的DeviceInfo字段包括一个
    描述性位置
    字段,该字段只是一个字符串,技术上可以设置为设备的IP地址。。。不过,这可能有点牵强

  • 还可以通过HTTP或使用设备管理MQTT主题设置设备地理位置


  • 另一件需要记住的事情是,由于提到了网关,(1)和(2)中提到的连接日志和监控主题仅与直接连接到平台的设备相关。

    API中的位置参数是纬度和经度,而不是IP地址。是的,这也是一个解决方案。但对于这里的任何请求,我都得到了一个空响应,正如我在问题中提到的。我怀疑location参数是否会在所有客户端/网关代码实现中填充。也许这只适用于网关的一个子集。因此,手动将IP地址包含到来自网关的消息中似乎是可行的solution@RomeoKienzler不需要直接包含IP。到目前为止,Bluemix关于网关的信息(网关联机时的IP地址)对我们来说已经足够了。非常好,感谢您的更新我也尝试了
    /diag/logs
    API调用,但它始终发送一个空的回复。但另一个订阅监控主题的解决方案对我来说似乎更简单、更方便。非常感谢。当然,我明白了。非常感谢。也许你也有一个例子,如何设置设备以适当的格式向Bluemix IoT发送位置信息?
    {
        "d": {
            "longitude": number,
            "latitude": number,
    
            "elevation": number,
            "measuredDateTime": "string in ISO8601 format",
            "updatedDateTime": "string in ISO8601 format",
            "accuracy": number
        },
        "reqId": "string"
    }