homelab-codex-ws/kb/audits/ha-automatyzacje-2026-07-23.md
oskar ea9c6bbf7f feat(kb): przenosiny type=audit do kb/audits/ (2 pliki, bez SPLIT)
Nowy typ `audit` (rozstrzygniecie 2) — migawka stanu z pola `as_of`,
nie opis stanu biezacego.

monitoring-coverage-2026-07-14, ha-automatyzacje-2026-07-23.
Pozostale 5 audytow/reconow jest wielotypowych — wychodza w grupie SPLIT-ow.

git mv + frontmatter, tresc nietknieta.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-04 16:58:04 +02:00

30 KiB
Raw Blame History

okf type visibility status updated as_of links
0.1 audit private active 2026-07-23 2026-07-23

Audyt spójności automatyzacji instancji ken — 2026-07-23

Zakres: wyłącznie analiza; żadnych zmian w automatyzacjach/skryptach/scenach.

Materiał: config/ken/ (119 automatyzacji, 6 skryptów, 3 sceny), storage-export/ken/ (rejestry z 2026-07-22), fixtures/ken-states-2026-07-22.yaml (stany + last_triggered), config/ken-legacy/ (60 automatyzacji, archiwum), DESIGN.md (Incident log).

Zastrzeżenia metodyczne:

  • Rejestry i fixtures pochodzą z 2026-07-22, sprzed wdrożenia automatyki klimy (commity z 2026-07-23). Encje klimy „brakujące" w exportach nie muszą być martwe — patrz 1.1.
  • HA po restarcie 2026-07-17 15:07 (update Supervisora) zresetował last_changed — encje pokazujące unavailable od 2026-07-17 15:07 są martwe co najmniej od restartu; last_triggered automatyzacji wskazuje, że część padła dużo wcześniej (marzecmaj).
  • Deploy helpers (input_*) nie istnieje (faza 1 obejmuje tylko automations/scripts/scenes), więc obecności helperów klimy nie da się potwierdzić z repo.

Streszczenie

Liczby:

  • 119 automatyzacji (112 włączonych, 7 wyłączonych), 6 skryptów, 3 sceny.
  • 305 encji unavailable w fixtures; 6 czujników ruchu/obecności martwych lub gasnących (mdwejscie, mdsypialnia, mdtymka, mdheli, mdubikacja, occusalon).
  • ~15 automatyzacji martwych lub zdegradowanych przez martwe czujniki — po cichu: triggery nie strzelają albo warunki is_not_occupied na encji unavailable nigdy nie przechodzą.
  • 8 referencji do encji nieistniejących w registry (poza klimą).
  • 13 automatyzacji na time_pattern, z tego 7 co ≤1 min (w tym 6 kalibracji TRV co 4050 s i Set current_player co 15 s).
  • Legacy: 54/60 automatyzacji ma odpowiednik 1:1 na ken, 6 bez odpowiednika (sekcja 5).

Top 5 znalezisk wg wagi:

  1. [krytyczne] Kalibracja TRV sypialnia i Tymek liczy średnią z martwego czujnikaunavailable → float(0) zaniża temperaturę o połowę, kalibracje przypięte do 5.0 (potwierdzone w fixtures). W sezonie grzewczym oznacza to trwałe przegrzewanie obu pokoi. Pętle piszą po Zigbee co 4045 s (baterie TRV 2038%). (1.4)
  2. [krytyczne] Martwy klaster czujników ruchu wyłączył alerty i nocne gaszenie — m.in. email on move in hall/sypialnia when on leave (funkcja antywłamaniowa) nigdy nie wystrzeli; oba nocne „turn off lights if clear" martwe od marca; sleep_mode nie włącza się już automatycznie. (1.2, 2.4)
  3. [krytyczne] Łańcuch alertów wodnych dziurawy — czujnik WC unavailable (brak alertu przy zalaniu), „dry in Kuchnia" triggeruje na moist (kopiuj-wklej), „dry in Lazienka" ma literówkę mesaage: (akcja bez message → skrypt się wywala). (1.3, 2.6)
  4. [istotne] Poranek start codziennie wisi 1 h na martwym czujnikuwait_for_trigger na mdwejscie (unavailable) zawsze dobija do timeoutu 1 h; radio i powitanie startują o godzinę za późno. (1.2c)
  5. [istotne] Klima salon: helperów nie ma w żadnym exporcie, a gałąź OFF nie sprawdza klima_salon_auto — jeśli helpery nie istnieją na instancji, obie automatyzacje są martwe (cicho); niezależnie od tego zachód słońca ubija też ręcznie włączone chłodzenie. (1.1, 3.1)

