가 직접 "나에게이 장치의 IP 주소를 제공"API 없지만,이 정보의 몇 가지 소스가 있습니다 : 다음의 경우
는 장치가 type = "testDeviceType"
및 id = "testDeviceId"
및 org = "123456"
존재 가정합니다.
연결 로그 API
GET /api/v0002/logs/connection?typeId=testDeviceType&deviceId=testDeviceId
응답 :
: API 키와 모니터링 주제를 구독
[ { "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" } ]
-
메시지 페이로드 :
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 }
질문에서 언급 한 바와 같이, 그것은 항상 메시지 페이로드에 지정할 수 있지만, 어쩌면 장치에 의해 게시이 정보를 신뢰하지 않는 몇 가지 이유가있을 수 있을까?
장치의 DeviceInfo 필드에는 문자열이며 기술적으로 장치의 IP 주소로 설정할 수있는 필드가 포함되어 있습니다. 이것은 조금 멀리 가져올 수 있습니다.
또한 장치 지리적 위치는 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) 장치에만 관련이 있음을 인 플랫폼에 직접 연결하십시오.
API의 위치 매개 변수는 IP 주소가 아닌 위도와 경도를 나타냅니다. https://docs.internetofthings.ibmcloud.com/swagger/v0002.html#!/Devices/put_device_types_typeId_devices_deviceId_location – ValerieLampkin
예, 해결책이기도합니다. 그러나 여기에있는 모든 요청에 대해서는 제가 질문 할 때 빈 응답을 받았습니다. –
location 매개 변수가 모든 클라이언트/게이트웨이 코드 구현에 채워지는지 의심 스럽습니다. 어쩌면 이것은 게이트웨이의 서브 세트에 대해서만 작용할 수도 있습니다. 게이트웨이에서 메시지에 IP 주소를 수동으로 포함시키는 것은 실현 가능한 해결책 인 것 같습니다. –