
Edmund Richardson
0
4578
152
Smart stikkontakter er den enkleste måde at automatisere dit hjem på, men til omkring $ 40 hver for en Wi-Fi- eller ZWave-baseret stik er det usandsynligt, at du køber mere end et par få.
Du har muligvis allerede nogle billige RF-baserede stikkontakter - den slags der leveres med deres egen brugerdefinerede fjernbetjening og har nogle kanal- og ID-valg på bagsiden. Desværre er der ingen smarte hjemknudepunkter på markedet Battle of the Smart Home Hubs: Hvad er derude og hvad der kommer? Slaget om smarthubene: Hvad er derude, og hvad der kommer? det arbejde med dem. Ville det ikke være dejligt, hvis du på en eller anden måde kunne forbinde dem til dit DIY-smarthemmesystem? Nå, du kan - ganske let faktisk - med omkring $ 10 i dele.
Med lidt mere arbejde kan du også integrere nogle andre skræddersyede RF-baserede fjernhardware, som f.eks. Denne biografskærm.
Hvad du har brug for:
- ESP8266 NodeMCU v12E dev-kort (nøjagtig model betyder ikke noget, v1 eller v3 skal også være fint). Årsagen til at vi bruger et NodeMCU-kort er fordi vi vil have den lette Wi-Fi-forbindelse senere. Linket er til en pakke på 2, der fungerer til $ 7 hver.
- Pakke med 433 MHz transmitter og modtager (ca. $ 3).
- RCSwitch- og MQTT-biblioteker og vores kode - alt tilgængeligt at downloade fra Github.
- En MQTT-server, lokal eller fjern.
- Nogle RF-kontrollerede stikkontakter, der kører på 433 mHz-bånd (det skal siges på fjernbetjeningen). Jeg købte min fra Maplin som en pakke med 3 til omkring £ 20 ($ 25.89).
Hvis dette er din første gang, du programmerer NodeMCU-kortet, skal du downloade Arduino-plugins til det: følg med den første del af vores introduktionsvejledning til Arduino Killer Mød Arduino Killer: ESP8266 Mød Arduino Killer: ESP8266 Hvad hvis jeg fortalte dig, at der er et Arduino-kompatibelt dev-kort med indbygget Wi-Fi til mindre end $ 10? Det er der godt. til NodeMCU / ESP8266-chippen. Du har også brug for CH430 chauffører. 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 gjort det.
Inden du går videre, vil jeg antage et grundlæggende niveau af viden om Arduino-programmering Arduino-programmering for begyndere: Trafiklyskontroller Projektvejledning Arduino-programmering for begyndere: Trafiklyskontroller Projektvejledning Opbygning af en Arduino trafiklyscontroller hjælper dig med at udvikle grundlæggende kodningsevner ! Vi sætter dig i gang. , og at du har din NodeMCU-opsætning i boardmanageren og er i stand til korrekt at uploade nogle demokode. Du skulle også have tilføjet bibliotekerne, der er inkluderet i vores download, til din Arduino / biblioteker folder.
Hvis du har en eksisterende PubSubClient eller MQTT-bibliotek, sikkerhedskopier det og fjern det - den, jeg har inkluderet i download, er den eneste, hvor jeg pålideligt kunne modtage meddelelser på NodeMCU, og jeg prøvede en masse!
RF-sniffing (valgfrit)
Dette trin er ikke nødvendigt, hvis du kun vil kontrollere DIP-switch eller opkaldsstikstikstik - disse understøttes ude af kassen, og der kræves minimal kodekodificering (dette er dog stadig interessant at gøre først, så du ' Jeg kan forstå, hvad der sker bag kulisserne).
Hvis du har andre RF-fjernbetjeninger, som du gerne vil prøve at tilføje, skal du først “sniffe” RF-koder, der transmitteres. For at gøre dette skal du indlæse ReceiveDemo_Advanced skitse fra Menu -> Eksempler -> RCSwitch -mappen, og skift den følgende linje fra 0
mySwitch.enableReceive (0); // Modtager ved afbrydelse 0 => det er pin nr. 2
til 2.
mySwitch.enableReceive (2); // Modtager på GPIO 2 / D4.
Tilslut modtagermodulet som følger. Ser man på fronten af modtagertavlen (det er den længste af de to, senderen er firkantet) - siden med komponenterne på:
- Længst til højre er GND. Opret forbindelse til GND på NodeMCU-kortet.
- Længst til venstre er VCC. Opret forbindelse til VIN på NodeMCU-kortet.
- Mellem to stifter er signalet. Tilslut enten en til D4 på NodeMCU (de er forbundet sammen, så det betyder ikke noget, hvilket).
Upload nu det ændrede ReceiveDemo_Advanced, og når det er gjort, skal du åbne den serielle skærm og begynde at trykke på knapper på dine fjernbetjeninger. Kopier decimalen (inklusive bitlængde), pulslængde og protokol, når du trykker på en knap.
Efter at have gjort dette, fandt jeg, at min projektorskærm bruger
- SCREEN UP: Modtaget 8694273 / 24bit; Pulslængde: 355 eller 356; Protokol: 1
- SCREEN NED: Modtaget 8694276 / 24bit; Pulslængde: 355 eller 356; Protokol: 1
Fortsæt med så mange knapper, som du har brug for.
Test af senderen
Dernæst prøver vi at sende koder ved hjælp af senderen. Tråd transmittermodulet (det firkantede) som følger. Vær forsigtig: Mærkningen på disse stifter er grusom.
VCC-stiften er faktisk i midten, ikke på venstre side. Jeg ødelagde et modul i processen med at finde ud af dette. Den ting der siger “EN SMULE” er faktisk “DATA”, stavet baglæns. Igen går dataene til D4, VCC til VIN og GND til GND (fjern modtagermodulet, du har ikke længere brug for det).
Indlæs op Eksempler -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitches, og igen skal du ændre datapinden:
mySwitch.enableTransmit (10);
til
mySwitch.enableTransmit (2);
Bemærk, en række eksempler er inkluderet i biblioteket, og hvilke der fungerer for dig vil afhænge af den nøjagtige type switch, du har. Type A (dyppekontakter) og B (drejeknapper eller skyderen) er de mest almindelige - se billederne på RCSwitch-siden. For type B er at tænde og slukke en stikkontakt så simpelt som:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
hvor 1 er kanal-ID (det øverste skive), og 4 er socket-ID (det nederste ur). Disse blev skrevet med romertal på mine sockets. Højst 16 individuelle stikkontakter kan derfor adresseres, selvom flere stikkontakter kan bruge den samme adresse, hvis du har flere enheder til at tænde på én gang.
Min projektorskærm var dog lidt anderledes - den brugte en anden pulslængde. Så for at betjene dem fungerede følgende. Bemærk, at du også kan definere en anden protokol, hvis din fjernbetjening har brug for den, MEN sørg for at definere protokollen FØR pulslængden. Pulslængden overskrives, når protokol ændres.
// Bemærk, at min skærm faktisk kræver to knaptryk (ikke et langt tryk, men to fysiske tryk), så jeg forsinker lidt og sender det samme signal igen ugyldig skærmUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (decimal kode, antal bit) forsinkelse (2000); mySwitch.send (8694273,24); void screenDown () mySwitch.setPulseLength (358); mySwitch.send (8694276,24); forsinkelse (2000); mySwitch.send (8694276,24);
Test, at alle dine koder fungerer først, før du går videre til næste trin.
Styring via MQTT
Åbn den skitse, du downloadede fra Github med navnet 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 af vores OpenHAB-begynderguide OpenHAB Begyndersvejledning Del 2: ZWave, MQTT, regler og kortlægning OpenHAB Beginnersvejledning Del 2: ZWave, MQTT, regler og kortlægning OpenHAB, open source-hjemmeautomatiseringssoftwaren, overskrider langt mulighederne for andre hjemmeautomatiseringssystemer på markedet - men det er ikke let at få opsat. Faktisk kan det være direkte frustrerende. . Bemærk, at min kode er designet til stikkontakter af type B (drejekontakt), skønt du let kunne ændre den til DIP-switches også.
Den vigtigste del af koden er messageReceived () funktion, der svarer på indkommende MQTT-kommandoer. I denne funktion tjekker vi først efter det vigtigste nøgleord - jeg valgte “kontakt” og “skærm”. I tilfælde af “kontakt”, vi analyserer derefter kanalen og plug-id'et; Kontroller derefter nyttelastorganet for kommandoen.
void messageReceived (String topic, String nyttolast, char * bytes, usigneret int-længde) if (topic.indexOf ("switch")> = 0) // switch control, parse out the channel and plug id int channel = getValue ( emne, '/', 3) .toInt (); int plug = getValue (emne, '/', 4) .toInt (); if (nyttelast == "on") mySwitch.switchOn (kanal, stik); andet mySwitch.switchOff (kanal, stik); andet hvis (topic.indexOf ("skærm")> = 0) // skærmkontrol hvis (nyttelast == "op") screenUp (); andet hvis (nyttelast == "ned") screenDown (); / * tilføj en anden til, hvis her for at lytte til flere kommandoer (eller bare ændre ovenstående, hvis du ikke ønsker skærm) * /
Som standard fungerer følgende MQTT-kommandoer:
stue / kontrol / switch / X / Y (hvor X er kanal, og Y er plug-id; med meddelelseslegeme til og fra)
stue / kontrol / skærm (med meddelelseskroppen 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 trin er vi bare nødt til at oprette nogle elementer til disse switches i OpenHAB. Jeg har defineret følgende poster for nu, men du skulle være i stand til at finde ud af, hvordan du tilføjer mere:
/ * RF433mHz-enheder * / Skift CinemaScreen "Skærm" (Cinema) mqtt = "> [mægler: stue / kontrol / skærm: kommando: TIL: ned],> [mægler: stue / kontrol / skærm: kommando: FRA: op ] " Skift switch41" Switch41 "(Cinema) mqtt ="> [mægler: stue / kontrol / switch / 4/1: kommando: ON: on],> [mægler: livingroom / control / switch / 4/1: kommando: FRA: slukket] " Skift switch42" Skift42 "(Biograf) mqtt ="> [mægler: stue / kontrol / switch / 4/2: kommando: TIL: til],> [mægler: stue / kontrol / switch / 4/2: kommando: oFF: off] "
Du skal nu kunne styre dine RF-enheder fra OpenHAB! Én ting, som jeg var behageligt overrasket over, var rækkevidden - en enkelt knude kunne dække det meste af mit hus. Du kan selvfølgelig tilføje en anden knude, lytte til den samme kanal, som ganske enkelt gentager de samme kommandoer, hvis du har brug for yderligere dækning.
Den eneste begrænsning at huske på er, at stikkene i sig selv ikke kan rapportere deres status, så hvis du bruger den originale fjernbetjening, kan du kontrollere status på stikket muligvis ikke reflekteres nøjagtigt i OpenHAB. Hold dig til bare at bruge OpenHAB-interface, og du skulle være i orden.
Spørgsmål eller problemer? Spørg væk i kommentarerne, så gør jeg mit bedste for at hjælpe. Hvis du gerne vil forbedre min kode, er du velkommen til at indsende en pull-anmodning.