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

[fiware-stackoverflow] How to change values from writable basic Datatypes on an OPC UA Server with FIWARE OPC UA AGENT

    Details

      Description

      Created question in FIWARE Q/A platform on 04-05-2021 at 08:05
      Please, ANSWER this question AT https://stackoverflow.com/questions/67381102/how-to-change-values-from-writable-basic-datatypes-on-an-opc-ua-server-with-fiwa

      Question:
      How to change values from writable basic Datatypes on an OPC UA Server with FIWARE OPC UA AGENT

      Description:
      GOAL
      Change writable values on the OPC UA Server by using the Fiware OPC UA Agent.
      My test implementation

      Adding the Parameter to the "command" and "contextSubscription" sections in the config.json file.
      Start a new test environment with OpcUa Agent, Orion Context broker and mongodb.

      Expectet behavior
      The value on the server is updated when a request is sent to the Context Broker.
      Current behaviour

      The value of the parameter is read out correctly but with an incorrect data type (string instead of integer).
      The value of the parameter is not updated when a request is sent to the Orion Context Broker.

      additional informations

      config.json

      {
      "logLevel" : "DEBUG",
      "contextBroker" :

      { "host" : "orion", "port" : 1026 }

      ,
      "server" :

      { "port" : 4001, "baseRoot" : "/" }

      ,
      "deviceRegistry" :

      { "type" : "memory" }

      ,
      "mongodb" :

      { "host" : "iotmongo", "port" : "27017", "db" : "iotagent", "retries" : 5, "retryTime" : 5 }

      ,
      "providerUrl" : "http://iotopcua:4001",
      "pollingExpiration" : "200000",
      "pollingDaemonFrequency" : "20000",
      "deviceRegistrationDuration" : "P1M",
      "defaultType" : null,
      "browseServerOptions" : null,
      "service" : "test",
      "subservice" : "/test",
      "types" : {
      "g_communication" : {
      "service" : "test",
      "subservice" : "/test",
      "active" : [

      { "name" : "7:PLC1_7:G_Communication_7:fo_smartControllerActive_b", "type" : "Boolean" }

      ],
      "lazy" : [ ],
      "commands" : [

      { "name" : "7:PLC1_7:G_Communication_7:fi_heartbeat_i", "type" : "Command" }

      ]
      }
      },
      "contexts" : [ {
      "id" : "plant",
      "type" : "g_communication",
      "service" : "test",
      "subservice" : "/test",
      "polling" : null,
      "mappings" : [

      { "ocb_id" : "7:PLC1_7:G_Communication_7:fo_smartControllerActive_b", "opcua_id" : "ns=7;s=G_Communication.fo_smartControllerActive_b", "object_id" : null, "inputArguments" : [] }

      ]
      }],
      "contextSubscriptions" : [{
      "id" : "plant",
      "type" : "g_communication",
      "mappings" : [{
      "ocb_id" : "7:PLC1_7:G_Communication_7:fi_heartbeat_i",
      "opcua_id" : "ns=7;s=G_Communication.fi_heartbeat_i",
      "object_id" : "ns=7;s=G_Communication",
      "inputArguments" : [

      { "type": "Number" }

      ]
      }]
      }]
      }

      List Entities

      curl 'http://localhost:1026/v2/entities/plant/' -H 'fiware-service: test' -H 'fiwate-servicepath: /test' | python -m json.tool
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 684 100 684 0 0 13751 0 -::- -::- -::- 13959
      {
      "7:PLC1_7:G_Communication_7:fi_heartbeat_i": {
      "metadata": {
      "ServerTimestamp":

      { "type": "ISO8601", "value": "null" }

      ,
      "SourceTimestamp":

      { "type": "ISO8601", "value": "null" }

      },
      "type": "string",
      "value": "4"
      },
      "7:PLC1_7:G_Communication_7:fi_heartbeat_i_info": {
      "metadata": {},
      "type": "commandResult",
      "value": " "
      },
      "7:PLC1_7:G_Communication_7:fi_heartbeat_i_status": {
      "metadata": {},
      "type": "commandStatus",
      "value": "UNKNOWN"
      },
      "7:PLC1_7:G_Communication_7:fo_smartControllerActive_b": {
      "metadata": {
      "ServerTimestamp":

      { "type": "ISO8601", "value": "2021-05-04T07:38:01.150Z" }

      ,
      "SourceTimestamp":

      { "type": "ISO8601", "value": "2021-05-04T07:37:59.934Z" }

      },
      "type": "Boolean",
      "value": false
      },
      "id": "plant",
      "type": "g_communication"
      }

      Registrations

      curl 'http://localhost:1026/v2/registrations' -H 'fiware-service: test' -H 'fiwate-servicepath: /test' | python -m json.tool
      % Total % Received % Xferd Average Speed Time Time Time Current
      Dload Upload Total Spent Left Speed
      100 320 100 320 0 0 46049 0 -::- -::- -::- 53333
      [
      {
      "dataProvided": {
      "attrs": [
      "7:PLC1_7:G_Communication_7:fi_heartbeat_i"
      ],
      "entities": [

      { "id": "plant", "type": "g_communication" }

      ]
      },
      "expires": "2021-06-03T07:37:38.00Z",
      "id": "6090f9c254b918756abf1a7d",
      "provider": {
      "http":

      { "url": "http://iotopcua:4001" }

      ,
      "legacyForwarding": true,
      "supportedForwardingMode": "all"
      },
      "status": "active"
      }
      ]

      Test communication with iotopcua

      curl "http://iotopcua:4001/version"

      {"libVersion":"2.12.0-next","port":4001,"baseRoot":"/"}

      Request for update

      curl -X PUT \
      'http://localhost:1026/v2/entities/plant/attrs/7:PLC1_7:G_Communication_7:fi_heartbeat_i?type=g_communication' \
      -H 'content-type: application/json' \
      -H 'fiware-service: test' \
      -H 'fiware-servicepath: /test' \
      -d '

      { "value": 2 }

      '

      Log OCB

      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=logMsg.h[1844]:lmTransactionStart | msg=Starting transaction from 0.0.0.0:54232/v2/entities/plant/attrs/7:PLC1_7:G_Communication_7:fi_heartbeat_i
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=rest.cpp[874]:servicePathSplit | msg=Service Path 0: '/test'
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=connectionOperations.cpp[244]:collectionCount | msg=Database Operation Successful (count:

      { _id.id: "plant", _id.type: "g_communication", _id.servicePath: "/test" }

      )
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=connectionOperations.cpp[94]:collectionQuery | msg=Database Operation Successful (query:

      { _id.id: "plant", _id.type: "g_communication", _id.servicePath: "/test" }

      )
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=connectionOperations.cpp[182]:collectionRangedQuery | msg=Database Operation Successful (query: { query: { $or: [

      { contextRegistration.entities.id: "plant", contextRegistration.entities.type: "g_communication" }

      , { contextRegistration.entities.id: ".*", contextRegistration.entities.isPattern: "true", contextRegistration.entities.type:

      { $in: [ "g_communication" ] }

      }, { contextRegistration.entities.id: ".*", contextRegistration.entities.isPattern: "true", contextRegistration.entities.type:

      { $exists: false }

      } ], expiration:

      { $gt: 1620114947 }

      , contextRegistration.attrs.name:

      { $in: [ "7:PLC1_7:G_Communication_7:fi_heartbeat_i" ] }

      , servicePath: "/test" }, orderby:

      { _id: 1 }

      })
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=logMsg.h[1844]:lmTransactionStart | msg=Starting transaction to http://iotopcua:4001//updateContext
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=httpRequestSend.cpp[550]:httpRequestSendWithCurl | msg=Sending message 4 to HTTP server: sending message of 458 bytes to HTTP server
      from=10.1.17.1 | srv=test | subsrv=/test | comp=Orion | op=logMsg.h[1844]:lmTransactionStart | msg=Starting transaction from 10.1.17.1:58162/v1/updateContext
      from=10.1.17.1 | srv=test | subsrv=/test | comp=Orion | op=rest.cpp[874]:servicePathSplit | msg=Service Path 0: '/test'
      from=10.1.17.1 | srv=test | subsrv=/test | comp=Orion | op=connectionOperations.cpp[94]:collectionQuery | msg=Database Operation Successful (query:

      { _id.id: "plant", _id.type: "g_communication", _id.servicePath: "/test" }

      )
      from=10.1.17.1 | srv=test | subsrv=/test | comp=Orion | op=connectionOperations.cpp[454]:collectionUpdate | msg=Database Operation Successful (update: <

      { _id.id: "plant", _id.type: "g_communication", _id.servicePath: "/test" }

      , { $set: { attrs.7:PLC1_7:G_Communication_7:fi_heartbeat_i_status:

      { value: "PENDING", type: "commandStatus", mdNames: [], creDate: 1620113858, modDate: 1620114947 }

      , modDate: 1620114947, lastCorrelator: "2324ca1e-acae-11eb-a4f7-226cad26e2cc" }, $unset:

      { location: 1, expDate: 1 }

      }>)
      from=10.1.17.1 | srv=test | subsrv=/test | comp=Orion | op=logMsg.h[1874]:lmTransactionEnd | msg=Transaction ended
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=httpRequestSend.cpp[570]:httpRequestSendWithCurl | msg=Notification Successfully Sent to http://iotopcua:4001//updateContext
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=httpRequestSend.cpp[579]:httpRequestSendWithCurl | msg=Notification response OK, http code: 200
      from=0.0.0.0 | srv=test | subsrv=/test | comp=Orion | op=logMsg.h[1874]:lmTransactionEnd | msg=Transaction ended

      Log OPCUA Client

      time=2021-05-04T07:55:47.191Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.GenericMiddlewares | msg=Request for path //updateContext from [iotopcua:4001]
      time=2021-05-04T07:55:47.191Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.GenericMiddlewares | msg=Body:

      {
      "contextElements": [
      {
      "type": "g_communication",
      "isPattern": "false",
      "id": "plant",
      "attributes": [

      { "name": "7:PLC1_7:G_Communication_7:fi_heartbeat_i", "type": "Number", "value": 2 }

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

      time=2021-05-04T07:55:47.193Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.ContextServer | msg=Handling update from [iotopcua:4001]
      time=2021-05-04T07:55:47.193Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.ContextServer | msg=[object Object]
      time=2021-05-04T07:55:47.194Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.InMemoryGroupRegister | msg=Looking for device params ["service","subservice","type"]
      time=2021-05-04T07:55:47.194Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.DeviceService | msg=deviceData after merge with conf: {"id":"plant","name":"plant","type":"g_communication","active":[

      {"name":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b","type":"Boolean","object_id":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b"}

      ],"service":"test","subservice":"/test","polling":null,"endpoint":"opc.tcp://109.68.106.155:48050","registrationId":"6090f9c254b918756abf1a7d","creationDate":1620113858802}
      time=2021-05-04T07:55:47.194Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.DeviceService | msg=deviceData before merge with conf: {"id":"plant","name":"plant","type":"g_communication","active":[

      {"name":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b","type":"Boolean","object_id":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b"}

      ],"lazy":[],"commands":[

      {"name":"7:PLC1_7:G_Communication_7:fi_heartbeat_i","type":"Command","object_id":"7:PLC1_7:G_Communication_7:fi_heartbeat_i"}

      ],"service":"test","subservice":"/test","polling":null,"endpoint":"opc.tcp://109.68.106.155:48050","registrationId":"6090f9c254b918756abf1a7d","creationDate":1620113858802,"internalAttributes":null,"staticAttributes":[],"subscriptions":[]}
      time=2021-05-04T07:55:47.195Z | lvl=INFO | corr=n/a | trans=n/a | op=Index.CommandContextHandler | comp=iotAgent-OPCUA | srv=test | subsrv=/test | msg=method to call =[{"objectId":"ns=7;s=G_Communication","methodId":"ns=7;s=G_Communication.fi_heartbeat_i","inputArguments":[

      {"type":"Number"}

      ]}]
      time=2021-05-04T07:55:47.879Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=executeWithDeviceInfo entityName plant type undefined apikey undefined attributes [

      {"name":"7:PLC1_7:G_Communication_7:fi_heartbeat_i_status","type":"commandStatus","value":"PENDING"}

      ] deviceInformation {"id":"plant","name":"plant","type":"g_communication","active":[

      {"name":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b","type":"Boolean","object_id":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b"}

      ],"lazy":[],"commands":[

      {"name":"7:PLC1_7:G_Communication_7:fi_heartbeat_i","type":"Command","object_id":"7:PLC1_7:G_Communication_7:fi_heartbeat_i"}

      ],"service":"test","subservice":"/test","polling":null,"endpoint":"opc.tcp://109.68.106.155:48050","registrationId":"6090f9c254b918756abf1a7d","creationDate":1620113858802,"internalAttributes":null,"staticAttributes":[],"subscriptions":[]}
      time=2021-05-04T07:55:47.879Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=error

      {"name":"DEVICE_GROUP_NOT_FOUND","message":"Couldn\t find device group","code":404}

      in get group device
      time=2021-05-04T07:55:47.880Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=typeInformation {"id":"plant","name":"plant","type":"g_communication","active":[

      {"name":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b","type":"Boolean","object_id":"7:PLC1_7:G_Communication_7:fo_smartControllerActive_b"}

      ],"lazy":[],"commands":[

      {"name":"7:PLC1_7:G_Communication_7:fi_heartbeat_i","type":"Command","object_id":"7:PLC1_7:G_Communication_7:fi_heartbeat_i"}

      ],"service":"test","subservice":"/test","polling":null,"endpoint":"opc.tcp://109.68.106.155:48050","registrationId":"6090f9c254b918756abf1a7d","creationDate":1620113858802,"internalAttributes":null,"staticAttributes":[],"subscriptions":[]}
      time=2021-05-04T07:55:47.880Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=Updating device value in the Context Broker at http://orion:1026/v1/updateContext
      time=2021-05-04T07:55:47.880Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=Using the following request:

      {
      "url": "http://orion:1026/v1/updateContext&quot;,
      "method": "POST",
      "headers":

      { "fiware-service": "test", "fiware-servicepath": "/test" }

      ,
      "json": {
      "contextElements": [
      {
      "type": "g_communication",
      "isPattern": "false",
      "id": "plant",
      "attributes": [

      { "name": "7:PLC1_7:G_Communication_7:fi_heartbeat_i_status", "type": "commandStatus", "value": "PENDING" }

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

      time=2021-05-04T07:55:47.886Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=Received the following request from the CB:

      {
      "contextResponses": [
      {
      "contextElement": {
      "type": "g_communication",
      "isPattern": "false",
      "id": "plant",
      "attributes": [

      { "name": "7:PLC1_7:G_Communication_7:fi_heartbeat_i_status", "type": "commandStatus", "value": "" }

      ]
      },
      "statusCode":

      { "code": "200", "reasonPhrase": "OK" }

      }
      ]
      }

      time=2021-05-04T07:55:47.886Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.NGSIService | msg=Value updated successfully
      time=2021-05-04T07:55:47.886Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.ContextServer | msg=Update action from [iotopcua:4001] handled successfully.
      time=2021-05-04T07:55:47.886Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.ContextServer | msg=Generated update response: {"contextResponses":[{"contextElement":{"attributes":[

      {"name":"7:PLC1_7:G_Communication_7:fi_heartbeat_i","type":"Number","value":""}

      ],"id":"plant","isPattern":false,"type":"g_communication"},"statusCode":{"code":200,"reasonPhrase":"OK"}}]}
      time=2021-05-04T07:55:47.887Z | lvl=DEBUG | corr=n/a | trans=n/a | op=IoTAgentNGSI.DomainControl | msg=response-time: 697

        Activity

          People

          • Assignee:
            gabriele Gabriele De Luca
            Reporter:
            backlogmanager Backlog Manager
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated: