全局变量
在某些情况下,您可能需要在多个 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));-
type (Required, string): 全局变量的 C++ 类型,例如
bool(用于true/false)、int(用于整数)、float(用于小数)、int[50]用于 50 个整数的数组等。 -
restore_value (Optional, boolean): 是否在启动时尝试恢复状态。 请注意:在 ESP8266 上,您总共只有 96 字节可用于此功能!默认为
no。 -
update_interval (Optional, Time): 检查值是否已更改并需要保存的间隔。仅在
restore_value为yes时适用。 默认为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。
globals.set 动作
Section titled “globals.set 动作”此 动作 允许您在不使用 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;