Брокер контекста игнорирует значение, fiware orion и iotagent - PullRequest
1 голос
/ 22 апреля 2020

orion версия: 2.3.0 iotagent-ul версия: 1.12.0

Я использую fiware и iotagent поверх mqtt. Я хочу отправлять команды на некоторые устройства с разными значениями. Я следовал https://github.com/FIWARE/tutorials.IoT-over-MQTT и прочитал некоторую документацию. После предоставления сервисной группы (с apikey: 123456) и привода, я могу отправлять команды со значениями, следуя URL-адресу iota:

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 publi sh сообщение mqtt по адресу: / 123456 / dev001 / cmd с полезной нагрузкой dev001@date|hour=9|minute=31|second=0

Но при использовании посредника контекста значение игнорируется:

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}     
  }                                                                            
}' 

Здесь iota publi sh сообщение mqtt для: / 123456 / dev001 / cmd с полезной нагрузкой dev001@date|

Почему это игнорируется? Что-то не так делаю?

извините за мой бедный английский sh.

1 Ответ

1 голос
/ 23 апреля 2020

Я нашел решение ... добавление типа в URL делает контекст учитывающим значение ... странно.

Конечный URL должен быть:

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}     
  }                                                                            
}' 

РЕДАКТИРОВАТЬ:

зная решение, я попытался понять проблему и нашел эту проблему: https://github.com/telefonicaid/fiware-orion/issues/3647

Согласно CPrs и документация для пересылки запросов

При пересылке любой тип объекта в обновлении / запросе NGSIv2 соответствует регистрации без типа объекта. Однако обратное не работает, поэтому, если у вас есть регистрации с типами, вы должны использовать? Type в обновлении / запросе NGSIv2, чтобы получить соответствие. В противном случае вы можете столкнуться с проблемами, например, описанными в этом посте в StackOverflow.

РЕДАКТИРОВАТЬ 2:

Это дубликат: Orion CB не обновляет ленивые атрибуты агента IoT

...