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ż tanie gniazda RF - takie, które mają własny niestandardowy pilot zdalnego sterowania i mają z tyłu wybrane przełączniki kanałów i identyfikatorów. Niestety nie ma huby inteligentnych domów na rynku Bitwa o Smart Home Hubs: Co tam jest i co będzie dalej? Czytaj więcej 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 wysiłku możesz również zintegrować inny zdalny sprzęt oparty na RF, na przykład ten budżetowy ekran kinowy.

Czego potrzebujesz:

  • ESP8266 Płytka deweloperska NodeMCU v12E (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ę.
  • instagram viewer
  • Pakiet Nadajnik i odbiornik 433 MHz (około 3 USD).
  • Biblioteki RCSwitch i MQTT oraz nasz kod - wszystko 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 programujesz płytę NodeMCU po raz pierwszy, musisz pobrać dla niej wtyczki Arduino: postępuj zgodnie z pierwszą częścią naszego Przewodnik wprowadzający do Arduino Killer Poznaj Arduino Killer: ESP8266Co jeśli powiem ci, że jest płyta deweloperska kompatybilna z Arduino z wbudowanym Wi-Fi za mniej niż 10 USD? Cóż, jest. Czytaj więcej dla układu NodeMCU / ESP8266. Będziesz także potrzebować Sterowniki CH430. Możesz znaleźć podpisano tutaj sterowniki macOS CH430lub Windows tutaj.

Użyłem wersji 1.5.5 Arduino, ponieważ wszystko wyższe 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 Programowanie Arduino Programowanie Arduino dla początkujących: samouczek dotyczący projektu kontrolera sygnalizacji świetlnejZbudowanie kontrolera sygnalizacji świetlnej Arduino pomaga rozwinąć podstawowe umiejętności kodowania! Zaczynamy. Czytaj więcej oraz że masz konfigurację NodeMCU w menedżerze płyty i możesz poprawnie przesłać kod demonstracyjny. Powinieneś również 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ń - ta, którą zawarłem do pobrania, jest jedyną, w której mogę 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 gniazda wybierania pokrętła - są one obsługiwane od razu po wyjęciu z pudełka, i konieczna będzie minimalna modyfikacja kodu (to jednak jest interesujące, ale najpierw zrozumiesz, co się dzieje za sceny).

Jeśli masz inne piloty RF, które chcesz 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 => czyli pin nr 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óry).
433 okablowanie-1

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ół.

wąchanie ekranu RF

Po zrobieniu tego, zauważyłem, że ekran mojego projektora był w użyciu

  • 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, co mówi „ATAD”, to tak naprawdę „DANE”, przeliterowane wstecz. Ponownie dane trafiają do D4, VCC do VIN i GND do GND (wyjmij moduł odbiornika, już go nie potrzebujesz).

433 okablowanie-2

Załaduj Przykłady -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesi 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 także 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 naciska), 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.inoi 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 wykresyOpenHAB, 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. Czytaj więcej . 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łączenia” analizujemy kanał i ID wtyczki; następnie sprawdź treść ładunku dla polecenia.

void messageReceived (Temat ciągu, ładunek ciągu, char * bajty, długość całkowita bez znaku) {if (topic.indexOf ("switch")> = 0) {// switch control, parsuj kanał i podłącz id int channel = getValue (temat, „/”, 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 chcesz 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 ID wtyczki; z włączoną lub wyłączoną treścią wiadomości)
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 * / Przełącz CinemaScreen „Ekran” (kino) {mqtt = "> [broker: salon / sterowanie / ekran: polecenie: WŁ.: dół:],> [broker: salon / sterowanie / ekran: polecenie: WYŁ: góra]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: salon / sterowanie / przełącznik / 4/1: polecenie: WŁ.: włączony],> [broker: salon / sterowanie / przełącznik / 4/1: polecenie: WYŁ: off] "} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [broker: salon / sterowanie / przełącznik / 4/2: polecenie: ON: wł.],> [Broker: salon / sterowanie / przełącznik / 4/2: polecenie: WYŁ: off] "}

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 statusu, więc jeśli Ty użyj oryginalnego pilota, kontroluj stan gniazda może nie być dokładnie odzwierciedlone w OpenHAB. Trzymaj się tylko interfejsu OpenHAB i wszystko powinno być w porządku.

Pytania lub problemy? Zapytaj w komentarzach, a ja postaram się pomóc. Jeśli chcesz ulepszyć mój kod, prześlij żądanie ściągnięcia.

James ma licencjat z zakresu sztucznej inteligencji i jest certyfikowany przez CompTIA A + i Network +. Jest głównym programistą MakeUseOf i spędza wolny czas grając w paintball VR i gry planszowe. Buduje komputery od dziecka.