Slik kontrollerer du billige RF Power Sockets fra OpenHAB

Har noen billige RF-baserte stikkontakter, men oppdaget at ingen klarte hjemmehubber jobber med dem? Du kan koble dem til ditt DIY smart home system med bare rundt $ 10 i deler.

Har noen billige RF-baserte stikkontakter, men oppdaget at ingen klarte hjemmehubber jobber med dem?  Du kan koble dem til ditt DIY smart home system med bare rundt $ 10 i deler.
Annonse

Smarte stikkontakter er den enkleste måten å automatisere hjemmet ditt, men på rundt $ 40 hver for en Wi-Fi eller ZWave-basert stikkontakt, er det lite sannsynlig å kjøpe mer enn noen få.

Du kan kanskje allerede ha noen billige RF-baserte stikkontakter, men det er den typen som følger med sin egen tilpassede fjernkontroll, og har noen kanal- og ID-seleksjoner på baksiden. Dessverre er det ingen smarte hjemmemarkeder på markedet Slaget ved Smart Home Hubs: Hva er der ute og hva som kommer? Slaget ved Smart Home Hubs: Hva er der ute og hva som kommer? Les mer som fungerer med dem. Ville det ikke vært bra hvis du kunne koble dem til ditt DIY smart home system på en eller annen måte? Vel, du kan - ganske enkelt faktisk - med rundt $ 10 i deler.

Med litt mer arbeid, kan du også integrere noen annen skreddersydd RF-basert ekstern maskinvare, som dette budsjettkino-skjermen.

Hva trenger du:

  • ESP8266 NodeMCU v12E dev board (eksakt modell spiller ingen rolle, v1 eller v3 burde være bra også). Grunnen til at vi bruker et NodeMCU-kort er fordi vi vil ha den enkle Wi-Fi-tilkoblingen senere. Lenken er for en pakke med 2, som går ut på $ 7 hver.
  • Pakke med 433Mhz sender og mottaker (rundt $ 3).
  • RCSwitch og MQTT biblioteker, og vår kode - alt tilgjengelig for nedlasting fra Github.
  • En MQTT-server, lokal eller ekstern.
  • Noen RF-kontrollerte stikkontakter som kjører på 433 MHz-bånd (det skal si på fjernkontrollen). Jeg kjøpte min fra Maplin som en pakke med 3 for rundt £ 20 ($ 25, 89).

Hvis dette er første gang du programmerer NodeMCU-kortet, må du laste ned Arduino-pluginene for det: Følg med den første delen av vår Arduino Killer-introduksjonsguide. Møt Arduino Killer: ESP8266 Møt Arduino Killer: ESP8266 Hva om jeg fortalte deg at det er et Arduino-kompatibelt dev-kort med innebygd Wi-Fi for mindre enn $ 10? Vel, det er det. Les mer for NodeMCU / ESP8266-brikken. Du trenger også CH430 drivere . Du finner signerte macOS CH430 drivere her, eller Windows her.

Jeg har brukt v1.6.5 av Arduino fordi noe høyere introduserer flere problemer enn det løser. Nedgrader hvis du ikke allerede har det.

Før du går videre, skal jeg anta et grunnleggende kunnskaper om Arduino programmering Arduino Programmering for nybegynnere: Trafikklyskontrolleren Arduino Programmering for nybegynnere: Trafikklyskontrolleren I forrige uke lærte vi om grunnstrukturen til et Arduino-program og tok en nærmere titt på "blink" -eksempelet. Forhåpentligvis tok du muligheten til å eksperimentere med kode, justere timingen. Denne gangen, ... Les mer, og at du har NodeMCU-oppsettet i styreleder, og kan laste opp noen demokoder på riktig måte. Du burde også ha lagt til bibliotekene som er inkludert i vår nedlasting til mappen Arduino / biblioteker .

Hvis du har et eksisterende PubSubClient- eller MQTT-bibliotek, må du sikkerhetskopiere det og fjerne det. Den jeg har tatt med i nedlastingen, er den eneste jeg sikkert kunne motta meldinger på NodeMCU, og jeg prøvde mye !

RF sniffing (valgfritt)

