Sådan styres billige RF Power Sockets fra OpenHAB

Har du nogle billige RF-baserede stikkontakter, men opdagede, at ingen smarte hjemmeknapper arbejder med dem? Du kan forbinde dem med dit DIY smart home system med kun omkring $ 10 i dele.

Har du nogle billige RF-baserede stikkontakter, men opdagede, at ingen smarte hjemmeknapper arbejder med dem?  Du kan forbinde dem med dit DIY smart home system med kun omkring $ 10 i dele.
Reklame

Smart stikkontakter er den nemmeste måde at automatisere dit hjem på, men på omkring $ 40 hver for en Wi-Fi eller ZWave-basestik, er det usandsynligt, at du køber mere end et par stykker.

Du har måske allerede nogle billige RF-baserede stik - den slags, der følger med deres egen brugerdefinerede fjernbetjening, og har nogle kanaler og ID-selektorer på bagsiden. Desværre er der ingen smarte hjem hubs på markedet Slaget ved Smart Home Hubs: Hvad er derude og hvad kommer der? Slaget ved Smart Home Hubs: Hvad er derude og hvad kommer der? Læs mere, der arbejder med dem. Ville det ikke være godt, hvis du kunne forbinde dem med dit DIY smart home system på en eller anden måde? Nå, du kan - ganske nemt faktisk - med omkring $ 10 i dele.

Med lidt mere arbejde kan du også integrere nogle andre skræddersyede RF-baserede fjernbetjeninger, som denne budget biograf skærm.

Hvad du har brug for:

  • ESP8266 NodeMCU v12E dev board (nøjagtig model er ligegyldigt, v1 eller v3 skal også være fint). Grunden til, at vi bruger et NodeMCU-bord, er, at vi gerne vil have den nemme Wi-Fi-forbindelse senere. Linket er til en pakke med 2, som udarbejdes til $ 7 hver.
  • Pakke med 433Mhz sender og modtager (ca. $ 3).
  • RCSwitch og MQTT biblioteker, og vores kode - alle tilgængelige for download fra Github.
  • En MQTT-server, lokal eller fjernbetjening.
  • Nogle RF-styrede stikkontakter, der kører på 433 MHz-båndet (det skal sige på fjernbetjeningen). Jeg købte min fra Maplin som en pakke med 3 for omkring £ 20 ($ 25, 89).

Hvis dette er din første gang, programmering af NodeMCU bordet, skal du downloade Arduino plugins til det: Følg med den første del af vores Arduino Killer introduktionsguide. Mød Arduino Killer: ESP8266 Mød Arduino Killer: ESP8266 Hvad hvis jeg fortalte dig, at der er en Arduino-kompatibel dev-kort med indbygget Wi-Fi til mindre end $ 10? Nå er der. Læs mere for NodeMCU / ESP8266 chip. Du skal også bruge CH430 drivere . Du kan finde signerede macOS CH430 drivere her eller Windows her.

Jeg har brugt v1.6.5 af Arduino fordi noget højere introducerer flere problemer, end det løser. Nedgrader hvis du ikke allerede har det.

Før du går videre, vil jeg påtage mig et grundlæggende niveau af viden om Arduino programmering Arduino Programmering til begyndere: Trafiklyskontrolenheden Arduino Programmering til begyndere: Trafiklyskontrolleren I sidste uge lærte vi om den grundlæggende struktur af et Arduino-program og tog et nærmere kig på 'blink'-eksemplet. Forhåbentlig benyttede du mulighed for at eksperimentere med kode og justere timingen. Denne gang, ... Læs mere, og at du har din NodeMCU opsætning i bestyrelseslederen, og er i stand til at uploade en korrekt demo kode korrekt. Du skal også have tilføjet de biblioteker, der er inkluderet i vores download til din Arduino / biblioteker mappe.

Hvis du har et eksisterende PubSubClient- eller MQTT-bibliotek, skal du sikkerhedskopiere det og fjerne det. Den eneste, jeg har inkluderet i downloaden, er den eneste, hvor jeg pålideligt kunne modtage meddelelser på NodeMCU, og jeg prøvede meget !

RF sniffing (valgfri)

Dette trin er ikke nødvendigt, hvis du kun ønsker at styre DIP-kontakter eller kontaktstikket til stikkontakter - de understøttes ud af kassen, og der kræves en minimal kodeændring (det er stadig interessant at gøre det første, selvom du ' Jeg forstår, hvad der foregår bag kulisserne).

Hvis du har andre RF-fjernbetjeninger, som du gerne vil prøve at tilføje, skal du først "snuse" de RF-koder, der sendes. For at gøre det skal du indlæse ReceiveDemo_Advanced sketchen i menuen -> Eksempler -> RCSwitch- mappe og ændre følgende linje fra 0

mySwitch.enableReceive(0); // Receiver on interrupt 0 =>that is pin #2 

til 2.

 mySwitch.enableReceive(2); // Receiver on GPIO 2 / D4. 

Træk modtagermodulet op som følger. Kigger på forsiden af ​​modtagerkortet (det er længere af de to, transmitteren er firkantet) - siden med komponenterne på:

  • Langt til højre er GND. Opret forbindelse til GND på NodeMCU-kortet.
  • Langt til venstre er VCC. Tilslut til VIN på NodeMCU bordet.
  • Mellemste to ben er signalet. Tilslut enten en til D4 på NodeMCU (de er forbundet sammen, så det betyder ikke noget hvilket).

433 ledninger-1

Nu skal du uploade den modificerede ReceiveDemo_Advanced, og når det er færdigt, skal du åbne serielt skærmen og starte tryk på knapperne på dine fjernbetjeninger. Kopier decimaltegnet (inklusive bithængde), pulslængde og protokol, når du trykker på en knap.

screen RF sniffing

Efter at have gjort dette fandt jeg, at min projektor skærm brugte

  • SCREEN UP: Modtaget 8694273 / 24bit; Pulslængde: 355 eller 356; Protokol: 1
  • SCREEN DOWN: Modtaget 8694276 / 24bit; Pulslængde: 355 eller 356; Protokol: 1

Fortsæt for så mange knapper, som du har brug for.

Test af senderen

Dernæst vil vi forsøge at sende koder ved hjælp af senderen. Tråd sendermodulet (den firkantede) som følger. Pas på: Mærkningen på disse stifter er frygtelig .

VCC pin er faktisk i midten, ikke på venstre side. Jeg ødelagde et modul i færd med at finde ud af det. Den ting der siger "ATAD" er faktisk "DATA", stavet baglæns. Igen går dataene til D4, VCC til VIN og GND til GND (fjern modtagermodulet, du behøver ikke længere det).

433 ledninger-2

Indlæs eksemplerne -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, og igen, skift data pin:

 mySwitch.enableTransmit(10); 

til

 mySwitch.enableTransmit(2); 

Bemærk, at en række eksempler er inkluderet i biblioteket, og den ene fungerer for dig, afhænger af den nøjagtige type af switch, du har. Type A (dip switches) og B (drejeknapper eller skydere) er de mest almindelige - se billederne på RCSwitch-siden. For type B kan du tænde og slukke en stikkontakt så enkelt som:

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

hvor 1 er kanal-id'et (den øverste drejeknap) og 4 er socket-id'et (nederste skiven). Disse blev skrevet i romertal på mine stik. Maksimalt 16 individuelle stikkontakter kan derfor løses, selvom flere stikkontakter kan bruge samme adresse, hvis du har flere enheder til at tænde på en gang.

Men min projektor skærm var lidt anderledes - det brugte en anden pulslængde. Så for at betjene dem arbejdede følgende. Bemærk, at du også kan definere en anden protokol, hvis din fjernbetjening har brug for det, men sørg for at definere protokollen FØR pulslængden. Pulslængden overskrives, når protokollen ændres.

 // Note that my screen actually requires TWO button presses (not a long press, but two physical presses), so I'm delaying a bit then sending the same signal again void screenUp(){ mySwitch.setPulseLength(358); mySwitch.send(8694273, 24); // (decimal code, number of bits) delay(2000); mySwitch.send(8694273, 24); } void screenDown(){ mySwitch.setPulseLength(358); mySwitch.send(8694276, 24); delay(2000); mySwitch.send(8694276, 24); } 

Test alle dine koder arbejder først, før du går videre til næste trin.

Styring via MQTT

Åbn skissen, du downloadede fra Github, der hedder mqtt_rcswitch.ino, og start med at ændre netværks SSID og adgangskode til dit hjem. Skift derefter kanalnavnet, hvis du ønsker det, og indstil MQTT-serveren. Hvis du ikke allerede har en MQTT-server, der kører på din OpenHAB-installation, skal du læse del 2 i vores OpenHAB Beginners Guide OpenHAB Begyndervejledning Del 2: ZWave, MQTT, Regler og kortlægning OpenHAB Begyndervejledning Del 2: ZWave, MQTT, Regler og kortlægning OpenHAB, open source home automation software, overstiger langt de øvrige hjemmautomatiseringssystemers muligheder på markedet - men det er ikke let at komme i gang. Faktisk kan det være retfærdigt frustrerende. Læs mere . Bemærk, at min kode er designet til stik til type B (drejekontakt), selvom du nemt kan ændre den til DIP-switche.

Den vigtigste del af koden er funktionen MessageReceived (), som svarer til indgående MQTT-kommandoer. I denne funktion undersøger vi først det store søgeord - jeg valgte "switch" og "screen". I tilfælde af "switch" analyserer vi derefter kanal- og plug-ID'et; Kontroller derefter nyttelastekroppen for kommandoen.

 void messageReceived(String topic, String payload, char * bytes, unsigned int length) { if (topic.indexOf("switch")>=0){ //switch control, parse out the channel and plug id int channel = getValue(topic, '/', 3).toInt(); int plug = getValue(topic, '/', 4).toInt(); if(payload == "on"){ mySwitch.switchOn(channel, plug); } else{ mySwitch.switchOff(channel, plug); } } else if (topic.indexOf("screen")>=0){ //screen control if(payload == "up"){ screenUp(); } else if(payload == "down"){ screenDown(); } } /* add another else if here to listen for more commands (or just modify the one above if you dont want screen) */ } 

Som standard fungerer følgende MQTT-kommandoer:

 stue / kontrol / switch / X / Y (hvor X er kanal, og Y er plug-ID, med meddelelseskroppen tændt eller slukket) 
 stue / kontrol / skærm (med besked organ op eller ned) 

Brug kommandolinjen eller en GUI MQTT-klient til at teste dine enheder, før du tilføjer til OpenHAB.

Tilføjelse til OpenHAB

Som et sidste skridt skal vi bare lave nogle ting til disse switches i OpenHAB. Jeg har defineret følgende punkter for nu, men du bør kunne finde ud af, hvordan du tilføjer mere:

 / * RF433mHz enheder * / Switch CinemaScreen "Screen" (Cinema) {mqtt = "> [mægler: stue / kontrol / skærm: kommando: ON: ned], > [mægler: stue / kontrol / skærm: kommando: OFF: ] "} Switch Switch41" Switch41 "(Cinema) {mqtt ="> [mægler: stue / kontrol / switch / 4/1: kommando: ON: on], > [mægler: stue / kontrol / switch / 4/1: kommando: OFF: off] "} Switch Switch42" Switch42 "(Cinema) {mqtt ="> [mægler: stue / kontrol / switch / 4/2: kommando: ON: on], > [mægler: stue / kontrol / switch / 4/2: kommando: oFF: off] "} 

Du skal nu kunne styre dine RF-enheder fra OpenHAB! En ting, jeg blev glædeligt overrasket over var rækkevidden - en enkelt knude var i stand til at dække det meste af mit hus. Du kan selvfølgelig tilføje en anden node og lytte til den samme kanal, som blot gentager de samme kommandoer, hvis du har brug for yderligere dækning.

Den eneste begrænsning at huske på er, at stikkene selv ikke kan rapportere deres status, så hvis du bruger den oprindelige fjernbetjening, kan kontrollen af ​​stikkontakten ikke være nøjagtigt reflekteret i OpenHAB. Hold dig til at bruge bare OpenHAB-grænsefladen, og du skal være i orden.

Spørgsmål eller problemer? Spørg væk i kommentarerne, og jeg vil gøre mit bedste for at hjælpe . Hvis du gerne vil forbedre min kode, er du velkommen til at indsende en pull-anmodning.

In this article