1. Martwe referencje

1.1 [istotne — do weryfikacji] Helpery klimy salonowej niepotwierdzone

Pliki: 1784804667795 „Klima salon: włącz…", 1784804668795 „Klima salon: wyłącz…", scripts/klima_salon_dry_off.yaml.

Referencje: input_boolean.klima_salon_auto, input_number.klima_salon_temp_docelowa, input_number.klima_salon_tolerancja — nie występują w storage-export/ken/input_*.yaml ani w fixtures (snapshoty z 2026-07-22, sprzed deployu klimy). Repo nie ma toru deployu helperów, więc musiały powstać ręcznie w UI — albo nie powstały. Jeśli ich nie ma, warunek state: 'on' na nieistniejącej encji nigdy nie przechodzi i cała automatyka klimy jest martwa bez żadnego błędu.

PROPOZYCJA: jednorazowa weryfikacja na żywej instancji (/api/states), potem re-import input_* do storage-export, żeby snapshot dogonił stan.

1.2 [krytyczne] Martwe czujniki ruchu/obecności — ~15 automatyzacji cicho nie działa

Stan w fixtures: binary_sensor.0x00124b00251472ef_occupancy (mdwejscie/hall), mdsypialnia_occupancy, mdheli_occupancy — unavailable co najmniej od restartu 2026-07-17; occusalon_occupancy od 2026-07-20, mdtymka_occupancy od 2026-07-21, mdubikacja_occupancy od 2026-07-22 (te trzy gasną/flapują — typowy obraz siadających baterii). last_triggered wskazuje, że occusalon i mdwejscie realnie przestały działać w okolicach marcamaja.

Skutki, w kolejności wagi:

a) Alerty on-leave martwe: 1753431022365 „email on move in hall when on leave" i 1753883109847 „email on move in sypialnia when on leave" — triggery na martwych czujnikach; nigdy nie wystrzelą. Przy on_leave = on dom NIE zgłosi ruchu. (Ostatnie odpalenia: 2026-01-29 / 2025-09-15 — jeszcze z czasów życia czujników.)

b) Nocne gaszenie świateł martwe: 1702844937214 „Turn off Lights after 23:30 if clear" (ostatni raz 2026-03-27) i 1763384250145 „Turn off Swiatlo na Kuchnia after 23:30 if clear" (2025-11-27) mają w warunkach is_not_occupied na occusalon/mdwejscie/mdubikacja — unavailableoff, warunek zawsze fałszywy. Konsekwencja wtórna: 1702844937214 było jedynym automatycznym włącznikiem input_boolean.sleep_mode — sleep mode działa już tylko z przycisku w sypialni. Realnie nocą domyka światła tylko 1700832676138 „Turn off lights unconditionally at 3am".

c) Poranek start (1763386155895) wisi godzinę: główna sekwencja czeka wait_for_trigger na mdwejscie occupied z timeoutem 1 h — czyli codziennie pełny timeout; radio/speak startują o ~7:42 zamiast po wykryciu ruchu. Dodatkowo 1764595573287 „Poranek pause media player…" (warunki na occusalon+mdwejscie) — martwe od 2026-03-26.

d) 1763637049783 („Turn off swiatlo nad kuchnia when no motion, no trigger", entity automation.new_automation_3, wywoływane codziennie przez Poranek stop): pętla repeatuntil z warunkami na mdwejscie i occusalon — until nigdy nie przejdzie, pętla kręci się w nieskończoność (delay 1 min), aż ubije ją restart HA lub stop_actions. Zombie.

e) 1752607597518 „Turn off led zasilanie w Kuchni": warunek AND na 3 czujnikach, z których 2 martwe → nigdy nie przechodzi. Potwierdzone: switch.tasmota_14 świeci się non stop (state on). LED zasilania w kuchni nie gaśnie od marca.

f) Mniejsze: 1666891422388/1666891723803 (Magic Mirror Display On/Off — trigger mdwejscie, lustro nie reaguje na obecność), 1667065238690 „Swiatlo na wejscie do domu" (trigger mdwejscie, ostatnio 2026-03-24), 1703104763868 „Turn OFF Heli sufit" (warunek mdheli, ostatnio 2026-04-08), 1763637857513 „…no motion in all home for 1h" (warunki na 5 martwych czujnikach; częściowo uratowane przez odnogę OR akceptującą unavailable mdkorytarz — ale AND na mdheli/mdtymka/mdsypialnia i tak blokuje), 1734943824257 „Turn ON Choinka na wejscie" (trigger mdwejscie — podwójnie martwe, patrz 4.2).

