home-assistant-variables
var
组件是一个 Home Assistant 集成,用于声明和设置通用变量实体。变量可以使用 var.set
服务手动设置,也可以使用模板或 SQL 查询设置,这些查询会在指定事件触发时自动运行。var
组件依赖于 recorder
组件以获取最新的 SQL 查询,并使用相同的数据库设置。
目录
安装
手动安装
- 下载最新版本。
- 解压release包,将
custom_components/var
目录复制到 Home Assistant 安装目录的custom_components
目录中。 - 在
configuration.yaml
中添加var
条目。 - 重启 Home Assistant。
通过 HACS 安装
- 确保已安装 HACS。
- 搜索并安装 "Variable" 集成。
- 在
configuration.yaml
中添加var
条目。 - 重启 Home Assistant。
配置
要添加变量,请在 configuration.yaml
的 var
组件下包含它。以下示例添加了两个变量实体,x
和 y
:
# configuration.yaml 示例条目
var:
x:
friendly_name: 'X'
initial_value: 0
icon: mdi:bug
y:
friendly_name: 'Y'
initial_value: 'Sleeping'
entity_picture: '/local/sleep.png'
配置变量
var (map) (必需)
- unique_id (string)(可选) VAR 实体的唯一标识符,用于从 UI 内覆盖设置,如实体名称或房间。请谨慎使用,仅在明确需要时使用!
- friendly_name (string)(可选) 在前端使用的名称。
- friendly_name_template
(template)(可选)
定义前端使用的名称模板(覆盖
friendly_name
)。
注意:每次触发变量更新时(即通过 tracked_entity_id
、tracked_event_type
或 var.update
),都会评估 friendly_name_template
。要传递一个由 var.set
评估一次的模板,请在 data_template
中使用 friendly_name
参数。
- initial_value (match_all)(可选) Home Assistant 启动时的初始值。
- value_template
(template)(可选)
定义值的模板(覆盖
initial_value
)。
注意:每次触发变量更新时(即通过 tracked_entity_id
、tracked_event_type
或 var.update
),都会评估 value_template
。要传递一个由 var.set
评估一次的模板,请在 data_template
中使用 value
参数。
- attributes (map)(可选) 属性字典,等同于 Home Assistant 模板传感器属性。
与 value_template 类似,每次更新时都会评估属性。
- tracked_entity_id (string | list)(可选) 实体 ID 列表,使变量对这些实体的状态变化做出反应。
- tracked_event_type (string | list)(可选) 事件类型列表,使变量对这些事件的触发做出反应。
- query (string)(可选) SQL 查询字符串,最多应返回 1 个结果。
- column (string)(可选) 从 SQL 查询结果中选择的列。
- restore (boolean)(可选) 每当 Home Assistant 重启时恢复变量的值。
默认值:true
- force_update (boolean)(可选) 每次更新变量值时触发状态变化事件,即使值没有改变。如果为 false,只有在值发生明显变化时才会触发状态变化事件。
默认值:false
- unit_of_measurement
(string)(可选)
定义变量的度量单位(如果有)。这也会影响历史可视化中的图形表示,显示为连续值。缺少
unit_of_measurement
的变量显示为离散值。
默认值:None
- icon (string)(可选) 组件显示的图标。
- icon_template (template)(可选) 定义前端使用的图标模板(覆盖 icon)。
注意:每次触发变量更新时(即通过 tracked_entity_id
、tracked_event_type
或 var.update
),都会评估 icon_template
。要传递一个由 var.set
评估一次的模板,请在 data_template
中使用 icon
参数。
- entity_picture (string)(可选) 组件显示的图片。
- entity_picture_template
(template)(可选)
定义前端使用的
entity_picture
模板(覆盖entity_picture
)。
注意:每次触发变量更新时(即通过 tracked_entity_id
、tracked_event_type
或 var.update
),都会评估 entity_picture_template
。要传递一个由 var.set
评估一次的模板,请在 data_template
中使用 entity_picture
参数。
服务
var.set
set
服务可用于从自动化或脚本中设置变量实体的状态或属性。所有配置参数也可以使用 var.set
设置。
参数
- entity_id
(string | list)(必需)
要由服务设置的
var
实体 ID 列表。 - friendly_name (string)(可选)
- friendly_name_template (template)(可选)
- value (match_all)(可选)
- value_template (template)(可选)
- attributes (map)(可选)
- tracked_entity_id (string | list)(可选)
- tracked_event_type (string | list)(可选)
- query (string)(可选)
- column (string)(可选)
- restore (boolean)(可选)
- force_update (boolean)(可选)
- unit_of_measurement (string)(可选)
- icon (string)(可选)
- icon_template (template)(可选)
- entity_picture (string)(可选)
- entity_picture_template (template)(可选)
示例
这个例子设置了一个自动化,在午夜重置变量的值。
var:
daily_diaper_count:
friendly_name: "每日尿布数量"
initial_value: 0
icon: mdi:toilet
daily_bottle_feed_volume_formula:
friendly_name: "每日配方奶摄入量"
initial_value: 0
unit_of_measurement: '盎司'
icon: mdi:baby-bottle-outline
automation:
- alias: "重置婴儿计数器"
trigger:
- platform: time
at: '00:00:00'
action:
- service: var.set
data:
entity_id:
- var.daily_diaper_count
- var.daily_bottle_feed_volume_formula
value: 0
icon: mdi:null
var.update
update
服务可用于从自动化或脚本中强制更新变量实体。
参数
- entity_id
(string | list)(必需)
要由服务更新的
var
实体 ID 列表。
示例
这个例子设置了一个自动化,每 5 分钟更新一次变量。
var:
temp_sensor_battery:
friendly_name: "温度传感器电池"
value_template: "{{ state.attr('sensor.temperature', 'battery') }}"
automation:
- alias: "每 5 分钟更新温度传感器电池变量"
trigger:
- platform: time_pattern
minutes: '/5'
action:
- service: var.update
data:
entity_id: var.temp_sensor_battery
注意:homeassistant.update_entity
服务可以更普遍地用于更新任何实体,包括 var
实体。
自动更新
使用追踪实体更新
可以设置变量在实体状态改变时更新。这个例子计算 input_boolean.foo
和 input_boolean.bar
的状态变化次数。
var:
toggle_count:
friendly_name: "切换次数"
initial_value: 0
value_template: "{{ (states('var.toggle_count') | int) + 1 }}"
tracked_entity_id:
- input_boolean.foo
- input_boolean.bar
使用追踪事件类型更新
可以设置变量在事件触发时更新。这个例子在 my_custom_event
触发时将变量 y
和 z
相乘。
var:
x:
friendly_name: 'yz'
value_template: "{{ (states('var.y') | int) * ( states('var.z') | int) }}"
tracked_event_type: my_custom_event
attributes:
y: "{{ states('var.y') }}"
z: "{{ states('var.z') }}"
模板
var
组件与模板传感器共享特性。变量的许多属性可以使用模板设置。
使用模板选择实体/值
模板可以与变量 set
服务一起使用,以选择 entity_id
并设置变量实体的任何属性。这个例子展示了通过模板选择 entity_id
和 value
。
automation:
- alias: "处理奶瓶喂食事件"
trigger:
platform: event
event_type: bottle_feed_event
action:
service: var.set
data_template:
entity_id: >-
{% if trigger.event.data.contents == 'milk' %}
var.daily_bottle_feed_volume_milk
{% elif trigger.event.data.contents == 'formula' %}
var.daily_bottle_feed_volume_formula
{% endif %}
value: >-
{% if trigger.event.data.contents == 'milk' %}
{{ (states('var.daily_bottle_feed_volume_milk') | int) + (trigger.event.data.volume | int) }}
{% elif trigger.event.data.contents == 'formula' %}
{{ (states('var.daily_bottle_feed_volume_formula') | int) + (trigger.event.data.volume | int) }}
{% endif %}
attributes: >-
last_feed_volume: "{{ trigger.event.data.volume }}"
使用模板动态更新变量
这个例子展示了如何根据另一个实体的状态自动更新变量的值和其他属性。模板值将在 tracked_entity_id
下列出的任何追踪实体的状态发生变化时更新。
var:
waldo_location_status:
friendly_name: "Waldo 位置状态"
value_template: >-
{% if states('device_tracker.waldo_phone_wifi') == 'home' and states('device_tracker.waldo_phone_bluetooth') == 'home' %}
家
{% else %}
未知
{% endif %}
entity_picture_template: >-
{% if states('var.waldo_location_status') == '家' %}
/local/home.jpg
{% else %}
/local/question_mark.jpg
{% endif %}
tracked_entity_id:
- device_tracker.waldo_phone_wifi
- device_tracker.waldo_phone_bluetooth
- var.waldo_location_status
SQL 查询
var
组件还与 SQL 传感器共享特