Xiaomi Aqara Motion Sensor to bardzo popularny czujnik ruchu wykorzystywany w wielu instalacjach Smart Home. Urządzenie to w swojej fabrycznej konfiguracji nie jest zbyt rozmowne - raportuje wykrycie ruchu w nie częściej niż co 30 sekund. Widocznie producent uznał, że jest to dobry kompromis pomiędzy żywotnością baterii a częstotliwością przekazywania informacji do oprogramowania sterującego. Doświadczenie pokazuje jednak, wartość ta w domowych wartunkach może być zbyt mała i powoduje problemy - dlatego warto dokonać prostej przeróbki sprzętowej, dzięki której pozbędziemy się tego ograniczenia. Przeróbka polega ona na dodaniu zwarcia pomiędzy dwoma punktami na płytce drukowanej za pomocą lutownicy. Jeżeli tak jak ja - nie czujesz się doświadczonym elektronikiem - wystarczy zwyczajnego ... ołówek:). Cała procedura opisana jest tutaj - ja stosuję sposób "na ółowek" z doskonałym rezultatem.
Naszą "Super Aqarę" włączamy do domowej sieci zigbee poprzez przytrzymanie dłużej niż 5 sekund przcisku na obudowie.
Oprogramowanie zigbee2mqtt utworzy domyślą konfigurację, którą zmieniamy na mniej więcej coś takiego (oczywiście zamień 0x00158d00053fcabf na właściwy dla Twojego czujnika identyfikator):
devices:
'0x00158d00053fcabf':
friendly_name: Aqara1
no_occupancy_since:
- 30
- 60
- 90
- 120
- 180
- 240
- 300
retain: truewszystkie parametry opisane szczegółowo są na stronie zigbee2mqtt.
Na tym etapie nasz zmodyfikowany czujnik włączył się już do sieci zigbee i informuje nas czy ktoś wkroczył w jego zasięg. Podglądając co nasz czujnik wysyła do brokera mqtt powinniśmy zobaczyć takie komunikaty:
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"no_occupancy_since":0,"occupancy":true,"voltage":3015}
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"no_occupancy_since":30,"occupancy":true,"voltage":3015}
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"no_occupancy_since":60,"occupancy":true,"voltage":3015}
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"occupancy":false,"voltage":3015}
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"no_occupancy_since":90,"occupancy":false,"voltage":3015}
{"battery":100,"illuminance":1,"illuminance_lux":1,"linkquality":1,"no_occupancy_since":120,"occupancy":false,"voltage":3015}Widzimy, że mamy dostęp do dwóch obiektów - pierwszy ocupancy który przyjmuje wartości true and false - oraz znacznie dla nas bardziej przydatny: no_occupancy_since. Informacja przesyłana w no_occupancy_since jest pod wieloma względami lepsza dla procesów automatyzacji niż proste true/false przesyłane przez occupancy. Wartości, które dostajemy w no_occupancy_since korelują oczywiście z konfiguracją zigbee2mqtt i oznaczają ilość sekund, które upłyneły od ostatniego wykrytego ruchu. Gdy czujka ponownie wykryje ruch - resetuje swój wewnętrzny licznik i zaczyna liczenie od zera.
W procesach node red do pdejmowania dezycji - najłatwiej jest wykorzystać switch node:

Do pierwszego wyjścia podłączamy akcję, która ma się wydarzyć gdy ktoś wejdzie w strefę czujnika (np. zapalanie światła) - pozostałe obsługują akcje, które mają się wydarzyć gdy ustanie ruch w monitorowanej przestrzeni.
Podsumowując - uzależniając nasze procesy od no_occupancy_since zamiast od prostego przełącznika true/false dostajemy lepszą większą kontrolę nad naszym czujnikiem co przekłada się na lepszą automatyzację naszego Smart Home.
Na koniec przykład automatyzacji wykorzystujący no_occupancy_since:
