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