Dette trinnet er ikke nødvendig hvis du bare vil kontrollere DIP-bryteren eller kontaktbryteren for stikkontakter - de støttes ut av boksen, og det vil være nødvendig med minimal kodeendring (dette er fortsatt interessant å gjøre først, men så du ' Jeg forstår hva som skjer bak kulissene).

Hvis du har andre RF-fjernere som du vil prøve å legge til, må du først "snuse" RF-koder som overføres. For å gjøre dette må du laste opp mottattDemo_Advanced skisse fra menyen -> Eksempler -> RCSwitch- mappen, og endre 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. 

Slå opp mottakermodulen som følger. Ser på forsiden av mottakerkortet (det er lengre av de to, senderen er firkantet) - siden med komponentene på:

  • Langt til høyre er GND. Koble til GND på NodeMCU-kortet.
  • Langt til venstre er VCC. Koble til VIN på NodeMCU-kortet.
  • Midt to pins er signalet. Koble enten en til D4 på NodeMCU (de er koblet sammen, så det spiller ingen rolle hvilken).

433 ledninger-1

Last opp den modifiserte ReceiveDemo_Advanced, og når den er ferdig, åpne seriell skjerm og start å trykke på knappene på fjernkontrollene dine. Kopier ut desimaltallet (inkludert bitlengde), pulslengde og protokoll når du trykker på en knapp.

skjerm RF sniffing

Etter å ha gjort dette fant jeg at projektorskjermen min brukte

  • SKREV OPP: Mottatt 8694273 / 24bit; Pulslengde: 355 eller 356; Protokoll: 1
  • SKJERM NED: Mottatt 8694276 / 24bit; Pulslengde: 355 eller 356; Protokoll: 1

Fortsett så mange knapper som du trenger.

Testing av senderen

Deretter skal vi prøve å sende koder ved hjelp av senderen. Koble til sendermodulen (den firkantede) som følger. Vær forsiktig: merket på disse pinnene er fryktelig .

VCC pin er faktisk i midten, ikke på venstre side. Jeg ødela en modul i ferd med å finne ut dette. Den tingen som sier "ATAD" er faktisk "DATA", stavet bakover. Igjen går dataene til D4, VCC til VIN og GND til GND (fjern mottakermodulen, du trenger ikke lenger det).

433 ledninger-2

Last opp eksemplene -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, og igjen, endrer datapinnen :

 mySwitch.enableTransmit(10); 

til

 mySwitch.enableTransmit(2); 

Merk, en rekke eksempler er inkludert i biblioteket, og den som fungerer for deg, vil avhenge av den eksakte typen bryter du har. Type A (dip brytere) og B (ringer eller skyveknapper) er de vanligste - se bildene på RCSwitch siden. For type B er det enkelt å slå på og av en stikkontakt som:

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

hvor 1 er kanal ID (toppskiven), og 4 er stikkontakten ID (nederste tallerken). Disse ble skrevet i romerske tall på mine stikkontakter. Maksimalt 16 individuelle stikkontakter kan derfor adresseres, men flere stikkontakter kan bruke samme adresse hvis du har flere enheter til å slå på en gang.

Imidlertid var projektorskjermen min litt annerledes - den brukte en annen pulslengde. Så, for å betjene dem, fungerte følgende. Merk at du også kan definere en annen protokoll hvis fjernkontrollen trenger det, men sørg for at du definerer protokollen FØR pulslengden. Pulslengden overskrives ved endring av protokoll.

 // 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 at alle koder fungerer først før du går videre til neste trinn.

Kontrollerer via MQTT

Åpne skissen du lastet ned fra Github kalt mqtt_rcswitch.ino, og start med å endre SSID og passord for ditt hjem. Deretter kan du endre kanalnavnet hvis du ønsker det, og angi MQTT-serveren. Hvis du ikke allerede har en MQTT-server som kjører på OpenHAB-installasjonen, leser du del 2 av OpenHABs nybegynners guide. OpenHAB Begynnerhåndbok Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB Beginner's Guide Del 2: ZWave, MQTT, Regler og kartlegging OpenHAB, open source hjemmeautomatiseringsprogramvaren, overskrider kapasiteten til andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende. Les mer . Merk at koden min er laget for stikkontakter for type B (rotasjonsbryter), selv om du også enkelt kan endre den for DIP-brytere.

Den viktigste delen av koden er funksjonen MessageReceived (), som svarer på innkommende MQTT-kommandoer. I denne funksjonen sjekker vi først på det store søkeordet - jeg valgte "bryter" og "skjerm". I tilfelle av "bryter" analyserer vi deretter kanal- og plug-ID-en; Sjekk deretter 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 / kontroll / bytt / X / Y (hvor X er kanal, og Y er plug-ID, med meldingslegem på eller av) 
 stue / kontroll / skjerm (med meldingskroppen opp eller ned) 

Bruk kommandolinjen eller en GUI MQTT-klient til å teste enhetene dine før du legger til OpenHAB.

Legger til OpenHAB

Som et siste skritt trenger vi bare å lage noen elementer for disse bryterne i OpenHAB. Jeg har definert følgende elementer for nå, men du bør kunne finne ut hvordan du legger til flere:

 / * RF433mHz enheter * / Switch CinemaScreen "Screen" (Kino) {mqtt = "> [megler: stue / kontroll / skjerm: kommando: PÅ: ned], > [megler: stue / kontroll / skjerm: kommando: ] "} Switch Switch41" Switch41 "(Kino) {mqtt ="> [megler: stue / kontroll / bytter / 4/1: kommando: ON: on], > [megler: stue / kontroll / bytter / 4/1: kommando: AV: av] "} Bryter Switch42" Switch42 "(Kino) {mqtt ="> [megler: stue / kontroll / bytt / 4/2: kommando: PÅ: på], > [megler: stue / kontroll / bryter / 4/2: kommando: oFF: av] "} 

Du bør nå kunne kontrollere dine RF-enheter fra OpenHAB! En ting jeg ble hyggelig overrasket over var rekkevidden - en enkelt knute kunne dekke det meste av huset mitt. Du kan selvfølgelig legge til en annen node, lytte til den samme kanalen, som bare gjentar de samme kommandoene, hvis du trenger ytterligere dekning.

Den eneste begrensningen å huske på er at stikkontaktene selv ikke kan rapportere statusen deres, så hvis du bruker den originale fjernkontrollen, kan kontrollen om stikkontakten ikke gjenspeiles nøyaktig i OpenHAB. Hold deg til å bruke bare OpenHAB-grensesnittet, og du burde ha det bra.

Spørsmål eller problemer? Spør vekk i kommentarene, og jeg vil gjøre mitt beste for å hjelpe . Hvis du vil forbedre koden min, kan du sende inn en trekkforespørsel.

In this article