如何使用 NodeRed 或任何 REST 客户端发送设备管理请求

How to send a device management request using NodeRed or any REST client

我正在尝试从 NodeRed Flow 发送 DM 固件更新命令。

函数节点:

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

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

我将它发送到带有 POST 到

的 http 请求节点
https://orgid.internetofthings.ibmcloud.com/api/v0002/mgmt/requests

使用 api 密钥的基本身份验证。我基于 Initiate a device management request

我找回了 403,文档中的内容为:

One or more of the devices does not support the requested action

有人看到我遗漏了什么吗?从物联网平台 UI 到同一个 devicetype/deviceid,它都能正常工作。

编辑:如果我使用像 Postman 这样的 Rest 客户端,同样的 403。

当您的设备宣布自己作为托管设备时,它是否发布了它所支持的受支持命令集?

一个设备连接到 Watson IoT Platform 并使用受管设备操作成为受管设备

看起来像这样

主题:iotdevice-1/mgmt/manage

{ ... "supports":{ "deviceActions":是的, "firmwareActions": 布尔值 }, ... }, ... }

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

大摇大摆的 API 文档有点误导,因为 'body' 参数被赋予了一个名称。 但是,与其他 POST API 一样,该名称实际上并未作为有效负载的一部分包含在任何地方。

有效负载应如下所示:

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

文档中的此页面提供了更多详细信息: https://console.ng.bluemix.net/docs/services/IoT/devices/device_mgmt/requests.html#firmware-actions-update