Automatyzacje zamka w Home Assistant: bezpieczne scenariusze, gotowe YAML i diagnostyka
Inteligentny zamek zaczyna mieć prawdziwą wartość dopiero wtedy, gdy przestaje być tylko przyciskiem w telefonie. Home Assistant może dopilnować ryglowania po zamknięciu drzwi, przypomnieć o niezabezpieczonym wejściu, powiadomić o zacięciu napędu, przygotować dom po powrocie konkretnej osoby, obsługiwać czasowy dostęp dla serwisu i połączyć wejście z alarmem, oświetleniem oraz wideodomofonem. Te same automatyzacje mogą jednak stać się zagrożeniem, jeżeli opierają się na jednym zawodnym sygnale albo wysyłają komendę otwarcia bez sprawdzenia kontekstu. Ten poradnik pokazuje nie tylko gotowe przykłady, lecz przede wszystkim sposób projektowania systemu, który zachowuje się przewidywalnie także po awarii internetu, restartach Home Assistanta, utracie łączności i błędnym stanie urządzenia.
Automatyzacja może bezpiecznie zaryglować drzwi po potwierdzeniu, że są domknięte. Automatyczne odryglowanie lub cofnięcie zapadki wymaga znacznie mocniejszych warunków. Sama strefa GPS, sama obecność telefonu w Wi-Fi albo pojedynczy beacon Bluetooth nie powinny wystarczać do otwarcia wejścia.
Zanim napiszesz pierwszy YAML: model stanów drzwi
Najczęstszy błąd polega na traktowaniu encji lock.drzwi_wejsciowe jako pełnej informacji o wejściu. Zamek wie zwykle, w jakiej pozycji znajduje się napęd lub rygiel. Nie zawsze wie, czy skrzydło drzwi jest fizycznie domknięte. Drzwi mogą być otwarte i jednocześnie zaryglowane, domknięte i odryglowane, przymknięte bez wejścia zapadki albo mechanicznie zablokowane mimo stanu zgłaszanego jako locked.
| Stan zamka | Kontaktron | Znaczenie | Działanie |
|---|---|---|---|
| locked | off / closed | drzwi domknięte i zaryglowane | stan prawidłowy |
| unlocked | off / closed | drzwi domknięte, ale niezaryglowane | można przypomnieć lub uruchomić auto-lock |
| unlocked | on / open | ktoś wchodzi albo wychodzi | nie rygluj |
| locked | on / open | rygiel wysunięty przy otwartym skrzydle lub błędny stan | pilny alert, nie zamykaj drzwi siłą |
| jammed | dowolny | napęd wykrył opór | alert i kontrola mechaniki |
| unknown / unavailable | dowolny | brak wiarygodnego potwierdzenia | nie zakładaj, że drzwi są bezpieczne |
Minimalny zestaw do sensownych automatyzacji to zatem encja zamka oraz niezależny czujnik otwarcia. Przy wymagających drzwiach warto dodać czujnik położenia rygla albo kontaktron zamontowany tak, aby rozpoznawał pełne wejście rygla w zaczep.
Przygotowanie encji i pomocników
W przykładach wykorzystuję następujące nazwy. Zastąp je własnymi encjami:
lock.drzwi_wejsciowe— główna encja zamka,binary_sensor.drzwi_wejsciowe— kontaktron;onoznacza otwarte,sensor.zamek_bateria— poziom baterii,alarm_control_panel.dom— alarm,person.marekiperson.anna— osoby,input_boolean.tryb_goscie— czasowe wyłączenie części reguł,input_boolean.auto_otwieranie— osobne świadome zezwolenie na auto-unlock,timer.okno_powrotu— krótkie okno, w którym wolno rozpoznać podejście po powrocie,input_datetime.ostatnie_otwarcie_zamka— rejestr czasu ostatniej operacji.
entity_id łatwiej przenieść na nowy model zamka, czytać i diagnozować. Wymiana Nuki na Tedee nie musi wtedy oznaczać przebudowania całej logiki.1. Automatyczne ryglowanie po domknięciu drzwi
To jedna z najbardziej użytecznych i najmniej ryzykownych automatyzacji. Nie uruchamiaj jej natychmiast po zmianie kontaktronu. Krótkie opóźnienie pozwala wrócić po torbę, wnieść zakupy i odfiltrować drganie czujnika. Przed wysłaniem komendy jeszcze raz sprawdzamy, czy skrzydło nadal jest zamknięte i czy zamek rzeczywiście pozostaje odryglowany.
alias: Drzwi wejściowe - automatyczne ryglowanie
mode: restart
triggers:
- trigger: state
entity_id: binary_sensor.drzwi_wejsciowe
from: "on"
to: "off"
for: "00:00:45"
conditions:
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
- condition: state
entity_id: input_boolean.tryb_goscie
state: "off"
actions:
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
- wait_template: "{{ is_state('lock.drzwi_wejsciowe', 'locked') }}"
timeout: "00:00:20"
continue_on_timeout: true
- choose:
- conditions:
- condition: template
value_template: "{{ not is_state('lock.drzwi_wejsciowe', 'locked') }}"
sequence:
- action: notify.mobile_app_telefon_marka
data:
title: "Nie udało się zaryglować drzwi"
message: "Zamek nie potwierdził stanu locked. Sprawdź drzwi i mechanikę."
Tryb restart jest tutaj celowy. Jeżeli drzwi zostaną ponownie otwarte w trakcie odliczania, poprzednie wykonanie zostanie zastąpione nowym i zamek nie spróbuje ryglować otwartego skrzydła.
2. Ryglowanie przy wyjściu ostatniej osoby
Samo przejście domu w stan „nikogo nie ma” nie powinno wysłać komendy natychmiast. Lokalizacja telefonu potrafi skakać na granicy strefy. Dodaj opóźnienie, potwierdzenie domknięcia oraz warunek, że żadna osoba nie wróciła do strefy.
alias: Drzwi - ryglowanie po wyjściu wszystkich
mode: restart
triggers:
- trigger: template
value_template: >
{{ states('person.marek') != 'home'
and states('person.anna') != 'home' }}
for: "00:03:00"
conditions:
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
actions:
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
- delay: "00:00:15"
- if:
- condition: template
value_template: "{{ not is_state('lock.drzwi_wejsciowe', 'locked') }}"
then:
- action: notify.mobile_app_telefon_marka
data:
title: "Dom pusty, ale drzwi niezaryglowane"
message: "Automatyczne ryglowanie nie zostało potwierdzone."
3. Przypomnienie zamiast automatycznego ryglowania
W domu z dziećmi, częstym ruchem przez drzwi albo specyficzną mechaniką bezpieczniejsza może być powiadamiana decyzja. Powiadomienie z przyciskiem pozwala zaryglować z telefonu dopiero po świadomym potwierdzeniu.
alias: Drzwi niezaryglowane - powiadomienie z akcją
mode: single
triggers:
- trigger: state
entity_id: binary_sensor.drzwi_wejsciowe
to: "off"
for: "00:05:00"
conditions:
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
actions:
- action: notify.mobile_app_telefon_marka
data:
title: "Drzwi są domknięte, ale niezaryglowane"
message: "Zaryglować drzwi wejściowe?"
data:
tag: "zamek-drzwi"
actions:
- action: "ZARYGLUJ_DRZWI"
title: "Zarygluj"
- action: "POMIN_30_MIN"
title: "Przypomnij za 30 min"
Druga automatyzacja obsługuje kliknięcie:
alias: Obsługa akcji powiadomienia zamka
mode: parallel
triggers:
- trigger: event
event_type: mobile_app_notification_action
conditions:
- condition: template
value_template: >
{{ trigger.event.data.action in ['ZARYGLUJ_DRZWI', 'POMIN_30_MIN'] }}
actions:
- choose:
- conditions: "{{ trigger.event.data.action == 'ZARYGLUJ_DRZWI' }}"
sequence:
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
- conditions: "{{ trigger.event.data.action == 'POMIN_30_MIN' }}"
sequence:
- delay: "00:30:00"
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
- action: notify.mobile_app_telefon_marka
data:
title: "Drzwi nadal niezaryglowane"
message: "Minęło kolejne 30 minut."
4. Nocny audyt wejścia
Zamiast bezwarunkowego ryglowania o 22:30 sprawdź najpierw kontaktron. Gdy drzwi są otwarte, próba wysunięcia rygla może uszkodzić zaczep lub uniemożliwić zamknięcie skrzydła.
alias: Nocny audyt drzwi wejściowych
mode: single
triggers:
- trigger: time
at: "22:30:00"
actions:
- choose:
- conditions:
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "on"
sequence:
- action: notify.mobile_app_telefon_marka
data:
title: "Drzwi wejściowe są otwarte"
message: "Nocny audyt nie uruchomił ryglowania. Zamknij skrzydło."
- conditions:
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
sequence:
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
default:
- action: logbook.log
data:
name: "Nocny audyt zamka"
message: "Drzwi były już domknięte i zaryglowane."
5. Alarm stanu jammed, unknown i unavailable
Nie wszystkie integracje przekazują stan jammed. Matter, MQTT, Z-Wave i integracje producentów różnią się zakresem raportowania. Tam, gdzie stan jest dostępny, należy potraktować go jako problem mechaniczny. unavailable oznacza natomiast brak komunikacji — nie jest dowodem, że drzwi są otwarte ani zamknięte.
alias: Zamek - alarm nieprawidłowego stanu
mode: parallel
triggers:
- trigger: state
entity_id: lock.drzwi_wejsciowe
to: "jammed"
id: jammed
- trigger: state
entity_id: lock.drzwi_wejsciowe
to: "unavailable"
for: "00:05:00"
id: unavailable
- trigger: state
entity_id: lock.drzwi_wejsciowe
to: "unknown"
for: "00:05:00"
id: unknown
actions:
- action: notify.mobile_app_telefon_marka
data:
title: >
{% if trigger.id == 'jammed' %}Zamek się zaciął
{% else %}Brak wiarygodnego stanu zamka{% endif %}
message: >
{% if trigger.id == 'jammed' %}
Napęd zgłosił jammed. Nie ponawiaj wielokrotnie komendy; sprawdź docisk drzwi, rygiel i kalibrację.
{% else %}
Zamek jest {{ trigger.to_state.state }} od co najmniej 5 minut. Sprawdź bridge, Thread, Bluetooth Proxy lub baterię.
{% endif %}
6. Kontrolowana ponowna próba po nieudanym ryglowaniu
alias: Skrypt - bezpieczne ryglowanie z jedną ponowną próbą
mode: single
sequence:
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
- wait_template: "{{ is_state('lock.drzwi_wejsciowe', 'locked') }}"
timeout: "00:00:20"
continue_on_timeout: true
- if:
- condition: template
value_template: "{{ not is_state('lock.drzwi_wejsciowe', 'locked') }}"
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
then:
- delay: "00:00:05"
- action: lock.lock
target:
entity_id: lock.drzwi_wejsciowe
- delay: "00:00:20"
- if:
- condition: template
value_template: "{{ not is_state('lock.drzwi_wejsciowe', 'locked') }}"
then:
- action: notify.mobile_app_telefon_marka
data:
title: "Zamek wymaga sprawdzenia"
message: "Dwie próby ryglowania nie dały potwierdzenia locked."
7. Monitorowanie baterii bez fałszywych alarmów
Poziom baterii w zamkach nie zawsze spada liniowo. Niskie temperatury, duży opór mechaniczny i częste próby połączenia mogą powodować nagłe skoki. Powiadomienie powinno uruchamiać się dopiero po utrzymaniu niskiej wartości, a po wymianie baterii warto wykonać kilka cykli testowych.
alias: Zamek - niski poziom baterii
mode: single
triggers:
- trigger: numeric_state
entity_id: sensor.zamek_bateria
below: 25
for: "06:00:00"
actions:
- action: notify.mobile_app_telefon_marka
data:
title: "Bateria zamka poniżej 25%"
message: >
Aktualny poziom: {{ states('sensor.zamek_bateria') }}%.
Przygotuj właściwe baterie lub naładuj pakiet. Sprawdź również opór drzwi.
8. Światło po wejściu — tylko wtedy, gdy ktoś rzeczywiście wszedł
Nie włączaj oświetlenia po każdej zmianie zamka na unlocked. Domownik może odryglować drzwi z kanapy dla kuriera, a serwis może wykonywać test. Lepszą sekwencją jest: odryglowanie, potem otwarcie drzwi w krótkim czasie, a następnie wykrycie ruchu wewnątrz.
alias: Wejście do domu - światło po rzeczywistym wejściu
mode: restart
triggers:
- trigger: state
entity_id: lock.drzwi_wejsciowe
to: "unlocked"
conditions:
- condition: sun
after: sunset
before: sunrise
actions:
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.drzwi_wejsciowe
to: "on"
timeout: "00:01:30"
continue_on_timeout: false
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.ruch_hol
to: "on"
timeout: "00:01:00"
continue_on_timeout: false
- action: light.turn_on
target:
entity_id: light.hol
data:
brightness_pct: 55
9. Rozbrojenie alarmu po poprawnym otwarciu — czego nie robić
Nie rozbrajaj alarmu po zwykłym stanie unlocked, jeżeli zamek można otworzyć kluczem, przyciskiem, automatyzacją lub przez dowolny telefon. Bezpieczniejsze jest wykorzystanie zdarzenia zawierającego rozpoznanego użytkownika, kod PIN albo osobny sygnał z systemu dostępowego. Nie każda integracja przekazuje identyfikator osoby. Matter może udostępniać zarządzanie poświadczeniami, ale konkretne firmware nie zawsze raportuje użytkownika w zdarzeniu.
Przykład dla integracji publikującej zdarzenie z polem user_id trzeba dostosować do konkretnego producenta:
alias: Alarm - rozbrojenie po autoryzowanym kodzie zamka
mode: single
triggers:
- trigger: event
event_type: lock_user_event
conditions:
- condition: template
value_template: "{{ trigger.event.data.user_id in [1, 2, 3] }}"
- condition: template
value_template: "{{ trigger.event.data.action == 'unlock' }}"
actions:
- wait_for_trigger:
- trigger: state
entity_id: binary_sensor.drzwi_wejsciowe
to: "on"
timeout: "00:00:45"
continue_on_timeout: false
- action: alarm_control_panel.alarm_disarm
target:
entity_id: alarm_control_panel.dom
data:
code: !secret alarm_code
10. Automatyczne odryglowanie po powrocie — wersja wielowarunkowa
To najbardziej ryzykowna automatyzacja całego poradnika. GPS może zgłosić wejście do strefy, gdy przejeżdżasz obok domu. Wi-Fi może połączyć się z parkingu. Bluetooth może wykryć telefon przez ścianę. Dlatego stosujemy sekwencję: konkretna osoba wraca do strefy, uruchamia się krótkie okno, telefon pojawia się w pobliżu wejścia, drzwi są zaryglowane, alarm nie sygnalizuje włamania, a funkcja została ręcznie włączona przez użytkownika.
alias: Marek wraca - otwarcie okna podejścia
mode: restart
triggers:
- trigger: zone
entity_id: person.marek
zone: zone.home
event: enter
conditions:
- condition: state
entity_id: input_boolean.auto_otwieranie
state: "on"
actions:
- action: timer.start
target:
entity_id: timer.okno_powrotu
data:
duration: "00:05:00"
Druga automatyzacja reaguje na potwierdzenie bliskości. Encja może pochodzić z Bermuda, ESPresense, przycisku NFC, UWB albo przycisku w zegarku:
alias: Marek przy drzwiach - kontrolowane odryglowanie
mode: single
triggers:
- trigger: state
entity_id: sensor.telefon_marka_obszar
to: "Wejście"
conditions:
- condition: state
entity_id: timer.okno_powrotu
state: "active"
- condition: state
entity_id: person.marek
state: "home"
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "locked"
- condition: state
entity_id: input_boolean.auto_otwieranie
state: "on"
- condition: not
conditions:
- condition: state
entity_id: alarm_control_panel.dom
state: "triggered"
actions:
- action: lock.unlock
target:
entity_id: lock.drzwi_wejsciowe
- action: timer.cancel
target:
entity_id: timer.okno_powrotu
- action: input_boolean.turn_off
target:
entity_id: input_boolean.auto_otwieranie
Wyłączenie pomocnika po jednym użyciu jest celowe. Użytkownik może go ponownie włączyć przed wyjazdem albo przez skrót w telefonie. Dzięki temu błąd lokalizacji nie pozostawia stale aktywnego mechanizmu otwierania.
11. Otwieranie dla kuriera lub gościa
Najbezpieczniej używać czasowego kodu w keypadzie, a nie zdalnie cofać zapadkę bez obrazu. Jeżeli zamek lub integracja nie obsługuje wygodnego zarządzania kodami, połącz wideodomofon z powiadomieniem zawierającym podgląd i przycisk. Przycisk powinien uruchamiać skrypt z dodatkowymi warunkami, a nie bezpośrednią komendę zamka.
alias: Dzwonek - powiadomienie z przyciskiem otwarcia
mode: restart
triggers:
- trigger: state
entity_id: binary_sensor.dzwonek
to: "on"
actions:
- action: camera.snapshot
target:
entity_id: camera.wejscie
data:
filename: "/config/www/dzwonek.jpg"
- action: notify.mobile_app_telefon_marka
data:
title: "Ktoś dzwoni do drzwi"
message: "Sprawdź obraz przed otwarciem."
data:
image: "/local/dzwonek.jpg"
actions:
- action: "OTWORZ_PO_WERYFIKACJI"
title: "Otwórz drzwi"
destructive: true
Obsługa przycisku może wymagać, aby alarm nie był uzbrojony w trybie wyjazdowym i aby kamera lub dzwonek zarejestrowały aktywność w ostatniej minucie.
12. Tryb Goście, przeprowadzka i otwarty dom
Automatyczne ryglowanie co 45 sekund może być wygodne na co dzień, ale irytujące podczas przyjęcia, remontu albo wnoszenia mebli. Zamiast wyłączać automatyzacje ręcznie, użyj pomocnika z automatycznym czasem wygaśnięcia.
alias: Tryb goście - automatyczne wyłączenie po 8 godzinach
mode: restart
triggers:
- trigger: state
entity_id: input_boolean.tryb_goscie
to: "on"
actions:
- delay: "08:00:00"
- action: input_boolean.turn_off
target:
entity_id: input_boolean.tryb_goscie
- condition: state
entity_id: binary_sensor.drzwi_wejsciowe
state: "off"
- condition: state
entity_id: lock.drzwi_wejsciowe
state: "unlocked"
- action: notify.mobile_app_telefon_marka
data:
title: "Tryb Goście zakończony"
message: "Drzwi są domknięte, ale nadal niezaryglowane."
13. Rejestr operacji i rozpoznanie użytkownika
Historia encji pokazuje zmianę stanu, ale nie zawsze przyczynę. W zależności od zamka możesz otrzymać identyfikator kodu, użytkownika, metodę otwarcia, źródło komendy albo tylko ogólne unlocked. Nie buduj krytycznej logiki na atrybucie, którego nie sprawdziłeś w Narzędziach deweloperskich i logach.
Uniwersalny zapis samej zmiany stanu do dziennika:
alias: Zamek - dziennik zmian stanu
mode: queued
triggers:
- trigger: state
entity_id: lock.drzwi_wejsciowe
conditions:
- condition: template
value_template: "{{ trigger.from_state is not none and trigger.to_state is not none }}"
actions:
- action: logbook.log
data:
name: "Drzwi wejściowe"
message: >
Stan zmienił się z {{ trigger.from_state.state }}
na {{ trigger.to_state.state }}.
Do identyfikacji osoby wykorzystuj dane integracji, nie zgaduj na podstawie tego, kto akurat znajduje się w domu. Dwie osoby mogą wejść razem, a telefon może pojawić się w strefie później niż fizyczne otwarcie.
14. Wykrywanie drzwi pozostawionych otwartych
alias: Drzwi wejściowe otwarte zbyt długo
mode: restart
triggers:
- trigger: state
entity_id: binary_sensor.drzwi_wejsciowe
to: "on"
for: "00:03:00"
actions:
- action: notify.mobile_app_telefon_marka
data:
title: "Drzwi wejściowe są otwarte"
message: "Skrzydło pozostaje otwarte od ponad 3 minut."
- if:
- condition: state
entity_id: alarm_control_panel.dom
state: "armed_away"
then:
- action: siren.turn_on
target:
entity_id: siren.wejscie
data:
duration: 5
15. Wykrywanie nietypowych sekwencji
Nieudane próby PIN, wielokrotne zacięcia albo częste przechodzenie między stanami mogą wskazywać na problem. Nie każdy zamek udostępnia licznik błędnych kodów, ale można wykryć „oscylację” stanu lub kilka komend w krótkim czasie.
alias: Zamek - wiele zmian w krótkim czasie
mode: restart
triggers:
- trigger: state
entity_id: lock.drzwi_wejsciowe
actions:
- variables:
start_state: "{{ states('lock.drzwi_wejsciowe') }}"
- delay: "00:02:00"
- if:
- condition: template
value_template: >
{{ (as_timestamp(now()) - as_timestamp(states.lock.drzwi_wejsciowe.last_changed)) < 120 }}
then:
- action: notify.mobile_app_telefon_marka
data:
title: "Nietypowa aktywność zamka"
message: "Zamek wielokrotnie zmieniał stan w ciągu ostatnich 2 minut. Sprawdź historię."
Powyższy przykład jest prostym alarmem, nie analizatorem bezpieczeństwa. Przy bardziej zaawansowanym monitorowaniu lepiej użyć licznika pomocniczego resetowanego po określonym czasie.
16. Awaria Home Assistanta, bridge’a albo sieci
System dostępu nie może wymagać działającego Home Assistanta do wyjścia z domu ani do użycia mechanicznego klucza. Automatyzacje mają zwiększać wygodę i wykrywać problemy, ale nie mogą zastępować podstawowego działania zamka. Przetestuj osobno:
- wyłączenie Home Assistanta,
- wyłączenie internetu przy działającej sieci lokalnej,
- wyłączenie bridge’a lub Thread Border Routera,
- restart routera i punktów dostępowych,
- rozładowany telefon,
- niski poziom baterii zamka,
- otwarcie mechanicznym kluczem z zewnątrz,
- ręczne otwarcie od środka,
- ewakuację bez użycia aplikacji.
Najczęstsze problemy z automatyzacjami i ich rozwiązania
Automatyzacja zaryglowała otwarte drzwi
Przyczyna: brak niezależnego kontaktronu albo wyzwalacz czasowy bez warunku. Rozwiązanie: przed każdą komendą lock.lock sprawdzaj stan czujnika także w sekcji warunków, nie tylko w wyzwalaczu.
Stan zmienia się na locked, ale drzwi nie są zabezpieczone
Przyczyna: zamek raportuje pozycję silnika, a rygiel nie wszedł prawidłowo w zaczep. Rozwiązanie: popraw mechanikę, kalibrację i rozważ czujnik rygla. Sam YAML nie naprawi ocierających drzwi.
Powiadomienie przychodzi kilka razy
Przyczyna: drganie kontaktronu, kilka automatyzacji lub tryb parallel. Rozwiązanie: użyj for, tagu powiadomienia, trybu restart i sprawdź ślady automatyzacji.
Automatyczne odryglowanie uruchamia się, gdy przejeżdżam obok domu
Przyczyna: sam trigger strefy GPS. Rozwiązanie: wymagaj drugiego lokalnego potwierdzenia przy wejściu, krótkiego okna czasowego i jednorazowego zezwolenia.
Zamek pozostaje w stanie locking lub unlocking
Przyczyna: integracja nie otrzymała końcowego raportu, bridge stracił łączność albo bateria jest słaba. Rozwiązanie: nie wysyłaj natychmiast kolejnej komendy; odczekaj, sprawdź fizyczny stan i diagnostykę integracji.
lock.open nie działa, choć lock.unlock działa
Przyczyna: producent lub integracja nie udostępnia cofnięcia zapadki, funkcja jest wyłączona w ustawieniach albo wymaga nowszego firmware. Rozwiązanie: sprawdź, czy encja zgłasza obsługę open i testuj akcję z Narzędzi deweloperskich. Nie zastępuj jej kilkukrotnym unlock.
Alarm rozbraja się po ręcznym kluczu
Przyczyna: rozbrajanie jest powiązane z każdym przejściem do unlocked. Rozwiązanie: użyj rozpoznanego kodu/użytkownika albo rozdziel sterowanie zamkiem i alarmem.
Po restarcie HA automatyzacja wykonuje niechcianą akcję
Przyczyna: trigger przejścia z unknown/unavailable albo szablon reagujący na inicjalizację. Rozwiązanie: określ dokładne from i to, wyklucz stany startowe oraz dodaj warunki fizyczne.
Kod PIN zapisany w HA nie działa na keypadzie
Przyczyna: ograniczenie firmware, niepełna implementacja Matter lub osobny keypad zarządzany przez aplikację producenta. Rozwiązanie: fizycznie testuj każdy kod i w krytycznych zastosowaniach twórz go także w aplikacji producenta.
Nie wiadomo, kto otworzył drzwi
Przyczyna: integracja nie przekazuje user index albo metoda otwarcia jest anonimowa. Rozwiązanie: nie próbuj zgadywać po obecności. Osobne kody i integracja raportująca użytkownika są konieczne, gdy audyt ma znaczenie.
Jak testować automatyzacje przed wdrożeniem
- Wykonuj pierwsze próby przy otwartym skrzydle i z kluczem zapasowym na zewnątrz.
- Sprawdź ręcznie akcje
lock.lock,lock.unlocki — jeśli dostępna —lock.open. - Zweryfikuj rzeczywistą logikę kontaktronu: czy
onoznacza otwarte. - Uruchom automatyzację ręcznie i przejrzyj ślad wykonania.
- Testuj przerwanie sekwencji: otwórz drzwi w trakcie opóźnienia przed ryglowaniem.
- Odłącz internet i sprawdź lokalną komunikację.
- Zrestartuj Home Assistant i obserwuj, czy inicjalizacja nie uruchamia reguł.
- Zasymuluj stan unavailable, wyłączając bridge lub proxy.
- Sprawdź działanie przy niskiej baterii i większym oporze drzwi.
- Przetestuj każdy osobisty kod PIN oraz jego usunięcie.
- Sprawdź scenariusz, gdy dwie osoby wchodzą jednocześnie.
- Przećwicz procedurę bez telefonu i bez automatyki.
Minimalny bezpieczny zestaw automatyzacji
Nie trzeba wdrażać wszystkiego naraz. Dla większości domów najlepszy początek to:
- powiadomienie o drzwiach otwartych dłużej niż 3 minuty,
- powiadomienie o niezaryglowanych, ale domkniętych drzwiach,
- automatyczne ryglowanie po 30–90 sekundach od domknięcia,
- alert po stanie jammed albo unavailable,
- alert o niskiej baterii,
- nocny audyt,
- tryb Goście wyłączający auto-lock,
- plan awaryjny i klucz mechaniczny.
Automatyczne odryglowanie, zdalne otwieranie dla gości i rozbrajanie alarmu dodawaj dopiero wtedy, gdy podstawowe stany są stabilne i dobrze rozumiesz dane przekazywane przez konkretną integrację.
FAQ — najczęstsze pytania użytkowników
Czy Home Assistant może automatycznie otworzyć drzwi, gdy wracam?
Tak, ale nie powinien robić tego wyłącznie na podstawie GPS. Zastosuj co najmniej strefę powrotu, lokalne potwierdzenie przy wejściu i krótkie okno czasowe. Najbezpieczniejsze pozostaje powiadomienie z przyciskiem lub użycie keypada, fingerprintu albo Home Key.
Czy mogę zaryglować drzwi o konkretnej godzinie?
Tak, ale tylko po sprawdzeniu, że skrzydło jest domknięte. Bez kontaktronu nie wysyłaj bezwarunkowej komendy o 22:00.
Czy kontaktron producenta wystarczy?
Może wystarczyć, jeżeli jego stan jest stabilnie udostępniany w Home Assistant. Niektóre integracje aktualizują czujnik z opóźnieniem albo wcale nie przekazują go lokalnie. Niezależny Zigbee/Z-Wave bywa bardziej przewidywalny.
Czy można wykryć osobę, która otworzyła zamek?
Tylko gdy integracja przekazuje identyfikator użytkownika, slot kodu lub źródło operacji. Sam stan unlocked tego nie mówi.
Czy Matter obsługuje kody PIN?
Home Assistant 2026.4 dodał zarządzanie użytkownikami i poświadczeniami zgodnych zamków Matter. Faktyczna obsługa zależy jednak od firmware urządzenia i sposobu połączenia z zewnętrznym keypad-em.
Co oznacza open w encji lock?
Zwykle chwilowe cofnięcie zapadki, dzięki któremu drzwi można popchnąć. Nie jest to to samo co unlock, czyli cofnięcie rygla. Nie każdy model obsługuje open.
Czy warto używać blueprintów?
Tak, ale najpierw przeczytaj cały YAML, sprawdź wymagane encje i zasady bezpieczeństwa. Blueprint nie zna mechaniki Twoich drzwi i nie zwalnia z testów.
Czy mogę ukryć zamek przed asystentem głosowym?
Tak i w większości domów warto ograniczyć ekspozycję encji zamka. Jeżeli udostępniasz ją do Google, Alexa lub HomeKit, sprawdź wymagania dotyczące PIN-u i zachowanie przy zablokowanym telefonie.
Czy automatyzacja zadziała bez internetu?
Jeżeli integracja zamka, Home Assistant i komunikacja działają lokalnie — tak. Integracje chmurowe, powiadomienia push poza LAN i część bridge’ów mogą wymagać internetu.
Czy można ryglować drzwi po uzbrojeniu alarmu?
Tak, ale alarm powinien najpierw sprawdzić domknięcie. Jeżeli drzwi są otwarte, pokaż błąd uzbrojenia zamiast próbować wysunąć rygiel.
Źródła i dalsza dokumentacja
Artykuł oparto na aktualnej dokumentacji Home Assistant oraz powtarzających się problemach zgłaszanych przez użytkowników zamków Matter, MQTT, Z-Wave, Bluetooth i integracji producentów:
- Home Assistant — encja Lock
- Home Assistant Developer Docs — stany i akcje zamka
- Home Assistant — akcja lock.unlock
- Home Assistant — MQTT Lock i stany pośrednie
- Companion App — actionable notifications
- Home Assistant — wyzwalacze automatyzacji
- Community — wieloetapowe automatyczne odryglowanie
- Community — Aqara U200, Matter i stan jammed
- Community — KeyMaster i zarządzanie kodami Z-Wave
Wniosek
Najlepsza automatyzacja zamka nie jest najbardziej efektowna, lecz najbardziej przewidywalna. Powinna odróżniać stan rygla od domknięcia skrzydła, czekać na potwierdzenia, kończyć się po określonym czasie i informować, gdy urządzenie nie wykonało polecenia. Zacznij od powiadomień, nocnego audytu, monitorowania baterii i bezpiecznego auto-lock. Dopiero później dodawaj automatyczne odryglowanie, rozbrajanie alarmu i dostęp dla gości. W systemie wejściowym wygoda nigdy nie powinna usuwać mechanicznego planu awaryjnego ani świadomej kontroli użytkownika.
Cała seria: zamki do drzwi w Home Assistant
Przejdź do poradnika zakupowego, konkretnej marki albo gotowych automatyzacji. Każda część odpowiada na inną intencję i uzupełnia pozostałe artykuły.
