422 Unprocessable Entity
Сервер понимает тип содержимого объекта запроса (следовательно, статус статуса 415 Неподдерживаемый тип носителя не подходит),и синтаксис объекта запроса является правильным (таким образом, код состояния 400 Bad Request не подходит), но не смог обработать содержащиеся в нем инструкции.
Таким образом, это означает, что у вас естьустановите правильный тип контента, и полезная нагрузка будет понятна.
Если вы посмотрите на код позади фиктивных датчиков, вы увидите следующее:
// Check for a valid device and command
if (
_.indexOf(myCache.keys(), deviceId) === -1 ||
_.indexOf(['on', 'off'], command) === -1
) {
return res.status(422).send(result + NOT_OK);
}
Поэтомулибо идентификатор устройства, либо команда не распознана. массив фиктивных устройств инициализируется при запуске
myCache.set('lamp001', LAMP_OFF);
myCache.set('lamp002', LAMP_OFF);
myCache.set('lamp003', LAMP_OFF);
myCache.set('lamp004', LAMP_OFF);
Идентификаторы чувствительны к регистру, поэтому вы должны отправлять lamp001
, а не Lamp001
.Да, это может отправить более знакомый 404 .Другая половина оператора гарантирует, что 422 будет возвращено, если команда не распознана, вы в настоящее время отправляете On
, а не on
Однако, используя порт 3001 напрямую для отправки команд не - правильный способ доступа пользователей к устройствам.В учебном материале фиктивные устройства имитируют устройство Ultralight, прослушивающее HTTP - они должны быть подключены агентом IoT, а не конечным пользователем.
Правильный способ настройки - подключениеследуя инструкциям IoT Agent - таким образом, конечные пользователи могут получать косвенный доступ к устройствам через посредник контекста Orion, и конечному пользователю не нужно знать протокол и транспорт, используемый каждым устройством.
Помните, что на юге южного порта может происходить что угодно - агент IoT должен справиться с любым ответом устройства.Однако все будет хорошо определено ответами NGSI v2, выходящими из северного порта.Если объект не зарегистрирован в посреднике контекста, он вернет знакомый 404 .Если объект зарегистрирован, но в команде происходит что-то странное, например 422 , команда останется в состоянии ожидания, так как ее невозможно обработать и т. Д.Возможно, устройство подключено с использованием MQTT и периодически активируется для обработки команд.
Чтобы обновить состояние объекта с помощью известного идентификатора, вы просто отправляете запрос PATCH объекту в посреднике контекста.Программно, код может быть виден здесь - что-то вроде
PATCH http://localhost:1026/v2/entities/'urn:ngsi-ld:lamp001/attrs
С полезной нагрузкой, являющейся данными, которые вы хотите отправить.