[Fiware-tech-help] JSON IoT Agent device_id missing in Orion problem

Taz Lodder taz at chalmers.se
Wed Jun 2 11:16:25 CEST 2021


Hi


I have added a few hundred devices into our FIWARE installation. Unfortunately, I have just found an issue that could prove problematic for us.


To provision a device, following the format I got from the tutorial an example, my JSON looks similar to (including the important actual device_id):


{
 "devices": [
   {
     "device_id":   "O071_EL_CONS",
     "entity_name": "urn:ngsi-ld:Electricity:0001",
     "entity_type": "ElectricityDemand",
     "timezone":    "Europe/Stockholm",
     "attributes": [
       { "object_id": "timestamp", "name": "timestamp", "type": "DateTime" },
       { "object_id": "value", "name": "value", "type": "Number" }
      ],
     "static_attributes": [
       { "name":"description", "type": "Text", "value": "Consumption at building"},
       { "name":"unit", "type": "Text", "value": "KWh"},
       { "name":"controlStatus", "type": "Text", "value": "meter"},
       { "name":"deviceType", "type": "Text", "value": "demand"}
     ]
   }
 ]
}'


However, when testing trying to GET data from the Orion context broker using the device_id specifically it fails:

curl -X GET 'http://localhost:1026/v2/entities?id=O071_EL_CONS' -H 'fiware-service: building' -H 'fiware-servicepath: /country/city/building/electricity'
[]


So, I went looking in the mongo backend and find that the device_id is a field in the iotagentjson->devices document, but completely missing from the orion-building-> entities document:

{
    _id: {
        id: 'urn:ngsi-ld:Electricity:0001',
        type: 'ElectricityDemand',
        servicePath: '/country/city/building/electricity'
    },
    attrNames: [
        'timestamp',
        'value',
...


This is problematic as it is likely we will want to retrieve data using the device_id for integration purposes.


As it's possible when provisioning a device directly in the IoT agent to store the entity_name and entity_type in the Orion context broker entity, then it should be possible to also store the device_id in Orion in order to reduce the amount of extra code/lookup tables needing to be written to handle this.


I considered creating a static_attribute to contain the device_id in the meantime - however, I haven't been able to figure out how to retrieve data using the Orion API by only an attribute value (ie without relying on the entity name, and https://swagger.lab.fiware.org/ would suggest I can't.


Is extra code using some kind of lookup tables the only way for me at this point to map the actual device ID with the entity ID?


I wanted to mention about the inconsistency with naming having been confusing during my learning curve - especially with regard to the entity ID:

  *   JSON provisioning a device: entity_name
  *   mongo->orion-*->entities: id
  *   mongo->iotagentjson->devices: name
  *   swagger spec: entityID
  *   GET request: id (making it confusing when attempting to get data using the device_id)

Anyway, I would be very grateful if you can advice with my device ID problem.

Kind regards
Taz

Kind regards
Taz Lodder
Chalmers University of Technology
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.fiware.org/private/fiware-tech-help/attachments/20210602/b351a3c6/attachment.html>


More information about the Fiware-tech-help mailing list

You can get more information about our cookies and privacy policies clicking on the following links: Privacy policy   Cookies policy