Switch 组件
switch 域包含所有应显示为开关且只能打开或关闭的平台。
基础 Switch 配置
Section titled “基础 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 版。
switch.toggle 操作
Section titled “switch.toggle 操作”此操作在执行时切换具有给定 ID 的开关。
on_...: then: - switch.toggle: relay_1switch.turn_on 操作
Section titled “switch.turn_on 操作”此操作在执行时将具有给定 ID 的开关打开。
on_...: then: - switch.turn_on: relay_1switch.turn_off 操作
Section titled “switch.turn_off 操作”此操作在执行时将具有给定 ID 的开关关闭。
on_...: then: - switch.turn_off: relay_1switch.control 操作
Section titled “switch.control 操作”此操作允许你比基本的 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关闭开关。
switch.is_on / switch.is_off 条件
Section titled “switch.is_on / switch.is_off 条件”此 Condition 检查给定开关是否处于 ON(或 OFF)状态。
# In some trigger:on_...: if: condition: # Same syntax for is_off switch.is_on: my_switchlambda 调用
Section titled “lambda 调用”在 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 conditionswitch.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!"switch.on_state 触发器
Section titled “switch.on_state 触发器”此触发器在每次开关状态改变时激活(无论 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表示开关关闭