"action - rpc call request" 规则节点无法将 WriteReplace 消息发送到 LwM2M 未签名整型资源
** 描述错误** 一个"Action rpc call request"规则节点在请求以未署名值更新 UNSIGNED INTEGER LwM2M 资源后返回"BAD REQEST"错误. 使用有线沙克,我可以确认消息从未从Tingsboard服务器发布到设备.
** 我的服务器环境**
- 自己的设置
- 部署:平地
- 部署类型: 转接AWS EC2实例
- MthingsBoard 第4.2.0版 (英语).
- 社区版
- OS名称和版本:Amazon Linux 2023,版本2023.10.20260105
** 我的设备** 在STM32L4P5MCU上所建设备固件使用蜂窝4G调制解调器,执行LwM2M版本1.1客户端(基于Wakaama库)
** 我的客户工作站**
- 操作系统:Windows 11
- 浏览器:微软边缘
- 版本:151.0.4129.101
** 废除** 我在展示规则链 允许复制的行为:
<img宽="358"高="185" alt="Image" src="https://GitHub.com/user-attachments/assets/4e4100fc-9d65-4bbc-9af5-c09a2d187521" / >
解释: 节点#1:一个RPC呼叫请求读取资源38031/0/7是从设备读取. 消息有效载荷:{"方法":"读取","段落":{"id":"38031/0/7"}. 消息类型:RPC CALL FROM SERVER TO DEVICE. 资源38031/0/7包含一散列当前设备的配置.
节点 # 2: 一个切换过滤节点比较设备的配置散列来自节点 # 1 , 相对于服务器存储的配置散列设备. 如果两者都匹配,则下个动作会通过"AlladyInSync"路径进行路由;否则下个动作/节点会通过"HashMismatch"路径进行路由.
节点 #3:负责解析发送到设备的邮件以更新其配置的变换-script节点(存储在设备资源38031/0/1上,被定义为32位无符号整数). 节点3所执行的脚本如下:
var portmask = JSON.parse (metadata.ss port Putmask; ).
var maskInt = 0; (中文(简体) ).
用于 (var i = 0; i < portmask. six (); i++) {
如果(portMask[i] =====
maskInt = maskInt | (1 <<i);
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
// 在 TBEL 中使用未签名的零填充右移来强制32位未签名整数
var 口罩 未签名 = 口罩 {} ○;
var msg = { (中文(简体) ).
"道":"写取所","取取所".
"段落":{
"id":"38031/0/1", (中文(简体) ).
"值":未签名的口罩
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
* ;
返回{msg:msg,元数据:元数据,msgType:"RPC CALL FROM SERVER TO DEVICE"};
节点 #4:一个"行动-rpc呼叫请求"规则节点,负责在上个节点发送解析后的消息并发回设备.
参见下方通过调试节点#4的模拟结果:
- 图片与记录的事件:
<img宽="572"高="314" alt="Image" src="https://GitHub.com/user-attachments/assets/f7c90c44-c090-4b34-a17e-578f1ac54f90"/".
*"数据"和"Metadata"消息内容的细节:
INPUT MSG 密码
活动时间:2026-08-23 10:08:34.463 翻译: 数据 : { "方法":"重写"; "参数" :{ "id":"38031/0/1", (中文(简体) ). "值": 13 [ >] [ >] 翻译: 元数据 : { "deviceLabel":"开发设备", “ 设备Name ” : . . . . . . .
内容来源: thingsboard/thingsboard