跳转到内容

Alarm Control Panel 组件

alarm_control_panel:
- platform: ...
name: Alarm Panel

配置变量:

  • id (可选, string):手动指定用于代码生成的 ID。至少必须指定 id 和 name 之一。
  • name (可选, string):报警控制面板的名称。至少必须指定 id 和 name 之一。

NOTE

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

此触发器在每次报警状态改变时激活。

alarm_control_panel:
# ...
on_state:
then:
- logger.log: "Alarm Panel State Changed!"

此触发器在报警变为 pending 状态时激活。

alarm_control_panel:
# ...
on_pending:
then:
- logger.log: "Alarm Pending!"

此触发器在报警变为 arming 状态时激活。

alarm_control_panel:
# ...
on_arming:
then:
- logger.log: "Alarm Arming!"

此触发器在报警变为 armed_home 状态时激活。

alarm_control_panel:
# ...
on_armed_home:
then:
- logger.log: "Alarm armed_home!"

此触发器在报警变为 armed_night 状态时激活。

alarm_control_panel:
# ...
on_armed_night:
then:
- logger.log: "Alarm armed_night!"

此触发器在报警变为 armed_away 状态时激活。

alarm_control_panel:
# ...
on_armed_away:
then:
- logger.log: "Alarm armed_away!"

此触发器在报警变为 triggered 状态时激活。

alarm_control_panel:
# ...
on_triggered:
then:
- logger.log: "Alarm Triggered!"

此触发器在报警从 triggered 状态恢复回之前的 armed 状态或 disarmed 状态时激活。

alarm_control_panel:
# ...
on_cleared:
then:
- logger.log: "Alarm Cleared!"

此触发器在报警变为 disarmed 状态时激活。

alarm_control_panel:
# ...
on_disarmed:
then:
- logger.log: "Alarm Disarmed!"

此触发器在所有报警传感器的逻辑与运算状态改变时激活。这对于实现 “报警就绪”LED 很有用。一旦调用此触发器,就可以在 lambda 块中调用 get_all_sensors_ready() 来获取就绪状态。

alarm_control_panel:
# ...
on_disarmed:
then:
- lambda: !lambda |-
ESP_LOGI("AlarmPanel", "Sensor ready change to: %s", ((id(acp1).get_all_sensors_ready()) ? (const char *) "True" : (const char *) "False"));

此触发器在标记为 chime:true 的区域传感器从关闭变为打开时激活。这对于 在区域打开时实现键盘提示音很有用。

alarm_control_panel:
# ...
on_chime:
then:
- logger.log: "Alarm Chime!"

此操作以 away 模式布防报警。当 requires_code_to_arm 为 true 时,code 是必需的。

on_...:
then:
- alarm_control_panel.arm_away:
id: acp1
code: "1234"

此操作以 home 模式布防报警。当 requires_code_to_arm 为 true 时,code 是必需的。

on_...:
then:
- alarm_control_panel.arm_home:
id: acp1
code: "1234"

此操作以 night 模式布防报警。当 requires_code_to_arm 为 true 时,code 是必需的。

on_...:
then:
- alarm_control_panel.arm_night:
id: acp1
code: "1234"

此操作撤防报警。当 codes 不为空时,code 是必需的。

on_...:
then:
- alarm_control_panel.disarm:
id: acp1
code: "1234"

此操作将报警置于 pending 状态(即 pending_time 之后在 triggered 之前的状态)。

on_...:
then:
- alarm_control_panel.pending: acp1

此操作将报警置于 triggered 状态。

on_...:
then:
- alarm_control_panel.triggered: acp1

此 条件 检查报警控制面板是否已布防。

on_...:
if:
condition:
alarm_control_panel.is_armed: acp1

在 lambda 中,可以调用以下方法:

  • arm_away(code)
  • arm_home(code)
  • arm_night(code)
  • disarm(code)
  • get_all_sensors_ready()
id(acp1).arm_away();
id(acp1).arm_home();
id(acp1).arm_night();
id(acp1).disarm(std::string("1234"));
bool all_sensors_ready = id(acp1).get_all_sensors_ready();

当启用 MQTT 时,报警控制面板会订阅一个命令主题。命令可以以纯字符串或 JSON 对象的形式发送。

纯字符串负载直接设置报警状态:

Terminal window
mosquitto_pub -t "esphome/alarm_control_panel/my_alarm/command" -m "ARM_AWAY"

有效的纯字符串命令包括:ARM_AWAY、ARM_HOME、ARM_NIGHT、ARM_CUSTOM_BYPASS、DISARM、PENDING、TRIGGERED。

若要随命令附带 PIN 码,请发送一个包含必需 state 键和可选 code 键的 JSON 对象:

Terminal window
mosquitto_pub -t "esphome/alarm_control_panel/my_alarm/command" -m '{"state": "DISARM", "code": "1234"}'
Terminal window
mosquitto_pub -t "esphome/alarm_control_panel/my_alarm/command" -m '{"state": "ARM_AWAY", "code": "1234"}'

code 会与配置的 codes 列表进行验证。如果 requires_code_to_arm 为 true,布防命令必须包含有效的 code。