PROPOZYCJA: wymiana baterii / re-pairing 6 czujników to jedna fizyczna akcja, która reanimuje większość powyższego. Po niej: przegląd, czy 1763637049783 (zombie-pętla) nie powinno zostać przepisane na zwykłe warunki for:. Docelowo rozważyć alerty ha-diag-agent na unavailable > 24 h dla czujników użytych w automatyzacjach (routing ha_entity_unavailable_long już istnieje w supervisorze).

1.3 [krytyczne] Czujnik wycieku WC martwy

binary_sensor.waterleakwc_water_leak unavailable (razem z baterią) → 1752086527168 „email on water sensor moist in WC" i 1752086563805 „dry in WC" nie wystrzelą przy zalaniu. Pozostałe czujniki wycieku żyją (bateria łazienkowego: 35%).

PROPOZYCJA: bateria/re-pairing; rozważyć zbiorczy alert „czujnik bezpieczeństwa unavailable" (jak w 1.2).

1.4 [krytyczne] Kalibracje TRV liczone z martwych czujników, pętle co 4050 s

Pliki: 1764751049013 (Sypialnia), 1765817937658 (Tymek), 1766345640142 (Łazienka), 1765817263673 (Heli), 1766348309347 (SalonLewy), 1766348430579 (SalonPrawy).

  • Sypialnia i Tymek: room_temp = (thX + zhimi_Y)/2, a oba czujniki zhimi są unavailable od 2026-07-17 → float(0) → średnia zaniżona o połowę → diff zawsze na dolnym ograniczniku → kalibracja dojechała do 5.0 (potwierdzone w fixtures dla obu). TRV raportuje temperaturę o 5° za nisko; w sezonie grzewczym = trwałe przegrzewanie. Dziś (lato, TRV off) bug jest uzbrojony, ale nieszkodliwy — do naprawy przed sezonem.
  • Łazienka: climate.heaterlazienkatrv07 i jego number.*_calibration są unavailable (TRV zniknął z sieci) → number.set_value co 40 s w próżnię (błędy w logach). Powiązane: 1766408469485 „Boost heater temp in Lazienka when shower" — trigger na sensor.thtuyalazienka_humidity_stats_5min (state unknown; sensor statystyczny prawdopodobnie nie przeżył migracji na HAOS) + cel unavailable → martwe.
  • Salon lewy/prawy: kalibracje przypięte do +5 (max). Częściowo tłumaczy to lato (TRV nie mierzy sensownie przy zaworze off), ale SalonPrawy ma clamp diff ±5, podczas gdy wszystkie pozostałe ±1.5 — wygląda na niedokończony eksperyment, nie świadomą różnicę.
  • Wszystkie 6: time_pattern co 40/45/50 s pisze po Zigbee do TRV na baterii (poziomy 2038%). To agresywny polling; for:/trigger na zmianę temperatury załatwiłby to samo przy ułamku ruchu.

PROPOZYCJA: (1) wywalić uśrednianie z czujników zhimi albo dodać guard is not unavailable; (2) po naprawie ręcznie wyzerować kalibracje sypialnia/Tymek; (3) zwolnić pętle do np. 5 min lub przejść na trigger zmiany stanu; (4) ujednolicić clamp SalonPrawy; (5) reanimować TRV łazienki albo wyłączyć jego automatyzacje.

1.5 [istotne] Encje usunięte z registry — automatyzacje trwale martwe

  • 1751307777881 „Aktualizuj lokalizację Oskar": sensor.owntracks_last_location nie istnieje (integracja OwnTracks nie przeżyła migracji?). Ostatni trigger 2025-12-20; device_tracker.oskar = not_home na stałe, mimo że person.oskar = home (inna ścieżka). PROPOZYCJA: przywrócić OwnTracks albo skasować automatyzację i sprzątnąć device_tracker.oskar.
  • 1760432474594 „Notify on router sypialnia is away for too long": sensor.routerheli_last_seen nie istnieje; last_triggered NULL; pattern co 1 min ocenia warunek na nieistniejącej encji. Uwaga: alias mówi „sypialnia", sensor „heli". PROPOZYCJA: skasować lub podpiąć istniejący sensor.
  • 1763384250145 „Turn off Swiatlo na Kuchnia after 23:30 if clear": warunek na binary_sensor.0x8c65a3fffeea673a_occupancy — stary identyfikator occusalon sprzed zmiany nazwy. Nawet po reanimacji occusalon ta automatyzacja nie ożyje. PROPOZYCJA: podmienić na binary_sensor.occusalon_occupancy.
  • 1640285211569/1640285276640 „Oczyszczacz i nawilżacz prze przycisk Tymka [ON]/[OFF]": fan.mi_air_purifier_3_3h i switch.gniazdko_xiaomi_2 nie istnieją w registry; ostatnie triggery 2024. Martwe od ~2 lat. PROPOZYCJA: skasować (patrz też 4.5).
  • 1752241986989 „test test Powitanie głosowe…": sensor.temperature_salon nie istnieje (jest thsalon_temperature); automatyzacja wyłączona, bez triggerów. PROPOZYCJA: skasować.

