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

Home Assistant的Jinja2模板比较时间戳出现float与str类型错误

问题根源

你在满足判断条件后直接把原始状态字符串赋值给了data.min_date,覆盖了初始化时的float类型时间戳:

  • 初始化时data.min_date确实是转换后的浮点型时间戳
  • 第一次触发if条件时,{%- set data.min_date = value -%}里的value是states(i)返回的字符串类型状态值,直接替换了原本的浮点型数值
  • 第二次循环执行比较逻辑时,data.min_date已经是字符串类型,自然触发float和str无法比较的类型错误
  • 额外隐藏问题:就算比较逻辑不报错,最后调用timestamp_custom过滤器时传入字符串类型的data.min_date也无法完成时间格式化,会再次报错。
修正后代码
{%- set list = ['sensor.1','sensor.2','sensor.3','sensor.4'] -%}
{%- set data = namespace(min_date=float(as_timestamp(now() + timedelta(days = 360))), min_name = '') -%}
{%- for i in list %}
{%- set value = states(i) %}
{%- set current_ts = float(as_timestamp(value)) %}
{%- if current_ts < data.min_date %}
{%- set data.min_date = current_ts -%}
{%- set data.min_name = state_attr(i, 'friendly_name') -%}
{% endif %}
{%- endfor %}
{{ data.min_name + ' (' + data.min_date | timestamp_custom('%Y-%m-%dT%H:%M:%S%z') + ')' }}
修正说明
  • 提前把当前传感器的状态转换为浮点型时间戳current_ts,避免重复转换
  • 满足条件时给data.min_date存储转换后的浮点型时间戳,而非原始字符串,保证后续循环的比较逻辑始终是两个浮点型数值对比
  • 最终格式化时直接传入存储的浮点型时间戳,符合timestamp_custom过滤器的参数要求

可选优化:如果部分传感器可能返回非时间格式的无效状态,可以给float转换加默认值,避免转换失败中断模板执行:

{%- set current_ts = float(as_timestamp(value), float(as_timestamp(now() + timedelta(days = 360)))) %}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:24:01