2016-11-03 165 views
1

需要什麼?如何從Bluemix IoT服務獲取設備/網關IP地址?

我需要獲取設備/網關當前IP地址以確定其位置。

如何做到這一點?

我發現2種選擇:

  1. 打通Bluemix API網關IP地址,因爲我看到它在管理面板,以便決定它可以通過API(但可能不是)。但無法找到適當的API調用。請推薦一個,如果它已經實施。
  2. 在設備詳細信息的API響應中,我看到了其他位置參數,但找不到如何使用它的完整說明。該參數將返回日誌和錯誤代碼的鏈接。但是在任何API請求中,location參數都返回一個空字符串。

任何人都可以幫我解決這個問題嗎?

附:目前的解決方法是直接從網關發送IP地址,但它看起來不是最好的選擇。

+0

API中的location參數是緯度和經度,而不是IP地址。 https://docs.internetofthings.ibmcloud.com/swagger/v0002.html#!/Devices/put_device_types_typeId_devices_deviceId_location – ValerieLampkin

+0

是的,這也是一個解決方案。但是,對於這裏的任何要求,我已經得到了空談,正如我提到的那樣。 –

+0

我懷疑位置參數在所有的客戶端/網關代碼實現中被填充。也許這隻適用於網關的一個子集。因此,從網關手動包含IP地址到消息似乎是一個可行的解決方案 –

回答

1

連接調用日誌API ......你會發現IP地址在那裏IIRC連接的設備/網關最後...

另外,訂閱監視話題了MQTT,你可以得到來自可用於該主題的消息的IP,對於當前連接的設備將是他當前的IP,因爲之前連接它的設備將是最後知道的IP地址,對於從未連接過的設備將不會有信息可用。

+0

我也試過'/ diag/logs' API調用,但它始終發送一個空的答覆。但另一個訂閱監控主題的解決方案對我來說似乎更容易和更方便。謝謝! –

0

如果您的連接設備未發佈它的位置,您將無法收到任何內容。取決於您的應用程序或您的設備的代碼來更新其位置。沒有基於IP的自動查找位置。

用於檢索連接的IP,你有兩個選擇:

  • 連接日誌

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

請注意,/ mon /主題中的消息可能不會無限期保留。

+0

當然,我明白了。謝謝! 也許您還有一個示例如何設置設備以適當的格式將位置信息發送到Bluemix物聯網? –

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密鑰:

    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)僅適用於設備相關的這直接連接到平臺。