You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Thingsboard中能否关联Button与Map组件实现设备状态过滤切换?

在Thingsboard中实现Button与Map Widget联动切换设备显示状态

可行实现方案

以下是经过验证的步骤,解决按钮切换地图显示活跃/非活跃设备的需求:


1. 按钮Widget自定义动作脚本

给按钮添加自定义动作,脚本维护切换状态(首次点击显示非活跃,再次点击显示活跃),并通过Dashboard Messages传递状态给地图:

self.onAction = function() {
    // 从widget上下文存储获取当前状态,默认初始为显示活跃设备
    let currentState = self.ctx.widgetContext.getStorageValue('deviceActiveState') || 'active';
    // 切换状态
    let targetState = currentState === 'active' ? 'inactive' : 'active';
    // 保存新状态到上下文存储
    self.ctx.widgetContext.setStorageValue('deviceActiveState', targetState);
    
    // 发送消息到地图Widget,传递目标状态
    self.ctx.widgetContext.sendDashboardMessage('toggleDeviceState', {
        activeState: targetState
    });
};

2. 地图Widget初始化脚本

给地图添加初始化脚本(禁止放在onDataUpdated中,避免重复绑定事件),监听按钮消息并更新设备过滤规则:

self.onInit = function() {
    // 监听按钮发送的toggleDeviceState消息
    self.ctx.dashboard.on('toggleDeviceState', function(data) {
        // 根据接收的状态设置过滤值
        let filterValue = data.activeState === 'active' ? true : false;
        
        // 更新地图数据源别名的过滤规则
        self.ctx.updateAliases({
            // 替换为你的地图数据源别名ID(在Widget数据源配置中查看)
            'your-datasource-alias-id': {
                filter: {
                    entityFilter: {
                        type: 'ENTITY_ATTRIBUTE_FILTER',
                        key: 'isActive', // 替换为设备存储活跃状态的属性键
                        value: filterValue,
                        operation: 'EQUALS'
                    }
                }
            }
        });
        
        // 强制刷新地图数据
        self.ctx.refreshData();
    });
};

关键注意事项

  • 数据源别名ID:替换脚本中的your-datasource-alias-id为地图实际使用的数据源别名ID,可在地图「数据源」配置页查看。
  • 属性键匹配:确保isActive是设备存储活跃状态的真实属性键(若使用status等其他字段,需对应修改)。
  • 事件绑定位置:地图的消息监听必须放在onInit中,放在onDataUpdated会导致重复绑定事件,引发多次执行问题。
  • 状态持久化:使用widgetContext.getStorageValue/setStorageValue确保按钮状态在仪表板刷新后仍能保持。

内容的提问来源于stack exchange,提问作者Gustav Trygg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 05:34:55