跳转到内容

全局变量

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

# Example configuration entry
globals:
- 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));
  • id(必选,ID):为全局变量设置一个 ID,以便你稍后可以在 lambdas 中引用它。

  • 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。

该操作允许你更改 global 变量的值,而无需使用 lambda 语法。

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

NOTE

该操作也可以在 lambda 中编写:

id(my_global_var) = 10;