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

        fla Fernando Lopez made changes -
        Fix Version/s 2021 [ 12600 ]
        backlogmanager Backlog Manager made changes -
        Resolution Done [ 10000 ]
        Status Answered [ 10104 ] Closed [ 6 ]
        backlogmanager Backlog Manager made changes -
        Status In Progress [ 3 ] Answered [ 10104 ]
        backlogmanager Backlog Manager made changes -
        Status Open [ 1 ] In Progress [ 3 ]
        fla Fernando Lopez made changes -
        HD-Enabler IDAS [ 10884 ]
        Description
        Created question in FIWARE Q/A platform on 01-06-2017 at 14:06
        {color: red}Please, ANSWER this question AT{color} 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
        Created question in FIWARE Q/A platform on 01-06-2017 at 14:06
        {color: red}Please, ANSWER this question AT{color} 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
        HD-Chapter IoT [ 10839 ]
        fla Fernando Lopez made changes -
        Assignee Francisco Romero [ frb ]
        backlogmanager Backlog Manager made changes -
        Field Original Value New Value
        Component/s FIWARE-TECH-HELP [ 10278 ]
        backlogmanager Backlog Manager created issue -

          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: