Hur man kontrollerar billiga RF Power Sockets från OpenHAB

Hur man kontrollerar billiga RF Power Sockets från OpenHAB / Smart hem

Smarta uttag är det enklaste sättet att automatisera ditt hem, men på ungefär $ 40 för en Wi-Fi eller ZWave-baserad uttag, är det osannolikt att du köper mer än några.

Du kanske redan har några billiga RF-baserade uttag - det slag som levereras med egen anpassad fjärrkontroll, och har vissa kanal- och ID-väljare på baksidan. Tyvärr finns det inga smarta hubbar på marknaden Slaget vid Smart Home Hubs: Vad är ute och vad kommer det? Slaget vid Smart Home Hubs: Vad är ute och vad kommer det? Läs mer som arbetar med dem. Skulle det inte vara bra om du kunde länka dem till ditt DIY smarta hemsystem på något sätt? Tja, du kan - ganska lätt i själva verket - med ungefär $ 10 i delar.

Med lite mer arbete kan du också integrera några andra skräddarsydda RF-baserade fjärrhårdvaror, som denna budgetfilmskärm.

Vad du behöver:

  • ESP8266 NodeMCU v12E dev board (exakt modell spelar ingen roll, v1 eller v3 ska också vara bra). Anledningen till att vi använder ett NodeMCU-kort är att vi vill ha den enkla Wi-Fi-anslutningen senare. Länken är för ett paket med 2, som går ut på $ 7 vardera.
  • Paket med 433Mhz sändare och mottagare (ca $ 3).
  • RCSwitch och MQTT-bibliotek, och vår kod - alla tillgängliga att ladda ner från Github.
  • En MQTT-server, lokal eller fjärrkontroll.
  • Vissa RF-kontrollerade uttag körs på 433 MHz-bandet (det ska säga på fjärrkontrollen). Jag köpte min från Maplin som ett paket med 3 för ca £ 20 ($ 25.89).

Om det här är första gången du programmerar NodeMCU-styrelsen måste du ladda ner Arduino plugins för det: följ med den första delen av vår Arduino Killer introduktionsguide. Möt Arduino Killer: ESP8266 Möt Arduino Killer: ESP8266 Vad händer om jag sa till dig att det finns en Arduino-kompatibel dev-kort med inbyggd Wi-Fi för mindre än $ 10? Jo, det finns det. Läs mer för NodeMCU / ESP8266-chipet. Du behöver också CH430 drivrutiner. Du kan hitta signerade MacOS CH430 drivrutiner här, eller Windows här.

Jag har använt v1.6.5 i Arduino eftersom något högre introducerar fler problem än det löser. Nedgradera om du inte redan har det.

Innan du fortsätter kommer jag att anta en grundläggande kunskap om Arduino programmering Arduino Programmering för nybörjare: Trafikljusregulatorn Arduino Programmering för nybörjare: Trafikljuskontrollen Förra veckan lärde vi oss om den grundläggande strukturen i ett Arduino-program och tog en närmare titt på "blink" -exemplet. Förhoppningsvis tog du tillfället i akt att experimentera med kod, justera tidpunkterna. Den här gången, ... Läs mer, och att du har din NodeMCU-inställning i styrelsen, och kan korrekt ladda upp någon demokod. Du borde också ha lagt till de bibliotek som ingår i vår nedladdning till din Arduino / bibliotek mapp.

Om du har en befintlig PubSubClient eller MQTT-biblioteket, säkerhetskopiera den och ta bort den - den som jag har med i nedladdningen är den enda där jag på ett tillförlitligt sätt kunde få meddelanden på NodeMCU, och jag försökte mycket!

RF Sniffing (valfritt)

