Cum de a controla Socket-uri ieftine de la RF de la OpenHAB

Cum de a controla Socket-uri ieftine de la RF de la OpenHAB / Smart Home

Prizele de curent inteligente sunt cel mai simplu mod de a vă automatiza casa, dar la o valoare de aproximativ 40 USD fiecare pentru un soclu Wi-Fi sau ZWave, este puțin probabil să cumpărați mai mult de câteva.

S-ar putea să aveți deja niște socketuri ieftine pe bază de RF - de tipul celor care vin cu propriul lor telecomandă personalizată și care au selectori de canal și ID pe spate. Din păcate, nu există hub-uri inteligente de acasă pe piață Bătălia de la Smart Home Hubs: Ce e acolo și ce se întâmplă? Bătălia de la Smart Home Hubs: Ce este acolo și ce se întâmplă? Citește mai mult care lucrează cu aceștia. Nu ar fi minunat dacă ați putea să le conectați într-un fel? Ei bine, puteți - destul de ușor de fapt - cu aproximativ 10 dolari în părți.

Cu puțin mai multă muncă, puteți integra și alte echipamente hardware de la distanță, bazate pe RF, cum ar fi acest ecran cinematografic bugetar.

De ce ai nevoie:

  • ESP8266 NodeMCU v12E dev bord (modelul exact nu contează, v1 sau v3 ar trebui să fie bine prea). Motivul pentru care folosim o placă NodeMCU este pentru că vrem mai târziu o conexiune ușoară Wi-Fi. Legătura este pentru un pachet de 2, care funcționează la câte 7 USD fiecare.
  • Pachet de transmițător și receptor de 433 MHz (aproximativ 3 dolari).
  • Bibliotecile RCSwitch și MQTT și codul nostru - toate disponibile pentru descărcare de la Github.
  • Un server MQTT, local sau de la distanță.
  • Unele prize controlate de RF care rulează pe banda de 433 MHz (ar trebui să spună pe telecomandă). Mi-am cumpărat mina de la Maplin ca un pachet de 3 pentru aproximativ 20 de lire sterline (25,89 dolari).

Dacă aceasta este prima dvs. programare a placii NodeMCU, va trebui să descărcați pluginurile Arduino pentru aceasta: urmați împreună cu prima parte a ghidului nostru introductiv Arduino Killer Faceți cunoștință cu ucigașul Arduino: ESP8266 Faceți cunoștință cu ucigașul Arduino: ESP8266 Ce se întâmplă dacă ți-a spus că există o placă de disc compatibilă cu Arduino, cu Wi-Fi încorporat pentru mai puțin de 10 $? Ei bine, există. Citiți mai multe pentru cipul NodeMCU / ESP8266. Veți avea nevoie, de asemenea CH430. Puteți găsi aici driverele macOS CH430 semnate aici sau Windows aici.

Am folosit v1.6.5 din Arduino pentru că ceva mai înalt introduce mai multe probleme decât rezolvă. Downgrade dacă nu ați făcut-o deja.

Înainte de a continua, am să-și asume un nivel de bază al cunoștințelor despre programarea Arduino Arduino Programarea pentru începători: Controlul luminii de trafic Programarea Arduino pentru începători: Controlerul de lumină de trafic Săptămâna trecută am aflat despre structura de bază a unui program Arduino și aruncă o privire mai atentă la exemplul "clipi". Sperăm că ați profitat de ocazia de a experimenta codul, ajustând calendarul. De data aceasta, ... Citește mai mult și că ai setarea NodeMCU în managerul de bord și poți încărca corect un cod demo. Ar fi trebuit să adăugați și bibliotecile incluse în descărcarea noastră Arduino / biblioteci pliant.

Dacă aveți un existent Biblioteca PubSubClient sau MQTT, o înapoi și o eliminați - cea pe care am inclus-o în descărcare este singura în care am putut primi în mod fiabil mesaje pe NodeMCU și am încercat mult!

RF Sniffing (opțional)

Acest pas nu este necesar dacă doriți doar să controlați comutatorul DIP sau să formați prizele de selector - acestea sunt acceptate în afara casetei și va fi necesară o modificare minimă a codului (aceasta este încă interesant de făcut în primul rând, voi înțelege ce se întâmplă în spatele scenei).

Dacă aveți alte telecomenzi RF pe care doriți să le adăugați, va trebui mai întâi să le faceți “mirosi” codurile RF transmise. Pentru aceasta, încărcați ReceiveDemo_Advanced schita de la Meniu -> Exemple -> RCSwitch folder și modificați următoarea linie de la 0

mySwitch.enableReceive (0); // Receiver pe întrerupere 0 => care este PIN # 2

la 2.

mySwitch.enableReceive (2); // Receptor pe GPIO 2 / D4.

Introduceți modulul receptorului după cum urmează. Privind la partea frontală a plăcii de recepție (cea mai mare dintre cele două, emițătorul este pătrat) - partea cu componentele:

  • Departe de dreapta este GND. Conectați-vă la GND pe placa NodeMCU.
  • Partea stângă este VCC. Conectați-vă la VIN pe placa NodeMCU.
  • Mijlocii doi pini sunt semnalul. Conectați fie unul la D4 pe NodeMCU (acestea sunt conectate împreună, deci nu contează ce).

Încărcați acum modificat ReceiveDemo_Advanced, și când se termină, deschideți monitorul serial și începeți să apăsați butoanele de pe telecomenzi. Copiați zecimalele (inclusiv lungimea bitului), lungimea impulsurilor și protocolul atunci când apăsați un buton.

După ce am făcut-o, mi-am găsit ecranul proiectorului

  • SCREEN UP: primit 8694273 / 24bit; Durata impulsului: 355 sau 356; Protocolul: 1
  • SCREEN DOWN: primite 8694276 / 24bit; lungimea impulsului: 355 sau 356; Protocolul: 1

Continuați pentru cât mai multe butoane de care aveți nevoie.

Testarea transmițătorului

Apoi, vom încerca să trimitem coduri folosind transmițătorul. Introduceți modulul emițător (cel pătrat) după cum urmează. Aveți grijă: etichetarea pe aceste pini este atroce.

Pinul VCC este de fapt în mijloc, nu pe partea stângă. Am distrus un modul în procesul de a găsi acest lucru. Chestia asta spune “UN PIC” este defapt “DATE”, spelling înapoi. Din nou, datele se duc la D4, VCC la VIN și GND la GND (scoateț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);

Rețineți că o varietate de exemple sunt incluse în bibliotecă și care lucrează pentru dvs. va depinde de tipul exact de comutator pe care îl aveți. Tipurile A (comutatoare dip) și B (cadrane sau glisoare) sunt cele mai frecvente - consultați fotografiile de pe pagina RCSwitch. Pentru tipul B, pornirea și oprirea unui soclu este la fel de simplă:

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

unde 1 este ID-ul canalului (cadranul de sus) și 4 este ID-ul socketului (cadranul inferior). Acestea erau scrise în cifre romane pe soclurile mele. În consecință, pot fi abordate maxim 16 prize individuale, deși mai multe prize pot folosi aceeași adresă dacă aveți mai multe dispozitive pentru pornirea simultană.

Cu toate acestea, ecranul proiectorului meu a fost puțin diferit - a folosit o lungime diferită a impulsului. Deci, pentru a opera aceste, au lucrat următoarele. Rețineți că puteți defini și un alt protocol dacă telecomanda are nevoie de el, dar asigurați-vă că definiți protocolul ÎNAINTE de lungimea impulsului. Lungimea impulsului este suprascrisă la schimbarea protocolului.

 // Rețineți că ecranul meu necesită de fapt două apăsări de buton (nu o apăsare lungă, dar două apăsări fizice), deci am întârziat un pic, apoi am trimis același semnal din nou void screenUp () mySwitch.setPulseLength (358); mySwitch.send (8694273,24); // (codul zecimal, numărul 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-vă că toate codurile dvs. funcționează mai întâi înainte de a trece la pasul următor.

Controlul prin intermediul MQTT

Deschideți schița pe care ați descărcat-o de la Github numit mqtt_rcswitch.ino, și începeți prin modificarea SSID-ului de rețea și a parolei pentru casa dvs. Apoi, modificați numele canalului dacă doriți și setați serverul MQTT. Dacă nu aveți deja un server MQTT rulat pe instalarea dvs. OpenHAB, citiți partea 2 a ghidului nostru pentru începători OpenHAB Ghidul începătorului OpenHAB Partea 2: ZWave, MQTT, Reguli și cartografiere Ghidul începătorului OpenHAB Partea 2: ZWave, MQTT, Reguli și cartografiere OpenHAB, software-ul pentru automatizarea casei open source, depășește cu mult capabilitățile altor sisteme de automatizare a locuințelor de pe piață - dar nu este ușor de configurat. De fapt, poate fi frustrant. Citeste mai mult . Rețineți că codul meu este conceput pentru prize de tip B (comutator rotativ), deși îl puteți modifica ușor și pentru comutatoarele DIP.

Cea mai importantă parte a codului este mesaj receptionat() care răspunde la comenzile MQTT primite. În această funcție, verificăm mai întâi cuvântul cheie majoritar - am ales-o “intrerupator” și “ecran”. În cazul în care “intrerupator”, apoi analizăm ID-ul canalului și al conectorului; apoi verificați corpul încărcăturii utile pentru comandă.

 void messageReceived (Subiect string, String payload, char * octeți, lungime nesemnată int) if (topic.indexOf ("switch")> = 0) // Comutator de comandă, analiza canalului și plug id int channel = getValue subiect, '/', 3) .toInt (); int plug = getValue (subiect, '/', 4) .toInt (); dacă (încărcătură == "on") mySwitch.switchOn (canal, plug);  altceva mySwitch.switchOff (canal, fișă);  altfel dacă (topic.indexOf ("screen")> = 0) // controlul ecranului dacă (payload == "up") screenUp ();  altfel în cazul în care (payload == "jos") screenDown ();  / * adăugați altceva dacă este aici pentru a asculta mai multe comenzi (sau doar pentru modificarea celei de mai sus, dacă nu doriți ecran) * / 

În mod implicit, următoarele comenzi MQTT funcționează:

living / control / comutator / X / Y (unde X este canal și Y este ID-ul conectorului, cu corpul mesajului activat sau dezactivat)
living / control / ecran (cu corpul mesajului sus sau jos)

Utilizați linia de comandă sau un client GUI MQTT pentru a testa dispozitivele dvs. înainte de a adăuga la OpenHAB.

Adăugarea la OpenHAB

Ca ultim pas, trebuie doar să creăm câteva elemente pentru acești switch-uri în OpenHAB. Am definit următoarele elemente pentru moment, dar ar trebui să știți cum să adăugați mai multe:

/ * Dispozitive RF433mHz * / Switch CinemaScreen "Ecran" (Cinema) mqtt = "> [broker: living / control / screen: comanda: ON: jos],> [broker: living / control / screen: ] " Switch Switch41" Switch41 "(Cinema) mqtt ="> [broker: living / control / switch / 4/1: comanda: OFF: oprit] " Switch Switch42" Switch42 "(Cinema) mqtt ="> [broker: living / control / switch / 4/2: / 4/2: comanda: oFF: off] " 

Acum ar trebui să puteți controla dispozitivele RF de la OpenHAB! Un lucru am fost plăcut surprins de gama - un singur nod a reușit să acopere cea mai mare parte a casei mele. Desigur, puteți adăuga un alt nod, ascultând același canal, care repetă pur și simplu aceleași comenzi, dacă aveți nevoie de mai multă acoperire.

Singura limitare care trebuie luată în considerare este faptul că prizele în sine nu își pot raporta starea, deci dacă folosiți telecomanda originală, controlul stării socket-ului poate să nu fie reflectat cu exactitate în OpenHAB. Folosește doar interfața OpenHAB și ar trebui să fii bine.

Întrebări sau probleme? Întreabă-te în comentariile tale și voi face tot posibilul pentru a-mi ajuta. Dacă doriți să vă îmbunătățiți codul, nu ezitați să trimiteți o solicitare de tragere.

Explorați mai multe despre: Home Automation, Smart Plugs.