Tutorial: Konfiguracja stref radaru LD2450 w ESPHome i Home Assistant

Spis treści
Radar obecności typu LD2450 potrafi coś, czego czujnik ruchu nigdy nie potrafił: mówi, gdzie. Do trzech celów, każdy ze współrzędną x i y w milimetrach, odświeżanych kilka razy na sekundę.
Ciekawe pytanie staje się przez to pytaniem geometrycznym. Strefa to cztery liczby – po dwie na oś – a wszystko, co czyni taki układ użytecznym albo uciążliwym, dzieje się w tym, jak te cztery liczby powstają.

Co czujnik naprawdę podaje
LD2450 to radar 24 GHz śledzący jednocześnie do trzech celów. Na każdy cel podaje trzy liczby: współrzędną x, współrzędną y oraz prędkość – dwie pierwsze w milimetrach, ostatnią w centymetrach na sekundę, przy czym znak ujemny oznacza ruch w stronę czujnika.
Właśnie tym różni się od mniejszego rodzeństwa. LD2410 odpowiada tylko na to, czy coś jest i mniej więcej jak daleko, w podziale na bramki odległości. Oddzielić biurka od drzwi nie potrafi, bo nic nie wie o tym, w którym kierunku leży jedno i drugie.
Dwie właściwości warto poznać przed jakimkolwiek montażem. Obszar wykrywania jest klinem około 120 stopni, czyli po 60 stopni na każdą stronę kierunku patrzenia – wszystko poza nim pozostaje niewidoczne, niezależnie od odległości. A użyteczny zasięg wewnątrz pomieszczeń wynosi około sześciu metrów, przy czym dokładność współrzędnych spada wyraźnie wcześniej.
Ustalenie początku układu przed wszystkim innym
Każda liczba strefy odnosi się do układu współrzędnych, którego początkiem jest sam czujnik. Oś y wskazuje kierunek, w którym patrzy płytka; oś x biegnie w poprzek, ujemna po lewej, dodatnia po prawej, patrząc zza czujnika.
Wynikają z tego trzy rzeczy, a wszystkie trzy taniej załatwić przed przyklejeniem modułu.
Czujnik zamontowany obrócony o dziewięćdziesiąt stopni zamienia osie, a każdą strefę narysowaną na rzucie trzeba przenieść z zamianą. Czujnik zamontowany do góry nogami odbija oś x, więc lewa i prawa zamieniają się miejscami, a strefa ląduje po drugiej stronie pokoju. A czujnik przesunięty o dwadzieścia centymetrów w ładniejsze miejsce unieważnia wszystkie strefy naraz, bo wszystkie mierzono z poprzedniego położenia.
Praktyczne położenie montażowe LD2450 to ściana na wysokości około 1,2 do 1,5 metra – mniej więcej na wysokości bioder. Wyżej radar patrzy na ludzi z góry, a nie w poprzek, i współrzędna y mierzy wtedy przekątną zamiast odcinka po podłodze. Położenie sufitowe jest zadaniem innego czujnika.
Konfiguracja – i miejsce, w którym mieszka strefa
Strona ESPHome jest krótka. Radar rozmawia po łączu szeregowym z prędkością 256 000 bodów, a komponent robi z tego encje.
uart:
id: uart_radar
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 256000
parity: NONE
stop_bits: 1
ld2450:
id: radar
uart_id: uart_radar
throttle: 1000ms
binary_sensor:
- platform: ld2450
ld2450_id: radar
has_target:
name: "Obecnosc"
zone_1:
occupancy:
name: "Biurko zajete"
zone_2:
occupancy:
name: "Strefa drzwi zajeta"
sensor:
- platform: ld2450
ld2450_id: radar
target_1:
x:
name: "Cel 1 X"
y:
name: "Cel 1 Y"
speed:
name: "Cel 1 predkosc"
zone_1:
target_count:
name: "Cele przy biurku"
number:
- platform: ld2450
ld2450_id: radar
presence_timeout:
name: "Czas podtrzymania"
zone_1:
x_begin:
name: "Strefa 1 X poczatek"
y_begin:
name: "Strefa 1 Y poczatek"
x_end:
name: "Strefa 1 X koniec"
y_end:
name: "Strefa 1 Y koniec"
Ustawienie throttle jest najbardziej opłacalne ze wszystkich. Bez niego radar melduje kilka razy na sekundę, a każdy taki meldunek staje się w Home Assistant zmianą stanu. Jedna sekunda w zupełności wystarcza do oświetlenia i chroni bazę danych przed przyrostem o megabajt dziennie na czujnik.
Zaskakującym szczegółem jest to, gdzie mieszkają granice stref. Nie są wartościami w pliku YAML – to liczby we flashu samego modułu radarowego, a ESPHome pokazuje je jako encje liczbowe, aby dało się je raz ustawić. To wygodne, bo strefę da się wtedy poprawić z telefonu, stojąc w pomieszczeniu. To zarazem pułapka, bo wymieniony moduł wraca ze strefami fabrycznymi, a nic w konfiguracji nie mówi, jak brzmiały wcześniej. Cztery liczby na strefę należą do komentarza w pliku YAML, choćby tylko jako dokumentacja.
Pomiar strefy zamiast zgadywania
Granice stref wzięte z rzutu bywają błędne na tyle często, że pomiar idzie szybciej. Pomiar wymaga jednej osoby, pięciu minut i dwóch czujników współrzędnych z powyższej konfiguracji.
Stanięcie w każdym narożniku zamierzonej strefy i odczytanie wartości x oraz y daje prostokąt wprost. Cztery narożniki, osiem liczb, a ich wartości skrajne to granice. Warto dodać do tego tolerancję około dwudziestu centymetrów na stronę, bo człowiek nie jest punktem: radar podaje środek odbicia, a ten wędruje po ciele przy każdym obrocie.
Pomiary narozne przy biurku (x / y w mm)
z przodu z lewej 380 / 840
z przodu z prawej 1760 / 810
z tylu z lewej 420 / 2310
z tylu z prawej 1780 / 2360
Strefa 1 z tolerancja: x 300 … 1800 y 800 … 2400
Do tej samej sesji należą dwa sprawdzenia. Przejście przez strefę i wyjście z niej powinno przełączyć czujnik zajętości czysto w obie strony. A stanięcie tuż poza granicą przełączyć go nie powinno – jeśli jednak przełącza, strefa jest większa niż zamierzono albo odbicie przychodzi skądinąd niż od osoby.
Drugie sprawdzenie znajduje błędy montażu. Metalowa szafa, grzejnik albo duże lustro odbijają sygnał radaru i wytwarzają cel stojący tam, gdzie nikogo nie ma. Takie widmo poznaje się po tym, że stoi całkiem nieruchomo i nigdy nie odchodzi; zaradzi temu inny kąt czujnika, a nie mniejsza strefa.
Automatyzacja – i to, co każe jej migać
Przy działającej strefie sama automatyzacja jest niewidowiskowa – i bez jednej linii by migała.
binary_sensor:
- platform: ld2450
ld2450_id: radar
zone_1:
occupancy:
name: "Biurko zajete"
filters:
- delayed_off: 20s
To delayed_off stanowi różnicę między lampą palącą się, dopóki ktoś pracuje, a lampą gasnącą, gdy tylko osoba odchyli się do tyłu. Radar traci cel nieruchomy łatwiej niż ruchomy, a dwadzieścia sekund podtrzymania nic nie kosztuje, usuwając za to całą klasę zażaleń.
Jego odpowiednikiem jest czas podtrzymania w samym module, rozstrzygający, jak długo radar melduje cel po ostatnim wykryciu. Oba opóźnienia się sumują: pięć sekund podtrzymania plus dwadzieścia sekund filtra oznacza, że światło gaśnie dwadzieścia pięć sekund po opuszczeniu miejsca. To należy ustawić świadomie, a nie przypadkiem.
Po stronie Home Assistant jedna zasada oszczędza dużo szukania usterek: automatyzacja powinna reagować na czujnik strefy, nigdy na surowe współrzędne. Wyzwalacz na liczbowej wartości x odpala przy każdym drgnieniu podawanego środka, a ta sama nieruchomo siedząca osoba przekracza taki próg kilkadziesiąt razy na godzinę.
Co i tak idzie potem nie tak
Trzy zjawiska odpowiadają za większość pozostałych kłopotów, a każde ma inną radę.
Pierwszym jest ruch, który nie jest człowiekiem. Wentylator, firanka w przeciągu, wisząca roślina – wszystkie się poruszają, wszystkie odbijają, a dla radaru wyglądają jak powolny cel. Strefa je omijająca to odpowiedź najczystsza; gdzie się nie da, pomaga warunek minimalnej prędkości, bo zakłócenia rzadko dają stały kierunek.
Drugim jest pokój sąsiedni. Dwadzieścia cztery gigaherce przechodzą przez płytę gipsową z niewielką stratą, więc strefa przyłożona do ściany obejmuje także kanapę za nią. Współrzędne nie mówią nic o ścianach, bo radar nic o nich nie wie. Znajdzie to wyłącznie pomiar, a warto go wykonać celowo: ktoś chodzi po sąsiednim pokoju, a liczba celów jest obserwowana.
Trzecim jest to, że drugi radar w tym samym pomieszczeniu zakłóca pierwszy. Dwa moduły LD2450 na tej samej częstotliwości skierowane na siebie wytwarzają w obu cele nienależące do żadnego z nich. Gdzie potrzebne są dwa, powinny patrzeć od siebie, a nałożenie ich klinów pozostać niewielkie.