Det här steget behövs inte om du bara vill styra DIP-switchar eller urvalskontaktuttag - de stöds ut ur rutan och minimal kodändring behövs (det här är fortfarande intressant att göra först, men så du " Jag förstår vad som händer bakom kulisserna).

Om du har andra RF-fjärrkontroller som du vill försöka lägga till måste du först “Sniff” RF-koderna sänds. För att göra det, ladda upp ReceiveDemo_Advanced skiss från Meny -> Exempel -> RCSwitch mappen och ändra följande rad från 0

mySwitch.enableReceive (0); // Mottagare vid avbrott 0 => det är stiftet # 2

till 2.

mySwitch.enableReceive (2); // Mottagare på GPIO 2 / D4.

Dra upp mottagningsmodulen enligt följande. Titta på framsidan av mottagarkortet (det är ju längre av de två, sändaren är fyrkantig) - sidan med komponenterna på:

  • Längst till höger är GND. Anslut till GND på NodeMCU-kortet.
  • Längst till vänster är VCC. Anslut till VIN på NodeMCU-kortet.
  • Mellan två pinnar är signalen. Anslut en till D4 på NodeMCU (de är anslutna ihop, så det spelar ingen roll vilken).

Ladda upp den ändrade filen nu ReceiveDemo_Advanced, och när det är klart, öppna seriekontrollen och börja trycka på knapparna på fjärrkontrollerna. Kopiera decimaltalet (inklusive bitlängd), pulslängd och protokoll när du trycker på en knapp.

Efter att ha gjort det såg jag att min projektors skärm använde

  • SKÄRM UPP: Mottagen 8694273 / 24bit; Pulslängd: 355 eller 356; Protokoll: 1
  • SKÄR NED: Mottagen 8694276 / 24bit; Pulslängd: 355 eller 356; Protokoll: 1

Fortsätt så många knappar som du behöver.

Testa sändaren

Därefter ska vi försöka skicka koder med sändaren. Wire sändarmodulen (den fyrkantiga) som följer. Var försiktig: märkningen på dessa stift är avskyvärda.

VCC-stiftet är faktiskt i mitten, inte på vänster sida. Jag förstörde en modul i processen att räkna ut detta. Den saken som säger “EN ANING” är faktiskt “DATA”, stavat baklänges. Återigen går data till D4, VCC till VIN och GND till GND (ta bort mottagningsmodulen, du behöver inte längre det).

Ladda upp Exempel -> RCSwitch -> TypB_WithRotaryOrSlidingSwitches, och igen, ändra datapinnen:

mySwitch.enableTransmit (10);

till

mySwitch.enableTransmit (2);

Observera att en rad olika exempel ingår i biblioteket, och vilken som fungerar för dig beror på exakt vilken typ av omkopplare du har. Typ A (dipbrytare) och B (rattar eller reglage) är de vanligaste - se bilderna på RCSwitch-sidan. För typ B är det enkelt att slå på och stänga av ett uttag:

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

där 1 är kanal ID (den övre ratten) och 4 är uttaget ID (den undre ratten). Dessa skrevs i romerska siffror på mina uttag. Maximalt 16 enskilda uttag kan därför adresseras, men flera uttag kan använda samma adress om du har flera enheter att sätta på samtidigt.

Men min projektors skärm var lite annorlunda - den använde en annan pulslängd. Så för att driva dem arbetade följande. Observera att du också kan definiera ett annat protokoll om fjärrkontrollen behöver det, men se till att du definierar protokollet innan pulslängden. Pulslängden skrivs över när protokollet ändras.

 // Observera att min skärm faktiskt kräver två knapptryck (inte en lång tryckning, men två fysiska pressar), så jag försenar lite och skickar samma signal igen, void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimal kod, antal bitar) fördröjning (2000); mySwitch.send (8694273,24);  void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); fördröjning (2000); mySwitch.send (8694276,24);  

Testa alla dina koder fungerar först innan du går vidare till nästa steg.

Styrning via MQTT

Öppna den skiss du laddat ner från Github som heter mqtt_rcswitch.ino, och börja med att ändra SSID och lösenord för ditt hem. Ändra sedan kanalnamnet om du vill, och ställ in MQTT-servern. Om du inte redan har en MQTT-server som körs på din OpenHAB-installation, läs del 2 i vår OpenHAB-nybörjarhandbok. OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning OpenHAB, open source-hemautomatiseringsprogrammet, överträffar kapaciteten hos andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande. Läs mer . Observera att min kod är utformad för socklar av typ B (roterande brytare), men du kan enkelt ändra den för DIP-omkopplare också.

Den viktigaste delen av koden är meddelande mottaget() funktion som svarar på inkommande MQTT-kommandon. I den här funktionen kontrollerar vi först det stora sökordet - jag valde “växla” och “skärm”. I fallet med “växla”, vi analyserar sedan kanalen och plugga ID; Kontrollera sedan nyttolastkroppen för kommandot.

 void messageReceived (String topic, String nyttolast, char * byte, osignerad int längd) if (topic.indexOf ("switch")> = 0) // växla kontroll, parsa ut kanalen och plugga id int channel = getValue ämne, '/', 3) .toInt (); int plug = getValue (ämne, '/', 4) .toInt (); om (nyttolast == "på") mySwitch.switchOn (kanal, plug);  annars mySwitch.switchOff (kanal, plug);  annars om (topic.indexOf ("screen")> = 0) // skärmkontroll om (nyttolast == "upp") screenUp ();  annars om (nyttolast == "nere") screenDown ();  / * lägg till en annan om här för att lyssna på fler kommandon (eller bara ändra ovanstående om du inte vill ha skärm) * / 

Som standard fungerar följande MQTT-kommandon:

vardagsrum / kontroll / switch / X / Y (där X är kanal och Y är plug-ID, med meddelandekroppen på eller av)
vardagsrum / kontroll / skärm (med meddelandekroppen upp eller ner)

Använd kommandoraden eller en GUI MQTT-klient för att testa dina enheter innan du lägger till OpenHAB.

Lägger till OpenHAB

Som ett sista steg behöver vi bara skapa några saker för dessa växlar i OpenHAB. Jag har definierat följande föremål för nu, men du borde kunna räkna ut hur man lägger till mer:

/ * RF433mHz enheter * / Switch CinemaScreen "Screen" (Cinema) mqtt = "> [mäklare: vardagsrum / kontroll / skärm: kommando: PÅ: ned],> [mäklare: vardagsrum / kontroll / skärm: kommando: ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [mäklare: vardagsrum / kontroll / switch / 4/1: kommando: ON: on],> [mäklare: vardagsrum / kontroll / switch / 4/1: kommando: OFF: av] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [mäklare: vardagsrum / kontroll / switch / 4/2: kommando: ON: on],> [mäklare: vardagsrum / kontroll / strömbrytare / 4/2: kommando: oFF: off] " 

Du borde nu kunna styra dina RF-enheter från OpenHAB! En sak som jag blev positivt överraskad av var sortimentet - en enda nod kunde täcka det mesta av mitt hus. Du kan naturligtvis lägga till en annan nod, lyssna på samma kanal, som helt enkelt upprepar samma kommandon om du behöver ytterligare täckning.

Den enda begränsningen att komma ihåg är att själva uttagen inte kan rapportera sin status, så om du använder den ursprungliga fjärrkontrollen, kan statusen för uttaget inte reflekteras korrekt i OpenHAB. Håll dig till att använda bara OpenHAB-gränssnittet och du borde ha det bra.

Frågor eller problem? Fråga i kommentarerna, och jag gör mitt bästa för att hjälpa. Om du vill förbättra min kod, var god och skicka in en dröjförfrågan.

Utforska mer om: Hemautomatisering, smarta kontakter.