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
        fla Fernando Lopez made changes -
        Fix Version/s 2021 [ 12600 ]
        Hide
        backlogmanager Backlog Manager added a comment -

        2017-06-05 15:05|UPDATED status: transition Finish| # answers= 2, accepted answer= True

        Show
        backlogmanager Backlog Manager added a comment - 2017-06-05 15:05|UPDATED status: transition Finish| # answers= 2, accepted answer= True
        backlogmanager Backlog Manager made changes -
        Resolution Done [ 10000 ]
        Status Answered [ 10104 ] Closed [ 6 ]
        Hide
        backlogmanager Backlog Manager added a comment -

        2017-06-02 18:05|UPDATED status: transition Answered| # answers= 1, accepted answer= False

        Show
        backlogmanager Backlog Manager added a comment - 2017-06-02 18:05|UPDATED status: transition Answered| # answers= 1, accepted answer= False
        backlogmanager Backlog Manager made changes -
        Status In Progress [ 3 ] Answered [ 10104 ]
        Hide
        backlogmanager Backlog Manager added a comment -

        2017-06-02 15:05|UPDATED status: transition Answer| # answers= 1, accepted answer= False

        Show
        backlogmanager Backlog Manager added a comment - 2017-06-02 15:05|UPDATED status: transition Answer| # answers= 1, accepted answer= False
        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 ]
        Hide
        backlogmanager Backlog Manager added a comment -

        2017-06-01 15:05|CREATED monitor | # answers= 0, accepted answer= False

        Show
        backlogmanager Backlog Manager added a comment - 2017-06-01 15:05|CREATED monitor | # answers= 0, accepted answer= False
        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: