Wiele kontrolerów rolet jest dostarczanych z pilotami RF, ale bez łączności Wi-Fi, więc nie można ich łatwo sparować z Home Assistant. Na szczęście zawsze można po prostu wstrzyknąć zdalne naciśnięcia przycisków i przechwycić stany diod LED za pomocą prostego dodatku w postaci modułu WiFi. Poniżej pokażę jak zrobić to krok po kroku w OpenBeken.
Projekt został wykonany przez @DeDaMrAz, ja tylko zajmuję się wsparciem i dokumentacją.
W sumie jest 5 rolet. Mają one jednego wspólnego pilota.
Pilot ma 5 przycisków:
- prawy/lewy (do wyboru migawki)
- góra/dół (do otwierania/zamykania)
- środkowy (zatrzymanie)
Co więcej, pilot RF ma również prostą informację zwrotną LED (pięć diod LED), która mówi nam, którą roletą aktualnie sterujemy.
Diody LED wskazują albo indeks pomieszczenia (świeci się jedna z diod LED), albo specjalny tryb "wszystkie pomieszczenia" (świecą się wtedy wszystkie diody LED).
Łącznie jest to 10 GPIO - 5 wyjść (do sterowania przyciskami) i 5 wejść (do odczytu diod LED).
Otwórzmy pilota i zajrzyjmy do środka:
Możemy również nałożyć oba obrazy na jeden obraz, aby uzyskać większą przejrzystość:
Następnym krokiem jest ustalenie, jak odczytywać diody LED i przyciski sterujące. Musimy znaleźć punkty, w których możemy przylutować przewody:
Nie chcieliśmy zepsuć pilota, ani uczynić go bezużytecznym bez dodatku WiFi, więc zdecydowaliśmy się poprowadzić sygnały do męskiego złącza pinowego:
Nadszedł czas na lutowanie. Najpierw przewody zostały przylutowane do pinów:
Następnie zostały one starannie zwarte i przylutowane do odpowiednich padów:
Następnym krokiem jest część WiFi. Możemy użyć dowolnego urządzenia OBK, ale kolega miał pod ręką kilka przerobionych NodeMCU. @DeDaMrAz zdecydował się na użycie PC817 dla przycisków, jednak moim zdaniem nie było to konieczne - zależy to od sposobu podłączenia przycisków.
Tak więc, oto płytka WiFi:
Płytkę można bezproblemowo podłączyć do pilota, a pilot pozostaje nienaruszony:
Należy tylko pamiętać, że zalecałbym wyjęcie baterii przed podłączeniem zewnętrznego zasilania.
Teraz część sprzętowa jest gotowa. Trzeba jeszcze napisać skrypt dla OpenBeken. Kodowanie w C nie jest wymagane!
Konfiguracja GPIO:
Kod: C / C++
Zaczynamy więc od włączenia niestandardowych przycisków, czyli sterownik httpButtons:
startDriver httpButtons
Następnie dodajemy obsługę zmian kanałów (zdarzenia), aby kanały "przycisków" powróciły do 0 po krótkiej chwili:
addChangeHandler Channel1 == 1 addRepeatingEvent 0.2 1 setChannel 1 0
addChangeHandler Channel2 == 1 addRepeatingEvent 0.2 1 setChannel 2 0
addChangeHandler Channel3 == 1 addRepeatingEvent 0.2 1 setChannel 3 0
addChangeHandler Channel4 == 1 addRepeatingEvent 0.2 1 setChannel 4 0
addChangeHandler Channel5 == 1 addRepeatingEvent 0.2 1 setChannel 5 0
Powyższy kod zakłada, że kanały 1-5 mają role Rel (piny wyjściowe).
Następnie obsługujemy odczyt z kanałów pinów dInput, aby odczytać stany diod LED:
//test for reading LED's from remote
addChangeHandler Channel6 == 1 setButtonColor 6 BLUE
addChangeHandler Channel6 == 0 setButtonColor 6 GREEN
addChangeHandler Channel7 == 1 setButtonColor 7 BLUE
addChangeHandler Channel7 == 0 setButtonColor 7 GREEN
addChangeHandler Channel8 == 1 setButtonColor 8 BLUE
addChangeHandler Channel8 == 0 setButtonColor 8 GREEN
Po prostu ustawiają kolory przycisków, abyśmy wiedzieli, który pokój kontrolujemy.
Wreszcie, przyciski:
//buttons
setButtonLabel 1 "STOP"
setChannelLabel 1 STOP
setButtonColor 1 RED
setButtonEnabled 1 1
setButtonCommand 1 "setChannel 1 1"
setButtonLabel 2 "UP"
setChannelLabel 2 UP
setButtonEnabled 2 1
setButtonColor 2 ORANGE
setButtonCommand 2 "setChannel 2 1"
setButtonLabel 3 "DOWN"
setChannelLabel 3 DOWN
setButtonColor 3 ORANGE
setButtonEnabled 3 1
setButtonCommand 3 "setChannel 3 1"
setButtonLabel 4 "LEFT"
setChannelLabel 4 LEFT
setButtonColor 4 GREEN
setButtonEnabled 4 1
setButtonCommand 4 "setChannel 4 1"
setButtonLabel 5 "RIGHT"
setChannelLabel 5 RIGHT
setButtonColor 5 GREEN
setButtonEnabled 5 1
setButtonCommand 5 "setChannel 5 1"
W powyższym kodzie 5 przycisków naśladuje przyciski pilota zdalnego sterowania.
Mamy również dodatkowe przyciski, które służą do sygnalizowania, który pokój jest aktywny:
setButtonLabel 6 "OFFICE"
setChannelLabel 6 OFFICE
setButtonColor 6 GREEN
setButtonEnabled 6 1
//setButtonCommand 6 ""
setButtonLabel 7 "ROOM 1"
setChannelLabel 7 ROOM 1
setButtonColor 7 GREEN
setButtonEnabled 7 1
setButtonLabel 8 "ROOM 2"
setChannelLabel 8 ROOM 2
setButtonColor 8 GREEN
setButtonEnabled 8 1
// NOTE: we didn't actually add here room 3, but it could be easily implemented if needed
Nie mają one ustawionych zdarzeń kliknięcia, po prostu zmieniają kolor, gdy dany pokój jest aktywny.
Na koniec dodajemy dodatkowy przycisk, aby zapamiętać ostatnio wybrany pokój:
setButtonLabel 9 "LAST SELECTION"
setButtonColor 9 green
setButtonEnabled 9 1
Po zapaleniu się danej diody LED zmieniamy etykietę:
addChangeHandler Channel4 == 1 if $CH9==0 then NONE
addChangeHandler Channel5 == 1 if $CH9==0 then NONE
// last selection
addChangeHandler Channel6 == 1 setButtonLabel 9 "OFFICE"
addChangeHandler Channel7 == 1 setButtonLabel 9 "ROOM 1"
addChangeHandler Channel8 == 1 setButtonLabel 9 "ROOM 2"
addChangeHandler Channel9 != 0 setButtonLabel 9 "ALL"
Mamy również funkcję śledzenia sprawdzania, czy pilot jest podłączony do OBK:
setButtonLabel 10 "NOT DETECTED"
setChannelLabel 10 DETECTION
setButtonColor 10 RED
setButtonEnabled 10 1
addChangeHandler Channel10 == 1 setButtonColor 10 GREEN
addChangeHandler Channel10 == 0 setButtonColor 10 RED
addChangeHandler Channel10 == 1 setButtonLabel 10 "DETECTED"
addChangeHandler Channel10 == 0 setButtonLabel 10 "NOT DETECTED"
Musimy również obsłużyć dodatkowy stan, w którym wszystkie diody LED są zapalone, co oznacza, że wszystkie rolety będą teraz sterowane:
again:
if $CH6==1&&$CH7==1&&$CH8==1 then "setChannel 9 1" else "setChannel 9 0"
delay_s 1
goto again
A oto panel OBK (niektóre przyciski nie są w języku angielskim, ale to tylko demonstracja):
Ważne jest, aby pamiętać, że pierwsze przyciski są rzeczywiście klikalne i wysyłają zdarzenia, podczas gdy dalsze przyciski tylko naśladują stan diod LED.
Pracujemy również nad integracją HA, ale nie jest ona jeszcze w pełni gotowa. Oto jak automatyczne wykrywanie HASS widzi to urządzenie:
Poniższe daje nam już możliwość sterowania roletami z tego miejsca, ale jest o wiele więcej do poprawienia wkrótce.
Dalsze ulepszenia mogą obejmować:
- zmiany w logice generycznej, lepsze śledzenie stanu (jeśli wykryjemy dalsze przypadki brzegowe...)
- lepsza strona OBK, być może poprzez interfejs rest:
https://www.elektroda.com/rtvforum/topic3971355.html
- lepszy interfejs HA (prawdopodobnie poprzez niestandardowy yaml)
Oczywiście powinno być również możliwe bezpośrednie sterowanie RF (za pomocą niektórych modułów odbiornika / nadajnika RF), ale nie był to zakres tego tematu.
Podsumowując - to podejście pozwala "porwać" dowolne urządzenie zdalne i przekonwertować je na WiFi. Nie ogranicza się to tylko do rolet, to samo można zrobić z ogrzewaniem, chłodzeniem, klimatyzacją, monitorowaniem PV itp. i tak dalej.
Pokazany tutaj projekt jest już funkcjonalny, ale wkrótce możemy go jeszcze bardziej ulepszyć i opublikować rozszerzoną wersję - bądź na bieżąco!
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
