HomeAssistant中card_mod封面图标颜色配置的TypeError修复咨询
修复HomeAssistant card_mod中Cover设备图标颜色配置的TypeError错误
问题描述
在HomeAssistant中使用card_mod组件为cover.woonkamer_covers设备根据状态设置仪表板图标颜色时,功能正常但日志持续抛出错误:
Homeassistant: TypeError: '>' not supported between instances of 'NoneType' and 'int'
原配置代码如下:
card_mod: style: | :host { {% if states('cover.woonkamer_covers') == None %} --card-mod-icon-color: var(--orange-color); {% elif states('cover.woonkamer_covers') == 'closing' %} --card-mod-icon-color: var(--yellow-color); {% elif state_attr('cover.woonkamer_covers', 'current_position') > 90 %} --card-mod-icon-color: var(--grey-color); {% elif state_attr('cover.woonkamer_covers', 'current_position') == 10 %} --card-mod-icon-color: var(--red-color); {% elif state_attr('cover.woonkamer_covers', 'current_position') == 0 %} --card-mod-icon-color: var(--red-color); {% else %} --card-mod-icon-color: var(--yellow-color); {% endif %} }
错误原因
- 类型不匹配:当cover设备未返回
current_position属性(值为None)时,直接与整数进行比较会触发类型错误; - 状态判断逻辑错误:
states('entity_id')返回字符串类型,永远不会等于None,设备离线时实际返回'unavailable',原判断无法匹配该场景。
修复方案
通过两处修改解决问题:
- 使用
int()过滤器将current_position转换为整数,同时添加default(0)处理属性为None的情况; - 修正设备离线状态的判断逻辑,改为检测
states('cover.woonkamer_covers') == 'unavailable'。
修复后的完整配置代码:
card_mod: style: | :host { {% if states('cover.woonkamer_covers') == 'unavailable' %} --card-mod-icon-color: var(--orange-color); {% elif states('cover.woonkamer_covers') == 'closing' %} --card-mod-icon-color: var(--yellow-color); {% elif state_attr('cover.woonkamer_covers', 'current_position') | int(default=0) > 90 %} --card-mod-icon-color: var(--grey-color); {% elif state_attr('cover.woonkamer_covers', 'current_position') | int(default=0) in [0, 10] %} --card-mod-icon-color: var(--red-color); {% else %} --card-mod-icon-color: var(--yellow-color); {% endif %} }
额外优化:将current_position == 0和==10的判断合并为in [0, 10],简化代码结构。
内容的提问来源于stack exchange,提问作者Perry van Dijk
相关产品推荐
相关产品推荐

