Jak kontrolować tanie gniazda zasilania RF z OpenHAB

  • Mark Lucas
  • 0
  • 3713
  • 839
Reklama

Inteligentne gniazda zasilania to najprostszy sposób na zautomatyzowanie domu, ale przy około 40 USD za każde gniazdo Wi-Fi lub ZWave, raczej nie kupisz więcej niż kilku.

Być może masz już jakieś tanie gniazda radiowe - takie, które mają własny niestandardowy pilot zdalnego sterowania i mają z tyłu wybrane przełączniki kanałów i identyfikatorów. Niestety na rynku nie ma inteligentnych hubów domowych. Bitwa o inteligentne huby domowe: co tam jest i co nadchodzi? Bitwa o Smart Home Hubs: Co tam jest i co będzie dalej? które działają z tymi. Czy nie byłoby wspaniale, gdybyś mógł jakoś połączyć je z systemem inteligentnego domu DIY? Cóż, możesz - całkiem łatwo - mając około 10 USD na części.

Przy odrobinie pracy możesz także zintegrować inny zdalny sprzęt oparty na RF, taki jak budżetowy ekran kinowy.

Czego potrzebujesz:

  • ESP8266 NodeMCU v12E płyta deweloperska (dokładny model nie ma znaczenia, v1 lub v3 też powinny być w porządku). Używamy karty NodeMCU dlatego, że chcemy później łatwego połączenia Wi-Fi. Link dotyczy paczki 2, która kosztuje 7 USD za sztukę.
  • Pakiet nadajnika i odbiornika 433 MHz (około 3 USD).
  • Biblioteki RCSwitch i MQTT oraz nasz kod - wszystkie dostępne do pobrania z Github.
  • Serwer MQTT, lokalny lub zdalny.
  • Niektóre gniazda kontrolowane przez RF pracujące w paśmie 433 MHz (należy powiedzieć na pilocie). Kupiłem mój od Maplin jako pakiet 3 za około 20 £ (25,89 $).

Jeśli po raz pierwszy programujesz płytę NodeMCU, musisz pobrać wtyczki Arduino: postępuj zgodnie z pierwszą częścią naszego przewodnika wprowadzającego Arduino Killer Poznaj Arduino Killer: ESP8266 Poznaj Arduino Killer: ESP8266 Co jeśli ja powiedział Ci, że jest płyta deweloperska kompatybilna z Arduino z wbudowanym Wi-Fi za mniej niż 10 USD? Cóż, jest. dla układu NodeMCU / ESP8266. Będziesz także potrzebować Sterowniki CH430. Możesz znaleźć podpisane sterowniki macOS CH430 tutaj lub Windows tutaj.

Użyłem wersji 1.5.5 Arduino, ponieważ cokolwiek wyższego wprowadza więcej problemów niż rozwiązuje. Obniż wersję, jeśli jeszcze tego nie zrobiłeś.

Zanim przejdziesz dalej, założę podstawowy poziom wiedzy na temat programowania Arduino Programowanie Arduino dla początkujących: Samouczek projektu kontrolera sygnalizacji świetlnej Programowanie Arduino dla początkujących: Samouczek projektu kontrolnego sygnalizacji świetlnej Zbudowanie kontrolera sygnalizacji świetlnej Arduino pomaga rozwinąć podstawowe umiejętności kodowania ! Zaczynamy. oraz że masz konfigurację NodeMCU w menedżerze forum i jesteś w stanie poprawnie przesłać kod demonstracyjny. Powinieneś także dodać biblioteki zawarte w naszym pliku do pobrania do swojego Arduino / biblioteki teczka.

Jeśli masz już Biblioteka PubSubClient lub MQTT, wykonaj kopię zapasową i usuń - ten, który załączyłem do pobrania, jest jedynym, w którym mogłem niezawodnie odbierać wiadomości na NodeMCU, i próbowałem dużo!

RF Sniffing (opcjonalnie)

Ten krok nie jest potrzebny, jeśli chcesz kontrolować tylko gniazda DIP-switch lub selektora wybierania - są one obsługiwane od razu po wyjęciu z pudełka i konieczna będzie minimalna modyfikacja kodu (jest to jednak interesujące najpierw, więc „ Rozumiem, co się dzieje za kulisami).

Jeśli masz inne piloty RF, które chcesz spróbować dodać, musisz najpierw “wąchać” przesyłane kody RF. Aby to zrobić, załaduj ReceiveDemo_Advanced szkic z Menu -> Przykłady -> RCSwitch folder i zmień następujący wiersz z 0

mySwitch.enableReceive (0); // Odbiornik przy przerwie 0 => to jest pin 2

do 2.

mySwitch.enableReceive (2); // Odbiornik na GPIO 2 / D4.

Podłącz moduł odbiornika w następujący sposób. Patrząc na przód płyty odbiornika (jest to dłuższy z nich, nadajnik jest kwadratowy) - strona z włączonymi elementami:

  • Daleko po prawej jest GND. Podłącz do GND na płycie NodeMCU.
  • Daleko po lewej jest VCC. Połącz się z VIN na płycie NodeMCU.
  • Dwa środkowe piny to sygnał. Podłącz jeden z nich do D4 na NodeMCU (są one połączone razem, więc nie ma znaczenia, które).

Teraz prześlij zmodyfikowany ReceiveDemo_Advanced, a po zakończeniu otwórz monitor szeregowy i zacznij naciskać przyciski na pilocie. Po naciśnięciu przycisku skopiuj liczbę dziesiętną (w tym długość bitu), długość impulsu i protokół.

Po zrobieniu tego, zauważyłem, że ekran mojego projektora używa

  • SCREEN UP: Otrzymano 8694273 / 24bit; Długość impulsu: 355 lub 356; Protokół: 1
  • EKRAN W DÓŁ: Otrzymano 8694276 / 24bit; Długość impulsu: 355 lub 356; Protokół: 1

Kontynuuj przez tyle przycisków, ile potrzebujesz.

Testowanie nadajnika

Następnie spróbujemy wysłać kody za pomocą nadajnika. Podłącz moduł nadajnika (kwadratowy) w następujący sposób. Zachowaj ostrożność: oznaczenia na tych pinach są okropne.

Pin VCC znajduje się w środku, a nie po lewej stronie. Zniszczyłem jeden moduł, próbując to rozgryźć. To mówi “ATAD” jest aktualne “DANE”, przeliterowane do tyłu. Ponownie dane trafiają do D4, VCC do VIN i GND do GND (wyjmij moduł odbiornika, już go nie potrzebujesz).

Załaduj Przykłady -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, i ponownie zmień pin danych:

mySwitch.enableTransmit (10);

do

mySwitch.enableTransmit (2);

Uwaga: w bibliotece znajduje się wiele przykładów, a to, który z nich działa, zależy od dokładnego rodzaju posiadanego przełącznika. Typ A (przełączniki DIP) i B (pokrętła lub suwaki) są najczęstsze - patrz zdjęcia na stronie RCSwitch. W przypadku typu B włączanie i wyłączanie gniazda jest tak proste, jak:

mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);

gdzie 1 to identyfikator kanału (górne pokrętło), a 4 to identyfikator gniazda (dolne pokrętło). Zostały one napisane cyframi rzymskimi na moich gniazdach. Można zatem adresować maksymalnie 16 pojedynczych gniazd, ale wiele gniazd może używać tego samego adresu, jeśli masz wiele urządzeń do włączenia na raz.

Jednak ekran mojego projektora był nieco inny - używał innej długości impulsu. Aby je obsługiwać, działały następujące. Uwaga: możesz również zdefiniować inny protokół, jeśli twój pilot go potrzebuje, ALE upewnij się, że zdefiniowałeś protokół PRZED długością impulsu. Długość impulsu jest nadpisywana podczas zmiany protokołu.

 // Zauważ, że mój ekran faktycznie wymaga DWÓCH naciśnięć przycisków (nie długie naciśnięcie, ale dwa fizyczne naciśnięcia), więc opóźniam trochę, a następnie ponownie wysyłam ten sam sygnał void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (kod dziesiętny, liczba bitów) opóźnienie (2000); mySwitch.send (8694273,24);  void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); opóźnienie (2000); mySwitch.send (8694276,24);  

Sprawdź, czy wszystkie kody działają najpierw, zanim przejdziesz do następnego kroku.

Sterowanie przez MQTT

Otwórz szkic o nazwie Github mqtt_rcswitch.ino, i zacznij od modyfikacji SSID sieci i hasła do swojego domu. Następnie zmień nazwę kanału, jeśli chcesz, i ustaw serwer MQTT. Jeśli nie masz jeszcze serwera MQTT uruchomionego w instalacji OpenHAB, przeczytaj część 2 naszego przewodnika dla początkujących OpenHAB Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, zasady i wykresy Przewodnik dla początkujących OpenHAB Część 2: ZWave, MQTT, reguły i wykresy OpenHAB, oprogramowanie do automatyzacji domu o otwartym kodzie źródłowym, znacznie przewyższa możliwości innych systemów automatyki domowej na rynku - ale konfiguracja nie jest łatwa. W rzeczywistości może być wręcz frustrujące. . Zauważ, że mój kod jest przeznaczony dla gniazd typu B (przełączniki obrotowe), chociaż możesz go łatwo zmodyfikować również dla przełączników DIP.

Najważniejszą częścią kodu jest wiadomość otrzymana() funkcja, która reaguje na przychodzące polecenia MQTT. W tej funkcji najpierw sprawdzamy główne słowo kluczowe - wybrałem “przełącznik” i “ekran”. W przypadku “przełącznik”, następnie analizujemy kanał i ID wtyczki; następnie sprawdź treść ładunku dla polecenia.

 void messageReceived (Temat ciągu, Ładunek ciągu, char * bajty, bez znaku int długość) if (topic.indexOf ("switch")> = 0) // przełącznik sterowania, parsuj kanał i podłącz identyfikator int channel = getValue ( topic, '/', 3) .toInt (); int plug = getValue (topic, '/', 4) .toInt (); if (ładunek == "on") mySwitch.switchOn (kanał, wtyczka);  else mySwitch.switchOff (kanał, wtyczka);  else if (topic.indexOf ("screen")> = 0) // screen control if (payload == "" up ") screenUp ();  else if (payload == "down") screenDown ();  / * dodaj jeszcze jedno, jeśli tutaj, aby nasłuchiwać kolejnych poleceń (lub po prostu zmodyfikuj powyższe, jeśli nie chcesz ekranu) * / 

Domyślnie działają następujące polecenia MQTT:

salon / sterowanie / przełącznik / X / Y (gdzie X to kanał, a Y to identyfikator wtyczki; z włączoną lub wyłączoną treścią komunikatu)
salon / sterowanie / ekran (z treścią wiadomości w górę lub w dół)

Użyj wiersza polecenia lub klienta GUI MQTT do przetestowania urządzeń przed dodaniem ich do OpenHAB.

Dodawanie do OpenHAB

W ostatnim kroku musimy tylko stworzyć kilka elementów dla tych przełączników w OpenHAB. Na razie zdefiniowałem następujące elementy, ale powinieneś być w stanie dowiedzieć się, jak dodać więcej:

/ * Urządzenia RF433mHz * / Switch CinemaScreen „Screen” (Cinema) mqtt = "> [broker: salon / sterowanie / screen: polecenie: WŁ .: dół],> [broker: salon / sterowanie / ekran: polecenie: WYŁ: góra ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [broker: salon / sterowanie / przełącznik / 4/1: polecenie: ON: włączony],> [broker: salon / sterowanie / przełącznik / 4/1: polecenie: OFF: off] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [broker: salon / sterowanie / przełącznik / 4/2: polecenie: ON: włączony],> [broker: salon / sterowanie / przełącznik / 4/2: polecenie: WYŁ: wyłączone] " 

Teraz powinieneś być w stanie kontrolować swoje urządzenia RF z OpenHAB! Jedną rzeczą, która mnie mile zaskoczyła, był zasięg - pojedynczy węzeł był w stanie pokryć większość mojego domu. Możesz oczywiście dodać kolejny węzeł, słuchając tego samego kanału, który po prostu powtarza te same polecenia, jeśli potrzebujesz dodatkowego zasięgu.

Jedynym ograniczeniem, o którym należy pamiętać, jest to, że same gniazda nie mogą zgłaszać swojego stanu, więc jeśli używasz oryginalnego pilota, kontroluj stan gniazda może nie być dokładnie odzwierciedlony w OpenHAB. Trzymaj się tylko interfejsu OpenHAB i wszystko powinno być w porządku.

Pytania lub problemy? Zapytaj w komentarzach, a dołożę wszelkich starań, aby pomóc. Jeśli chcesz ulepszyć mój kod, prześlij żądanie ściągnięcia.




Jeszcze bez komentarzy

O nowoczesnej technologii, prostej i niedrogiej.
Twój przewodnik w świecie nowoczesnych technologii. Dowiedz się, jak korzystać z technologii i gadżetów, które nas otaczają każdego dnia i dowiedz się, jak odkrywać ciekawe rzeczy w Internecie.