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

Post 如何使用NodeRed或任何REST客户端发送设备管理请求,post,ibm-cloud,node-red,watson-iot,Post,Ibm Cloud,Node Red,Watson Iot,我正在尝试从节点流发送DM固件更新命令 功能节点: msg.payload = {"MgmtInitiationRequest": { "action":"firmware/update", "devices": [{ "typeId": "myType", "deviceId": "myDevice" }] }} msg.headers={"Content-Type":"application/json"} return msg; 我将它发送到一个http请求节点,并将其发送到 https

我正在尝试从节点流发送DM固件更新命令

功能节点:

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

}}
msg.headers={"Content-Type":"application/json"}
return msg;
我将它发送到一个http请求节点,并将其发送到

https://orgid.internetofthings.ibmcloud.com/api/v0002/mgmt/requests
使用api密钥进行基本身份验证。我是基于

我得到一个403,文档中有:

一个或多个设备不支持请求的操作

有人看到我遗漏了什么吗?从物联网平台UI到相同的设备类型/设备ID,它可以正常工作


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

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

设备连接到Watson IoT平台,并使用托管设备操作成为托管设备

看起来像这样

主题:IoT设备-1/管理/管理

{ ... “支持”:{ “设备操作”:正确, “固件反应”:布尔值 }, ... }, ... }


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

设备连接到Watson IoT平台,并使用托管设备操作成为托管设备

看起来像这样

主题:IoT设备-1/管理/管理

{ ... “支持”:{ “设备操作”:正确, “固件反应”:布尔值 }, ... }, ... }


swagger API文档有点误导,因为“body”参数有一个名称。 但是,与其他POST API一样,该名称实际上并不作为有效负载的一部分包含在任何地方

有效载荷应如下所示:

{
    "action": "firmware/update",
    "devices": [
        {
            "typeId": "string",
            "deviceId": "string"
        }
    ]
}
文档中的此页提供了更多详细信息:

swagger API文档有点误导,因为“body”参数有一个名称。 但是,与其他POST API一样,该名称实际上并不作为有效负载的一部分包含在任何地方

有效载荷应如下所示:

{
    "action": "firmware/update",
    "devices": [
        {
            "typeId": "string",
            "deviceId": "string"
        }
    ]
}
文档中的此页提供了更多详细信息:

AFAIK您的NR流必须作为应用程序连接才能发送dm命令-是这样吗?@barny是的,它使用api键,因此应该作为应用程序连接。文档显示的参数称为deviceManagementInitiationRequest而不是MgmtInitiationRequest-不使用文档显示的名称的原因?“设备/重新启动”操作有效吗?因为右侧的模型具有MgmtInitiationRequest。但我明白你的意思,尝试了deviceManagementInitiationRequest和device/reboot,仍然得到了出血403。也完全放弃了那个部分(因为它将成为一个管理端点)。@barny我从NR搬到了邮递员和403。我想我不明白身体到底应该是什么样子,如果有其他的头球。我跟不上那个大摇大摆的医生。或者这是错误的。那么,您的NR流必须作为应用程序连接才能发送dm命令-是这样吗?@barny Yes,它使用api密钥,因此应该作为应用程序连接文档显示的参数名为deviceManagementInitiationRequest而不是MgmtInitiationRequest-不使用文档显示的名称的原因?“设备/重新启动”操作有效吗?因为右侧的模型具有MgmtInitiationRequest。但我明白你的意思,尝试了deviceManagementInitiationRequest和device/reboot,仍然得到了出血403。也完全放弃了那个部分(因为它将成为一个管理端点)。@barny我从NR搬到了邮递员和403。我想我不明白身体到底应该是什么样子,如果有其他的头球。我跟不上那个大摇大摆的医生。或者这是错误的。我相信是这样,而且我做得很正确,因为如果我去物联网平台并在那里启动操作,下载/更新固件操作就会起作用。我怀疑我没有正确理解那个狂妄自大的医生把它当作休息电话。我一直在修改它,但还没有乐趣。头上的头发少了。我相信是这样,而且我做得很正确,因为如果我去IoT平台并在那里启动操作,下载/更新固件操作就会起作用。我怀疑我没有正确理解那个狂妄自大的医生把它当作休息电话。我一直在修改它,但还没有乐趣。头上的头发少了。我也试过了,又试了一次。但我还是得了403分。生成新的api密钥,以防万一。。。您是否知道标准应用程序是否适合他们,或者我是否需要其他东西?您是否已经有针对指定设备的正在进行的固件更新请求?对于特定设备,一次只允许进行一次固件更新。此外,您能否通过此请求验证您的设备是否声明支持固件操作?GET/api/v0002/device/types/myType/devices/myDevice/mgmtNo,它们已完成。我通过get:{“supports”:{“deviceActions”:true,“firmwareActions”:true},“休眠”:false,“固件”:{“version”:“,“name”:“,“verifier”:“,“state”:“0”,“updateStatus”:“0”}}来获取这些信息。我也尝试过,再次尝试过。但我还是得了403分。生成新的api密钥,以防万一。。。您是否知道标准应用程序是否适合他们,或者我是否需要其他东西?您是否已经有针对指定设备的正在进行的固件更新请求?对于特定设备,一次只允许进行一次固件更新。此外,您能否通过此请求验证您的设备是否声明支持固件操作?GET/api/v0002/device/types/myType/devices/myDevice/mgmtNo,它们已完成。我通过get:{“supports”:{“deviceActions”:true,“firmwareActions”:true},“休眠”:false,“固件”:{“version”:”、“name”:”、“verifier”:”、“state”:“0”,