Reklame
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 Slaget om smarthusnavne: Hvad er derude og hvad der kommer? Læs mere det arbejde med dem. Ville det ikke være dejligt, hvis du på en eller anden måde kunne linke 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 denne budget biograf skærm.
Hvad du har brug for:
- ESP8266 NodeMCU v12E dev-kort (den nøjagtige 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 433Mhz sender og modtager (ca. $ 3).
- RCSwitch- og MQTT-biblioteker og vores kode - alt sammen tilgængelig til download 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-brættet, skal du downloade Arduino-plugins til det: følg sammen med den første del af vores Introduktionsvejledning til Arduino Killer Mød Arduino Killer: ESP8266Hvad hvis jeg fortalte dig, at der er et Arduino-kompatibelt dev-kort med indbygget Wi-Fi for mindre end $ 10? Det er der. Læs mere til NodeMCU / ESP8266-chip. Du har også brug for det 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: Projektvejledning til Traffic Light ControllerAt opbygge en Arduino trafiklyscontroller hjælper dig med at udvikle grundlæggende kodningsevner! Vi sætter dig i gang. Læs mere , og at du har din NodeMCU-opsætning i tavlemanageren 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 styre DIP-switch eller stikvælgerstikstik - disse understøttes ude af kassen, og minimal kodeændring er nødvendig (dette er stadig interessant at gøre først, så du forstår hvad der foregår bag scener).
Hvis du har andre RF-fjernbetjeninger, som du gerne vil prøve at tilføje, skal du først "sniffe" de 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. Forbind 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 “ATAD” 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 datapinnen:
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 socket 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) trykker på), 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, læse del 2 af vores OpenHAB begynderguide OpenHAB Begyndervejledning Del 2: ZWave, MQTT, regler og kortlægningOpenHAB, open source-hjemmeautomatiseringssoftwaren, overstiger langt muligheden for andre hjemmeautomatiseringssystemer på markedet - men det er ikke let at få opsat. Faktisk kan det være direkte frustrerende. Læs mere . Bemærk, at min kode er designet til stikkontakter af type B (drejekontakt), skønt du let kunne ændre den til DIP-kontakter også.
Den vigtigste del af koden er messageReceived () funktion, der svarer på indkommende MQTT-kommandoer. I denne funktion kontrollerer vi først for det vigtigste nøgleord - jeg valgte "switch" og "screen". I tilfælde af "switch" parse vi derefter kanalen og plug-id'et; Kontroller derefter nyttelastorganet for kommandoen.
ugyldig meddelelse Modtaget (Strengemne, Streng nyttelast, char * byte, usigneret int-længde) {if (topic.indexOf ("switch")> = 0) {// switch control, parse kanalen og stik 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 meddelelseskroppen til eller 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]"} Switch switch41 "Switch41" (Cinema) {mqtt = "> [mægler: stue / kontrol / switch / 4/1: kommando: ON: on],> [mægler: livingroom / control / switch / 4/1: kommando: OFF: af]"} Switch switch42 "Switch42" (Cinema) {mqtt = "> [mægler: stue / kontrol / switch / 4/2: kommando: ON: on],> [mægler: livingroom / control / switch / 4/2: kommando: OFF: af]"}
Du skal nu kunne styre dine RF-enheder fra OpenHAB! Én ting, som jeg var behageligt 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 knude, der lytter 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 Brug den originale fjernbetjening, kontroller stikkets status muligvis ikke reflekteres nøjagtigt indeni OpenHAB. Hold dig til bare at bruge OpenHAB-grænsefladen, 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.
James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.