Uploaded image for project: 'Help-Desk'
  1. Help-Desk
  2. HELP-9402

[fiware-stackoverflow] Commands in IotAgent Ultralight 2.0 FIWARE

    Details

      Description

      Created question in FIWARE Q/A platform on 01-06-2017 at 14:06
      Please, ANSWER this question AT https://stackoverflow.com/questions/44307387/commands-in-iotagent-ultralight-2-0-fiware

      Question:
      Commands in IotAgent Ultralight 2.0 FIWARE

      Description:
      I am trying to send a command to a device using Orion + Ultralight 2.0.
      The device is registered and I can send measures easily. I want to work in the pooling mode in order to execute commands, but when I execute the updateContext operation, IDAS doesn't found the entity. Here are the configuration and the logs:

      Configuration:

      var config = {};

      config.mqtt =

      { host: 'mosquitto', port: 1883 }

      ;

      config.http =

      { port: 7896 }

      ;

      config.iota = {
      logLevel: 'DEBUG',
      timestamp: true,
      contextBroker:

      { host: 'MY_IP', port: '1026' }

      ,
      server:

      { port: 4041 }

      ,
      deviceRegistry:

      { type: 'mongodb' }

      ,
      mongodb:

      { host: 'mongo', port: '27017', db: 'iotagentul' }

      ,
      types: {},
      service: 'howtoService',
      subservice: '/howto',
      providerUrl: 'http://YIP:4041',
      deviceRegistrationDuration: 'P1M',
      defaultType: 'Thing'
      };

      config.defaultKey = 'TEF';

      module.exports = config;

      I have tried different IP's and routes, and at the end i tried with the public IP, assuring that there is communication from the outside to those ports.

      Device registration:

      curl -X POST \
      http://MYIP:4041/iot/devices \
      -H 'cache-control: no-cache' \
      -H 'content-type: application/json' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \
      -d '{
      "devices": [{
      "device_id": "muvone",
      "protocol": "IoTA-UL",
      "entity_name": "muvone",
      "entity_type": "Thing",
      "attributes": [

      { "object_id": "t", "name": "temperature", "type": "Float" }

      ],
      "commands": [

      { "name":"blink", "type": "command", "value": "muvone@blink|%s" }

      ],
      "static_attributes": []
      }]
      }'

      Then I send some observations from a physical device and from POSTMAN:

      curl -X POST \
      'http://MYIP:7896/iot/d?i=muvone&k=TEF&getCmd=1' \
      -H 'cache-control: no-cache' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \
      -d 'temperature|16'

      Which actually updates the entity correctly, as can be seen in Orion Context Broker:
      Query:

      curl -X GET \
      http://MYIP:1026/v2/entities \
      -H 'cache-control: no-cache' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \

      Response:

      [
      {
      "id": "muvone",
      "type": "Thing",
      "TimeInstant": {
      "type": "ISO8601",
      "value": "2017-06-01T11:37:52.537Z",
      "metadata": {}
      },
      "blink_info": {
      "type": "commandResult",
      "value": " ",
      "metadata": {}
      },
      "blink_status": {
      "type": "commandStatus",
      "value": "UNKNOWN",
      "metadata": {}
      },
      "temperature": {
      "type": "Float",
      "value": "16",
      "metadata": {
      "TimeInstant":

      { "type": "ISO8601", "value": "2017-06-01T11:37:52.537Z" }

      }
      }
      }
      ]

      So now, If I want to send a command, I have done it in a lot of ways. I tried following this guide:

      http://fiware-iot-stack.readthedocs.io/en/master/topics/device_connection/index.html

      So I tried to use the following request:

      curl -X PUT \
      http://MYIP:1026/v2/entities \
      -H 'cache-control: no-cache' \
      -H 'content-type: application/json' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \
      -d '{
      "id": "muvone",
      "type": "Thing",
      "blink":

      { "type" : "command", "value" : "true" }

      }'

      Which response is:

      { "error": "MethodNotAllowed", "description": "method not allowed" }

      So I tried updating a single attribute, in this case the blink attribute, which is a command. This should trigger that the Orion Context Broker acts as a NGSI proxy and passes the request to the IoTAgent, which occurs. But the problem is that the IoTAgent doesn't find the entity, as it can be seen in the logs:

      curl -X PUT \
      'http://MYIP:1026/v2/entities/muvone/attrs/blink?type=Thing' \
      -H 'cache-control: no-cache' \
      -H 'content-type: application/json' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \
      -d '

      { "type": "command", "value": "true" }

      '

      or

      curl -X PUT \
      'http://MYIP:1026/v2/entities/muvone/attrs/blink?type=Thing' \
      -H 'cache-control: no-cache' \
      -H 'content-type: application/json' \
      -H 'fiware-service: howtoService' \
      -H 'fiware-servicepath: /howto' \
      -H 'postman-token: 6b42d06d-2a9f-3081-e315-bd9919aeded5' \
      -d '

      { "value": "true" }

      '

      Responds with:

      { "error": "NotFound", "description": "The requested entity has not been found. Check type and id" }

      Now, having a look at Orion and IoTAgent logs, it can be seen that IoTAgent doesn't find the entity:

      Orion logs to the request:

      time=Thursday 01 Jun 12:10:13 2017.880Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000039 | from=pending | srv=pending | subsrv=pending | comp=Orion | op=logMsg.h[1832]:lmTransactionStart | msg=Starting transaction from 91.126.73.210:2880/v2/entities/muvone/attrs/blink
      time=Thursday 01 Jun 12:10:13 2017.880Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000039 | from=91.126.73.210 | srv=pending | subsrv=/howto | comp=Orion | op=rest.cpp[872]:servicePathSplit | msg=Service Path 0: '/howto'
      time=Thursday 01 Jun 12:10:13 2017.881Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000039 | from=91.126.73.210 | srv=howtoservice | subsrv=/howto | comp=Orion | op=connectionOperations.cpp[237]:collectionCount | msg=Database Operation Successful (count: { _id.id: "muvone", _id.type: "Thing", _id.servicePath:

      { $in: [ /^/howto$/ ] }

      })
      time=Thursday 01 Jun 12:10:13 2017.881Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000039 | from=91.126.73.210 | srv=howtoservice | subsrv=/howto | comp=Orion | op=connectionOperations.cpp[92]:collectionQuery | msg=Database Operation Successful (query: { _id.id: "muvone", _id.type: "Thing", _id.servicePath:

      { $in: [ /^/howto$/ ] }

      })
      time=Thursday 01 Jun 12:10:13 2017.881Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000039 | from=91.126.73.210 | srv=howtoservice | subsrv=/howto | comp=Orion | op=connectionOperations.cpp[175]:collectionRangedQuery | msg=Database Operation Successful (query: { query: { $or: [ { contextRegistration.entities: { $in: [

      { id: "muvone", type: "Thing" }

      ,

      { type: "Thing", id: "muvone" }

      ] } }, { contextRegistration.entities.id:

      { $in: [] }

      } ], expiration:

      { $gt: 1496319013 }

      , contextRegistration.attrs.name:

      { $in: [ "blink" ] }

      , servicePath:

      { $in: [ /^/howto$/ ] }

      }, orderby:

      { _id: 1 }

      })
      time=Thursday 01 Jun 12:10:13 2017.882Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000040 | from=pending | srv=pending | subsrv=pending | comp=Orion | op=logMsg.h[1832]:lmTransactionStart | msg=Starting transaction to http://MYIP:4041//updateContext
      time=Thursday 01 Jun 12:10:13 2017.882Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000040 | from=pending | srv=pending | subsrv=pending | comp=Orion | op=httpRequestSend.cpp[577]:httpRequestSendWithCurl | msg=Sending message 14 to HTTP server: sending message of 558 bytes to HTTP server
      time=Thursday 01 Jun 12:10:13 2017.886Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000040 | from=pending | srv=pending | subsrv=pending | comp=Orion | op=httpRequestSend.cpp[598]:httpRequestSendWithCurl | msg=Notification Successfully Sent to http://MYIP:4041//updateContext
      time=Thursday 01 Jun 12:10:13 2017.886Z | lvl=INFO | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=1496315963-946-00000000040 | from=pending | srv=pending | subsrv=pending | comp=Orion | op=logMsg.h[1916]:lmTransactionEnd | msg=Transaction ended
      time=Thursday 01 Jun 12:10:13 2017.886Z | lvl=WARN | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=postUpdateContext.cpp[225]:updateForward | msg=Internal Error (error parsing reply from prov app: )
      time=Thursday 01 Jun 12:10:13 2017.886Z | lvl=INFO | corr=N/A | trans=N/A | from=N/A | srv=N/A | subsrv=N/A | comp=Orion | op=logMsg.h[1916]:lmTransactionEnd | msg=Transaction ended

      IDAS log:

      time=2017-06-01T12:10:13.882Z | lvl=DEBUG | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 | op=IoTAgentNGSI.GenericMiddlewares | srv=howtoservice | subsrv=/howto | msg=Request for path //updateContext from [MYIP:4041] | comp=IoTAgent
      time=2017-06-01T12:10:13.882Z | lvl=DEBUG | corr=446f4532-46c3-11e7-b1a4-0242ac110003 | trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 | op=IoTAgentNGSI.GenericMiddlewares | srv=howtoservice | subsrv=/howto | msg=Body:

      {
      "contextElements": [
      {
      "type": "Thing",
      "isPattern": "false",
      "id": "muvone",
      "attributes": [

      { "name": "blink", "type": "command", "value": "true" }

      ]
      }
      ],
      "updateAction": "UPDATE"
      }

      comp=IoTAgent
      time=2017-06-01T12:10:13.883Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.ContextServer srv=howtoservice subsrv=/howto msg=Handling update from [MYIP:4041] comp=IoTAgent
      time=2017-06-01T12:10:13.883Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.ContextServer srv=howtoservice subsrv=/howto msg=[object Object] comp=IoTAgent
      time=2017-06-01T12:10:13.883Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.MongoDBDeviceRegister srv=howtoservice subsrv=/howto msg=Looking for entity with name [muvone]. comp=IoTAgent
      time=2017-06-01T12:10:13.883Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.MongoDBDeviceRegister srv=howtoservice subsrv=/howto msg=Entity [muvone] not found. comp=IoTAgent
      time=2017-06-01T12:10:13.884Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.ContextServer srv=howtoservice subsrv=/howto msg=There was an error handling the update action: [object Object]. comp=IoTAgent
      time=2017-06-01T12:10:13.884Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.ContextServer srv=howtoservice subsrv=/howto msg=Update error [ENTITY_NOT_FOUND] handing request: The entity with the requested id [muvone] was not found. comp=IoTAgent
      time=2017-06-01T12:10:13.884Z
      lvl=DEBUG corr=446f4532-46c3-11e7-b1a4-0242ac110003 trans=8dcc19e7-e3ce-472a-a1bb-c7983dad7025 op=IoTAgentNGSI.DomainControl srv=howtoservice subsrv=/howto msg=response-time: 2 comp=IoTAgent

      In the mongo database, it can be seen that the registrations, entities and everything is set up correctlu

      I have worked around this issue for days with no result.
      Any help will be appreciated. Thanks in advance

        Activity

        Transition Time In Source Status Execution Times Last Executer Last Execution Date
        Open Open In Progress In Progress
        1d 1 Backlog Manager 02/Jun/17 3:04 PM
        In Progress In Progress Answered Answered
        3h 1 Backlog Manager 02/Jun/17 6:04 PM
        Answered Answered Closed Closed
        2d 20h 59m 1 Backlog Manager 05/Jun/17 3:04 PM

          People

          • Assignee:
            frb Francisco Romero
            Reporter:
            backlogmanager Backlog Manager
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: