Publicitate
Prizele de alimentare inteligente sunt cel mai simplu mod de a vă automatiza casa, dar cu aproximativ 40 de dolari fiecare pentru o priză bazată pe Wi-Fi sau ZWave, este puțin probabil să cumpărați mai multe decât câteva.
S-ar putea să aveți deja câteva prize ieftine bazate pe RF - genul care vine cu telecomanda proprie personalizată și au unele selectoare de canale și ID pe spate. Din păcate, nu există hub-uri inteligente pentru casă pe piață Battle of the Smart Home Hubs: Ce este acolo și ce vine? Citeste mai mult care lucrează cu aceia. Nu ar fi grozav dacă i-ai putea lega cumva pe cei de la sistemul tău inteligent de bricolaj? Ei bine, puteți - destul de ușor de fapt - cu aproximativ 10 dolari în părți.
Cu ceva mai multă muncă, puteți integra, de asemenea, un alt hardware la distanță bazat pe RF, cum ar fi acest ecran de cinema bugetar.
De ce ai nevoie:
- Placă de deviere ESP8266 NodeMCU v12E (modelul exact nu contează, și v1 sau v3 ar trebui să fie bine). Motivul pentru care folosim o placă NodeMCU este că dorim mai târziu conexiunea Wi-Fi ușoară. Link-ul este pentru un pachet de 2, care se ridică la 7 dolari fiecare.
- Pachet de Transmițător și receptor 433Mhz (în jur de 3 dolari).
- Bibliotecile RCSwitch și MQTT și codul nostru - toate disponibil pentru descărcare de la Github.
- Un server MQTT, local sau de la distanță.
- Unele prize RF controlate care rulează pe o bandă de 433 mHz (ar trebui să spunem pe telecomandă). Am cumpărat mina de la Maplin sub forma unui pachet de 3 pentru aproximativ 20 GBP (25,89 USD).
Dacă aceasta este prima oară care programează placa NodeMCU, va trebui să descărcați pluginurile Arduino pentru aceasta: urmați împreună cu prima parte a noastră Ghid introductiv Arduino Killer Faceți cunoștință cu Arduino Killer: ESP8266Ce se întâmplă dacă v-aș spune că există o placă dev-compatibilă cu Arduino cu Wi-Fi încorporat pentru mai puțin de 10 USD? Ei bine, există. Citeste mai mult pentru cipul NodeMCU / ESP8266. De asemenea, veți avea nevoie Drivere CH430. Puteți găsi drivere macOS CH430 semnate aici, sau Windows aici.
Am folosit v1.6.5 din Arduino, deoarece orice lucru mai mare introduce mai multe probleme decât rezolvă. Faceți downgrade dacă nu ați făcut-o deja.
Înainte de a continua, voi presupune un nivel de cunoștințe de bază despre Programare Arduino Programare Arduino pentru începători: Tutorial de proiectare a controlorului semaforuluiConstruirea unui controlor de semafor Arduino vă ajută să dezvolți abilități de codare de bază! Vă începem. Citeste mai mult și că aveți configurarea NodeMCU în managerul de bord și puteți încărca corect unele coduri demo. De asemenea, ar fi trebuit să adăugați la dvs. bibliotecile incluse în descărcarea noastră Arduino / biblioteci pliant.
Dacă aveți un existent PubSubClient sau biblioteca MQTT, faceți o copie de siguranță și eliminați-o - cea pe care am inclus-o în descărcare este singura în care am putut primi în mod sigur mesaje pe NodeMCU și am încercat mult!
RF Sniffing (opțional)
Acest pas nu este necesar dacă doriți să controlați numai soclurile DIP-switch sau selectorul de apelare - acestea sunt acceptate din casetă și va fi necesară o modificare minimă a codului (totuși este interesant de făcut mai întâi, totuși, veți înțelege ce se întâmplă în spatele scene).
Dacă aveți alte telecomenzi RF pe care doriți să încercați să le adăugați, va trebui mai întâi să „înțelegeți” codurile RF transmise. Pentru a face acest lucru, încărcați ReceiveDemo_Advanced schiță din Meniu -> Exemple -> RCSwitch folder și schimbați următoarea linie de la 0
mySwitch.enableReceive (0); // Receptor la întreruperea 0 => adică pinul 2
la 2.
mySwitch.enableReceive (2); // Receiver pe GPIO 2 / D4.
Conectați modulul receptor după cum urmează. Privind partea din față a plăcii de recepție (este cel mai lung dintre cele două, emițătorul este pătrat) - partea cu componentele de pe:
- Extrema dreapta este GND. Conectați-vă la GND pe placa NodeMCU.
- La stânga se află VCC. Conectați-vă la VIN pe placa NodeMCU.
- Mijlocul doi pini sunt semnalul. Conectați unul la D4 pe NodeMCU (sunt conectate împreună, deci nu contează care).
Acum încărcați modificatele ReceiveDemo_Advancedși când ați terminat, deschideți monitorul serial și începeți să apăsați butoanele de pe telecomenzile dvs. Copiați zecimala (inclusiv lungimea de biți), lungimea pulsului și protocolul atunci când apăsați un buton.
După ce am făcut acest lucru, am descoperit că ecranul proiectorului meu folosea
- SCREEN UP: Primit 8694273 / 24bit; Lungimea impulsului: 355 sau 356; Protocol: 1
- SCREEN DOWN: Primit 8694276 / 24bit;Lungimea impulsului: 355 sau 356; Protocol: 1
Continuați pentru cât mai multe butoane de care aveți nevoie.
Testarea emițătorului
În continuare, vom încerca să trimitem coduri folosind transmițătorul. Conectați modulul transmițător (cel pătrat) după cum urmează. Aveți grijă: etichetarea pe acești pini este atroce.
Pinul VCC este de fapt la mijloc, nu în partea stângă. Am distrus un modul în procesul de a descoperi acest lucru. Chestia care spune „ATAD” este de fapt „DATA”, scrisă invers. Din nou, datele merg la D4, VCC la VIN și GND la GND (eliminați modulul receptor, nu mai aveți nevoie de el).
Încărcați Exemple -> RCSwitch -> TypeB_WithRotaryOrSlidingSwitchesși din nou, schimbați pinul de date:
mySwitch.enableTransmit (10);
la
mySwitch.enableTransmit (2);
Notă, o serie de exemple sunt incluse în bibliotecă, iar care lucrează pentru tine va depinde de tipul exact de comutator pe care îl ai. Cele mai frecvente sunt tipul A (întrerupătoarele) și B (cadranele sau glisoarele) - consultați imaginile din pagina RCSwitch. Pentru tipul B, pornirea și oprirea unei prize este la fel de simplă:
mySwitch.switchOn (1, 4); mySwitch.switchOff (1, 4);
unde 1 este ID-ul canalului (cadranul superior) și 4 este ID-ul de priză (cadranul de jos). Acestea erau scrise cu numere romane pe prizele mele. Prin urmare, se pot adresa maxim 16 prize individuale, deși mai multe prize pot utiliza aceeași adresă dacă aveți mai multe dispozitive pentru a porni simultan.
Totuși, ecranul proiectorului meu a fost puțin diferit - a folosit o lungime de impuls diferită. Deci, pentru a opera aceste, următoarele au funcționat. Rețineți că puteți defini, de asemenea, un protocol diferit dacă telecomanda dvs. are nevoie, DAR asigurați-vă că definiți protocolul ÎNAINTE de lungimea impulsului. Lungimea pulsului este suprascrisă la schimbarea protocolului.
// Rețineți că ecranul meu necesită de fapt DOUĂ apăsări de butoane (nu o apăsare lungă, dar două fizice apasă), așa că întârzie un pic, apoi trimit din nou același semnal void screenUp () { mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (cod zecimal, număr de biți) întârziere (2000); mySwitch.send (8694273,24); } void screenDown () {mySwitch.setPulseLength (358); mySwitch.send (8694276,24); întârziere (2000); mySwitch.send (8694276,24); }
Testați toate codurile dvs. funcționează mai întâi înainte de a trece la pasul următor.
Controlul prin MQTT
Deschideți schița descărcată de la Github mqtt_rcswitch.inoși începeți prin a modifica SSID-ul și parola pentru rețea pentru casa dvs. Apoi, schimbați numele canalului dacă doriți și setați serverul MQTT. Dacă nu aveți deja un server MQTT care funcționează pe instalarea OpenHAB, citiți partea a 2-a a ghidului nostru pentru începători OpenHAB Ghid pentru începători OpenHAB Partea 2: ZWave, MQTT, Reguli și GraficeOpenHAB, software-ul de automatizare casă open source, depășește cu mult capacitățile celorlalte sisteme de automatizare casnică de pe piață - dar nu este ușor de configurat. De fapt, poate fi absolut frustrant. Citeste mai mult . Rețineți că codul meu este proiectat pentru prize de tip B (comutator rotativ), deși puteți modifica cu ușurință și pentru comutatoarele DIP.
Cea mai importantă parte a codului este mesaj receptionat() funcție, care răspunde la comenzile MQTT primite. În această funcție, verificăm mai întâi cuvântul cheie principal - am ales „comutare” și „ecran”. În cazul „comutatorului”, atunci analizăm canalul și codul de conectare; apoi verificați comanda corpului de sarcină utilă.
void messageRecepted (topic string, sarcină utilă string, octeți char *, lungime int nesemnată) {if (topic.indexOf ("comutare")> = 0) {// comutați comutarea, analizați canalul și conectați id-ul canalului int = getValue (Subiect, '/', 3) .toInt (); int plug = getValue (subiect, '/', 4) .toInt (); if (payload == "on") {mySwitch.switchOn (canal, plug); } else {mySwitch.switchOff (canal, plug); }} else if (topic.indexOf ("ecran")> = 0) {// control ecran dacă (payload == "up") {screenUp (); } else if (payload == "down") {screenDown (); }} / * adăugați altceva dacă este aici pentru a asculta mai multe comenzi (sau doar modificați-le pe cele de mai sus dacă nu doriți ecran) * / }
În mod implicit, funcționează următoarele comenzi MQTT:
living / control / switch / X / Y (unde X este canal, iar Y este ID plug; cu corpul mesajului pornit sau oprit)
living / control / ecran (cu corpul mesajului în sus sau în jos)
Utilizați linia de comandă sau un client GUI MQTT pentru a vă testa dispozitivele înainte de a adăuga la OpenHAB.
Adăugarea la OpenHAB
Ca o ultimă etapă, trebuie doar să creăm câteva elemente pentru aceste comutatoare în OpenHAB. Am definit următoarele elemente deocamdată, dar ar trebui să puteți afla cum să adăugați mai multe:
/ * Dispozitive RF433mHz * / Switch CinemaScreen "Screen" (Cinema) {mqtt = "> [broker: living room / control / screen: command: ON: down],> [broker: living room / control / screen: command: OFF: up]"} Switch Switch41 "Switch41" (Cinema) {mqtt = "> [broker: living room / control / switch / 4/1: command: ON: on],> [broker: living room / control / switch / 4/1: command: OFF: oprit] "} Switch Switch42 "Switch42" (Cinema) {mqtt = "> [broker: living room / control / switch / 4/2: comandă: ON: on],> [broker: living room / control / switch / 4/2: comanda: OFF: oprit] "}
Acum ar trebui să poți controla dispozitivele RF de la OpenHAB! Un lucru de care am fost plăcut surprins a fost gama - un singur nod a putut să acopere cea mai mare parte a casei mele. Puteți adăuga desigur un alt nod, ascultând același canal, care repetă pur și simplu aceleași comenzi, dacă aveți nevoie de acoperire suplimentară.
Singura limitare de care trebuie să țineți cont este că prizele în sine nu își pot raporta starea, deci dacă utilizați telecomanda inițială, starea controlului nu poate fi reflectată cu exactitate OpenHAB. Lipiți doar utilizarea interfeței OpenHAB și ar trebui să fiți bine.
Întrebări sau probleme? Întrebați comentariile și voi face tot posibilul să vă ajut. Dacă doriți să îmbunătățiți codul meu, nu ezitați să trimiteți o solicitare de tragere.
James are licență în inteligență artificială și este certificat CompTIA A + și Network +. Este dezvoltatorul principal al MakeUseOf și își petrece timpul liber jucând VR paintball și boardgames. Construiește calculatoare de când era mic.