Как избежать результатов регистраций при запросе сущностей, отфильтрованных по связи - PullRequest
0 голосов
/ 29 октября 2018

Я развернул стек iot с помощью докера. Это использованные контейнеры:

  • fiware / Орион: 2.0.0
  • fiware / iotagent-JSON: 1.8.0

[другие контейнеры, не вовлеченные в проблему ...]

Документация сверяется:


Шаг 1: Я зарегистрировал следующие объекты в брокере контекста Orion :

curl -X POST \
  http://localhost:1026/v2/op/update/ \
  -H 'Content-Type: application/json' \
  -H 'fiware-service: test' \
  -H 'fiware-servicepath: /' \
  -d '{
  "actionType": "append",
  "entities": [{
      "type": "Area",
      "id": "first:Area:001",
      "name": {
          "type": "Text",
          "value": "First area"
      }
  }, {
      "type": "Area",
      "id": "second:Area:002",
      "name": {
          "type": "Text",
          "value": "Second area"
      }
  }]
}'

Шаг 2: Я зарегистрировал следующее устройство, связанное с Area first: Area: 001 на IoT agent :

curl -X POST \
http://localhost:4041/iot/devices \
-H 'Content-Type: application/json' \
-H 'fiware-service: test' \
-H 'fiware-servicepath: /' \
-d '{
    "devices": [{
        "device_id": "device001",
        "entity_name": "first:Area:001:IoTDevice:001",
        "entity_type": "IoTDevice",
        "transport": "HTTP",
        "protocol": "IoTA-JSON",
        "endpoint": "http://context-producer:3000/iot/iot-device/device001",
        "commands": [{
            "name": "ping",
            "type": "command"
        }],
        "attributes": [{
            "object_id": "c",
            "name": "count",
            "type": "Number"
        }],
        "static_attributes": [{
                "name": "refArea",
                "type": "Relationship",
                "value": "first:Area:001"
            },
            {
                "name": "name",
                "type": "Text",
                "value": "IoT Device 001"
            }
        ]
    }]
}'

Запрос 1: Когда вы выполняете шаг 2 , тип регистрации сущности автоматически генерируются в посреднике контекста Orion

curl -X GET \
http://localhost:1026/v2/registrations/ \
-H 'fiware-service: test' \
-H 'fiware-servicepath: /'

Результат:

[
    {
        "id": "5bd6dbb2bef7081490c96eb2",
        "dataProvided": {
            "entities": [
                {
                    "id": "first:Area:001:IoTDevice:001",
                    "type": "IoTDevice"
                }
            ],
            "attrs": [
                "ping"
            ]
        },
        "provider": {
            "http": {
                "url": "http://iotagent-json:4041"
            },
            "supportedForwardingMode": "all",
            "legacyForwarding": true
        },
        "status": "active"
    }
]

Тест 1: Получение объектов IoTDevice-типа , связанных с Районом * first: 1058 *: Area: 001

curl -X GET \
'http://localhost:1026/v2/entities?options=keyValues&q=refArea==first:Area:001' \
-H 'fiware-service: test' \
-H 'fiware-servicepath: /'

OK Ожидаемый результат:

[
    {
        "id": "first:Area:001:IoTDevice:001",
        "type": "IoTDevice",
        "TimeInstant": " ",
        "count": 0,
        "name": "IoT Device 001",
        "ping_info": " ",
        "ping_status": "UNKNOWN",
        "refArea": "first:Area:001",
        "ping": ""
    }
]

Тест 2: Получение IoTDevice-типа сущностей, связанных с Районом секунда: Площадь: 001

curl -X GET \
'http://localhost:1026/v2/entities?options=keyValues&q=refArea==second:Area:001' \
-H 'fiware-service: test' \
-H 'fiware-servicepath: /'

ОШИБКА неожиданная Результат:

[
    {
        "id": "first:Area:001:IoTDevice:001",
        "type": "IoTDevice",
        "ping": ""
    }
]

Ожидаемый результат был [] или пуст, но запрос возвратил результаты, которые, похоже, получены от регистрационного типа сущностей. Это происходит только в том случае, если вставлены устройства с атрибутами типа command . Например, команда ping .

Итак, как этого можно избежать?

1 Ответ

0 голосов
/ 06 ноября 2018

Согласно документации Orion :

Фильтрация запросов (например, GET /v2/entities?q=temperature>40) не поддерживается при пересылке запросов. Во-первых, Orion не включает фильтр в операцию POST /v1/queryContext, пересылаемую в CPr. Во-вторых, Orion не фильтрует результаты CPr перед тем, как отправлять их обратно клиенту. Была создана проблема, соответствующая этому ограничению: https://github.com/telefonicaid/fiware-orion/issues/2282

Это может быть причиной проблемы.

Пока проблема решена, обходной путь должен фильтровать (по refArea==second:Area:001 в вашем случае) на стороне клиента.

...