diff --git a/.cache/brands/integrations/alexa_media/dark_icon.png b/.cache/brands/integrations/alexa_media/dark_icon.png new file mode 100644 index 0000000..605cdf6 Binary files /dev/null and b/.cache/brands/integrations/alexa_media/dark_icon.png differ diff --git a/.cache/brands/integrations/alexa_media/icon.png b/.cache/brands/integrations/alexa_media/icon.png new file mode 100644 index 0000000..605cdf6 Binary files /dev/null and b/.cache/brands/integrations/alexa_media/icon.png differ diff --git a/.cache/brands/integrations/androidtv_remote/dark_icon.png b/.cache/brands/integrations/androidtv_remote/dark_icon.png new file mode 100644 index 0000000..404a84d Binary files /dev/null and b/.cache/brands/integrations/androidtv_remote/dark_icon.png differ diff --git a/.cache/brands/integrations/androidtv_remote/icon.png b/.cache/brands/integrations/androidtv_remote/icon.png new file mode 100644 index 0000000..404a84d Binary files /dev/null and b/.cache/brands/integrations/androidtv_remote/icon.png differ diff --git a/.cache/brands/integrations/anniversary/dark_icon.png b/.cache/brands/integrations/anniversary/dark_icon.png new file mode 100644 index 0000000..9a90fee Binary files /dev/null and b/.cache/brands/integrations/anniversary/dark_icon.png differ diff --git a/.cache/brands/integrations/anniversary/icon.png b/.cache/brands/integrations/anniversary/icon.png new file mode 100644 index 0000000..9a90fee Binary files /dev/null and b/.cache/brands/integrations/anniversary/icon.png differ diff --git a/.cache/brands/integrations/astroweather/dark_icon.png b/.cache/brands/integrations/astroweather/dark_icon.png new file mode 100644 index 0000000..33f5493 Binary files /dev/null and b/.cache/brands/integrations/astroweather/dark_icon.png differ diff --git a/.cache/brands/integrations/astroweather/icon.png b/.cache/brands/integrations/astroweather/icon.png new file mode 100644 index 0000000..478ea3c Binary files /dev/null and b/.cache/brands/integrations/astroweather/icon.png differ diff --git a/.cache/brands/integrations/automation/dark_icon.png b/.cache/brands/integrations/automation/dark_icon.png new file mode 100644 index 0000000..6ae1679 Binary files /dev/null and b/.cache/brands/integrations/automation/dark_icon.png differ diff --git a/.cache/brands/integrations/automation/icon.png b/.cache/brands/integrations/automation/icon.png new file mode 100644 index 0000000..6ae1679 Binary files /dev/null and b/.cache/brands/integrations/automation/icon.png differ diff --git a/.cache/brands/integrations/backup/dark_icon.png b/.cache/brands/integrations/backup/dark_icon.png new file mode 100644 index 0000000..a60580f Binary files /dev/null and b/.cache/brands/integrations/backup/dark_icon.png differ diff --git a/.cache/brands/integrations/backup/icon.png b/.cache/brands/integrations/backup/icon.png new file mode 100644 index 0000000..a60580f Binary files /dev/null and b/.cache/brands/integrations/backup/icon.png differ diff --git a/.cache/brands/integrations/bermuda/dark_icon.png b/.cache/brands/integrations/bermuda/dark_icon.png new file mode 100644 index 0000000..5b49bdd Binary files /dev/null and b/.cache/brands/integrations/bermuda/dark_icon.png differ diff --git a/.cache/brands/integrations/bermuda/icon.png b/.cache/brands/integrations/bermuda/icon.png new file mode 100644 index 0000000..6a0d307 Binary files /dev/null and b/.cache/brands/integrations/bermuda/icon.png differ diff --git a/.cache/brands/integrations/bluetooth/dark_icon.png b/.cache/brands/integrations/bluetooth/dark_icon.png new file mode 100644 index 0000000..4ee2e08 Binary files /dev/null and b/.cache/brands/integrations/bluetooth/dark_icon.png differ diff --git a/.cache/brands/integrations/bluetooth/icon.png b/.cache/brands/integrations/bluetooth/icon.png new file mode 100644 index 0000000..4ee2e08 Binary files /dev/null and b/.cache/brands/integrations/bluetooth/icon.png differ diff --git a/.cache/brands/integrations/braviatv/dark_icon.png b/.cache/brands/integrations/braviatv/dark_icon.png new file mode 100644 index 0000000..761420a Binary files /dev/null and b/.cache/brands/integrations/braviatv/dark_icon.png differ diff --git a/.cache/brands/integrations/braviatv/icon.png b/.cache/brands/integrations/braviatv/icon.png new file mode 100644 index 0000000..65b8ed2 Binary files /dev/null and b/.cache/brands/integrations/braviatv/icon.png differ diff --git a/.cache/brands/integrations/brother/dark_icon.png b/.cache/brands/integrations/brother/dark_icon.png new file mode 100644 index 0000000..a4d6b0d Binary files /dev/null and b/.cache/brands/integrations/brother/dark_icon.png differ diff --git a/.cache/brands/integrations/brother/icon.png b/.cache/brands/integrations/brother/icon.png new file mode 100644 index 0000000..a4d6b0d Binary files /dev/null and b/.cache/brands/integrations/brother/icon.png differ diff --git a/.cache/brands/integrations/browser_mod/dark_icon.png b/.cache/brands/integrations/browser_mod/dark_icon.png new file mode 100644 index 0000000..217b78d Binary files /dev/null and b/.cache/brands/integrations/browser_mod/dark_icon.png differ diff --git a/.cache/brands/integrations/browser_mod/icon.png b/.cache/brands/integrations/browser_mod/icon.png new file mode 100644 index 0000000..68e6671 Binary files /dev/null and b/.cache/brands/integrations/browser_mod/icon.png differ diff --git a/.cache/brands/integrations/cast/dark_icon.png b/.cache/brands/integrations/cast/dark_icon.png new file mode 100644 index 0000000..94267f3 Binary files /dev/null and b/.cache/brands/integrations/cast/dark_icon.png differ diff --git a/.cache/brands/integrations/cast/icon.png b/.cache/brands/integrations/cast/icon.png new file mode 100644 index 0000000..5511996 Binary files /dev/null and b/.cache/brands/integrations/cast/icon.png differ diff --git a/.cache/brands/integrations/counter/icon.png b/.cache/brands/integrations/counter/icon.png new file mode 100644 index 0000000..7c11604 Binary files /dev/null and b/.cache/brands/integrations/counter/icon.png differ diff --git a/.cache/brands/integrations/derivative/icon.png b/.cache/brands/integrations/derivative/icon.png new file mode 100644 index 0000000..a75e302 Binary files /dev/null and b/.cache/brands/integrations/derivative/icon.png differ diff --git a/.cache/brands/integrations/dlna_dmr/dark_icon.png b/.cache/brands/integrations/dlna_dmr/dark_icon.png new file mode 100644 index 0000000..763d242 Binary files /dev/null and b/.cache/brands/integrations/dlna_dmr/dark_icon.png differ diff --git a/.cache/brands/integrations/dlna_dmr/icon.png b/.cache/brands/integrations/dlna_dmr/icon.png new file mode 100644 index 0000000..763d242 Binary files /dev/null and b/.cache/brands/integrations/dlna_dmr/icon.png differ diff --git a/.cache/brands/integrations/dlna_dms/dark_icon.png b/.cache/brands/integrations/dlna_dms/dark_icon.png new file mode 100644 index 0000000..763d242 Binary files /dev/null and b/.cache/brands/integrations/dlna_dms/dark_icon.png differ diff --git a/.cache/brands/integrations/dlna_dms/icon.png b/.cache/brands/integrations/dlna_dms/icon.png new file mode 100644 index 0000000..763d242 Binary files /dev/null and b/.cache/brands/integrations/dlna_dms/icon.png differ diff --git a/.cache/brands/integrations/edgeos/dark_icon.png b/.cache/brands/integrations/edgeos/dark_icon.png new file mode 100644 index 0000000..58c4c81 Binary files /dev/null and b/.cache/brands/integrations/edgeos/dark_icon.png differ diff --git a/.cache/brands/integrations/edgeos/icon.png b/.cache/brands/integrations/edgeos/icon.png new file mode 100644 index 0000000..787ea81 Binary files /dev/null and b/.cache/brands/integrations/edgeos/icon.png differ diff --git a/.cache/brands/integrations/esphome/dark_icon.png b/.cache/brands/integrations/esphome/dark_icon.png new file mode 100644 index 0000000..0a4a375 Binary files /dev/null and b/.cache/brands/integrations/esphome/dark_icon.png differ diff --git a/.cache/brands/integrations/esphome/dark_logo.png b/.cache/brands/integrations/esphome/dark_logo.png new file mode 100644 index 0000000..132987f Binary files /dev/null and b/.cache/brands/integrations/esphome/dark_logo.png differ diff --git a/.cache/brands/integrations/esphome/icon.png b/.cache/brands/integrations/esphome/icon.png new file mode 100644 index 0000000..0a4a375 Binary files /dev/null and b/.cache/brands/integrations/esphome/icon.png differ diff --git a/.cache/brands/integrations/esphome/logo.png b/.cache/brands/integrations/esphome/logo.png new file mode 100644 index 0000000..20e2451 Binary files /dev/null and b/.cache/brands/integrations/esphome/logo.png differ diff --git a/.cache/brands/integrations/filter/icon.png b/.cache/brands/integrations/filter/icon.png new file mode 100644 index 0000000..c6fc4c4 Binary files /dev/null and b/.cache/brands/integrations/filter/icon.png differ diff --git a/.cache/brands/integrations/fully_kiosk/dark_icon.png b/.cache/brands/integrations/fully_kiosk/dark_icon.png new file mode 100644 index 0000000..48cbd76 Binary files /dev/null and b/.cache/brands/integrations/fully_kiosk/dark_icon.png differ diff --git a/.cache/brands/integrations/fully_kiosk/icon.png b/.cache/brands/integrations/fully_kiosk/icon.png new file mode 100644 index 0000000..48cbd76 Binary files /dev/null and b/.cache/brands/integrations/fully_kiosk/icon.png differ diff --git a/.cache/brands/integrations/ge_home/dark_icon.png b/.cache/brands/integrations/ge_home/dark_icon.png new file mode 100644 index 0000000..8e25e7a Binary files /dev/null and b/.cache/brands/integrations/ge_home/dark_icon.png differ diff --git a/.cache/brands/integrations/ge_home/icon.png b/.cache/brands/integrations/ge_home/icon.png new file mode 100644 index 0000000..da0496e Binary files /dev/null and b/.cache/brands/integrations/ge_home/icon.png differ diff --git a/.cache/brands/integrations/generic_hygrostat/icon.png b/.cache/brands/integrations/generic_hygrostat/icon.png new file mode 100644 index 0000000..2742c79 Binary files /dev/null and b/.cache/brands/integrations/generic_hygrostat/icon.png differ diff --git a/.cache/brands/integrations/generic_thermostat/icon.png b/.cache/brands/integrations/generic_thermostat/icon.png new file mode 100644 index 0000000..b754e3c Binary files /dev/null and b/.cache/brands/integrations/generic_thermostat/icon.png differ diff --git a/.cache/brands/integrations/google/dark_icon.png b/.cache/brands/integrations/google/dark_icon.png new file mode 100644 index 0000000..563b6c2 Binary files /dev/null and b/.cache/brands/integrations/google/dark_icon.png differ diff --git a/.cache/brands/integrations/google/icon.png b/.cache/brands/integrations/google/icon.png new file mode 100644 index 0000000..563b6c2 Binary files /dev/null and b/.cache/brands/integrations/google/icon.png differ diff --git a/.cache/brands/integrations/group/dark_icon.png b/.cache/brands/integrations/group/dark_icon.png new file mode 100644 index 0000000..e33c8aa Binary files /dev/null and b/.cache/brands/integrations/group/dark_icon.png differ diff --git a/.cache/brands/integrations/group/icon.png b/.cache/brands/integrations/group/icon.png new file mode 100644 index 0000000..e33c8aa Binary files /dev/null and b/.cache/brands/integrations/group/icon.png differ diff --git a/.cache/brands/integrations/hacs/dark_icon.png b/.cache/brands/integrations/hacs/dark_icon.png new file mode 100644 index 0000000..cffa310 Binary files /dev/null and b/.cache/brands/integrations/hacs/dark_icon.png differ diff --git a/.cache/brands/integrations/hacs/icon.png b/.cache/brands/integrations/hacs/icon.png new file mode 100644 index 0000000..cffa310 Binary files /dev/null and b/.cache/brands/integrations/hacs/icon.png differ diff --git a/.cache/brands/integrations/hassio/dark_icon.png b/.cache/brands/integrations/hassio/dark_icon.png new file mode 100644 index 0000000..39f0c14 Binary files /dev/null and b/.cache/brands/integrations/hassio/dark_icon.png differ diff --git a/.cache/brands/integrations/hassio/icon.png b/.cache/brands/integrations/hassio/icon.png new file mode 100644 index 0000000..39f0c14 Binary files /dev/null and b/.cache/brands/integrations/hassio/icon.png differ diff --git a/.cache/brands/integrations/history_stats/icon.png b/.cache/brands/integrations/history_stats/icon.png new file mode 100644 index 0000000..09fe90f Binary files /dev/null and b/.cache/brands/integrations/history_stats/icon.png differ diff --git a/.cache/brands/integrations/homeassistant/icon.png b/.cache/brands/integrations/homeassistant/icon.png new file mode 100644 index 0000000..39f0c14 Binary files /dev/null and b/.cache/brands/integrations/homeassistant/icon.png differ diff --git a/.cache/brands/integrations/homekit_controller/dark_icon.png b/.cache/brands/integrations/homekit_controller/dark_icon.png new file mode 100644 index 0000000..defa5d0 Binary files /dev/null and b/.cache/brands/integrations/homekit_controller/dark_icon.png differ diff --git a/.cache/brands/integrations/homekit_controller/icon.png b/.cache/brands/integrations/homekit_controller/icon.png new file mode 100644 index 0000000..defa5d0 Binary files /dev/null and b/.cache/brands/integrations/homekit_controller/icon.png differ diff --git a/.cache/brands/integrations/ibeacon/dark_icon.png b/.cache/brands/integrations/ibeacon/dark_icon.png new file mode 100644 index 0000000..122d061 Binary files /dev/null and b/.cache/brands/integrations/ibeacon/dark_icon.png differ diff --git a/.cache/brands/integrations/ibeacon/icon.png b/.cache/brands/integrations/ibeacon/icon.png new file mode 100644 index 0000000..122d061 Binary files /dev/null and b/.cache/brands/integrations/ibeacon/icon.png differ diff --git a/.cache/brands/integrations/input_boolean/icon.png b/.cache/brands/integrations/input_boolean/icon.png new file mode 100644 index 0000000..17b61b1 Binary files /dev/null and b/.cache/brands/integrations/input_boolean/icon.png differ diff --git a/.cache/brands/integrations/input_button/icon.png b/.cache/brands/integrations/input_button/icon.png new file mode 100644 index 0000000..4e4db4f Binary files /dev/null and b/.cache/brands/integrations/input_button/icon.png differ diff --git a/.cache/brands/integrations/input_datetime/icon.png b/.cache/brands/integrations/input_datetime/icon.png new file mode 100644 index 0000000..f7fd095 Binary files /dev/null and b/.cache/brands/integrations/input_datetime/icon.png differ diff --git a/.cache/brands/integrations/input_number/icon.png b/.cache/brands/integrations/input_number/icon.png new file mode 100644 index 0000000..2db7955 Binary files /dev/null and b/.cache/brands/integrations/input_number/icon.png differ diff --git a/.cache/brands/integrations/input_select/icon.png b/.cache/brands/integrations/input_select/icon.png new file mode 100644 index 0000000..4e08362 Binary files /dev/null and b/.cache/brands/integrations/input_select/icon.png differ diff --git a/.cache/brands/integrations/input_text/icon.png b/.cache/brands/integrations/input_text/icon.png new file mode 100644 index 0000000..20c8c66 Binary files /dev/null and b/.cache/brands/integrations/input_text/icon.png differ diff --git a/.cache/brands/integrations/integration/icon.png b/.cache/brands/integrations/integration/icon.png new file mode 100644 index 0000000..8b36986 Binary files /dev/null and b/.cache/brands/integrations/integration/icon.png differ diff --git a/.cache/brands/integrations/ipp/dark_icon.png b/.cache/brands/integrations/ipp/dark_icon.png new file mode 100644 index 0000000..27877b6 Binary files /dev/null and b/.cache/brands/integrations/ipp/dark_icon.png differ diff --git a/.cache/brands/integrations/ipp/icon.png b/.cache/brands/integrations/ipp/icon.png new file mode 100644 index 0000000..27877b6 Binary files /dev/null and b/.cache/brands/integrations/ipp/icon.png differ diff --git a/.cache/brands/integrations/matter/dark_icon.png b/.cache/brands/integrations/matter/dark_icon.png new file mode 100644 index 0000000..076d084 Binary files /dev/null and b/.cache/brands/integrations/matter/dark_icon.png differ diff --git a/.cache/brands/integrations/matter/icon.png b/.cache/brands/integrations/matter/icon.png new file mode 100644 index 0000000..d6b0431 Binary files /dev/null and b/.cache/brands/integrations/matter/icon.png differ diff --git a/.cache/brands/integrations/min_max/icon.png b/.cache/brands/integrations/min_max/icon.png new file mode 100644 index 0000000..563aa6e Binary files /dev/null and b/.cache/brands/integrations/min_max/icon.png differ diff --git a/.cache/brands/integrations/mjpeg/dark_icon.png b/.cache/brands/integrations/mjpeg/dark_icon.png new file mode 100644 index 0000000..69a2a57 Binary files /dev/null and b/.cache/brands/integrations/mjpeg/dark_icon.png differ diff --git a/.cache/brands/integrations/mjpeg/icon.png b/.cache/brands/integrations/mjpeg/icon.png new file mode 100644 index 0000000..69a2a57 Binary files /dev/null and b/.cache/brands/integrations/mjpeg/icon.png differ diff --git a/.cache/brands/integrations/mobile_app/dark_icon.png b/.cache/brands/integrations/mobile_app/dark_icon.png new file mode 100644 index 0000000..b7f2991 Binary files /dev/null and b/.cache/brands/integrations/mobile_app/dark_icon.png differ diff --git a/.cache/brands/integrations/mobile_app/icon.png b/.cache/brands/integrations/mobile_app/icon.png new file mode 100644 index 0000000..b7f2991 Binary files /dev/null and b/.cache/brands/integrations/mobile_app/icon.png differ diff --git a/.cache/brands/integrations/mold_indicator/icon.png b/.cache/brands/integrations/mold_indicator/icon.png new file mode 100644 index 0000000..1422aee Binary files /dev/null and b/.cache/brands/integrations/mold_indicator/icon.png differ diff --git a/.cache/brands/integrations/moon/dark_icon.png b/.cache/brands/integrations/moon/dark_icon.png new file mode 100644 index 0000000..ee1a490 Binary files /dev/null and b/.cache/brands/integrations/moon/dark_icon.png differ diff --git a/.cache/brands/integrations/moon/icon.png b/.cache/brands/integrations/moon/icon.png new file mode 100644 index 0000000..ee1a490 Binary files /dev/null and b/.cache/brands/integrations/moon/icon.png differ diff --git a/.cache/brands/integrations/motioneye/dark_icon.png b/.cache/brands/integrations/motioneye/dark_icon.png new file mode 100644 index 0000000..3a74676 Binary files /dev/null and b/.cache/brands/integrations/motioneye/dark_icon.png differ diff --git a/.cache/brands/integrations/motioneye/icon.png b/.cache/brands/integrations/motioneye/icon.png new file mode 100644 index 0000000..3a74676 Binary files /dev/null and b/.cache/brands/integrations/motioneye/icon.png differ diff --git a/.cache/brands/integrations/mpd/dark_icon.png b/.cache/brands/integrations/mpd/dark_icon.png new file mode 100644 index 0000000..f01afa4 Binary files /dev/null and b/.cache/brands/integrations/mpd/dark_icon.png differ diff --git a/.cache/brands/integrations/mpd/icon.png b/.cache/brands/integrations/mpd/icon.png new file mode 100644 index 0000000..f01afa4 Binary files /dev/null and b/.cache/brands/integrations/mpd/icon.png differ diff --git a/.cache/brands/integrations/mqtt/dark_icon.png b/.cache/brands/integrations/mqtt/dark_icon.png new file mode 100644 index 0000000..fcc1ce2 Binary files /dev/null and b/.cache/brands/integrations/mqtt/dark_icon.png differ diff --git a/.cache/brands/integrations/mqtt/icon.png b/.cache/brands/integrations/mqtt/icon.png new file mode 100644 index 0000000..fcc1ce2 Binary files /dev/null and b/.cache/brands/integrations/mqtt/icon.png differ diff --git a/.cache/brands/integrations/music_assistant/dark_icon.png b/.cache/brands/integrations/music_assistant/dark_icon.png new file mode 100644 index 0000000..faed5ed Binary files /dev/null and b/.cache/brands/integrations/music_assistant/dark_icon.png differ diff --git a/.cache/brands/integrations/music_assistant/icon.png b/.cache/brands/integrations/music_assistant/icon.png new file mode 100644 index 0000000..faed5ed Binary files /dev/null and b/.cache/brands/integrations/music_assistant/icon.png differ diff --git a/.cache/brands/integrations/nfandroidtv/dark_icon.png b/.cache/brands/integrations/nfandroidtv/dark_icon.png new file mode 100644 index 0000000..ea02ed5 Binary files /dev/null and b/.cache/brands/integrations/nfandroidtv/dark_icon.png differ diff --git a/.cache/brands/integrations/nfandroidtv/icon.png b/.cache/brands/integrations/nfandroidtv/icon.png new file mode 100644 index 0000000..ea02ed5 Binary files /dev/null and b/.cache/brands/integrations/nfandroidtv/icon.png differ diff --git a/.cache/brands/integrations/niwa_tides/dark_icon.png b/.cache/brands/integrations/niwa_tides/dark_icon.png new file mode 100644 index 0000000..d532268 Binary files /dev/null and b/.cache/brands/integrations/niwa_tides/dark_icon.png differ diff --git a/.cache/brands/integrations/niwa_tides/icon.png b/.cache/brands/integrations/niwa_tides/icon.png new file mode 100644 index 0000000..d532268 Binary files /dev/null and b/.cache/brands/integrations/niwa_tides/icon.png differ diff --git a/.cache/brands/integrations/nodered/dark_icon.png b/.cache/brands/integrations/nodered/dark_icon.png new file mode 100644 index 0000000..93eaf1a Binary files /dev/null and b/.cache/brands/integrations/nodered/dark_icon.png differ diff --git a/.cache/brands/integrations/nodered/icon.png b/.cache/brands/integrations/nodered/icon.png new file mode 100644 index 0000000..93eaf1a Binary files /dev/null and b/.cache/brands/integrations/nodered/icon.png differ diff --git a/.cache/brands/integrations/nut/dark_icon.png b/.cache/brands/integrations/nut/dark_icon.png new file mode 100644 index 0000000..ec2ab02 Binary files /dev/null and b/.cache/brands/integrations/nut/dark_icon.png differ diff --git a/.cache/brands/integrations/nut/icon.png b/.cache/brands/integrations/nut/icon.png new file mode 100644 index 0000000..ec2ab02 Binary files /dev/null and b/.cache/brands/integrations/nut/icon.png differ diff --git a/.cache/brands/integrations/nzbget/dark_icon.png b/.cache/brands/integrations/nzbget/dark_icon.png new file mode 100644 index 0000000..75733bd Binary files /dev/null and b/.cache/brands/integrations/nzbget/dark_icon.png differ diff --git a/.cache/brands/integrations/nzbget/icon.png b/.cache/brands/integrations/nzbget/icon.png new file mode 100644 index 0000000..75733bd Binary files /dev/null and b/.cache/brands/integrations/nzbget/icon.png differ diff --git a/.cache/brands/integrations/openmediavault/dark_icon.png b/.cache/brands/integrations/openmediavault/dark_icon.png new file mode 100644 index 0000000..45dad3e Binary files /dev/null and b/.cache/brands/integrations/openmediavault/dark_icon.png differ diff --git a/.cache/brands/integrations/openmediavault/icon.png b/.cache/brands/integrations/openmediavault/icon.png new file mode 100644 index 0000000..45dad3e Binary files /dev/null and b/.cache/brands/integrations/openmediavault/icon.png differ diff --git a/.cache/brands/integrations/oralb/dark_icon.png b/.cache/brands/integrations/oralb/dark_icon.png new file mode 100644 index 0000000..076b977 Binary files /dev/null and b/.cache/brands/integrations/oralb/dark_icon.png differ diff --git a/.cache/brands/integrations/oralb/icon.png b/.cache/brands/integrations/oralb/icon.png new file mode 100644 index 0000000..076b977 Binary files /dev/null and b/.cache/brands/integrations/oralb/icon.png differ diff --git a/.cache/brands/integrations/panasonic_cc/dark_icon.png b/.cache/brands/integrations/panasonic_cc/dark_icon.png new file mode 100644 index 0000000..0113c8f Binary files /dev/null and b/.cache/brands/integrations/panasonic_cc/dark_icon.png differ diff --git a/.cache/brands/integrations/panasonic_cc/icon.png b/.cache/brands/integrations/panasonic_cc/icon.png new file mode 100644 index 0000000..0113c8f Binary files /dev/null and b/.cache/brands/integrations/panasonic_cc/icon.png differ diff --git a/.cache/brands/integrations/plex/dark_icon.png b/.cache/brands/integrations/plex/dark_icon.png new file mode 100644 index 0000000..46a4ff6 Binary files /dev/null and b/.cache/brands/integrations/plex/dark_icon.png differ diff --git a/.cache/brands/integrations/plex/icon.png b/.cache/brands/integrations/plex/icon.png new file mode 100644 index 0000000..46a4ff6 Binary files /dev/null and b/.cache/brands/integrations/plex/icon.png differ diff --git a/.cache/brands/integrations/pushover/dark_icon.png b/.cache/brands/integrations/pushover/dark_icon.png new file mode 100644 index 0000000..1edf19a Binary files /dev/null and b/.cache/brands/integrations/pushover/dark_icon.png differ diff --git a/.cache/brands/integrations/pushover/icon.png b/.cache/brands/integrations/pushover/icon.png new file mode 100644 index 0000000..1edf19a Binary files /dev/null and b/.cache/brands/integrations/pushover/icon.png differ diff --git a/.cache/brands/integrations/random/icon.png b/.cache/brands/integrations/random/icon.png new file mode 100644 index 0000000..8cd37be Binary files /dev/null and b/.cache/brands/integrations/random/icon.png differ diff --git a/.cache/brands/integrations/reolink/dark_icon.png b/.cache/brands/integrations/reolink/dark_icon.png new file mode 100644 index 0000000..0c9ac17 Binary files /dev/null and b/.cache/brands/integrations/reolink/dark_icon.png differ diff --git a/.cache/brands/integrations/reolink/dark_icon@2x.png b/.cache/brands/integrations/reolink/dark_icon@2x.png new file mode 100644 index 0000000..162b297 Binary files /dev/null and b/.cache/brands/integrations/reolink/dark_icon@2x.png differ diff --git a/.cache/brands/integrations/rest/dark_icon.png b/.cache/brands/integrations/rest/dark_icon.png new file mode 100644 index 0000000..deecdb8 Binary files /dev/null and b/.cache/brands/integrations/rest/dark_icon.png differ diff --git a/.cache/brands/integrations/rest/icon.png b/.cache/brands/integrations/rest/icon.png new file mode 100644 index 0000000..deecdb8 Binary files /dev/null and b/.cache/brands/integrations/rest/icon.png differ diff --git a/.cache/brands/integrations/rest_command/dark_icon.png b/.cache/brands/integrations/rest_command/dark_icon.png new file mode 100644 index 0000000..deecdb8 Binary files /dev/null and b/.cache/brands/integrations/rest_command/dark_icon.png differ diff --git a/.cache/brands/integrations/rest_command/icon.png b/.cache/brands/integrations/rest_command/icon.png new file mode 100644 index 0000000..deecdb8 Binary files /dev/null and b/.cache/brands/integrations/rest_command/icon.png differ diff --git a/.cache/brands/integrations/ring/dark_icon.png b/.cache/brands/integrations/ring/dark_icon.png new file mode 100644 index 0000000..66c61b1 Binary files /dev/null and b/.cache/brands/integrations/ring/dark_icon.png differ diff --git a/.cache/brands/integrations/ring/icon.png b/.cache/brands/integrations/ring/icon.png new file mode 100644 index 0000000..66c61b1 Binary files /dev/null and b/.cache/brands/integrations/ring/icon.png differ diff --git a/.cache/brands/integrations/schedule/icon.png b/.cache/brands/integrations/schedule/icon.png new file mode 100644 index 0000000..944b8a4 Binary files /dev/null and b/.cache/brands/integrations/schedule/icon.png differ diff --git a/.cache/brands/integrations/smlight/dark_icon.png b/.cache/brands/integrations/smlight/dark_icon.png new file mode 100644 index 0000000..51ee945 Binary files /dev/null and b/.cache/brands/integrations/smlight/dark_icon.png differ diff --git a/.cache/brands/integrations/smlight/icon.png b/.cache/brands/integrations/smlight/icon.png new file mode 100644 index 0000000..51ee945 Binary files /dev/null and b/.cache/brands/integrations/smlight/icon.png differ diff --git a/.cache/brands/integrations/spook/dark_icon.png b/.cache/brands/integrations/spook/dark_icon.png new file mode 100644 index 0000000..3f3193d Binary files /dev/null and b/.cache/brands/integrations/spook/dark_icon.png differ diff --git a/.cache/brands/integrations/spook/icon.png b/.cache/brands/integrations/spook/icon.png new file mode 100644 index 0000000..3f3193d Binary files /dev/null and b/.cache/brands/integrations/spook/icon.png differ diff --git a/.cache/brands/integrations/spook_inverse/icon.png b/.cache/brands/integrations/spook_inverse/icon.png new file mode 100644 index 0000000..aaca720 Binary files /dev/null and b/.cache/brands/integrations/spook_inverse/icon.png differ diff --git a/.cache/brands/integrations/statistics/icon.png b/.cache/brands/integrations/statistics/icon.png new file mode 100644 index 0000000..e2d54f3 Binary files /dev/null and b/.cache/brands/integrations/statistics/icon.png differ diff --git a/.cache/brands/integrations/sun/dark_icon.png b/.cache/brands/integrations/sun/dark_icon.png new file mode 100644 index 0000000..06ff4cb Binary files /dev/null and b/.cache/brands/integrations/sun/dark_icon.png differ diff --git a/.cache/brands/integrations/sun/icon.png b/.cache/brands/integrations/sun/icon.png new file mode 100644 index 0000000..06ff4cb Binary files /dev/null and b/.cache/brands/integrations/sun/icon.png differ diff --git a/.cache/brands/integrations/switch_as_x/icon.png b/.cache/brands/integrations/switch_as_x/icon.png new file mode 100644 index 0000000..3fdddb7 Binary files /dev/null and b/.cache/brands/integrations/switch_as_x/icon.png differ diff --git a/.cache/brands/integrations/systemmonitor/dark_icon.png b/.cache/brands/integrations/systemmonitor/dark_icon.png new file mode 100644 index 0000000..34a3524 Binary files /dev/null and b/.cache/brands/integrations/systemmonitor/dark_icon.png differ diff --git a/.cache/brands/integrations/systemmonitor/icon.png b/.cache/brands/integrations/systemmonitor/icon.png new file mode 100644 index 0000000..34a3524 Binary files /dev/null and b/.cache/brands/integrations/systemmonitor/icon.png differ diff --git a/.cache/brands/integrations/tasmota/dark_icon.png b/.cache/brands/integrations/tasmota/dark_icon.png new file mode 100644 index 0000000..4f6c3e6 Binary files /dev/null and b/.cache/brands/integrations/tasmota/dark_icon.png differ diff --git a/.cache/brands/integrations/tasmota/icon.png b/.cache/brands/integrations/tasmota/icon.png new file mode 100644 index 0000000..52c3303 Binary files /dev/null and b/.cache/brands/integrations/tasmota/icon.png differ diff --git a/.cache/brands/integrations/tautulli/dark_icon.png b/.cache/brands/integrations/tautulli/dark_icon.png new file mode 100644 index 0000000..930ec32 Binary files /dev/null and b/.cache/brands/integrations/tautulli/dark_icon.png differ diff --git a/.cache/brands/integrations/tautulli/icon.png b/.cache/brands/integrations/tautulli/icon.png new file mode 100644 index 0000000..203133f Binary files /dev/null and b/.cache/brands/integrations/tautulli/icon.png differ diff --git a/.cache/brands/integrations/template/icon.png b/.cache/brands/integrations/template/icon.png new file mode 100644 index 0000000..2c5bc81 Binary files /dev/null and b/.cache/brands/integrations/template/icon.png differ diff --git a/.cache/brands/integrations/thread/dark_icon.png b/.cache/brands/integrations/thread/dark_icon.png new file mode 100644 index 0000000..6c2cbe2 Binary files /dev/null and b/.cache/brands/integrations/thread/dark_icon.png differ diff --git a/.cache/brands/integrations/thread/icon.png b/.cache/brands/integrations/thread/icon.png new file mode 100644 index 0000000..6c2cbe2 Binary files /dev/null and b/.cache/brands/integrations/thread/icon.png differ diff --git a/.cache/brands/integrations/threshold/icon.png b/.cache/brands/integrations/threshold/icon.png new file mode 100644 index 0000000..c5fc3e8 Binary files /dev/null and b/.cache/brands/integrations/threshold/icon.png differ diff --git a/.cache/brands/integrations/timer/icon.png b/.cache/brands/integrations/timer/icon.png new file mode 100644 index 0000000..d651b54 Binary files /dev/null and b/.cache/brands/integrations/timer/icon.png differ diff --git a/.cache/brands/integrations/tod/icon.png b/.cache/brands/integrations/tod/icon.png new file mode 100644 index 0000000..20a509b Binary files /dev/null and b/.cache/brands/integrations/tod/icon.png differ diff --git a/.cache/brands/integrations/trend/icon.png b/.cache/brands/integrations/trend/icon.png new file mode 100644 index 0000000..4308f20 Binary files /dev/null and b/.cache/brands/integrations/trend/icon.png differ diff --git a/.cache/brands/integrations/tuya/dark_icon.png b/.cache/brands/integrations/tuya/dark_icon.png new file mode 100644 index 0000000..dc238dc Binary files /dev/null and b/.cache/brands/integrations/tuya/dark_icon.png differ diff --git a/.cache/brands/integrations/tuya/icon.png b/.cache/brands/integrations/tuya/icon.png new file mode 100644 index 0000000..dc238dc Binary files /dev/null and b/.cache/brands/integrations/tuya/icon.png differ diff --git a/.cache/brands/integrations/uptime/dark_icon.png b/.cache/brands/integrations/uptime/dark_icon.png new file mode 100644 index 0000000..d651b54 Binary files /dev/null and b/.cache/brands/integrations/uptime/dark_icon.png differ diff --git a/.cache/brands/integrations/uptime/icon.png b/.cache/brands/integrations/uptime/icon.png new file mode 100644 index 0000000..d651b54 Binary files /dev/null and b/.cache/brands/integrations/uptime/icon.png differ diff --git a/.cache/brands/integrations/utility_meter/icon.png b/.cache/brands/integrations/utility_meter/icon.png new file mode 100644 index 0000000..b37f491 Binary files /dev/null and b/.cache/brands/integrations/utility_meter/icon.png differ diff --git a/.cache/brands/integrations/waze_travel_time/dark_icon.png b/.cache/brands/integrations/waze_travel_time/dark_icon.png new file mode 100644 index 0000000..5e67038 Binary files /dev/null and b/.cache/brands/integrations/waze_travel_time/dark_icon.png differ diff --git a/.cache/brands/integrations/waze_travel_time/icon.png b/.cache/brands/integrations/waze_travel_time/icon.png new file mode 100644 index 0000000..5e67038 Binary files /dev/null and b/.cache/brands/integrations/waze_travel_time/icon.png differ diff --git a/.cache/brands/integrations/wled/dark_icon.png b/.cache/brands/integrations/wled/dark_icon.png new file mode 100644 index 0000000..dc2ddcc Binary files /dev/null and b/.cache/brands/integrations/wled/dark_icon.png differ diff --git a/.cache/brands/integrations/wled/icon.png b/.cache/brands/integrations/wled/icon.png new file mode 100644 index 0000000..dc2ddcc Binary files /dev/null and b/.cache/brands/integrations/wled/icon.png differ diff --git a/.cache/brands/integrations/wyoming/dark_icon.png b/.cache/brands/integrations/wyoming/dark_icon.png new file mode 100644 index 0000000..eb3a014 Binary files /dev/null and b/.cache/brands/integrations/wyoming/dark_icon.png differ diff --git a/.cache/brands/integrations/wyoming/icon.png b/.cache/brands/integrations/wyoming/icon.png new file mode 100644 index 0000000..127819f Binary files /dev/null and b/.cache/brands/integrations/wyoming/icon.png differ diff --git a/.cache/brands/integrations/xiaomi_ble/dark_icon.png b/.cache/brands/integrations/xiaomi_ble/dark_icon.png new file mode 100644 index 0000000..e7db358 Binary files /dev/null and b/.cache/brands/integrations/xiaomi_ble/dark_icon.png differ diff --git a/.cache/brands/integrations/xiaomi_ble/icon.png b/.cache/brands/integrations/xiaomi_ble/icon.png new file mode 100644 index 0000000..e7db358 Binary files /dev/null and b/.cache/brands/integrations/xiaomi_ble/icon.png differ diff --git a/.cache/brands/integrations/zha/dark_icon.png b/.cache/brands/integrations/zha/dark_icon.png new file mode 100644 index 0000000..f8010fe Binary files /dev/null and b/.cache/brands/integrations/zha/dark_icon.png differ diff --git a/.cache/brands/integrations/zha/icon.png b/.cache/brands/integrations/zha/icon.png new file mode 100644 index 0000000..f8010fe Binary files /dev/null and b/.cache/brands/integrations/zha/icon.png differ diff --git a/.ha_run.lock b/.ha_run.lock index dc686f2..fcb9b23 100644 --- a/.ha_run.lock +++ b/.ha_run.lock @@ -1 +1 @@ -{"pid": 67, "version": 1, "ha_version": "2026.2.3", "start_ts": 1772599646.9007783} \ No newline at end of file +{"pid": 67, "version": 1, "ha_version": "2026.3.1", "start_ts": 1772875766.7594833} \ No newline at end of file diff --git a/custom_zha_quirks/__pycache__/ts0601_motion.cpython-314.pyc b/custom_zha_quirks/__pycache__/ts0601_motion.cpython-314.pyc new file mode 100644 index 0000000..1a9c8be Binary files /dev/null and b/custom_zha_quirks/__pycache__/ts0601_motion.cpython-314.pyc differ diff --git a/custom_zha_quirks/__pycache__/ts0601_power_din_tuya.cpython-314.pyc b/custom_zha_quirks/__pycache__/ts0601_power_din_tuya.cpython-314.pyc new file mode 100644 index 0000000..d251097 Binary files /dev/null and b/custom_zha_quirks/__pycache__/ts0601_power_din_tuya.cpython-314.pyc differ diff --git a/custom_zha_quirks/__pycache__/ts0601_smoke_tuya.cpython-314.pyc b/custom_zha_quirks/__pycache__/ts0601_smoke_tuya.cpython-314.pyc new file mode 100644 index 0000000..cdb6260 Binary files /dev/null and b/custom_zha_quirks/__pycache__/ts0601_smoke_tuya.cpython-314.pyc differ diff --git a/esphome/esp-bedrm3ceilingfan.yaml b/esphome/esp-bedrm3ceilingfan.yaml index 8e7ede5..7b2b735 100644 --- a/esphome/esp-bedrm3ceilingfan.yaml +++ b/esphome/esp-bedrm3ceilingfan.yaml @@ -1,12 +1,16 @@ #:########################################################################################:# # TITLE: CEILING FAN - BEDROOM 3 -# zorruno.com layout v1.0 2026 +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedrm3ceilingfan.yaml #:########################################################################################:# # VERSIONS: +# V1.1 2026-03-05 Updated yaml to zorruno layout V1.1 # V1.0 2025-07-21 First Setup (and replacement of Tasmota) #:########################################################################################:# # HARDWARE: -# Controlled by a Sonoff iFan02 (3-speed fan + 1x light relay) +# - Sonoff iFan02 (ESP8266) (3-speed fan + 1x light relay) #:########################################################################################:# # OPERATION NOTES: # - Fan and light can be controlled via MQTT (local topics below) and via Home Assistant API @@ -36,8 +40,10 @@ # - No HA API and no MQTT control available # - If power remains on, relays keep their last driven state # - If the device reboots while offline, fan/light restore_mode defaults apply (RESTORE_DEFAULT_OFF) +# - Accurate time is NOT needed (SNTP not required) for core operation #:########################################################################################:# + #:########################################################################################:# # SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) @@ -46,12 +52,12 @@ substitutions: # Device Naming device_name: "esp-bedrm3ceilingfan" friendly_name: "Bedroom 3 Ceiling Fan" - description_comment: "3 Speed Overhead Ceiling Fan Bedroom 3 :: Sonoff iFan02 (Layout V1.0)" + description_comment: "3 Speed Overhead Ceiling Fan Bedroom 3 :: Sonoff iFan02 (Layout V1.1)" device_area: "Bedroom 3" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. # Project Naming project_name: "Sonoff Technologies.Sonoff iFan02" # Project Details - project_version: "v1.0" # Project V denotes release of yaml file, allowing checking of deployed vs latest version + project_version: "v1.1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version # Passwords and Secrets api_key: !secret esp-api_key @@ -79,6 +85,7 @@ substitutions: switch_3_name: "Fan 3 Relay" switch_4_name: "Fan 4 Relay" + #:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html @@ -118,6 +125,7 @@ packages: diag_debug: !include common/include_debug_diag_sensors.yaml #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + #:########################################################################################:# # ESPHOME: # https://esphome.io/components/esphome.html @@ -138,10 +146,10 @@ esphome: topic: "${mqtt_local_status_topic}/speed/state" payload: !lambda "return to_string(id(speed_value));" + #:########################################################################################:# # ESP PLATFORM AND FRAMEWORK: # https://esphome.io/components/esp8266/ -# https://esphome.io/components/esp32/ #:########################################################################################:# esp8266: board: esp01_1m # Sonoff iFan02 @@ -153,6 +161,7 @@ preferences: mdns: disabled: true # Disabling will make the build file smaller (and it is still available via static IP) + #:########################################################################################:# # GLOBAL VARIABLES: # https://esphome.io/guides/automations.html#global-variables @@ -163,6 +172,7 @@ globals: restore_value: true initial_value: "0" + #:########################################################################################:# # LOGGING: ESPHome Logging Enable # https://esphome.io/components/logger.html @@ -171,6 +181,7 @@ logger: level: "${log_level}" # INFO suggested, or DEBUG for testing baud_rate: 0 # set to 0 for no logging via UART, needed if you are using it for other serial things + #:########################################################################################:# # MQTT: # This adds device-specific MQTT command triggers to the common MQTT configuration. @@ -221,6 +232,7 @@ mqtt: id: ifan02_fan speed: !lambda "return id(speed_value);" + #:########################################################################################:# # SWITCH COMPONENT: # https://esphome.io/components/switch/ @@ -250,6 +262,7 @@ switch: restore_mode: RESTORE_DEFAULT_OFF internal: true + #:########################################################################################:# # SELECT COMPONENT: # https://esphome.io/components/select/index.html @@ -314,6 +327,7 @@ select: id: ifan02_fan speed: 3 + #:########################################################################################:# # OUTPUT COMPONENT: # https://esphome.io/components/output/ @@ -351,6 +365,7 @@ output: id(fan4sw).turn_on(); } + #:########################################################################################:# # LIGHT COMPONENT: # https://esphome.io/components/light/ @@ -371,6 +386,7 @@ light: topic: "${mqtt_local_status_topic}/light/state" payload: "OFF" + #:########################################################################################:# # FAN COMPONENT: # https://esphome.io/components/fan/index.html diff --git a/esphome/esp-bedrm3fanswitch.yaml b/esphome/esp-bedrm3fanswitch.yaml index b35a2f5..233bd80 100644 --- a/esphome/esp-bedrm3fanswitch.yaml +++ b/esphome/esp-bedrm3fanswitch.yaml @@ -1,13 +1,17 @@ #:########################################################################################:# -# TITLE: BEDROOM 3 FAN SWITCH (WALL SWITCH) -# zorruno.com layout v1.0 2026 +# TITLE: BEDROOM 3 FAN SWITCH WALL SWITCH +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedrm3fanswitch.yaml #:########################################################################################:# # VERSIONS: +# V1.1 2026-03-05 Updated yaml to zorruno layout V1.1 # V1.0 2025-07-23 First Setup (and replacement of Tasmota) #:########################################################################################:# # HARDWARE: -# Zemismart KS-811 Triple push button (KS-811-3) -# pinout/schematic: https://community.home-assistant.io/t/zemismart-ks-811-working-with-esphome/ +# - Zemismart KS-811 Triple push button (KS-811-3) +# pinout/schematic: https://community.home-assistant.io/t/zemismart-ks-811-working-with-esphome/ #:########################################################################################:# # OPERATION NOTES: # - Wall switch for Bedroom 3 ceiling fan @@ -40,8 +44,10 @@ # - No MQTT publish/subscribe and no HA API connectivity # - Buttons will do nothing to the fan (no transport) # - Relay indicators will remain in their last state until connectivity returns (or reboot) +# - Accurate time is NOT needed (SNTP not required) for core operation #:########################################################################################:# + #:########################################################################################:# # SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) @@ -50,21 +56,19 @@ substitutions: # Device Naming device_name: "esp-bedrm3fanswitch" friendly_name: "Bedroom 3 Fan Wall Switch (3)" - description_comment: "Switch for Bedroom 3 Ceiling Fan using Zemismart KS-811 Triple Push Button. Speed Up (1), Speed Down (2), Fan Off (3) (Layout V1.0)" + description_comment: "Switch for Bedroom 3 Ceiling Fan using Zemismart KS-811 Triple Push Button. Speed Up (1), Speed Down (2), Fan Off (3) (Layout V1.1)" device_area: "Bedroom 3" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. # Project Naming project_name: "Zemismart Technologies.KS-811-3 (Triple)" # Project Details - project_version: "v1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version - - #entity_prefix: "Main Bathroom" # Simple device name where we want to prefix a sensor or switch, eg "Load" Current. + project_version: "v1.1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version # Passwords and Secrets api_key: !secret esp-api_key # unfortunately you can't use substitutions inside secrets names ota_pass: !secret esp-ota_pass # unfortunately you can't use substitutions inside secrets names static_ip_address: !secret esp-bedrm3fanswitch_ip - mqtt_local_command_main_topic: !secret mqtt_command_main_topic - mqtt_local_status_main_topic: !secret mqtt_status_main_topic + mqtt_command_main_topic: !secret mqtt_command_main_topic + mqtt_status_main_topic: !secret mqtt_status_main_topic # If we are changing IP addresses, you must update the current IP address here, otherwise it remains # Don't forget to switch it back when changed. @@ -74,26 +78,22 @@ substitutions: log_level: "INFO" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE update_interval: "60s" # update time for general sensors etc - # MQTT LOCAL Controls - #mqtt_device_name: "bedroom3-ceilingfan-switch" - #mqtt_local_command_topic: "${mqtt_local_command_main_topic}/${mqtt_device_name}" # Topic used to command this locally without HA - #mqtt_local_status_topic: "${mqtt_local_status_main_topic}/${mqtt_device_name}" # Topic used to view status locally without HA - # MQTT REMOTE Controls mqtt_remote_device_name: "bedroom3-ceilingfan" - mqtt_remote_device_command_topic: "${mqtt_local_command_main_topic}/${mqtt_remote_device_name}/speed/set" + mqtt_remote_device_command_topic: "${mqtt_command_main_topic}/${mqtt_remote_device_name}/speed/set" mqtt_remote_device_command1: "+" mqtt_remote_device_command2: "-" mqtt_remote_device_command3: "0" # Fan speed status topic (used to sync relay indicators) - mqtt_local_status_topic: "${mqtt_local_status_main_topic}/${mqtt_remote_device_name}/speed/state" + mqtt_local_status_topic: "${mqtt_status_main_topic}/${mqtt_remote_device_name}/speed/state" # Switch/Relay Naming and Icons switch_1_name: "Fan Speed Up" # Virtual intent only, no load connected to relay 1 switch_2_name: "Fan Speed Down" # Virtual intent only, no load connected to relay 2 switch_3_name: "Fan Off" # Virtual intent only, no load connected to relay 3 + #:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html @@ -133,6 +133,7 @@ packages: diag_debug: !include common/include_debug_diag_sensors.yaml #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + #:########################################################################################:# # ESPHOME: # https://esphome.io/components/esphome.html @@ -151,21 +152,18 @@ esphome: - "-Wl,--gc-sections" # drop unused code/data #- "-fno-exceptions" # strip C++ exceptions #- "-fno-rtti" # strip C++ RTTI -# on_boot: -# priority: 200 -# then: -# - switch.turn_on: Relay_3 + #:########################################################################################:# # ESP PLATFORM AND FRAMEWORK: # https://esphome.io/components/esp8266/ -# https://esphome.io/components/esp32/ #:########################################################################################:# esp8266: board: esp01_1m early_pin_init: false # Recommended false where switches are involved. Defaults to true. board_flash_mode: dout # Default is dout + #:########################################################################################:# # LOGGING: ESPHome Logging Enable # https://esphome.io/components/logger.html @@ -176,6 +174,7 @@ logger: #esp8266_store_log_strings_in_flash: false #tx_buffer_size: 64 + #:########################################################################################:# # STATUS LED: # https://esphome.io/components/status_led.html @@ -186,6 +185,7 @@ status_led: number: GPIO2 inverted: true + #:########################################################################################:# # BINARY SENSORS: # https://esphome.io/components/binary_sensor/ @@ -226,6 +226,7 @@ binary_sensor: topic: "${mqtt_remote_device_command_topic}" payload: "${mqtt_remote_device_command3}" + #:########################################################################################:# # SWITCH COMPONENT: # https://esphome.io/components/switch/ @@ -247,6 +248,7 @@ switch: pin: GPIO14 id: Relay_3 + #:########################################################################################:# # MQTT: # Subscribe to fan speed state and mirror it to relay indicator pattern diff --git a/esphome/esp-bedrm3lights.yaml b/esphome/esp-bedrm3lights.yaml index 1d8eaf7..8027f2f 100644 --- a/esphome/esp-bedrm3lights.yaml +++ b/esphome/esp-bedrm3lights.yaml @@ -1,13 +1,17 @@ #:########################################################################################:# # TITLE: BEDROOM 3 LIGHTSWITCH -# zorruno.com layout v1.0 2026 +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-bedrm3lights.yaml #:########################################################################################:# # VERSIONS: +# V3.6 2026-03-05 Updated yaml to zorruno layout V1.1 # V3.5 2025-07-24 YAML tidyups #:########################################################################################:# # HARDWARE: -# Zemismart KS-811 Double push button (KS-811-2) -# pinout/schematic: https://community.home-assistant.io/t/zemismart-ks-811-working-with-esphome/ +# - Zemismart KS-811 Double push button (KS-811-2) +# pinout/schematic: https://community.home-assistant.io/t/zemismart-ks-811-working-with-esphome/ #:########################################################################################:# # OPERATION NOTES: # - Virtual 2-button wall switch used to control Bedroom 3 ceiling fan light and to force "all off" @@ -29,17 +33,17 @@ # a) Home Assistant OFFLINE, but Network and MQTT ONLINE # - Buttons still publish MQTT commands directly to the remote iFan02 (light and all-off actions) # - Relay 1 state mirror still updates from subscribed remote light status topic -# - HA entities for this switch device are unavailable until HA returns # b) MQTT OFFLINE (but WiFi/Network and HA API ONLINE) # - Buttons cannot control the remote iFan02 (control path is MQTT) # - Relay 1 will not mirror the remote light status while MQTT is down -# - HA can still see/control the local indicator relays, but those do not affect the fan without MQTT # c) Entire WiFi/Network OFFLINE # - No MQTT publish/subscribe and no HA API connectivity # - Buttons will not control the remote iFan02 # - Local indicator relays remain in their last state until connectivity returns (or reboot) +# - Accurate time is NOT needed (SNTP not required) for core operation #:########################################################################################:# + #:########################################################################################:# # SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) @@ -48,12 +52,12 @@ substitutions: # Device Naming device_name: "esp-bedrm3lights" friendly_name: "Bedroom 3 Lightswitch (2)" - description_comment: "Bedroom 3 Main Lightswitch using a Zemismart KS-811 Double Push Button. Main Lights (1-Virtual), All Lights Off (2-Virtual) (Layout V1.0)" + description_comment: "Bedroom 3 Main Lightswitch using a Zemismart KS-811 Double Push Button. Main Lights (1-Virtual), All Lights Off (2-Virtual) (Layout V1.1)" device_area: "Bedroom 3" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. # Project Naming project_name: "Zemismart Technologies.KS-811 Double" # Project Details - project_version: "v3.5" # Project V denotes release of yaml file, allowing checking of deployed vs latest version + project_version: "v3.6" # Project V denotes release of yaml file, allowing checking of deployed vs latest version # Passwords and Secrets api_key: !secret esp-api_key # unfortunately you can't use substitutions inside secrets names @@ -90,6 +94,7 @@ substitutions: switch_1_name: "Main Lights" # Nothing physically connected to this output (ifan02 light is the real load) switch_2_name: "All Lights Off" # Nothing physically connected to this output + #:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html @@ -129,6 +134,7 @@ packages: diag_debug: !include common/include_debug_diag_sensors.yaml #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + #:########################################################################################:# # ESPHOME: # https://esphome.io/components/esphome.html @@ -141,21 +147,18 @@ esphome: project: name: "${project_name}" version: "${project_version}" - #on_boot: - # priority: 200 - # then: - # - switch.turn_on: Relay_2 + #:########################################################################################:# # ESP PLATFORM AND FRAMEWORK: # https://esphome.io/components/esp8266/ -# https://esphome.io/components/esp32/ #:########################################################################################:# esp8266: board: esp01_1m early_pin_init: false # Recommended false where switches are involved. Defaults to true. board_flash_mode: dout # Default is dout + #:########################################################################################:# # LOGGING: ESPHome Logging Enable # https://esphome.io/components/logger.html @@ -166,6 +169,7 @@ logger: #esp8266_store_log_strings_in_flash: false #tx_buffer_size: 64 + #:########################################################################################:# # GLOBAL VARIABLES: # https://esphome.io/guides/automations.html#global-variables @@ -176,6 +180,7 @@ globals: restore_value: false initial_value: "0" + #:########################################################################################:# # STATUS LED: # https://esphome.io/components/status_led.html @@ -185,6 +190,7 @@ status_led: number: GPIO2 inverted: true + #:########################################################################################:# # BINARY SENSORS: # https://esphome.io/components/binary_sensor/ @@ -230,6 +236,7 @@ binary_sensor: retain: false - platform: gpio + id: button_2 pin: number: GPIO05 mode: INPUT @@ -248,6 +255,7 @@ binary_sensor: qos: 0 retain: false + #:########################################################################################:# # SWITCH COMPONENT: # https://esphome.io/components/switch/ @@ -264,6 +272,7 @@ switch: pin: GPIO12 id: Relay_2 + #:########################################################################################:# # MQTT: # This adds device-specific MQTT command triggers to the common MQTT configuration. diff --git a/esphome/esp-garagelights.yaml b/esphome/esp-garagelights.yaml index abea44d..c4eee61 100644 --- a/esphome/esp-garagelights.yaml +++ b/esphome/esp-garagelights.yaml @@ -1,56 +1,94 @@ -############################################# -############################################# -# GARAGE LIGHTS -# Controlled by a Sonoff Basic R1 -# +#:########################################################################################:# +# TITLE: GARAGE LIGHTS +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-garagelights.yaml +#:########################################################################################:# +# VERSIONS: +# V2.1 2026-03-04 Updated yaml to zorruno layout V1.1 # V2.0 2025-10-22 Latest layout with home MQTT code # V1.0 2025-10-22 Initial Version -# -########################################################################################## -########################################################################################## +#:########################################################################################:# +# HARDWARE: +# - Sonoff Basic R1 (ESP8266) +#:########################################################################################:# +# OPERATION NOTES: +# - Garage light relay control using Sonoff Basic R1 (GPIO12 relay, GPIO3 button, GPIO13 LED) +# - Physical button toggles relay locally +# - MQTT command topic controls relay ON/OFF +# - MQTT status topic publishes relay state on changes and on MQTT reconnect +#:########################################################################################:# +# MQTT COMMANDS: +# - Command topic: +# ${mqtt_command_topic_1} +# Payload "${mqtt_command_ON}" -> relay ON +# Payload "${mqtt_command_OFF}" -> relay OFF +# - Status topic: +# ${mqtt_status_topic_1} +# Payload "${mqtt_command_ON}" / "${mqtt_command_OFF}" published on relay changes and MQTT reconnect +#:########################################################################################:# +# OFFLINE NOTES: +# a) Home Assistant OFFLINE, but Network and MQTT ONLINE +# - Physical button still toggles relay locally +# - MQTT commands still control relay and status publishes still occur +# b) MQTT OFFLINE (but WiFi/Network and HA API ONLINE) +# - Physical button still toggles relay locally +# - HA/API control still works (switch entity), but MQTT commands/status publishes will not work +# c) Entire WiFi/Network OFFLINE +# - Physical button still toggles relay locally (standalone) +# - No HA API and no MQTT until network returns +# - Accurate time is NOT needed (SNTP not required) for core operation +#:########################################################################################:# -########################################################################################## -# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) -########################################################################################## +#:########################################################################################:# substitutions: # Device Custom Naming device_name: "esp-garagelights" friendly_name: "Garage Lights" - description_comment: "Garage Lights :: Sonoff Basic" + description_comment: "Garage Lights :: Sonoff Basic (Layout V1.1)" device_area: "Garage" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. static_ip_address: !secret esp-garagelights_ip + + # Project Naming + project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details + project_version: "v2.1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version + + # Passwords & Secrets (unfortunately you can't use substitutions inside secrets names) + api_key: !secret esp-api_key + ota_pass: !secret esp-ota_pass + + # If we are changing IP addresses, you must update the current IP address here, otherwise it remains + # Don't forget to switch it back when changed. + current_ip_address: ${static_ip_address} + + # MQTT Controls mqtt_device_name_1: "garage-lights" - + mqtt_command_main_topic: !secret mqtt_command_main_topic + mqtt_status_main_topic: !secret mqtt_status_main_topic + mqtt_command_topic_1: "${mqtt_command_main_topic}/${mqtt_device_name_1}" + mqtt_status_topic_1: "${mqtt_status_main_topic}/${mqtt_device_name_1}" + mqtt_command_ON: "ON" + mqtt_command_OFF: "OFF" + # I/O Naming relay_1_name: "Garage Lights" button_1_name: "Power Button" relay_icon: "mdi:lightbulb-group" - # Project Naming - project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details - project_version: "v2.0" # Project V denotes release of yaml file, allowing checking of deployed vs latest version - - # MQTT Controls - mqtt_command_main_topic: !secret mqtt_command_main_topic - mqtt_status_main_topic: !secret mqtt_status_main_topic - mqtt_command_topic_1: "${mqtt_command_main_topic}/${mqtt_device_name_1}" - mqtt_status_topic_1: "${mqtt_status_main_topic}/${mqtt_device_name_1}" - mqtt_command_ON: "ON" - mqtt_command_OFF: "OFF" - - # Passwords & Secrets (unfortunately you can't use substitutions inside secrets names) - api_key: !secret esp-api_key - ota_pass: !secret esp-ota_pass - # General Settings log_level: "ERROR" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE update_interval: "60s" # update time for for general sensors etc -########################################################################################## + +#:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html -########################################################################################## +#:########################################################################################:# packages: #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### common_wifi: !include @@ -59,6 +97,7 @@ packages: local_device_name: "${device_name}" local_static_ip_address: "${static_ip_address}" local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" #### HOME ASSISTANT API (choose encryption or no encryption options) #### common_api: !include @@ -72,27 +111,32 @@ packages: file: common/mqtt_common.yaml vars: local_device_name: "${device_name}" - + #### WEB PORTAL #### #common_webportal: !include common/webportal_common.yaml + #### SNTP (Only use if you want/need accurate timeclocks) #### - #common_sntp: !include common/sntp_common.yaml + #common_sntp: !include common/sntp_common.yaml #### DIAGNOSTICS Sensors #### - diag_basic: !include common/include_basic_diag_sensors.yaml - diag_more: !include common/include_more_diag_sensors.yaml - #diag_debug: !include common/include_debug_diag_sensors.yaml - #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + diag_basic: !include common/include_basic_diag_sensors.yaml + diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml -########################################################################################## -# ESPHome + +#:########################################################################################:# +# ESPHOME: # https://esphome.io/components/esphome.html -########################################################################################## +#:########################################################################################:# esphome: name: "${device_name}" friendly_name: "${friendly_name}" comment: "${description_comment}" # Appears on the esphome page in HA area: "${device_area}" + project: + name: "${project_name}" + version: "${project_version}" # platformio_options: # build_flags: # - "-Os" # optimize for size @@ -100,56 +144,57 @@ esphome: # - "-fno-exceptions" # strip C++ exceptions # - "-fno-rtti" # strip C++ RTTI -########################################################################################## -# ESP Platform and Framework -# https://esphome.io/components/esp32.html -########################################################################################## + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp8266.html +#:########################################################################################:# esp8266: - board: esp01_1m # The original sonoff basic - restore_from_flash: True # restore some values on reboot + board: esp01_1m # Sonoff Basic R1 + restore_from_flash: true # restore some values on reboot preferences: flash_write_interval: 5min mdns: - disabled: False + disabled: false -########################################################################################## -# ESPHome Logging Enable + +#:########################################################################################:# +# LOGGING: # https://esphome.io/components/logger.html -########################################################################################## +#:########################################################################################:# logger: - level: "${log_level}" #INFO Level suggested, or DEBUG for testing + level: "${log_level}" # INFO Level suggested, or DEBUG for testing baud_rate: 0 # set to 0 for no logging via UART, needed if you are using it for other serial things (eg PZEM) #esp8266_store_log_strings_in_flash: false #tx_buffer_size: 64 -########################################################################################## -# SWITCH COMPONENT + +#:########################################################################################:# +# SWITCH COMPONENT: # https://esphome.io/components/switch/ -########################################################################################## -# Sonoff Basic R1 Relay Switch is GPIO12 -############################################# +# Sonoff Basic R1 Relay Switch is GPIO12 +#:########################################################################################:# switch: - platform: gpio name: "${relay_1_name}" pin: GPIO12 id: relay1 restore_mode: RESTORE_DEFAULT_OFF - icon: "${relay_icon}" + icon: "${relay_icon}" -########################################################################################## -# BINARY SENSORS + +#:########################################################################################:# +# BINARY SENSORS: # https://esphome.io/components/binary_sensor/ -########################################################################################## # Sonoff Basic R1 Button is GPIO03 -############################################# +#:########################################################################################:# binary_sensor: - # Actual button input - platform: gpio pin: - number: GPIO03 + number: GPIO3 mode: INPUT_PULLUP inverted: true name: "${button_1_name}" @@ -168,7 +213,7 @@ binary_sensor: // Relay is OFF: turn it ON id(relay1).turn_on(); } - + # Mimics actual relay status - platform: template name: "${relay_1_name} Status" @@ -177,31 +222,28 @@ binary_sensor: on_press: - mqtt.publish: topic: "${mqtt_status_topic_1}" - payload: "${mqtt_command_ON}" + payload: "${mqtt_command_ON}" on_release: - mqtt.publish: topic: "${mqtt_status_topic_1}" - payload: "${mqtt_command_OFF}" - -########################################################################################## -# STATUS LED + payload: "${mqtt_command_OFF}" + + +#:########################################################################################:# +# STATUS LED: # https://esphome.io/components/status_led.html -########################################################################################## -# Sonoff Basic R1 LED is GPIO13 -########################################################################################## +# Sonoff Basic R1 LED is GPIO13 +#:########################################################################################:# status_led: pin: number: GPIO13 - inverted: yes + inverted: true -########################################################################################## -# MQTT COMMANDS + +#:########################################################################################:# +# MQTT: # This adds device-specific MQTT command triggers to the common MQTT configuration. -# Requires you to define: -# substitutions: -# mqtt_command_topic: "" -# mqtt_state_topic: "" -########################################################################################## +#:########################################################################################:# mqtt: on_message: # Relay 1 control (only act and publish if a change is needed) @@ -239,4 +281,4 @@ mqtt: - mqtt.publish: topic: "${mqtt_status_topic_1}" payload: !lambda 'return id(relay1).state ? "ON" : "OFF";' - #retain: true + #retain: true \ No newline at end of file diff --git a/esphome/esp-mainbathfancombo.yaml b/esphome/esp-mainbathfancombo.yaml index 1631242..1f40431 100644 --- a/esphome/esp-mainbathfancombo.yaml +++ b/esphome/esp-mainbathfancombo.yaml @@ -387,21 +387,21 @@ binary_sensor: - delayed_off: 20ms on_multi_click: - # Double click: easier to hit; also prevents single-click heater toggle from stealing the first click + # Double click: quick and deliberate - timing: - - ON for at most 500ms - - OFF for at most 900ms - - ON for at most 500ms - - OFF for at least 250ms + - ON for at most 350ms + - OFF for at most 350ms + - ON for at most 350ms + - OFF for at least 120ms then: - mqtt.publish: topic: "${mqtt_remote_device1_command_topic}" payload: "${mqtt_remote_device1_command1}" - # Single click: delayed recognition so a (slower) double-click still works reliably + # Single click: normal press, short settle time so it still feels responsive - timing: - - ON for at most 600ms - - OFF for at least 1200ms + - ON for at most 500ms + - OFF for at least 350ms then: - switch.toggle: Relay_2 diff --git a/esphome/esp-officedeskrightgpo.yaml b/esphome/esp-officedeskrightgpo.yaml index 941c572..d985d7c 100644 --- a/esphome/esp-officedeskrightgpo.yaml +++ b/esphome/esp-officedeskrightgpo.yaml @@ -1,34 +1,74 @@ -############################################# -############################################# -# OFFICE GPO RIGHT CONTROL -# Controlled by a Sonoff Basic R1 -# +#:########################################################################################:# +# TITLE: OFFICE GPO RIGHT CONTROL +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-officedeskrightgpo.yaml +#:########################################################################################:# +# VERSIONS: +# V1.1 2026-03-08 Updated yaml to zorruno layout V1.1 # V1.0 2025-06-14 Initial Version +#:########################################################################################:# +# HARDWARE: +# - Sonoff Basic R1 (ESP8266) +# - Controls: Office (above desk) dial GPO and USB sockets power +#:########################################################################################:# +# OPERATION NOTES: +# - Local button toggles the relay (power to the desk-right GPO) +# - MQTT control supported on: +# ${mqtt_main_topic}/relay1/set payload ON/OFF +# - Publishes relay state to MQTT via a template binary_sensor (see note below) +# NOTE: your original YAML used ${mqtt_topic}/relay1/state which was undefined. +# This V1.1 conversion keeps behavior but corrects it to: +# ${mqtt_main_topic}/relay1/state +#:########################################################################################:# +# MQTT COMMANDS: +# - Command topic: +# ${mqtt_main_topic}/relay1/set +# ON -> relay ON +# OFF -> relay OFF # -########################################################################################## -########################################################################################## +# - Status topic (published on state changes): +# ${mqtt_main_topic}/relay1/state +# ON/OFF +#:########################################################################################:# +# OFFLINE NOTES: +# a) Home Assistant OFFLINE, but Network and MQTT ONLINE +# - MQTT control still works (relay1/set) +# - Local button still works +# b) MQTT OFFLINE (but WiFi/Network and HA API ONLINE) +# - HA/API control still works +# - MQTT command/control will not work while broker is down +# c) Entire WiFi/Network OFFLINE +# - Local button still toggles relay +# - Accurate time is NOT needed (SNTP not required) +#:########################################################################################:# -########################################################################################## -# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) -########################################################################################## +#:########################################################################################:# substitutions: # Device Naming device_name: "esp-officedeskrightgpo" friendly_name: "Office GPO Right" - description_comment: "Office (above desk) dial GPO and USB sockets power control :: Sonoff Basic" - device_area: "Office" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. + description_comment: "Office (above desk) dial GPO and USB sockets power control :: Sonoff Basic (Layout V1.1)" + device_area: "Office" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. # Project Naming - project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details - project_version: "v1.0" # Project V denotes release of yaml file, allowing checking of deployed vs latest version - - # Passwords + project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details + project_version: "v1.1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version + + # Passwords & Secrets api_key: !secret esp-api_key # unfortunately you can't use substitutions inside secrets names ota_pass: !secret esp-ota_pass # unfortunately you can't use substitutions inside secrets names static_ip_address: !secret esp-officedeskrightgpo_ip mqtt_command_main_topic: !secret mqtt_command_main_topic - #mqtt_status_main_topic: !secret mqtt_status_main_topic + + # If we are changing IP addresses, you must update the current IP address here, otherwise it remains + # Don't forget to switch it back when changed. + current_ip_address: ${static_ip_address} # Device Settings relay_icon: "mdi:generator-portable" @@ -43,10 +83,11 @@ substitutions: mqtt_device_name: "office-deskright-gpo" mqtt_main_topic: "${mqtt_command_main_topic}/${mqtt_device_name}" # Topic we will use to command stuff from external without HA -########################################################################################## + +#:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html -########################################################################################## +#:########################################################################################:# packages: #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### common_wifi: !include @@ -55,6 +96,7 @@ packages: local_device_name: "${device_name}" local_static_ip_address: "${static_ip_address}" local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" #### HOME ASSISTANT API (choose encryption or no encryption options) #### common_api: !include @@ -68,80 +110,90 @@ packages: file: common/mqtt_common.yaml vars: local_device_name: "${device_name}" - + #### WEB PORTAL #### #common_webportal: !include common/webportal_common.yaml + #### SNTP (Only use if you want/need accurate timeclocks) #### - #common_sntp: !include common/sntp_common.yaml + #common_sntp: !include common/sntp_common.yaml #### DIAGNOSTICS Sensors #### - diag_basic: !include common/include_basic_diag_sensors.yaml - diag_more: !include common/include_more_diag_sensors.yaml - #diag_debug: !include common/include_debug_diag_sensors.yaml - #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + diag_basic: !include common/include_basic_diag_sensors.yaml + diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml -########################################################################################## -# ESPHome + +#:########################################################################################:# +# ESPHOME: # https://esphome.io/components/esphome.html -########################################################################################## +#:########################################################################################:# esphome: name: "${device_name}" friendly_name: "${friendly_name}" comment: "${description_comment}" # Appears on the esphome page in HA area: "${device_area}" -# platformio_options: -# build_flags: -# - "-Os" # optimize for size -# - "-Wl,--gc-sections" # drop unused code/data -# - "-fno-exceptions" # strip C++ exceptions -# - "-fno-rtti" # strip C++ RTTI + project: + name: "${project_name}" + version: "${project_version}" -########################################################################################## -# ESP Platform and Framework -# https://esphome.io/components/esp32.html -########################################################################################## + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp8266.html +#:########################################################################################:# esp8266: - board: esp01_1m # The original sonoff basic - restore_from_flash: True # restore some values on reboot + board: esp01_1m # The original Sonoff Basic + restore_from_flash: true # restore some values on reboot preferences: flash_write_interval: 5min mdns: - disabled: False + disabled: false -########################################################################################## -# ESPHome Logging Enable + +#:########################################################################################:# +# LOGGING: # https://esphome.io/components/logger.html -########################################################################################## +#:########################################################################################:# logger: - level: "${log_level}" #INFO Level suggested, or DEBUG for testing - baud_rate: 0 # set to 0 for no logging via UART, needed if you are using it for other serial things (eg PZEM) - #esp8266_store_log_strings_in_flash: false - #tx_buffer_size: 64 + level: "${log_level}" + baud_rate: 0 # set to 0 for no logging via UART -########################################################################################## -# SWITCH COMPONENT + +#:########################################################################################:# +# STATUS LED: +# https://esphome.io/components/status_led.html +# Sonoff Basic R1 LED is GPIO13 +#:########################################################################################:# +status_led: + pin: + number: GPIO13 + inverted: true + + +#:########################################################################################:# +# SWITCH COMPONENT: # https://esphome.io/components/switch/ -########################################################################################## -# Sonoff Basic R1 Relay Switch is GPIO12 -############################################# +# Sonoff Basic R1 Relay is GPIO12 +#:########################################################################################:# switch: - platform: gpio name: "${relay_1_name}" pin: GPIO12 id: relay1 restore_mode: RESTORE_DEFAULT_ON - icon: "${relay_icon}" + icon: "${relay_icon}" -########################################################################################## -# BINARY SENSORS + +#:########################################################################################:# +# BINARY SENSORS: # https://esphome.io/components/binary_sensor/ -########################################################################################## # Sonoff Basic R1 Button is GPIO03 -############################################# +#:########################################################################################:# binary_sensor: - + # Actual button input - platform: gpio pin: number: GPIO03 @@ -157,42 +209,30 @@ binary_sensor: then: - lambda: |- if (id(relay1).state) { - // Relay is ON: turn it OFF id(relay1).turn_off(); } else { - // Relay is OFF: turn it ON id(relay1).turn_on(); } - - # Mimics actual relay status (but not controllable) + + # Mimics actual relay status (but not controllable) + publishes MQTT state - platform: template name: "${relay_1_name} Status" lambda: |- return id(relay1).state; on_press: - mqtt.publish: - topic: "${mqtt_topic}/relay1/state" - payload: "ON" + topic: "${mqtt_main_topic}/relay1/state" + payload: "ON" on_release: - mqtt.publish: - topic: "${mqtt_topic}/relay1/state" - payload: "OFF" - -########################################################################################## -# STATUS LED -# https://esphome.io/components/status_led.html -########################################################################################## -# Sonoff Basic R1 LED is GPIO13 -############################################# -status_led: - pin: - number: GPIO13 - inverted: yes + topic: "${mqtt_main_topic}/relay1/state" + payload: "OFF" -########################################################################################## -# MQTT COMMANDS + +#:########################################################################################:# +# MQTT: # This adds device-specific MQTT command triggers to the common MQTT configuration. -########################################################################################## +#:########################################################################################:# mqtt: on_message: # Relay 1 control @@ -200,8 +240,8 @@ mqtt: payload: "ON" then: - switch.turn_on: relay1 + - topic: "${mqtt_main_topic}/relay1/set" payload: "OFF" then: - - switch.turn_off: relay1 - + - switch.turn_off: relay1 \ No newline at end of file diff --git a/esphome/esp-officeelvcontrol.yaml b/esphome/esp-officeelvcontrol.yaml index 002449e..27aca53 100644 --- a/esphome/esp-officeelvcontrol.yaml +++ b/esphome/esp-officeelvcontrol.yaml @@ -1,34 +1,74 @@ -############################################# -############################################# -# OFFICE ELV CONTROL -# Controlled by a Sonoff Basic R1 -# +#:########################################################################################:# +# TITLE: OFFICE ELV CONTROL +# zorruno.com layout v1.1 2026 +#:########################################################################################:# +# REPO: +# https://home.fox.co.nz/gitea/zorruno/zorruno-homeassistant/src/branch/master/esphome/esp-officeelvcontrol.yaml +#:########################################################################################:# +# VERSIONS: +# V1.1 2026-03-08 Updated yaml to zorruno layout V1.1 # V1.0 2025-06-14 Initial Version +#:########################################################################################:# +# HARDWARE: +# - Sonoff Basic R1 (ESP8266) +# - Controls: Office ELV power supply (under desk) +#:########################################################################################:# +# OPERATION NOTES: +# - Local button toggles relay +# - MQTT control supported on: +# ${mqtt_main_topic}/relay1/set payload ON/OFF +# - Publishes relay state to MQTT via a template binary_sensor +# NOTE: your original YAML used ${mqtt_topic}/relay1/state which was undefined. +# This V1.1 conversion keeps behavior but corrects it to: +# ${mqtt_main_topic}/relay1/state +#:########################################################################################:# +# MQTT COMMANDS: +# - Command topic: +# ${mqtt_main_topic}/relay1/set +# ON -> relay ON +# OFF -> relay OFF # -########################################################################################## -########################################################################################## +# - Status topic (published on state changes): +# ${mqtt_main_topic}/relay1/state +# ON/OFF +#:########################################################################################:# +# OFFLINE NOTES: +# a) Home Assistant OFFLINE, but Network and MQTT ONLINE +# - MQTT control still works (relay1/set) +# - Local button still works +# b) MQTT OFFLINE (but WiFi/Network and HA API ONLINE) +# - HA/API control still works +# - MQTT command/control will not work while broker is down +# c) Entire WiFi/Network OFFLINE +# - Local button still toggles relay +# - Accurate time is NOT needed (SNTP not required) +#:########################################################################################:# -########################################################################################## -# SPECIFIC DEVICE VARIABLE SUBSTITUTIONS + +#:########################################################################################:# +# SUBSTITUTIONS: Specific device variable substitutions # If NOT using a secrets file, just replace these with the passwords etc (in quotes) -########################################################################################## +#:########################################################################################:# substitutions: # Device Naming device_name: "esp-officeelvcontrol" friendly_name: "Office ELV Control" - description_comment: "ELV Power Supply control in the Office (under desk) :: Sonoff Basic" - device_area: "Office" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. + description_comment: "ELV Power Supply control in the Office (under desk) :: Sonoff Basic (Layout V1.1)" + device_area: "Office" # Allows ESP device to be automatically linked to an 'Area' in Home Assistant. # Project Naming - project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details - project_version: "v1.0" # Project V denotes release of yaml file, allowing checking of deployed vs latest version - - # Passwords + project_name: "Sonoff Technologies.Sonoff Basic V1" # Project Details + project_version: "v1.1" # Project V denotes release of yaml file, allowing checking of deployed vs latest version + + # Passwords & Secrets api_key: !secret esp-api_key # unfortunately you can't use substitutions inside secrets names ota_pass: !secret esp-ota_pass # unfortunately you can't use substitutions inside secrets names static_ip_address: !secret esp-officeelvcontrol_ip mqtt_command_main_topic: !secret mqtt_command_main_topic - #mqtt_status_main_topic: !secret mqtt_status_main_topic + + # If we are changing IP addresses, you must update the current IP address here, otherwise it remains + # Don't forget to switch it back when changed. + current_ip_address: ${static_ip_address} # Device Settings relay_icon: "mdi:generator-portable" @@ -43,10 +83,11 @@ substitutions: mqtt_device_name: "office-elv-control" mqtt_main_topic: "${mqtt_command_main_topic}/${mqtt_device_name}" # Topic we will use to command stuff from external without HA -########################################################################################## + +#:########################################################################################:# # PACKAGES: Included Common Packages # https://esphome.io/components/packages.html -########################################################################################## +#:########################################################################################:# packages: #### WIFI, Network (Static/DHCP/IPV6 etc), Fallback AP, Safemode #### common_wifi: !include @@ -55,6 +96,7 @@ packages: local_device_name: "${device_name}" local_static_ip_address: "${static_ip_address}" local_ota_pass: "${ota_pass}" + local_current_ip_address: "${current_ip_address}" #### HOME ASSISTANT API (choose encryption or no encryption options) #### common_api: !include @@ -68,80 +110,90 @@ packages: file: common/mqtt_common.yaml vars: local_device_name: "${device_name}" - + #### WEB PORTAL #### #common_webportal: !include common/webportal_common.yaml + #### SNTP (Only use if you want/need accurate timeclocks) #### - #common_sntp: !include common/sntp_common.yaml + #common_sntp: !include common/sntp_common.yaml #### DIAGNOSTICS Sensors #### - diag_basic: !include common/include_basic_diag_sensors.yaml - diag_more: !include common/include_more_diag_sensors.yaml - #diag_debug: !include common/include_debug_diag_sensors.yaml - #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml + diag_basic: !include common/include_basic_diag_sensors.yaml + diag_more: !include common/include_more_diag_sensors.yaml + #diag_debug: !include common/include_debug_diag_sensors.yaml + #diag_resetcount: !include common/include_resetcount_diag_sensors.yaml -########################################################################################## -# ESPHome + +#:########################################################################################:# +# ESPHOME: # https://esphome.io/components/esphome.html -########################################################################################## +#:########################################################################################:# esphome: name: "${device_name}" friendly_name: "${friendly_name}" comment: "${description_comment}" # Appears on the esphome page in HA area: "${device_area}" -# platformio_options: -# build_flags: -# - "-Os" # optimize for size -# - "-Wl,--gc-sections" # drop unused code/data -# - "-fno-exceptions" # strip C++ exceptions -# - "-fno-rtti" # strip C++ RTTI + project: + name: "${project_name}" + version: "${project_version}" -########################################################################################## -# ESP Platform and Framework -# https://esphome.io/components/esp32.html -########################################################################################## + +#:########################################################################################:# +# ESP PLATFORM AND FRAMEWORK: +# https://esphome.io/components/esp8266.html +#:########################################################################################:# esp8266: - board: esp01_1m # The original sonoff basic - restore_from_flash: True # restore some values on reboot + board: esp01_1m # The original Sonoff Basic + restore_from_flash: true # restore some values on reboot preferences: flash_write_interval: 5min mdns: - disabled: False + disabled: false -########################################################################################## -# ESPHome Logging Enable + +#:########################################################################################:# +# LOGGING: # https://esphome.io/components/logger.html -########################################################################################## +#:########################################################################################:# logger: - level: "${log_level}" #INFO Level suggested, or DEBUG for testing - baud_rate: 0 # set to 0 for no logging via UART, needed if you are using it for other serial things (eg PZEM) - #esp8266_store_log_strings_in_flash: false - #tx_buffer_size: 64 + level: "${log_level}" + baud_rate: 0 # set to 0 for no logging via UART -########################################################################################## -# SWITCH COMPONENT + +#:########################################################################################:# +# STATUS LED: +# https://esphome.io/components/status_led.html +# Sonoff Basic R1 LED is GPIO13 +#:########################################################################################:# +status_led: + pin: + number: GPIO13 + inverted: true + + +#:########################################################################################:# +# SWITCH COMPONENT: # https://esphome.io/components/switch/ -########################################################################################## -# Sonoff Basic R1 Relay Switch is GPIO12 -############################################# +# Sonoff Basic R1 Relay is GPIO12 +#:########################################################################################:# switch: - platform: gpio name: "${relay_1_name}" pin: GPIO12 id: relay1 restore_mode: RESTORE_DEFAULT_ON - icon: "${relay_icon}" + icon: "${relay_icon}" -########################################################################################## -# BINARY SENSORS + +#:########################################################################################:# +# BINARY SENSORS: # https://esphome.io/components/binary_sensor/ -########################################################################################## # Sonoff Basic R1 Button is GPIO03 -############################################# +#:########################################################################################:# binary_sensor: - + # Actual button input - platform: gpio pin: number: GPIO03 @@ -157,42 +209,30 @@ binary_sensor: then: - lambda: |- if (id(relay1).state) { - // Relay is ON: turn it OFF id(relay1).turn_off(); } else { - // Relay is OFF: turn it ON id(relay1).turn_on(); } - - # Mimics actual relay status (but not controllable) + + # Mimics actual relay status (but not controllable) + publishes MQTT state - platform: template name: "${relay_1_name} Status" lambda: |- return id(relay1).state; on_press: - mqtt.publish: - topic: "${mqtt_topic}/relay1/state" - payload: "ON" + topic: "${mqtt_main_topic}/relay1/state" + payload: "ON" on_release: - mqtt.publish: - topic: "${mqtt_topic}/relay1/state" - payload: "OFF" - -########################################################################################## -# STATUS LED -# https://esphome.io/components/status_led.html -########################################################################################## -# Sonoff Basic R1 LED is GPIO13 -############################################# -status_led: - pin: - number: GPIO13 - inverted: yes + topic: "${mqtt_main_topic}/relay1/state" + payload: "OFF" -########################################################################################## -# MQTT COMMANDS + +#:########################################################################################:# +# MQTT: # This adds device-specific MQTT command triggers to the common MQTT configuration. -########################################################################################## +#:########################################################################################:# mqtt: on_message: # Relay 1 control @@ -200,8 +240,8 @@ mqtt: payload: "ON" then: - switch.turn_on: relay1 + - topic: "${mqtt_main_topic}/relay1/set" payload: "OFF" then: - - switch.turn_off: relay1 - + - switch.turn_off: relay1 \ No newline at end of file diff --git a/esphome/esp-poollightpower2.yaml b/esphome/esp-poollightpower2.yaml index 8ee6e6e..9ff16f6 100644 --- a/esphome/esp-poollightpower2.yaml +++ b/esphome/esp-poollightpower2.yaml @@ -76,7 +76,7 @@ substitutions: current_ip_address: ${static_ip_address} # Device Settings - log_level: "DEBUG" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE + log_level: "INFO" # Define logging level: NONE, ERROR, WARN, INFO, DEBUG (Default), VERBOSE, VERY_VERBOSE update_interval: "60s" # update time for for general sensors etc # Device Settings @@ -753,7 +753,7 @@ select: - platform: template name: "Pool Light Mode" id: pool_light_mode_select - update_interval: 250ms + update_interval: 2s # Options include all 1..16 (no ignored modes currently) plus 0=OFF options: - "0= OFF" diff --git a/packages/integral_power_sensors.yaml b/packages/integral_power_sensors.yaml new file mode 100644 index 0000000..a2cac39 --- /dev/null +++ b/packages/integral_power_sensors.yaml @@ -0,0 +1,39 @@ +# power_integral_sensors.yaml +# Integral energy sensors derived from the existing 3-phase active power sensors. +# +# Assumption: +# - Source sensors are reporting active power in watts (W). +# - These integrals therefore convert W over time into kWh. +# +# Notes: +# - method: trapezoidal gives smoother and generally more accurate integration. +# - round: 2 gives a displayed precision of 0.00. +# - unit_time: h with unit_prefix: k gives kWh output from watt-based inputs. + +sensor: + - platform: integration + source: sensor.main_house_3_phase_power_monitor_main_power_red_active_power + name: "View Road 3 Phase Power RED (Integral)" + unique_id: view_road_3_phase_power_red_integral + method: trapezoidal + unit_time: h + unit_prefix: k + round: 2 + + - platform: integration + source: sensor.main_house_3_phase_power_monitor_main_power_yellow_active_power + name: "View Road 3 Phase Power YELLOW (Integral)" + unique_id: view_road_3_phase_power_yellow_integral + method: trapezoidal + unit_time: h + unit_prefix: k + round: 2 + + - platform: integration + source: sensor.main_house_3_phase_power_monitor_main_power_blue_active_power + name: "View Road 3 Phase Power BLUE (Integral)" + unique_id: view_road_3_phase_power_blue_integral + method: trapezoidal + unit_time: h + unit_prefix: k + round: 2 diff --git a/packages/nspanel_keepawake.yaml b/packages/nspanel_keepawake.yaml index a1a7d29..4178906 100644 --- a/packages/nspanel_keepawake.yaml +++ b/packages/nspanel_keepawake.yaml @@ -18,6 +18,6 @@ light: unique_id: "Entities to keep_nspanel_awake" entities: - light.inverted_quiet_time_as_light - - light.tasmo_arlecrgb_3522_bulb_3 + - light.master_bedroom_bedside_lamp_arlec_bulb_master_bedroom_bedside_lamp_arlec_bulb - light.tasmo_ifan02_3793_bedrm1_1 - light.tasmo_ks811t_3647_bedrm1_1b diff --git a/packages/openbeken.yaml.old b/packages/openbeken.yaml.old deleted file mode 100644 index 20c708d..0000000 --- a/packages/openbeken.yaml.old +++ /dev/null @@ -1,62 +0,0 @@ -mqtt: - switch: - - unique_id: "Garage_Entry_Switch_1" - name: "Garage Entry Switch 1" - state_topic: "obk/obk-ks811t-006D-garageentry/1/get" - command_topic: "obk/obk-ks811t-006D-garageentry/1/set" - qos: 1 - payload_on: 1 - payload_off: 0 - retain: true - availability: - - topic: "obk/obk-ks811t-006D-garageentry/connected" - - unique_id: "Garage_Entry_Switch_2" - name: "Garage Entry Switch 2" - state_topic: "obk/obk-ks811t-006D-garageentry/2/get" - command_topic: "obk/obk-ks811t-006D-garageentry/2/set" - qos: 1 - payload_on: 1 - payload_off: 0 - retain: true - availability: - - topic: "obk/obk-ks811t-006D-garageentry/connected" - - unique_id: "Garage_Entry_Switch_3" - name: "Garage Entry Switch 3" - state_topic: "obk/obk-ks811t-006D-garageentry/3/get" - command_topic: "obk/obk-ks811t-006D-garageentry/3/set" - qos: 1 - payload_on: 1 - payload_off: 0 - retain: true - availability: - - topic: "obk/obk-ks811t-006D-garageentry/connected" -# - unique_id: "Main_Bathroom_Light_Switch_1" -# name: "Main Bathroom Light Switch 1" -# state_topic: "obk/obk-ks811t-B1C4-mainbath1/1/get" -# command_topic: "obk/obk-ks811t-B1C4-mainbath1/1/set" -# qos: 1 -# payload_on: 1 -# payload_off: 0 -# retain: true -# availability: -# - topic: "obk/obk-ks811t-B1C4-mainbath1/connected" -# - unique_id: "Main_Bathroom_Light_Switch_2" -# name: "Main Bathroom Light Switch 2" -# state_topic: "obk/obk-ks811t-B1C4-mainbath1/2/get" -# command_topic: "obk/obk-ks811t-B1C4-mainbath1/2/set" -# qos: 1 -# payload_on: 1 -# payload_off: 0 -# retain: true -# availability: -# - topic: "obk/obk-ks811t-B1C4-mainbath1/connected" -# - unique_id: "Main_Bathroom_Light_Switch_3" -# name: "Main Bathroom Light Switch 3" -# state_topic: "obk/obk-ks811t-B1C4-mainbath1/3/get" -# command_topic: "obk/obk-ks811t-B1C4-mainbath1/3/set" -# qos: 1 -# payload_on: 1 -# payload_off: 0 -# retain: true -# availability: -# - topic: "obk/obk-ks811t-B1C4-mainbath1/connected"