如何通过input_select结合card_mod/level_color动态修改Home Assistant水箱颜色
Home Assistant水箱卡片动态颜色配置问题解决
问题背景
尝试通过input_select手动选择颜色,动态修改Home Assistant仪表盘中水箱卡片的背景色。已完成以下配置:
- 在
configuration.yaml定义颜色选择器:
input_select: deposito_color: name: Tank Color options: - red - green - blue - orange - yellow - purple - cyan - gray - white - black
- 创建两种模板传感器将选项转换为CSS兼容值(RGB格式、十六进制格式),传感器状态显示正常,但卡片通过
card_mod和level_color调用时始终显示默认颜色,卡片配置如下:
card_mod: style: | ha-card { background-color: [[[ return hass.states["sensor.color_deposito_rgb"].state || "rgb(155,155,0)"; ]]]; } level_color: | [[[ return hass.states["sensor.color_deposito_rgb"].state || "rgb(155,155,0)"; ]]] full_value: "100"
核心问题解答
1. 颜色格式兼容性
card_mod的background-color和水箱卡片的level_color都支持**rgb(R,G,B)格式和十六进制#HEX格式**,两种格式均可正常识别,无需使用[R,G,B]数组格式。
2. 传感器状态访问问题
你的模板语法本身没有错误,但需注意两点:
- 确认
sensor.color_deposito_rgb的状态在开发者工具的「状态」页面中能随input_select的选择实时更新 - 检查实体ID拼写是否完全一致,避免因大小写或字符错误导致无法访问
完整解决方案
步骤1:简化模板传感器(推荐十六进制格式)
用字典映射替代冗长的if-elif逻辑,维护更方便:
sensor: - platform: template sensors: color_deposito_rgb: friendly_name: "Tank Color RGB" value_template: >- {% set color_map = { 'red': '#FF0000', 'green': '#00FF00', 'blue': '#0000FF', 'orange': '#FFA500', 'yellow': '#FFFF00', 'purple': '#800080', 'cyan': '#00FFFF', 'gray': '#808080', 'white': '#FFFFFF', 'black': '#000000' } %} {{ color_map.get(states('input_select.deposito_color'), '#9B9B00') }}
步骤2:修正卡片配置
针对自定义水箱卡片(如custom:tank-card),确保level_color的模板字符串用引号包裹,避免YAML解析错误:
type: custom:tank-card full_value: "100" # 补充其他必要的卡片属性(如实体、标题等) card_mod: style: | ha-card { background-color: [[[ return hass.states['sensor.color_deposito_rgb'].state || '#9B9B00'; ]]]; } level_color: "[[[ return hass.states['sensor.color_deposito_rgb'].state || '#9B9B00'; ]]]"
步骤3:验证生效
- 重启Home Assistant加载新配置
- 在开发者工具「状态」页确认
sensor.color_deposito_rgb的状态随input_select.deposito_color变化 - 刷新仪表盘,测试颜色是否动态更新
内容的提问来源于stack exchange,提问作者Brais Fernandez
相关产品推荐
相关产品推荐

