跳转到内容

全局变量

在某些情况下,您可能需要在多个 lambda 之间共享全局变量,或者在 deep_sleep 周期之间记住状态。例如,全局变量可以用于存储车库门的状态。

# 示例配置项
globals:
- id: my_global_int
type: int
restore_value: no
initial_value: '0'
# 全局字符串变量示例
- id: my_global_string
type: std::string
restore_value: yes
max_restore_data_length: 24
initial_value: '"Global value is"'
# 在自动化中
on_...:
then:
- lambda: |-
if (id(my_global_int) > 5) {
// 全局值大于 5
id(my_global_int) += 1;
} else {
id(my_global_int) += 10;
}
ESP_LOGD(TAG, "%s: %d", id(my_global_string).c_str(), id(my_global_int));
  • id (Required, ID): 为全局变量指定 ID,以便您稍后可以在 lambda 中引用它。

  • type (Required, string): 全局变量的 C++ 类型,例如 bool(用于 true/false)、 int(用于整数)、float(用于小数)、int[50] 用于 50 个整数的数组等。

  • restore_value (Optional, boolean): 是否在启动时尝试恢复状态。 请注意:在 ESP8266 上,您总共只有 96 字节可用于此功能!默认为 no

  • update_interval (Optional, Time): 检查值是否已更改并需要保存的间隔。仅在 restore_valueyes 时适用。 默认为 1s。该值也会在关机时保存。

  • max_restore_data_length (Optional, integer): 仅适用于 std::string 类型的变量。ESPHome 将分配足够的空间来存储这么多字符, 加上单个字符的开销。超过此长度的字符串将不会被保存。此变量的最大值为 254 个字符,默认为 63 个字符。

  • initial_value (Optional, string): 如果无法恢复状态或未启用状态恢复,用于初始化此变量的值。这需要用引号包裹!默认为 此类型的 C++ 默认值(例如整数默认为 0)。

在 lambda 中,全局变量没有 state 属性,只有值。注意上面示例中使用 id(my_global_int),而其他组件需要 id(my_component).state。

动作 允许您在不使用 lambda 语法的情况下更改 global 变量的值。

on_...:
- globals.set:
id: my_global_var
value: '10'
  • id (Required, ID): 要设置的全局变量的 ID
  • value (Required, templatable): 要将全局变量设置成的值。

NOTE

此动作也可以在 lambda 中编写:

id(my_global_var) = 10;