thingsboard 自定义动作JS编程
在 ThingsBoard 中实现 自定义动作(Custom Action)的 JavaScript 编程,主要通过“Custom action (with HTML template)”方式完成,适用于创建弹窗、编辑实体、控制设备等交互行为。
实现步骤(以添加设备或资产为例)
1、进入部件编辑模式 → 点击“+”添加动作。
2、选择动作来源(如:Widget header button 或 Action cell button)。
3、动作类型选择:Custom action (with HTML template)
4、配置四个标签页:
Resources:引入外部 JS/CSS(可选);
CSS:自定义样式;
HTML:弹窗或交互界面结构;
JavaScript:核心逻辑代码。
5、JavaScript 示例:添加设备/资产弹窗逻辑(精简版)
var targetStateId = '';// 防止 entityLabel 为 nullif (entityLabel) { //entityLabel 是否包含“用电保护器” if (entityLabel.includes('用电保护器')) {targetStateId = 'state_air'; // 用电保护器} else if (entityLabel.includes('数字量')) {targetStateId = 'state_output'; // 数字量输入输出}else if (entityLabel.includes('DTU')) {targetStateId = 'state_dtu'; // DTU}}/* 2. 可选:额外参数,随状态一起带过去 */const params = {entityId: entityId.id,entityName: entityName,entityLabel: entityLabel};/* 3. 获取仪表盘所有已定义的状态列表 *///const states = widgetContext.dashboardCtrl.dashboard.configuration.states || {};//alert(JSON.stringify(states, null, 2));if (targetStateId) {widgetContext.stateController.openState(targetStateId, params, true);} else {widgetContext.showErrorToast('状态 "' + targetStateId + '" 未定义。');}
“自定义动作(Custom Action)” 的 JS 编程不是“炫技”,而是解决实际业务痛点的关键手段。它的好处和解决的问题可以总结为:
✅ 1. 解决“标准动作”无法满足的业务需求
-
痛点:ThingsBoard 自带的动作(如“打开仪表盘”、“打开详情”)只能做固定的事情,无法处理复杂业务逻辑。
-
例子:
-
点击按钮后需要弹窗输入设备参数(如 SIM 卡号、固件版本)再保存;
-
点击“报警确认”按钮时,需要调用外部 API(钉钉/微信)通知运维人员;
-
点击“重启设备”按钮时,需要先弹窗确认,再下发 RPC 命令并记录日志。
-
✅ 2. 解决“多步骤交互”问题
-
痛点:标准动作是“一步完成”,而实际业务需要“多步交互”(如表单验证、异步加载数据)。
-
例子:
-
添加设备时,先选择设备类型 → 动态加载对应的属性模板 → 再填写参数 → 最后保存;
-
点击“批量下发配置”时,先选择配置模板 → 再选择目标设备 → 最后确认执行。
-
✅ 3. 解决“跨系统集成”问题
-
痛点:ThingsBoard 无法直接调用外部系统(如 ERP、CRM、工单系统)。
-
例子:
-
点击“创建工单”按钮时,调用 Jira/ServiceNow API 创建问题单;
-
点击“同步库存”按钮时,调用 ERP 接口获取最新库存数据并更新 ThingsBoard 属性。
-
✅ 4. 解决“用户体验差”问题
-
痛点:标准动作的弹窗样式固定,无法根据品牌或业务需求定制。
-
例子:
-
自定义弹窗的标题、按钮颜色、布局,使其符合公司 UI 规范;
-
在弹窗中嵌入图表(如历史数据趋势)辅助用户决策。
-
✅ 5. 解决“重复劳动”问题
-
痛点:多个仪表盘需要相同的“添加/编辑”功能,但标准动作无法复用。
-
例子:
-
封装一个“通用设备添加弹窗”,所有仪表盘只需引用,无需重复造轮子;
-
将复杂逻辑(如设备注册流程)封装成可复用的自定义动作模板。
-
✅ 6. 解决“权限控制”问题
-
痛点:标准动作无法根据用户角色动态控制按钮显隐。
-
例子:
-
只有“管理员”角色才能看到“删除设备”按钮;
-
只有“维修工程师”角色才能看到“远程调试”按钮。
-