1.6 [istotne] Encje trwale unavailable w akcjach

  • 1700837302203 „Speak" (4button 1_double): cel media_player.salon_2 (soundbar Bose) unavailable — przycisk „powiedz" martwy. Jedyny konsument tts.google_translate_say; reszta domu mówi przez tts.piper+pimirror. PROPOZYCJA: przepiąć na pimirror/piper albo skasować.
  • 1761038411219 „Oczyszcza w tryb nocny" (23:30): xiaomi_miot.set_property na fan.zhimi_mc2_c369_air_purifier — unavailable od 2026-07-17; co noc błąd. Szerszy obraz: cała rodzina encji zhimi (mb3, mc2) padła równo z restartem/aktualizacją 2026-07-17 — wygląda na wysypaną integrację xiaomi_miot, nie na urządzenia. Dotyka też scen (4.2) i kalibracji TRV (1.4). PROPOZYCJA: zdiagnozować integrację miot po stronie HA zamiast naprawiać pojedyncze automatyzacje.
  • Sceny Oczyszczacze i Nawilzacze ON/OFF: połowa encji żyje (tasmota_4/5, chuangmi), wentylatory zhimi unavailable → sceny wykonują się częściowo.

2. Sprzeczności i wyścigi

2.1 [istotne] „Disable AUTO off lights in Kuchnia" jest unieważniane po ≤15 min

1762952673833 (double-click) wyłącza automation.turn_off_lights_in_kuchania i zapala światła — intencja: „zostaw światła w spokoju". Ale 1764190493305 „Turn off lights in Kuchnia after 15 minutes anyway" (zawsze włączone, pattern /5 + własny trigger) gasi te same światła po 15 min bez ruchu i z powrotem włącza auto-off. Przy bezruchu (oglądanie czegoś, gotowanie poza zasięgiem czujników) decyzja użytkownika żyje kwadrans. Do tego 1763383792516 „Activate AUTO… after 1h" i 1762954145724 „…at 23:30" też re-aktywują auto-off. Nakładka intencji: „anyway" vs „disable".

PROPOZYCJA: „after 15 minutes anyway" powinno respektować stan wyłączenia turn_off_lights_in_kuchania (warunek state: automation... = on) albo double-click powinien ustawiać dedykowany input_boolean.kuchnia_manual sprawdzany przez wszystkie gaszące automatyzacje.

2.2 [istotne] Cztery nakładające się nocne wyłączniki tych samych świateł

Na zestaw {switch.tasmota, sufit2/3, tasmota_12, tasmota_8, zblampkiregal} działają równolegle: 1702844937214 (pattern /5, 23:306:30 — martwe, 1.2b), 1763384250145 (pattern /3 — martwe, 1.5), 1768946230585 (sleep-mode enforcer, pattern /5) i 1700832676138 (3:00). Trzy z nich to warianty tej samej funkcji pisane w różnych epokach. Po reanimacji czujników wszystkie trzy ożyją naraz i będą się ścigać (różne warunki, ten sam cel).

PROPOZYCJA: skonsolidować do jednej automatyzacji „nocne domknięcie" z jasnym priorytetem trybów; pozostałe skasować.

2.3 [kosmetyczne] 1700832676138 „…at 3am": time_pattern hours: '3' bez minut

Odpala się co minutę przez całą godzinę 3:003:59 (60 prób, w tym 3 na unavailable przełącznikach choinki). PROPOZYCJA: zwykły trigger time: 03:00.

2.4 [istotne] Enforcer sleep mode gasi światła co ~10 min przez całą noc

