简体   繁体   中英

Context broker is ignoring value, fiware orion and iotagent

orion version: 2.3.0 iotagent-ul version: 1.12.0

I am using fiware and iotagent over mqtt. I want to send commands to some devices with different values. I have followed https://github.com/FIWARE/tutorials.IoT-over-MQTT and read some documentation. After provisionning a service group (with apikey: 123456) and an actuator, I can send commands with values by following the iota URL:

curl -iX POST \                       
  'http://localhost:4041/iot/devices' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
  "devices": [
    {
      "device_id": "dev001",
      "entity_name": "urn:ngsi-ld:Device:001",
      "entity_type": "Device",
      "protocol": "PDI-IoTA-UltraLight",
      "transport": "MQTT",
      "commands": [
        {"name": "date","type": "command", "value": {"hour": 9, "minute": 31, "second": 0}}
       ]
    }
  ]
}
'

iota publish a mqtt message to: /123456/dev001/cmd with payload dev001@date|hour=9|minute=31|second=0

But when using the context broker, the value is ignored:

curl -iX PATCH \                                 
  'http://localhost:1026/v2/entities/urn:ngsi-ld:Device:001/attrs' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
  "date": {            
      "type" : "command",
      "value" : {"hour": 9, "minute": 31, "second": 0}     
  }                                                                            
}' 

Here, iota publish a mqtt message to: /123456/dev001/cmd with payload dev001@date|

Why is it ignored? Am I doing somthing wrong?

sorry for my poor english.

I found a solution... adding the type in the url make the context take account of the value... weird.

The final url must be:

curl -iX PATCH \                                 
  'http://localhost:1026/v2/entities/urn:ngsi-ld:Device:001/attrs?type=Device' \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: openiot' \
  -H 'fiware-servicepath: /' \
  -d '{
  "date": {            
      "type" : "command",
      "value" : {"hour": 9, "minute": 31, "second": 0}     
  }                                                                            
}' 

EDIT:

knowing the solution, I have tried to understand the problem and found this issue: https://github.com/telefonicaid/fiware-orion/issues/3647

According to CPrs and request forwarding documentation

On forwarding, any type of entity in the NGSIv2 update/query matches registrations without entity type. However, the opposite doesn't work, so if you have registrations with types, then you must use?type in NGSIv2 update/query in order to obtain a match. Otherwise you may encounter problems, like the one described in this post at StackOverflow.

EDIT 2:

This is a duplicate of: Orion CB doesn't update lazy attributes on IoT Agent

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM