全局变量
在某些情况下,你可能需要在多个 lambda 之间共享一个全局变量,或者在 deep_sleep 的各个时段之间记住状态。例如,全局变量可用于存储车库门的状态。
# Example configuration entryglobals: - id: my_global_int type: int restore_value: no initial_value: '0' # Example for global string variable - id: my_global_string type: std::string restore_value: yes max_restore_data_length: 24 initial_value: '"Global value is"'
# In an automation on_...: then: - lambda: |- if (id(my_global_int) > 5) { // global value is greater than 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(必选,string):全局变量的 C++ 类型,例如
bool(用于true/false)、int(用于整数)、float(用于小数)、int[50](用于 50 个整数的数组)等。 -
restore_value(可选,boolean):是否尝试在启动时恢复状态。 请注意:在 ESP8266 上,你总共只有 96 字节可用!默认值为
no。 -
update_interval(可选,Time):检查值是否已更改并需要保存的间隔。仅在
restore_value为yes时适用。 默认值为1s。该值也会在关闭时保存。 -
max_restore_data_length(可选,integer):仅适用于类型为
std::string的变量。ESPHome 将为这么多字符分配足够的空间, 外加一个字符的开销。超出此长度的字符串不会被保存。该变量的最大值为 254 个字符,默认值为 63 个字符。 -
initial_value(可选,string):当状态无法恢复或未启用状态恢复时,用于初始化此变量的值。 这需要用引号包裹!默认为该类型的 C++ 默认值(例如整数的
0)。
在 lambda 中,全局变量没有 state 属性,只有值。注意上例中使用了 id(my_global_int),而其他组件则需要使用 id(my_component).state。
globals.set 操作
Section titled “globals.set 操作”该操作允许你更改 global
变量的值,而无需使用 lambda 语法。
on_...: - globals.set: id: my_global_var value: '10'- id(必选,ID):要设置的全局变量的ID。
- value(必选,templatable):要为全局变量设置的值。
NOTE
该操作也可以在 lambda 中编写:
id(my_global_var) = 10;