如何在ThingsBoard规则链中通过JavaScript访问新遥测数据?
ThingsBoard规则链配置与设备授权过滤方案
一、解决遥测数据无法访问的问题
你当前用Attributes Updated连接类型是错误的,这个触发节点只响应属性更新事件,遥测数据变化需要用Post Telemetry触发:
调整规则链触发节点
- 规则链起始添加
Message Type Switch节点,勾选POST_TELEMETRY类型,将其连接到你的Script节点。 - 移除原有的
Attributes Updated节点(如果不需要处理属性更新)。
- 规则链起始添加
在Script节点中获取遥测数据
遥测数据直接存储在msg对象中,可直接通过键名访问。示例脚本:// 获取my_value遥测值 const myValue = msg.my_value; // 验证值是否为true,执行后续逻辑 if (myValue === true) { // 将值存入元数据,供后续节点使用 metadata.telemetryFlag = true; // 返回处理后的消息 return {msg: msg, metadata: metadata, msgType: msgType}; } // 若值不符合条件,可选择终止或跳过 return null;验证配置
发送一条my_value: true的遥测数据到设备,查看规则链的节点执行日志,确认Script节点已正确读取到遥测值。
二、实现用户设备授权过滤流程
1. 主用户授权操作与遥测写入
步骤1:设备详情页添加授权控件
在设备详情页的仪表板中添加开关/复选框widget,绑定设备的服务器端属性(例如is_authorized),并配置控件触发时向规则链发送属性更新请求。
步骤2:规则链处理授权事件
- 添加
Attributes Updated节点,筛选设备的is_authorized属性变化事件。 - 连接到Script节点,编写逻辑处理设备名的添加/移除:
// 获取当前设备名称 const deviceName = entityName; // 获取目标授权用户ID(可从控件请求的元数据中传递) const targetUserId = metadata.targetUserId; // 获取授权状态 const isAuthorized = msg.is_authorized; // 准备用户遥测的设备列表(先获取用户现有遥测,避免重复) let authorizedDevices = metadata.existingAuthorizedDevices || []; if (isAuthorized) { // 避免重复添加 if (!authorizedDevices.includes(deviceName)) { authorizedDevices.push(deviceName); } } else { // 移除设备 authorizedDevices = authorizedDevices.filter(name => name !== deviceName); } // 构造更新用户遥测的消息 msg = {authorized_devices: authorizedDevices}; // 设置目标用户实体信息 metadata.entityId = targetUserId; metadata.entityType = "USER"; return {msg: msg, metadata: metadata, msgType: msgType}; - 连接
Entity Service节点,设置动作为POST_TELEMETRY,实体类型选择USER,实体ID从metadata.entityId读取,完成用户遥测的更新。
2. 普通用户设备列表过滤
在普通用户的仪表板中配置设备列表widget,添加自定义过滤条件:
- 打开设备列表widget的数据过滤设置,选择自定义JavaScript过滤。
- 输入过滤表达式:
// 检查当前用户的authorized_devices遥测是否包含当前设备名称 const userTelemetry = currentUserTelemetry['authorized_devices'] || []; return userTelemetry.includes(entityName); - 保存配置后,用户将只能看到授权列表中的设备。
注意事项
- 确保规则链拥有用户实体的遥写权限,否则无法更新用户遥测。
- 处理设备列表时,要注意避免重复添加设备,可在Script节点中做去重处理。
- 若需要批量授权,可修改控件为多选框,一次性传递多个设备名到规则链。
内容的提问来源于stack exchange,提问作者Foxbat
相关产品推荐
相关产品推荐

