Как отправить запрос на управление устройством с помощью NodeRed или любого клиента REST

Я пытаюсь отправить команду обновления прошивки DM из NodeRed Flow.

Функциональный узел:

msg.payload = {"MgmtInitiationRequest": {
"action":"firmware/update",
"devices": [{
"typeId": "myType",
"deviceId": "myDevice"
}]

}}
msg.headers={"Content-Type":"application/json"}
return msg;

Я отправляю его на узел HTTP-запроса с помощью POST для

https://orgid.internetofthings.ibmcloud.com/api/v0002/mgmt/requests

Базовая аутентификация с ключами API. Я основывался на Инициировать запрос на управление устройством

Я возвращаю 403, который в документах имеет вид:

Одно или несколько устройств не поддерживают запрошенное действие

Кто-нибудь видит, что мне не хватает? Он отлично работает от пользовательского интерфейса платформы IoT к тому же типу устройства/идентификатору устройства.

РЕДАКТИРОВАТЬ: Тот же 403, если я использую клиент Rest, например Postman.


person amadain    schedule 28.03.2017    source источник
comment
Насколько я знаю, ваш поток NR должен быть подключен как приложение для отправки команды dm - так ли это?   -  person barny    schedule 28.03.2017
comment
@barny Да, он использует ключи API, поэтому должен подключаться как приложение.   -  person amadain    schedule 29.03.2017
comment
Документы показывают, что параметр называется deviceManagementInitiationRequest, а не MgmtInitiationRequest — по какой причине не используется имя, показанное в документах? Работает ли действие устройства/перезагрузки?   -  person barny    schedule 29.03.2017
comment
Поскольку модель справа имеет MgmtInitiationRequest. Но я понимаю, что вы имеете в виду, и попробовал с помощью deviceManagementInitiationRequest и с устройством / перезагрузкой, и все равно получил этот bleed'n 403. Также полностью удалил эту часть (поскольку она идет к конечной точке управления).   -  person amadain    schedule 29.03.2017
comment
@barny Я переехал из NR в Postman и тот же 403. Думаю, я не понимаю, каким именно должно быть тело и есть ли какие-либо другие заголовки. Не могу следовать этому чванливому документу. Или это неправильно.   -  person amadain    schedule 29.03.2017
comment
Если, гипотетически, вы использовали, например. Fiddler для слежения за UI/браузерной сетью IoTP, вы можете увидеть правильный синтаксис для REST POST, если это делается из браузера.   -  person barny    schedule 29.03.2017


Ответы (2)


Документация API swagger немного вводит в заблуждение тем, что параметру body дается имя. Но, как и в случае с другими API-интерфейсами POST, это имя на самом деле никуда не включается как часть полезной нагрузки.

Полезная нагрузка должна выглядеть примерно так:

{
    "action": "firmware/update",
    "devices": [
        {
            "typeId": "string",
            "deviceId": "string"
        }
    ]
}

Эта страница в документации содержит более подробную информацию: https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/requests.html#firmware-actions-update

person Mike Robertson    schedule 29.03.2017
comment
Я тоже так пробовал, пробовал еще раз. Но я все еще получаю 403. Сгенерировал новые API-ключи, на всякий случай... Не знаете, подойдет ли для них стандартное приложение или мне нужно что-то еще? - person amadain; 29.03.2017
comment
У вас уже есть незавершенный запрос на обновление микропрограммы для указанного устройства? Для конкретного устройства одновременно может выполняться только 1 обновление встроенного ПО. Кроме того, можете ли вы проверить с помощью этого запроса, что ваше устройство поддерживает действия прошивки? ПОЛУЧИТЬ /api/v0002/device/types/myType/devices/myDevice/mgmt - person Mike Robertson; 29.03.2017
comment
Нет, они завершены. Я получаю это обратно для GET: {supports: {deviceActions: true, firmwareActions: true}, бездействующий: false, прошивка: {версия:, имя:, верификатор:, состояние: 0, updateStatus: 0}} - person amadain; 29.03.2017

Опубликовало ли ваше устройство набор поддерживаемых команд, когда оно объявило себя управляемым устройством?

Устройство подключается к платформе Watson IoT и использует операцию управляемых устройств, чтобы стать управляемым устройством.

Что выглядит примерно так

Тема: iotdevice-1/mgmt/manage

{ ... "supports": { "deviceActions": true, "firmwareActions": логическое значение }, ... }, ... }

https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/index.html

person Mikko Kujapelto    schedule 29.03.2017
comment
Я считаю, что да, и что я сделал это правильно, потому что, если я перейду на платформу IoT и инициирую там действие, действия «Загрузить/обновить микропрограмму» сработают. Я подозреваю, что неправильно понимаю этот документ чванства, чтобы сделать это как вызов REST. Я продолжаю изменять его, но пока без радости. Меньше волос на голове. - person amadain; 29.03.2017