1768946230585 „Turn OFF lights 5 minutes after sleep mode activated" ma dwa triggery: krawędź sleep_mode off→on i time_pattern /5», z warunkiem sleep_mode = on`. Efekt: to nie jest „5 minut po aktywacji", tylko cykliczny dozorca — każde światło z listy zapalone ręcznie w trakcie sleep mode zgaśnie w ciągu 510 min. Jeśli to celowe, alias kłamie; jeśli nie — pattern jest zbędny. PROPOZYCJA: decyzja operatora (patrz checklista); przy „tylko raz" usunąć trigger pattern.

2.5 [kosmetyczne] Blat w Pralni — double-click może zdesynchronizować parę automatyzacji

1760992440280 toggluje niezależnie dwie automatyzacje (ON-ową i OFF-ową). Dziś obie są on, więc działa; jeśli kiedykolwiek rozjadą się (restart, ręczna zmiana), double-click będzie je wiecznie swapował zamiast włączać/ wyłączać parę. Dodatkowo w nocy 1768989504100 (night light 1%… w praktyce turn_on/off) i para MD piszą w ten sam switch.zbpralniablat — kierunkowo zgodne, ale night-light wyłącza po 5 min timeoutu nawet przy obecności (wait not_occupied z continue_on_timeout). PROPOZYCJA: toggle zastąpić parą turn_on/turn_off wg stanu jednej z nich.

2.6 [krytyczne → patrz Top 3] Para wodna Kuchnia: „dry" triggeruje na moist

1752086407230 „email on water sensor dry in Kuchnia" ma trigger type: moist (kopiuj-wklej z 1752086343222). Efekt: przy zalaniu kuchni przychodzą DWA maile („mokro" i „sucho") naraz, a informacja „wyschło" nie przyjdzie nigdy. Ślad w fixtures: „dry" ma last_triggered 2026-01-20, „moist" — NULL (czyli realne zdarzenie moist obsłużyła… automatyzacja „dry"; NULL na „moist" prawdopodobnie przez późniejsze przeładowanie). Bonus: 1752085965483 „dry in Lazienka" przekazuje parametr mesaage: (literówka) — skrypt notify_email_ntfy dostaje niezdefiniowane message i akcja się wykłada. PROPOZYCJA: trigger na not_moist w Kuchni; mesaage → message w Łazience.

2.7 [kosmetyczne] Redundantne harmonogramy Gniazdka w Łazience

ON: 7:00, 20:00 (warunek on_leave off); OFF: 1:00, 2:00, 9:30, 10:30, 12:30 (bez warunków). Okna 7:009:30 i 20:001:00 są spójne; trzy dodatkowe OFF-y to pasy bezpieczeństwa. Sprzeczności brak. Odnotowane, bo pięć punktowych OFF-ów w jednej automatyzacji utrudnia czytanie intencji.

2.8 [kosmetyczne] Dwa wyłączniki stereo

1744976289447 (idle 15 min, po 23:30) i 1763662256621 (idle 1 h, zawsze) — nakładka celowa (nocne zaostrzenie), kierunkowo zgodna. OK, odnotowane.

3. Trigger brzegowy bez lustrzanego warunku (klasa buga z klima_salon, fix faa2e2a)

Przejrzano wszystkie automatyzacje z >1 triggerem pod kątem: „warunek istnieje tylko jako inny trigger, więc obcy trigger omija bramkę".

3.1 [istotne] 1784804668795 „Klima salon: wyłącz…" — OFF nie sprawdza klima_salon_auto

Gałąź ON wymaga klima_salon_auto = on; gałąź OFF (sunset / balkon ≤ salon 15 min / auto→off) ma tylko warunek climate = cool. Scenariusz: użytkownik wyłącza tryb auto i chłodzi ręcznie — o zachodzie słońca (albo gdy balkon zrówna się z salonem) automatyzacja i tak ubije chłodzenie i odpali suszenie parownika. Jeśli intencja to „suszenie parownika zawsze, niezależnie od trybu" — OK, ale wtedy warto to zapisać w description. PROPOZYCJA: decyzja operatora; przy „auto-only" dodać warunek klima_salon_auto = on.

3.2 [istotne] 1768946230585 — pattern omija semantykę „po aktywacji" (opisane w 2.4)

Formalnie ta sama klasa: trigger krawędziowy (off→on) plus trigger czasowy, który wchodzi tą samą bramką warunków co stan ciągły.

