跳转到内容

Switch 组件

switch 域包含所有应显示为开关且只能打开或关闭的平台。

switch:
- platform: ...
name: "Switch Name"
icon: "mdi:restart"

配置变量:

  • id(可选,字符串):手动指定用于代码生成的 ID。id 和 name 中至少必须指定一个。
  • name(可选,字符串):开关的名称。id 和 name 中至少必须指定一个。

NOTE

如果你已为设备设置了 friendly_name, 并且希望开关使用该名称,可以设置 name: None。

  • icon(可选,图标):手动设置前端中用于 传感器的图标。

  • inverted(可选,布尔值):是否反转二进制 状态,即报告 ON 状态为 OFF,反之亦然。默认为 false。

  • internal(可选,布尔值):将此组件标记为内部组件。内部组件将 不会暴露给前端(如 Home Assistant)。仅指定 id 而 不指定 name 将隐式将此设置为 true。

  • restore_mode(可选):控制开关如何在启动时尝试恢复状态。 注意:并非所有组件都会考虑 restore_mode。请查阅特定组件的文档以了解 此功能在特定组件或设备上的工作方式。 关于 ESP8266 的恢复,另请参见 esp8266 部分 中的 restore_from_flash。

    • RESTORE_DEFAULT_OFF - 尝试恢复状态,如果无法恢复则默认为 OFF。
    • RESTORE_DEFAULT_ON - 尝试恢复状态,如果无法恢复则默认为 ON。
    • RESTORE_INVERTED_DEFAULT_OFF - 尝试从先前状态反转恢复,如果无法恢复则默认为 OFF。
    • RESTORE_INVERTED_DEFAULT_ON - 尝试从先前状态反转恢复,如果无法恢复则默认为 ON。
    • ALWAYS_OFF(默认) - 启动时始终将开关初始化为 OFF。
    • ALWAYS_ON - 启动时始终将开关初始化为 ON。
    • DISABLED - 不执行任何操作,由下游平台组件决定。例如,组件可以读取硬件并确定状态,或者具有特定的配置选项来调节初始状态。

    除非特定平台定义了其他默认值,否则默认为 ALWAYS_OFF。

  • on_turn_on(可选,Action):在 开关打开时执行的自动化。参见 switch.on_turn_on / switch.on_turn_off 触发器。

  • on_turn_off(可选,Action):在 开关关闭时执行的自动化。参见 switch.on_turn_on / switch.on_turn_off 触发器。

  • disabled_by_default(可选,布尔值):如果为 true,则此实体不应添加到任何客户端的前端中, (通常是 Home Assistant),除非用户手动启用它(通过 Home Assistant UI)。 默认为 false。

  • entity_category(可选,字符串):实体的类别。 参见 https://developers.home-assistant.io/docs/core/entity/#generic-properties 查看可用选项列表。 设置为 "" 以移除默认的实体类别。

  • device_class(可选,字符串):开关的设备类型。 参见 https://www.home-assistant.io/integrations/switch/#device-class 查看可用选项列表。

  • 如果启用了 MQTT,则还包括 MQTT 组件 中的所有其他选项。

  • 如果启用了 Webserver 且选择了第 3 版,则还包括 Webserver 组件的所有其他选项。参见 Webserver 第 3 版。

此操作在执行时切换具有给定 ID 的开关。

on_...:
then:
- switch.toggle: relay_1

此操作在执行时将具有给定 ID 的开关打开。

on_...:
then:
- switch.turn_on: relay_1

此操作在执行时将具有给定 ID 的开关关闭。

on_...:
then:
- switch.turn_off: relay_1

此操作允许你比基本的 turn_on 和 turn_off 操作更灵活地控制开关。 它接受一个可模板化的 state 参数,当期望的开关状态是动态确定时非常有用。

on_...:
then:
- switch.control:
id: relay_1
state: true
# Or with a template
- switch.control:
id: relay_1
state: !lambda |-
return id(some_sensor).state > 50.0;

配置变量:

  • id(必填,ID):要控制的开关的 ID。
  • state(必填,布尔值,templatable): 要将开关设置到的状态。true 打开开关,false 关闭开关。

此 Condition 检查给定开关是否处于 ON(或 OFF)状态。

# In some trigger:
on_...:
if:
condition:
# Same syntax for is_off
switch.is_on: my_switch

在 lambdas 中,你可以调用所有开关上的几种方法来执行一些 高级操作(更多信息请参阅完整的 API 参考)。

  • publish_state() : 手动触发开关发布新状态并内部存储。 如果它与上一次的内部状态不同,还会额外发布到前端。
// Within lambda, make the switch report a specific state
id(my_switch).publish_state(false);
id(my_switch).publish_state(true);

NOTE

请注意,这不会改变开关的实际状态。它仅 更改前端和内部状态。如果你想 更改开关的实际状态,需要调用 turn_on()、 turn_off() 或 toggle()。

例如,如果你使用的是 Gpio,调用 publish_state() 将 不会更改 GPIO 引脚的电平。要做到这一点,需要调用 turn_on()、 turn_off()、toggle() 或 control()。其他开关平台同理。

  • state : 获取开关的当前状态。
// Within lambda, get the switch state and conditionally do something
if (id(my_switch).state) {
// Switch is ON, do something here
} else {
// Switch is OFF, do something else here
}
  • turn_off() /turn_on() : 从代码中手动打开/关闭开关。 与 switch.turn_on 和 switch.turn_off 操作类似, 但可用于复杂的 lambda 表达式。
id(my_switch).turn_off();
id(my_switch).turn_on();
// Toggle the switch
id(my_switch).toggle();
  • control() : 使用布尔参数控制开关状态。 这为动态设置开关状态提供了统一的接口。
// Within lambda, control switch based on a condition
id(my_switch).control(true); // Turn ON
id(my_switch).control(false); // Turn OFF
id(my_switch).control(some_condition); // Set based on condition

switch.on_turn_on / switch.on_turn_off 触发器

Section titled “switch.on_turn_on / switch.on_turn_off 触发器”

此触发器在每次开关打开时激活。它在开关组件确认状态后 (例如在自身切换 ON/OFF 后)立即变为活动状态。

switch:
- platform: gpio # or any other platform
# ...
on_turn_on:
- logger.log: "Switch Turned On!"
on_turn_off:
- logger.log: "Switch Turned Off!"

此触发器在每次开关状态改变时激活(无论 ON 还是 OFF)。 它以布尔变量 x 的形式提供新状态,可在自动化中使用。

switch:
- platform: gpio # or any other platform
# ...
on_state:
- light.control:
id: my_light
state: !lambda return x;
- if:
condition:
lambda: 'return x;'
then:
- logger.log: "Switch is now ON!"
else:
- logger.log: "Switch is now OFF!"

变量 x 是一个代表新状态的布尔值:

  • true 表示开关打开
  • false 表示开关关闭