Slik kontrollerer du billige RF Power Sockets fra OpenHAB
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 bør også ha lagt til bibliotekene som er inkludert i vår nedlasting til din Arduino / bibliotek mappe.
Hvis du har en eksisterende PubSubClient eller MQTT bibliotek, sikkerhetskopiere den og fjerne den - den jeg har tatt med i nedlastingen, er den eneste jeg kunne pålidelig 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 “sniff” RF-koder blir overført. For å gjøre det, last opp ReceiveDemo_Advanced skisse fra Meny -> Eksempler -> RCSwitch mappe, og endre følgende linje fra 0
mySwitch.enableReceive (0); // Mottaker ved avbryt 0 => som er pin # 2
til 2.
mySwitch.enableReceive (2); // Mottaker på 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).
Last opp den endrede ReceiveDemo_Advanced, og når det er gjort, åpner du seriell skjerm og begynner å trykke på knappene på fjernkontrollene dine. Kopier ut desimaltallet (inkludert bitlengde), pulslengde og protokoll når du trykker på en knapp.
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 “EN SMULE” er faktisk “DATA”, stavet baklengs. Igjen går dataene til D4, VCC til VIN og GND til GND (fjern mottakermodulen, du trenger ikke lenger det).
Last opp Eksempler -> 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.
// Merk at skjermen egentlig krever to knappetrykk (ikke et langt trykk, men to fysiske presser), så jeg forsinker litt og sender det samme signalet igjen void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (desimalkode, antall biter) forsinkelse (2000); mySwitch.send (8694273,24); void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); forsinkelse (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 som heter mqtt_rcswitch.ino, og begynn 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 enkelt kan endre den for DIP-brytere også.
Den viktigste delen av koden er beskjed mottatt() funksjon, som reagerer på innkommende MQTT-kommandoer. I denne funksjonen sjekker vi først på det store søkeordet - jeg valgte “bytte om” og “skjerm”. I tilfelle av “bytte om”, Vi analyserer deretter kanalen og plug-IDen. Sjekk deretter nyttelastekroppen for kommandoen.
void messageReceived (String topic, String nyttelast, char * byte, usignert int lengde) if (topic.indexOf ("switch")> = 0) // bytte kontroll, parse ut kanalen og plug ID int channel = getValue emne, '/', 3) .toInt (); int plug = getValue (emne, '/', 4) .toInt (); hvis (nyttelast == "på") mySwitch.switchOn (kanal, plug); ellers mySwitch.switchOff (kanal, plug); annet hvis (topic.indexOf ("screen")> = 0) // skjermkontroll hvis (nyttelast == "opp") screenUp (); annet hvis (nyttelast == "nede") screenDown (); / * legg til et annet annet hvis her for å lytte etter flere kommandoer (eller bare endre den ovenfor hvis du ikke vil ha skjermen) * /
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.
Utforsk mer om: Hjemmeautomatisering, Smartplugger.