Add button debounce

This commit is contained in:
Aiden
2026-09-02 19:59:22 +08:00
parent c0c408f05a
commit 8408d37763
16 changed files with 136 additions and 38 deletions
+8 -2
View File
@@ -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
+14 -2
View File
@@ -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
+26 -2
View File
@@ -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
+6 -2
View File
@@ -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
+5 -2
View File
@@ -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
+5 -2
View File
@@ -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
+5 -3
View File
@@ -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
+4 -2
View File
@@ -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
+7 -2
View File
@@ -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
+5 -2
View File
@@ -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
+5 -2
View File
@@ -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
+6 -3
View File
@@ -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"
+6 -3
View File
@@ -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
+4 -2
View File
@@ -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
+5 -3
View File
@@ -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
+25 -4
View File
@@ -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"