3.3 Przypadki sprawdzone i czyste

  • 1751562415786 „Turn off lights in Kuchnia": triggery czujnikowe + pattern /5 + 23:30:02, ale warunki lustrzanie wymagają wszystkich czterech czujników not_occupied — pattern nie omija bramki. OK.
  • 1764190493305 „after 15 minutes anyway": pattern /5 zlustrzany warunkami 14:45. OK (problem tej automatyzacji to 2.1, nie klasa 3).
  • 1744918189114/1744919280479/1744919746930 (pigry/piplayer): pattern co minutę, warunki z for: — lustrzane. OK.
  • 1666471111199 „Zasilanie multimediów auto-off": pattern co minutę, warunki TV off 1 min + gniazdko on 10 min — okno rozruchu TV (2m35s w 1764610725230) mieści się w 10-minutowej karencji. OK.
  • Pary ON/OFF na wspólnym triggerze (1640285211569/...276640 — 1_hold Tymka) bramkowane is_off/is_on — wzorzec poprawny (choć encje martwe, 1.5).

4. Higiena

4.1 [kosmetyczne] Aliasy-śmieci i rozjazdy alias ↔ entity_id

entity_id (fixtures) alias (repo) problem
automation.lampka_test_1_on „Mirror OFF" entity z testu żarówki, robi lustro
automation.xxxxxx „Turn on led nad blatem duzym prawym"
automation.new_automation „4b: 1_sc: Swiatlo nad kuchnia"
automation.new_automation_2 „1b2: 1_ho: Choinka i lampki OFF"
automation.new_automation_3 „Turn off swiatlo nad kuchnia when no motion, no trigger"
automation.choinka „4b: 2_dc: Activate Scene Film" alias zmieniony (legacy: „Lampki na półce"), entity zostało po choince
automation.swiatlo_za_telewizorem_z_przycisku „1b2: 1_dc: Choinka i lampki ON" entity po starej funkcji
automation.gniadka_w_lazience_off „Gniazdka w Łazience OFF" alias naprawiony (57a5f66), entity z literówką zostało
automation.turn_off_lights_in_kuchania „Turn off lights in Kuchnia" literówka „kuchania" — na tym entity wisi 8 referencji z innych automatyzacji!
automation.email_on_water_sensor_dry_in_lazienka_2/3/4 dry in Kuchnia/Pralnia/WC kopie po Łazience
automation.turn_off_blat_w_pralnia_on_md „Turn ON blat w Pralnia on MD" entity mówi „off"
automation.set_heaterhelitv07_… / set_heaterlazienkatrv10_… / set_heatersypialniatv02_… / set_heatertymktv10_… aliasy TRV10/TRV07 numery TRV w entity nie zgadzają się z aliasami

Duplikatów aliasów brak. PROPOZYCJA: nie zmieniać entity_id hurtowo (referencje krzyżowe — zwłaszcza turn_off_lights_in_kuchania jest celem automation.turn_on/off z 8 miejsc); jeśli porządkować, to najpierw mapa referencji, osobny task. Aliasy typu „test"/„xxxxxx" można prostować bezpiecznie (alias nie jest identyfikatorem).

