From 8408d37763fcb0670439b881074501f3eaaa71b9 Mon Sep 17 00:00:00 2001 From: Aiden Date: Wed, 2 Sep 2026 19:59:22 +0800 Subject: [PATCH] Add button debounce --- athom-2ch-relay-board.yaml | 10 ++++++++-- athom-4ch-relay-board.yaml | 16 ++++++++++++++-- athom-8ch-relay-board.yaml | 28 ++++++++++++++++++++++++++-- athom-dual-smart-plug-v3.yaml | 8 ++++++-- athom-energy-monitor-x2.yaml | 7 +++++-- athom-energy-monitor-x6.yaml | 7 +++++-- athom-garage-door.yaml | 8 +++++--- athom-ld2450-sensor.yaml | 6 ++++-- athom-mini-relay-v2.yaml | 9 +++++++-- athom-presence-sensor-v3.yaml | 7 +++++-- athom-rf-ir-remote.yaml | 7 +++++-- athom-scd40-sensor.yaml | 9 ++++++--- athom-sht40-sensor.yaml | 9 ++++++--- athom-smart-plug-v5.yaml | 6 ++++-- athom-smart-plug.yaml | 8 +++++--- athom-wall-outlet-v3.yaml | 29 +++++++++++++++++++++++++---- 16 files changed, 136 insertions(+), 38 deletions(-) diff --git a/athom-2ch-relay-board.yaml b/athom-2ch-relay-board.yaml index b795215..dc86125 100644 --- a/athom-2ch-relay-board.yaml +++ b/athom-2ch-relay-board.yaml @@ -4,7 +4,7 @@ substitutions: room: "" device_description: "athom esp32 2ch relay board" project_name: "Athom Technology.ESP32 2CH Relay Board" - project_version: "v2.0.7" + project_version: "v2.0.8" update_interval: 60s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -31,7 +31,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -156,6 +156,9 @@ binary_sensor: inverted: true name: "Power Button1" disabled_by_default: true + id: power_button1 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -174,6 +177,9 @@ binary_sensor: inverted: true name: "Power Button2" disabled_by_default: true + id: power_button2 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-4ch-relay-board.yaml b/athom-4ch-relay-board.yaml index 14892f5..e6f8959 100644 --- a/athom-4ch-relay-board.yaml +++ b/athom-4ch-relay-board.yaml @@ -4,7 +4,7 @@ substitutions: room: "" device_description: "athom esp32 4ch relay board" project_name: "Athom Technology.ESP32 4CH Relay Board" - project_version: "v2.0.7" + project_version: "v2.0.8" update_interval: 60s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -33,7 +33,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -157,6 +157,9 @@ binary_sensor: inverted: true name: "Power Button1" disabled_by_default: true + id: power_button1 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -175,6 +178,9 @@ binary_sensor: inverted: true name: "Power Button2" disabled_by_default: true + id: power_button2 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -193,6 +199,9 @@ binary_sensor: inverted: true name: "Power Button3" disabled_by_default: true + id: power_button3 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -211,6 +220,9 @@ binary_sensor: inverted: true name: "Power Button4" disabled_by_default: true + id: power_button4 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-8ch-relay-board.yaml b/athom-8ch-relay-board.yaml index 4f50ee1..cee3068 100644 --- a/athom-8ch-relay-board.yaml +++ b/athom-8ch-relay-board.yaml @@ -4,7 +4,7 @@ substitutions: room: "" device_description: "athom esp32 8ch relay board" project_name: "Athom Technology.ESP32 8CH Relay Board" - project_version: "v2.0.7" + project_version: "v2.0.8" update_interval: 60s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -37,7 +37,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -161,6 +161,9 @@ binary_sensor: inverted: true name: "Power Button1" disabled_by_default: true + id: power_button1 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -179,6 +182,9 @@ binary_sensor: inverted: true name: "Power Button2" disabled_by_default: true + id: power_button2 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -197,6 +203,9 @@ binary_sensor: inverted: true name: "Power Button3" disabled_by_default: true + id: power_button3 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -215,6 +224,9 @@ binary_sensor: inverted: true name: "Power Button4" disabled_by_default: true + id: power_button4 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -233,6 +245,9 @@ binary_sensor: inverted: true name: "Power Button5" disabled_by_default: true + id: power_button5 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -251,6 +266,9 @@ binary_sensor: inverted: true name: "Power Button6" disabled_by_default: true + id: power_button6 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -268,7 +286,10 @@ binary_sensor: input: true inverted: true name: "Power Button7" + id: power_button7 disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -287,6 +308,9 @@ binary_sensor: inverted: true name: "Power Button8" disabled_by_default: true + id: power_button8 + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-dual-smart-plug-v3.yaml b/athom-dual-smart-plug-v3.yaml index 081abb8..51e9d5f 100644 --- a/athom-dual-smart-plug-v3.yaml +++ b/athom-dual-smart-plug-v3.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: China Athom Technology.Athom Dual Plug V3 # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: v3.0.5 + project_version: v3.0.6 # Restore the relay (GPO switch) upon reboot to state: relay1_restore_mode: RESTORE_DEFAULT_ON relay2_restore_mode: RESTORE_DEFAULT_ON @@ -45,7 +45,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -239,6 +239,8 @@ binary_sensor: name: "Power Button1" id: power_button1 disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -268,6 +270,8 @@ binary_sensor: name: "Power Button2" id: power_button2 disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-energy-monitor-x2.yaml b/athom-energy-monitor-x2.yaml index c14a989..5677522 100644 --- a/athom-energy-monitor-x2.yaml +++ b/athom-energy-monitor-x2.yaml @@ -5,7 +5,7 @@ substitutions: room: "" device_description: "athom bl0906 energy meter (2 channels)" project_name: "China Athom Technology.Athom Energy Meter(2 Channels)" - project_version: "3.0.4" + project_version: "3.0.5" update_interval: 5s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -43,7 +43,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -202,6 +202,9 @@ binary_sensor: inverted: true name: "Power Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s diff --git a/athom-energy-monitor-x6.yaml b/athom-energy-monitor-x6.yaml index aa08f0b..8600769 100644 --- a/athom-energy-monitor-x6.yaml +++ b/athom-energy-monitor-x6.yaml @@ -5,7 +5,7 @@ substitutions: room: "" device_description: "athom bl0906 energy meter (6 channels)" project_name: "China Athom Technology.Athom Energy Meter(6 Channels)" - project_version: "3.0.5" + project_version: "3.0.6" update_interval: 5s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -55,7 +55,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -258,6 +258,9 @@ binary_sensor: inverted: true name: "Power Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s diff --git a/athom-garage-door.yaml b/athom-garage-door.yaml index 6cd1d58..ec7268f 100644 --- a/athom-garage-door.yaml +++ b/athom-garage-door.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Garage Door Opener" # Project version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v3.1.4" + project_version: "v3.1.5" # Status inverted status_inverted: "true" # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) @@ -37,7 +37,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2025.8.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -187,6 +187,8 @@ binary_sensor: inverted: true name: "Button" disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -271,7 +273,7 @@ text_sensor: id: device_last_restart icon: mdi:clock entity_category: diagnostic - device_class: timestamp + # device_class: timestamp time: - platform: sntp diff --git a/athom-ld2450-sensor.yaml b/athom-ld2450-sensor.yaml index f6e43e8..fcb0865 100644 --- a/athom-ld2450-sensor.yaml +++ b/athom-ld2450-sensor.yaml @@ -4,7 +4,7 @@ substitutions: room: "" device_description: "athom esp32c3 ld2450 motion target tracking sensor" project_name: "China Athom Technology.PS02C3MZ LD2450" - project_version: "v2.0.6" + project_version: "v2.0.7" update_interval: 60s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: "" @@ -29,7 +29,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2025.7.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -327,6 +327,8 @@ binary_sensor: inverted: true name: "Button" disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s diff --git a/athom-mini-relay-v2.yaml b/athom-mini-relay-v2.yaml index 35102f9..40838e4 100644 --- a/athom-mini-relay-v2.yaml +++ b/athom-mini-relay-v2.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Mini Relay V2" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v3.1.2" + project_version: "v3.1.3" # Restore the relay (GPO switch) upon reboot to state: light_restore_mode: RESTORE_DEFAULT_OFF # Set the update interval for sensors @@ -42,7 +42,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2025.8.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -177,6 +177,9 @@ binary_sensor: inverted: true name: "Power Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s @@ -197,6 +200,8 @@ binary_sensor: mode: INPUT_PULLUP on_state: - light.toggle: mini_relay + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 0.5s diff --git a/athom-presence-sensor-v3.yaml b/athom-presence-sensor-v3.yaml index 8f19da4..adb3366 100644 --- a/athom-presence-sensor-v3.yaml +++ b/athom-presence-sensor-v3.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "Athom Technology.Athom PS01C3 Presence Sensor" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v4.0.2" + project_version: "v4.0.3" # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" # Set timezone of the smart plug. Useful if the plug is in a location different to the HA server. Can be entered in unix Country/Area format (i.e. "Australia/Sydney") @@ -34,7 +34,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -180,6 +180,9 @@ binary_sensor: inverted: true name: "Button" disabled_by_default: true + id: button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s diff --git a/athom-rf-ir-remote.yaml b/athom-rf-ir-remote.yaml index 0060abc..9de8a29 100644 --- a/athom-rf-ir-remote.yaml +++ b/athom-rf-ir-remote.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Athom RF IR Remote" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v3.0.7" + project_version: "v3.0.8" # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" # Set timezone of the smart plug. Useful if the plug is in a location different to the HA server. Can be entered in unix Country/Area format (i.e. "Australia/Sydney") @@ -46,7 +46,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.5.1 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -305,6 +305,9 @@ binary_sensor: inverted: true name: "Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s diff --git a/athom-scd40-sensor.yaml b/athom-scd40-sensor.yaml index 6a912eb..7ba343f 100644 --- a/athom-scd40-sensor.yaml +++ b/athom-scd40-sensor.yaml @@ -5,7 +5,7 @@ substitutions: room: "" device_description: "athom scd40 CO₂ sensor" project_name: "China Athom Technology.CO₂ Sensor" - project_version: "1.0.10" + project_version: "1.0.11" update_interval: 5s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -37,7 +37,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -214,6 +214,9 @@ binary_sensor: inverted: true name: "Power Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s @@ -276,7 +279,7 @@ text_sensor: id: device_last_restart icon: mdi:clock entity_category: diagnostic - device_class: timestamp + # device_class: timestamp - platform: template name: "Air Quality Index" diff --git a/athom-sht40-sensor.yaml b/athom-sht40-sensor.yaml index 5b0d3cd..b42106d 100644 --- a/athom-sht40-sensor.yaml +++ b/athom-sht40-sensor.yaml @@ -5,7 +5,7 @@ substitutions: room: "" device_description: "athom sht40 temperature and humidity sensor" project_name: "China Athom Technology.Temperature Humidity Sensor" - project_version: "1.0.9" + project_version: "1.0.10" update_interval: 5s # Define a domain for this device to use. i.e. iot.home.lan (so device will appear as athom-smart-plug-v2.iot.home.lan in DNS/DHCP logs) dns_domain: ".local" @@ -39,7 +39,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -253,6 +253,9 @@ binary_sensor: inverted: true name: "Power Button" disabled_by_default: true + id: power_button + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at least 4s @@ -303,7 +306,7 @@ text_sensor: id: device_last_restart icon: mdi:clock entity_category: diagnostic - device_class: timestamp + # device_class: timestamp time: - platform: sntp diff --git a/athom-smart-plug-v5.yaml b/athom-smart-plug-v5.yaml index 159717d..5d5680a 100644 --- a/athom-smart-plug-v5.yaml +++ b/athom-smart-plug-v5.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Athom Plug V5" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v5.0.4" + project_version: "v5.0.5" # Restore the relay (GPO switch) upon reboot to state: relay_restore_mode: RESTORE_DEFAULT_ON # Set the update interval for sensors @@ -44,7 +44,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -204,6 +204,8 @@ binary_sensor: name: "Power Button" id: power_button disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-smart-plug.yaml b/athom-smart-plug.yaml index 2282083..80853f4 100644 --- a/athom-smart-plug.yaml +++ b/athom-smart-plug.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Athom Plug V3" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v2.0.7" + project_version: "v2.0.8" # Restore the relay (GPO switch) upon reboot to state: relay_restore_mode: RESTORE_DEFAULT_ON # Set the update interval for sensors @@ -30,7 +30,7 @@ substitutions: # Enables faster network connections, with last connected SSID being connected to and no full scan for SSID being undertaken wifi_fast_connect: "false" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE - log_level: "INFO" + log_level: "DEBUG" # Hide the ENERGY sensor that shows kWh consumed, but with no time period associated with it. Resets when device restarted and reflashed. hide_energy_sensor: "true" # Enable or disable the use of IPv6 networking on the device @@ -46,7 +46,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -229,6 +229,8 @@ binary_sensor: name: "Power Button" id: power_button disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s diff --git a/athom-wall-outlet-v3.yaml b/athom-wall-outlet-v3.yaml index 2d74af7..7abcc0e 100644 --- a/athom-wall-outlet-v3.yaml +++ b/athom-wall-outlet-v3.yaml @@ -10,7 +10,7 @@ substitutions: # Project Name project_name: "China Athom Technology.Athom Wall Outlet V3" # Projection version denotes the release version of the yaml file, allowing checking of deployed vs latest version - project_version: "v3.0.3" + project_version: "v3.0.4" # Restore the relay (GPO switch) upon reboot to state: relay_restore_mode: RESTORE_DEFAULT_OFF # Set the update interval for sensors @@ -46,7 +46,7 @@ esphome: comment: "${device_description}" area: "${room}" name_add_mac_suffix: true - min_version: 2026.6.0 + min_version: 2026.8.0 project: name: "${project_name}" version: "${project_version}" @@ -226,16 +226,28 @@ binary_sensor: name: "Power Button" id: power_button disabled_by_default: true + filters: + - delayed_on_off: 20ms on_multi_click: - timing: - ON for at most 1s - OFF for at least 0.2s then: - - switch.toggle: relay + # Ignore short press when child lock is on, to stop kids toggling the socket + - if: + condition: + switch.is_off: child_lock + then: + - switch.toggle: relay - timing: - ON for at least 4s then: - - button.press: Reset + # Ignore long press when child lock is on, to prevent accidental factory reset + - if: + condition: + switch.is_off: child_lock + then: + - button.press: Reset sensor: - platform: uptime @@ -372,6 +384,15 @@ switch: on_turn_off: - light.turn_off: red_led + # Child lock: when on, ignore physical button short/long press, but keep remote (HA/web) control working + - platform: template + name: "Child Lock" + id: child_lock + icon: mdi:lock + optimistic: true + restore_mode: RESTORE_DEFAULT_OFF # Keep last state after power loss/reboot, default off on first boot + entity_category: config + light: - platform: status_led name: "Status LED"