4.2 [istotne] Sezonowe aktywne poza sezonem (choinka w lipcu)

  • 1734943824257 „Turn ON Choinka na wejscie" — włączona, ostatni trigger 2026-05-02 (sic!), cele: tasmota_12 („Lampki na półce"), tasmota_8 („Choinka"), zblampkiregal — wszystkie trzy unavailable (fizycznie odpięte).
  • 1689079279480/1689079321508 „1b2: 1_dc/1_ho: Choinka i lampki ON/OFF" — przyciskowe, włączone, cele unavailable.
  • Scena Film (1730724373818) ma zapisany stan switch.tasmota_8: unavailable (scena robiona przy odpiętej choince) i tasmota_12: on.

PROPOZYCJA: wyłączać (nie kasować) sezonowe automatyzacje po sezonie — np. konwencja aliasu [sezon:zima] + jedna automatyzacja/checklista sezonowa. Scena Film do przegrania bez encji choinkowych.

4.3 [kosmetyczne] last_triggered NULL lub >12 miesięcy (kandydaci do przeglądu)

  • 2024: 1640285211569, 1640285276640 (Tymek ON/OFF — martwe encje, 1.5), 1703104933437 „Turn OFF TYmka sufit" (2024-09, wyłączona).
  • NULL: 1752086343222 „moist in Kuchnia" (patrz 2.6 — zostawić, to alert), 1760432474594 (martwa, 1.5).
  • Wyłączone od dawna: 1704492239040/288312 „prototyp w ubikacji" (2025-08, świadomie zarzucony — patrz 5), 1752241986989 „test test…" (2025-07), 1701370240657 „Przyjscie Tymka" (2025-11, wyłączona), 1744918520715 „Turn on pigry wo trigger" (2025-04; bez triggerów — de facto skrypt).
  • 1714050591470 „Leave auto on: batch 02" — wyłączona, podczas gdy „Leave auto off: batch 02" włączona. Przy najbliższym urlopie symulacja obecności zapali tylko batch 01. Niespójność do decyzji.

4.4 [kosmetyczne] Automatyzacje-bez-triggerów używane jak skrypty

speak_mirror, speak_mirror_alert, Poranek stop, new_automation_3, Turn on pigry wo trigger, Test ntfy — wywoływane przez automation.trigger lub ręcznie. Działa, ale to semantycznie skrypty (byłyby widoczne w UI skryptów, nie zaśmiecałyby listy automatyzacji i nie miałyby stanu on/off do przypadkowego wyłączenia). PROPOZYCJA: przepisać na script.* przy okazji porządków.

4.5 [kosmetyczne] Inne

  • input_boolean.motion_front — nieużywany w żadnej automatyzacji (kandydat do kasacji); input_number.test — jw.
  • input_datetime.koniec_urlopu = 2026-01-31 (przeszłość) — trigger End of On leave nie odpali do czasu ustawienia nowej daty; spójne z on_leave = off, ale warto wiedzieć, że to ręczny krok przy każdym urlopie.
  • sensor.4button_battery unavailable od 2026-07-17, a automatyzacje 4b: strzelały jeszcze 2026-07-12 — pilot prawdopodobnie na resztkach baterii (albo ofiara tej samej awarii co zhimi). Do sprawdzenia fizycznie — wisi na nim 8 automatyzacji salonu.

5. Porównanie z legacy (60 automatyzacji archiwum)

54/60 ma odpowiednik na ken po tym samym id. Bez odpowiednika:

legacy id alias ocena
1639950051409 --Test obecnosci telefonu test (prefiks --), strata zerowa
1666696862316 ---Zone Notification oka leave home blueprint, prefiks --- (wyłączony konwencją), strata zerowa
1667745509155 Notify move in Sypialnia na ken zastąpione wariantem tylko on-leave (1753883109847). Funkcja „zawsze powiadom o ruchu w sypialni" znikła — wygląda na świadomą redukcję szumu, do potwierdzenia
1701086617456 Oczyszczacz i nawilżacz z przycisku przycisk sypialni (long) przemapowany na ken na Sleep mode OFF (1768946838707) — świadoma zmiana funkcji przycisku
1701087364463 Wszystkie nawilżacze i oczyszczenie z przycisku jw. (double → Sleep mode ON)
1703105565821 Turn OFF pimirror jedyna realna strata: graceful shutdown lustra (press przycisku shutdown → 1 min → odcięcie zasilania). Na ken zostało tylko twarde cięcie o 23:35 (Mirror OFF) i ścieżka ACK (Magic Mirror OFF on ACK), której nic już nie inicjuje — RPi lustra jest codziennie twardo odłączany od prądu

Znany przypadek świadomej decyzji (wzorzec, jak to robić dobrze): „prototyp w ubikacji" istnieje na ken, ale wyłączony, czujnik zdemontowany, a dimmer light.tsdimm01 przeznaczony ponownie do LED nad małym blatem w kuchni. Uwaga praktyczna: przypadkowe włączenie tej pary automatyzacji miga światłem w kuchni od (martwego dziś) czujnika ubikacji — bezpieczniej skasować niż trzymać wyłączone.

PROPOZYCJA: odtworzyć graceful shutdown lustra (mqtt halt przed 23:35 + istniejący ACK-flow zamiast gołego odcięcia zasilania); potwierdzić decyzję o sypialni; resztę uznać za zamkniętą.

6. Spójność stylistyczna (informacyjnie, nie błędy)

  • Nazewnictwo: trzy pokolenia konwencji naraz — prefiksy przyciskowe (4b: 3_sc:, 1b2: 1_ho:), angielskie zdania („Turn off lights in Kuchnia after 15 minutes anyway"), polskie zdania („Oczyszczacz i nawilżacz prze przycisk Tymka"). Mieszanka PL/EN często w jednym aliasie. Literówki: „Toogle", „prze przycisk", „Lampiki", „wzmaczniacz", „Oczyszczecze", „Gniadka" (w entity), „kuchania" (w entity).
  • device_id vs entity_id: ~60% akcji to device automation z surowymi device_id/UID-ami registry (32-znakowe hexy) — nieczytelne w YAML-u i kruche przy wymianie sprzętu (nowe urządzenie = nowy device_id = cicha śmierć automatyzacji; dokładnie ten mechanizm ubił parę Tymka z 1.5 i ukrył rename occusalon z 1.5). Nowsze automatyzacje (klima, ledy blatowe) używają już action + entity_id — ta konwencja powinna być docelowa dla wszystkich nowych/przepisywanych automatyzacji.
  • TTS: dwa systemy równolegle — tts.google_translate_say na martwym Bose (Speak) vs tts.piper na pimirror (reszta). Docelowo jeden.
  • Polling vs zdarzenia: 13 automatyzacji time_pattern, w tym co-minutowe („Send balkon temp to mm", multimedia, pigry/piplayer) i sub-minutowe (current_player 15 s, TRV 4050 s). Część jest uzasadniona (ping-sensory), ale kierunek powinien być zdarzeniowy tam, gdzie HA ma trigger (np. Send balkon temp → trigger na zmianę stanu sensora zamiast REST co minutę).
  • Tryby: cztery flagi trybów (sleep_mode, night_mode, passive_mode, movie_mode) o częściowo pokrywającej się semantyce; night_mode włącza się o 23:30 i gaśnie o wschodzie (latem 4:30), sleep_mode gaśnie o 6:30 — automatyzacje sprawdzają raz jedną, raz drugą, raz OR obu. Entity automation.turn_off_sleep_mode_at_sunrise steruje… night_mode. Do przemyślenia konsolidacja w jeden input_select.tryb_domu.

Do decyzji operatora

Pytania tak/nie, do przejścia punkt po punkcie:

  1. Wymieniamy baterie / re-parujemy 6 czujników ruchu (mdwejscie, mdsypialnia, mdtymka, mdheli, mdubikacja, occusalon) i czujnik wycieku WC? (1.2, 1.3)
  2. Naprawiamy kalibracje TRV przed sezonem: guard na unavailable + reset 5.0 w sypialni/Tymku + zwolnienie pętli do ≥5 min? (1.4)
  3. Diagnozujemy integrację xiaomi_miot (padła 2026-07-17 razem z encjami zhimi) zamiast łatać pojedyncze automatyzacje? (1.6)
  4. Poprawiamy parę wodną Kuchnia (moistnot_moist) i literówkę mesaage w „dry in Lazienka"? (2.6) — dwie zmiany one-linerowe.
  5. Weryfikujemy na żywym ken istnienie helperów klimy (klima_salon_auto, _temp_docelowa, _tolerancja)? (1.1)
  6. Czy „Klima salon: wyłącz" ma ubijać także ręczne chłodzenie o zachodzie (obecne zachowanie), czy respektować klima_salon_auto = off? (3.1)
  7. Czy enforcer sleep mode ma gasić światła cyklicznie całą noc (obecne zachowanie), czy tylko raz po aktywacji? (2.4)
  8. Czy „Turn off lights in Kuchnia after 15 minutes anyway" ma respektować ręczne „Disable AUTO off" (double-click)? (2.1)
  9. Konsolidujemy cztery nocne wyłączniki świateł do jednego? (2.2)
  10. Kasujemy martwe od lat: para Tymka [ON]/[OFF], „test test Powitanie…", „Notify on router sypialnia…", para „prototyp w ubikacji"? (1.5, 4.3, 5)
  11. Przywracamy OwnTracks (lokalizacja Oskar) czy kasujemy automatyzację i device_tracker.oskar? (1.5)
  12. Włączamy z powrotem „Leave auto on: batch 02" (symulacja obecności) — czy celowo została wyłączona? (4.3)
  13. Wyłączamy na lato automatyzacje choinkowe i przegrywamy scenę Film bez encji choinki? (4.2)
  14. Odtwarzamy graceful shutdown pimirror (jedyna realna strata z migracji)? (5)
  15. Sprawdzamy baterię pilota 4button (8 automatyzacji salonu na jednym urządzeniu, encje unavailable od 2026-07-17)? (4.5)
  16. Naprawiamy „Turn off lights unconditionally at 3am" na punktowy trigger 03:00 (dziś strzela 60×/noc)? (2.3)
  17. Ustalamy konwencję na przyszłość: nowe automatyzacje tylko entity_id (bez device automations) + aliasy w jednym języku? (6)

Wygenerowano w ramach audytu read-only; żadna automatyzacja, skrypt ani scena nie zostały zmodyfikowane. Snapshot źródłowy: registry/fixtures 2026-07-22, repo task/ha-audyt-automatyzacji (parent faa2e2a).