Publicitate
Gama gratuită nu înseamnă întotdeauna „nu este la fel de bine plătită”, iar OpenHAB nu face excepție. Software-ul de automatizare casă open source depășește cu mult capacitățile oricărui alt sistem de automatizare de pe piață - dar nu este ușor de configurat. De fapt, poate fi absolut frustrant.
În partea 1 a ghidului, v-am parcurs instalarea OpenHAB pe un Raspberry Pi Noțiuni introductive cu OpenHAB Home Automation pe Raspberry PiOpenHAB este o platformă de automatizare casă matură, open source, care rulează pe o varietate de hardware și este protocol agnostic, ceea ce înseamnă că se poate conecta la aproape orice hardware de automatizare de pe piață azi. Citeste mai mult , a introdus conceptele de bază ale OpenHAB și v-a arătat cum puteți adăuga primele dvs. elemente în sistem. Astăzi vom merge mai departe:
- Adăugarea dispozitivelor ZWave
- Adăugarea unui controller Harmony Ultimate
- Introducerea regulilor
- Introducerea MQTT și instalarea unui broker MQTT pe Pi-ul dvs., cu senzori pe un Arduino
- Înregistrarea datelor și graficarea acestora
Introducere în Z-Wave
Z-Wave a fost protocolul dominant de automatizare a locuinței de ani de zile: este de încredere, a fost dezvoltat pe scară largă și funcționează pe o gamă mult mai lungă decât orice alte produse inteligente pentru casă. Sunt disponibile sute de senzori Z-Wave care îndeplinesc o gamă largă de sarcini. OpenHAB poate sa lucrează cu Z-Wave, dar este o problemă de configurare, iar fiabilitatea nu este garantată.
Dacă aveți în vedere achiziționarea unei case pline de senzori Z-Wave special pentru a fi folosiți cu OpenHAB, vă rugăm să reexaminați. S-ar putea să vă rezolve grozav sau poate fi afectat de probleme mici, dar persistente. Cel puțin, nu cumpărați o casă plină de senzori până când nu ați avut ocazia să încercați câțiva. Singurul motiv pentru a alege Z-Wave este dacă nu sunteți 100% stabilit pe OpenHAB și doriți să lăsați opțiunile deschise pe viitor: Z-Wave, de exemplu, funcționează cu Samsung SmartThings Care hub inteligent pentru automatizare acasă este cel mai potrivit pentru dvs.?O vreme, oamenii s-au gândit la idee ca la nimic altceva decât un gimmick, dar recentele lansări de produse au arătat că automatizarea inteligentă a casei începe să-și îndeplinească promisiunile. Citeste mai mult hub, precum și hub-uri specifice Z-Wave, cum ar fi Homeseer, și o serie de alte opțiuni software, cum ar fi Domoticz.
Deși OpenHAB include o legătură Z-Wave, trebuie totuși configurați mai întâi rețeaua Z-Wave, înainte ca OpenHAB să poată începe interogarea pentru date. Dacă aveți o placă de control Rasberry, aveți ceva software furnizat pentru configurarea rețelei, deci nu vom acoperi acest lucru aici. Dacă ați cumpărat un controler Aeotec USB Z-Stick sau similar, probabil că nu aveți niciun software inclus, așa că citiți mai departe.
Aeotec Z-Stick Gen5, Z-Wave Plus USB pentru a crea gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB pentru a crea gateway Cumpărați acum pe Amazon $44.95
Dacă aveți deja o configurare a rețelei Z-Wave, puteți doar să conectați controlorul în Pi și să începeți să configurați legarea și elementele. Dacă aceasta este prima ta incursiune în Z-Wave, este puțin mai complexă.
În primul rând, pe partea hardware: fiecare controler are propriul mod de asociere cu dispozitivele (cunoscut tehnic ca „modul de incluziune” în care este atribuit un ID de nod). În cazul Aotec Z-Stick, aceasta înseamnă să îl deconectați de la portul USB și să apăsați butonul o dată pentru a-l plasa în modul de includere. Apoi, apropiați-l de dispozitivul pe care îl asociați și apăsați și butonul de includere (acest lucru va varia, de asemenea: priza mea Everspring necesită apăsarea butonului de 3 ori succesiv rapid, deci lecția de aici este să citiți manualul pentru dispozitivul dvs.).
Z-Stick clipește scurt pentru a indica succesul. Acest lucru prezintă probleme atunci când îl conectați înapoi la Pi, deoarece este atribuit un nou port. Reporniți Pi-ul pentru a-l restabili la portul standard, dacă găsiți că acesta a fost reasignat în mod dinamic. Mai bine: nu-l conectați la Pi până când nu ați făcut toate perechile de hardware mai întâi.
Instalarea legăturilor HABmin și Z-Wave
Întrucât OpenHAB nu este de fapt o utilitate de configurare pentru Z-Wave, vom instala un alt instrument de gestionare web care face acest lucru - ceva numit HABmin. Îndreptați-vă spre Depozitul HABmin Github descărcați versiunea curentă. După ce ați decupat-o, veți găsi 2 .borcan fișiere din directorul addons - acestea ar trebui să fie plasate în directorul de addons corespunzător din cota dvs. OpenHAB Home (dacă utilizați, de asemenea, Aotec gen5 Z-Stick, asigurați-vă că aveți cel puțin versiunea 1.8 a legării Z-Wave).
Apoi, creați un nou folder în directorul webapps și l-a numit „habmin” (minuscule este important). Copiați restul fișierelor descărcate acolo.
Notă: Există și o HABmin 2 în curs de dezvoltare activă. Instalarea este la fel, dar cu un supliment suplimentar .jar. Ar putea merita să le încercați doar pentru a vedea care preferi.
Dacă nu ați făcut-o deja, conectați controlorul în Pi. Tastați următoarele pentru a găsi portul corect.
ls / dev / tty *
Căutați ceva cu USB în nume sau, în cazul meu particular, Z-stick-ul s-a prezentat ca fiind /dev/ttyACM0 (un modem). Ar putea fi mai ușor să faceți comanda o dată înainte de a o conecta și o dată după aceea, puteți vedea ce modificări dacă nu sunteți sigur.
Deschideți fișierul de configurare OpenHAB și modificați secțiunea de pe Z-Wave, deconectând ambele linii și punând adresa dispozitivului dvs. real. Un ultim pas pentru mine a fost să permit utilizatorului OpenHAB să acceseze modemul.
sudo usermod -a -G dialout openhab
Acum, pentru a pune totul în acțiune, reporniți OpenHAB
repornirea serviciului sudo openhab
Sperăm că, dacă verificați jurnalul de depanare, veți vedea ceva de genul acesta. Felicitări, acum vorbești Z-Wave. De asemenea, puteți găsi jurnalul de depanare inundat de mesaje de la diverse noduri Z-Wave. Să începem verificând HABMIN pentru a vedea ce s-a găsit: http://openhab.local: 8080 / habmin / index.html (înlocuind openhab.local cu numele dvs. de gazdă Raspberry Pi sau adresa IP).
Sunt multe lucruri de văzut în HABMIN, dar noi ne preocupăm cu adevărat Configurare -> Legături -> Z-Wave -> Dispozitive fila, după cum puteți vedea mai jos. Extindeți nodul pentru a edita locația și eticheta de nume pentru ușurința de referință.
Configurarea elementelor Z-Wave
Fiecare dispozitiv Z-Wave va avea o configurație specifică pentru OpenHAB. Din fericire, majoritatea dispozitivelor au fost deja explorate și deja vor exista exemple pentru dvs. Configurarea dispozitivelor personalizate care nu sunt recunoscute este cu mult peste scopul acestui ghid, dar să presupunem că este acceptat deocamdată.
În primul rând, am un comutator de bază Everspring AN158 și un contor de bază pe Nodul 3. Un Google Googling rapid m-a condus la o postare pe blog pe Wetwa.re, cu o configurație exemplificare a articolului. Am adaptat acest lucru după cum urmează:
Switch Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Număr Dehumidifier_Watts "Dezumidificator consum de energie [% .1f W]" {zwave = "3: command = meter"}
Perfect.
Următorul este un multi-senzor Aeotec Gen5.
Aeon Labs Aeotec Z-Wave Gen5 Multi-senzor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multi-senzor (Z-Wave Plus) Cumpărați acum pe Amazon $69.27
Pentru aceasta, am găsit un exemplu de configurare la iwasdot.com, iar multisenzorul meu este pe Nodul 2.
Număr HallwayTemperatura "Temperatura holului [% .1f ° C]" (hol, temperatură) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Numărul Hallway_Humidity "Umiditatea holului [% .0f %%]" (holul, umiditatea) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Număr Hallway_Luminance "Luminance hol [% .0f Lux]" (hol) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Contactați Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, answer_to_basic = true"} Număr senzor_1_battery "Baterie [% s %%]" (Mișcare) {zwave = "2: 0: comanda = baterie"}
Dacă formatul dvs. pare ciudat, vă rugăm să vă întoarceți la primul ghid pentru incepatori Noțiuni introductive cu OpenHAB Home Automation pe Raspberry PiOpenHAB este o platformă de automatizare casă matură, open source, care rulează pe o varietate de hardware și este protocol agnostic, ceea ce înseamnă că se poate conecta la aproape orice hardware de automatizare de pe piață azi. Citeste mai mult , în special secțiunea de legare Hue, în care explic modul în care sunt adăugate articolele. Probabil că va trebui să copiezi doar exemple de acest tip, dar în cazul în care ai un dispozitiv nou, documentația obligatorie detaliază toate comenzi.
Logitech Harmony Binding
Înainte de a intra în reguli, am vrut să adaug o notă rapidă despre lucrul cu legarea Harmony. Sunt un mare fan al Seria de armonie a telecomenzilor finale Logitech Harmony Ultimate Review și GiveawayCamera de zi este un haos - admite. Ți-a fost iertat că te-ai întrebat ce telecomenzi pe care dispozitiv. Ce se întâmplă cu televizorul, amplificatorul, TiVO, playerul BluRay, poate chiar și iluminatul - activitățile de comutare devin o perioadă lungă ... Citeste mai mult pentru a simplifica experiența din centrul de presă, dar ele sunt adesea ca un sistem separat în casa inteligentă. Cu OpenHAB, activitățile Logitech Harmony și controlul complet al dispozitivului pot fi acum o parte a sistemului centralizat și chiar incluse în regulile de automatizare.
Începeți prin instalarea celor trei fișiere de legare pe care le găsiți utilizând apt-cache pentru a căuta „armonie”:
Nu uitați să o faceți chown directorul de legături din nou când ați terminat:
sudo apt-get install openhab-addon-action-harmonie. sudo apt-get install openhab-addon-obligatoriu-armonie. sudo apt-get install openhab-addon-io-harmoniu. sudo chown -hR openhab: openhab / usr / share / openhab
Pentru a configura legarea, deschideți fișierul openhab.cfg și adăugați o nouă secțiune după cum urmează:
########## CONTROLURILE DE REMOTARE A ARMONIEI ########## harmonie: gazdă = 192.168.1.181sau ip-ul tău harmonie: nume de utilizator =dvs. de-armonie-mail-conectare harmonie: parolă =parola Dvs
Adresa IP este cea a hub-ului dvs. Harmony. Utilizați un scaner de rețea pentru a afla asta. De asemenea, va trebui să introduceți detaliile de conectare, cele pe care le introduceți atunci când lansați utilitatea standard de configurare Harmony. Asta e. La repornirea Hue-ului, jurnalul de depanare ar trebui să aibă o explozie bruscă de ieșire din legare.
Aceasta este o listă formatată de JSON cu toate activitățile, dispozitivele și comenzile dvs. care pot fi trimise. Este o idee bună să o copiați pentru referințe viitoare. puteți face mai ușor să citiți cu noduri pliabile lipind într-un formatator JSON online cum este acesta.
Pe lângă activitatea standard PowerOff care este implicită, veți găsi propriile activități definite enumerate aici după nume. Acum creăm un control simplu cu un singur buton pentru a începe activitățile. În primul rând, în fișierul dvs. de articole, adăugați următoarea linie. Schimbați grupul și pictograma dacă doriți.
/ * Harmony Hub * / String Harmony_Activity "Harmony [% s]"(Living_Room) {harmoniehub = "* [currentActivity]"}
Acesta este un legătură cu două sensuri String, care este capabil atât pentru a prelua activitatea curentă, cât și pentru a comanda activitatea curentă să fie altceva. Acum putem crea un buton pentru acesta, în fișierul sitemap.
Switch item = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']
În paranteza pătrată veți vedea fiecare activitate împreună cu eticheta. În general, vă puteți referi direct la activități așa cum le-ați numit pe telecomandă, dar excepția de la aceasta am găsit, a fost orice cu un spațiu în numele activității, cum ar fi „Watch TV”. În acest caz, va trebui să utilizați codul de activitate. Din nou, puteți găsi ID-ul în ieșirea de depanare JSON. Salvați și reîmprospătați interfața, ar trebui să vedeți ceva similar cu acesta:
De asemenea, vă puteți referi la activitățile din regulile dvs., așa cum vom vedea în continuare. Citiți pagina wiki pentru mai multe informații despre Legarea armoniei.
O introducere generală a regulilor
Cele mai multe hub-uri inteligente pentru casă includ un fel de creare de reguli, astfel încât să puteți reacționa automat la datele și evenimentele senzorului din casă. De fapt, am susținut că o casă cu adevărat inteligentă nu este cea care trebuie să petreci timp interacționând cu aplicațiile mobile - este una care este invizibilă pentru utilizatorul final și complet automatizată. În acest scop, OpenHAB include și un limbaj puternic de scripturi pe care îl puteți programa, depășind cu mult complexitatea majorității hub-uri inteligente pentru casă Battle of the Smart Home Hubs: Ce este acolo și ce vine? Citeste mai mult sau Retete IFTTT IFTTT Acum se conectează la orice: introducerea canalului MakerUtilizările potențiale pentru IFTTT sunt interminabile. Dar până acum, a fost dificil să-l interfațăm cu propriile proiecte hardware. Astăzi, totul s-a schimbat. Citeste mai mult .
Regulile de programare sună mai rău decât este. Să începem simplu cu o pereche de reguli care pornesc sau opresc lumina în funcție de senzorul de prezență:
regula "Biroul luminat când James este prezent" când articolul JamesInOffice s-a schimbat de la OFF la ON. apoi trimiteCommand (Office_Hue, ON) regula finală „Lumina de birou stinsă când James pleacă” când articolul JamesInOffice a fost schimbat de la ON la OFF. apoi trimiteCommand (Office_Hue, OFF) Sfârșit
În primul rând, denumim regula - fii descriptiv, deci știi ce eveniment se trage. În continuare, ne definim regula simplă spunând când x este adevărat, atunci faceți y. End semnifică închiderea acelei reguli particulare. Există o serie de cuvinte speciale pe care le puteți folosi în reguli, dar deocamdată avem de-a face cu doi biți de sintaxă simpli - Articol, care vă permite să întrebați starea a ceva; și SendCommand, ceea ce face exact ceea ce credeți că va face. Ți-am spus că este ușor.
Probabil este inutil să folosim o pereche de reguli, dar pe măsură ce logica mea devine mai complexă, va fi benefic să le facem separate dacă sunt intrarea sau ieșirea din zonă - și poate fi o idee bună să adăugați un senzor de lumină undeva în ecuație, astfel încât să nu pornim inutil lumini.
Să ne uităm la un alt exemplu pentru a crea o regulă programată.
regula „Exercițiu în fiecare dimineață” când cron cronologic "0 0 8 1/1 *? *" apoi armonieStartActivitate („exercițiu”) Sfârșit.
Din nou, denumim regula, condițiile de stat când ar trebui să se declanșeze și acțiunile de întreprins. Dar în acest caz, definim un model de timp. Codul amuzant pe care îl vedeți în ghilimele este o expresie CRON pentru Quartz Scheduler (formatul este ușor diferit de un CRONtab obișnuit). obisnuiam cronmaker.com pentru a ajuta la crearea expresiei, dar puteți citi, de asemenea, ghidul formatului [Nu există mai mult timp disponibil] pentru o explicație detaliată și mai multe exemple.
Regulile mele spun simplu „8 dimineața, în fiecare zi a săptămânii, spuneți-mi sistemului meu Harmony Ultimate să înceapă activitatea de exercițiu”, care la rândul său activează televizorul, Xbox, amplificatorul și apasă butonul A după un minut pentru a lansa discul în unitate.
Din păcate, OpenHAB nu este încă în măsură să facă exercițiul pentru mine.
Încă o regulă pe care vreau să-ți arăt este ceva pe care îl folosesc pentru a gestiona nivelul de umiditate din casa mea. Am un singur dezumidificator pe care trebuie să mă deplasez oriunde este nevoie, așa că am decis să mă uit la toți senzorii de umiditate, să găsesc care este cel mai ridicat și să îl depozitez într-o variabilă. În prezent, este declanșat în fiecare minut, dar acesta poate fi redus cu ușurință. Aruncă o privire mai întâi:
import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang. Regula cu șiruri "Monitorul umidității" când cronul de timp "0 * * * *?" apoi var prevHigh = 0 var highHum = "" Umiditate? .members.forEach [hum | logDebug ("umiditate.rules", nume hum.); if (hum.state as DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("umiditate.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); Sfârșit.
Nucleul regulii este în Umiditate? .Members.foreach linia. Umiditatea este un nume de grup pentru senzorii mei de umiditate; .members apucă toate elementele din acel grup; pentru fiecare se iterează peste ele (cu un format curios de paranteză pătrată cu care probabil nu ești familiar). Sintaxa regulilor este un derivat al Xtend, astfel încât să puteți citi Documentația Xtend dacă nu găsiți un exemplu de adaptare.
Probabil că nu va trebui să faceți acest lucru - există câteva sute de exemple acolo:
- Explicare detaliată a regulilor pe wiki-ul oficial
- probe de reguli oficiale pagina wiki
- Luând reguli la înălțimi noi
- Eșantioane avansate la IngeniousFool.net
MQTT pentru OpenHAB și Internet of Things
MQTT este un sistem ușor de mesagerie pentru comunicarea între mașini - un fel de Twitter pentru dvs. Arduinos sau Raspberry Pis pentru a vorbi între ei (deși funcționează cu mult mai mult decât doar acestea). Câștigă rapid în popularitate și își găsește o casă cu dispozitivele Internet of Things, care de obicei sunt mici micro-controlere de resurse care au nevoie de o modalitate fiabilă de a transmite datele senzorului înapoi în hub-ul dvs. sau de a primi telecomanda comenzi. Exact asta vom face cu asta.
Dar de ce reinventați roata?
MQ Telemetry Transport a fost inventat în anul 1999 pentru a conecta conductele de petrol prin satelit lent conexiuni, special concepute pentru a minimiza utilizarea bateriei și lățimea de bandă, oferind în același timp fiabile livrare de date De-a lungul anilor, principiile de proiectare au rămas aceleași, dar cazul de utilizare a trecut de la sisteme integrate încorporate la dispozitivele generale ale Internet of Things. În 2010, protocolul a fost eliberat fără drepturi de autor, deschis pentru oricine să-l poată folosi și implementa. Ne place liberul.
S-ar putea să vă întrebați de ce ne deranjăm chiar și cu încă un protocol - avem deja HTTP până la urmă - ceea ce poate să fie utilizat pentru a trimite mesaje rapide între toate tipurile de sisteme conectate web (cum ar fi OpenHAB și IFTTT, în special cu noul canal de producător IFTTT Acum se conectează la orice: introducerea canalului MakerUtilizările potențiale pentru IFTTT sunt interminabile. Dar până acum, a fost dificil să-l interfațăm cu propriile proiecte hardware. Astăzi, totul s-a schimbat. Citeste mai mult ). Și ai dreptate. Cu toate acestea, pre-procesarea unui server HTTP este destul de mare - atât de mult încât nu puteți rula cu ușurință unul pe un microcontroler încorporat, cum ar fi Arduino (cel puțin, poți, dar nu îți va rămâne multă memorie pentru nimic altceva). MQTT este, pe de altă parte, ușor, astfel încât trimiterea de mesaje în rețeaua dvs. nu va bloca conductele și se poate încadra cu ușurință în micul nostru spațiu de memorie Arduino.
Cum funcționează MQTT?
MQTT necesită atât un server (numit „broker”) cât și unul sau mai mulți clienți. Serverul acționează ca un intermediar, primind mesaje și redistribuindu-le oricărui client interesat.
Continuăm cu Twitter-pentru-masini analogie totuși. Așa cum utilizatorii Twitter își pot twitte propriile 140 de caractere fără sens, iar utilizatorii pot „urmări” alți utilizatori pentru a vedea un flux cu mesaje curate, Clienții MQTT se pot abona la un anumit canal pentru a primi toate mesajele de acolo, precum și pentru a-și publica propriile mesaje canal. Acest model de publicare și abonament este denumit pub / sub, spre deosebire de tradiție client server model de HTTP.
HTTP necesită să vă adresați mașinii cu care comunicați, spuneți Bună ziua, apoi aveți în față și înainte să vă recunoașteți reciproc în timp ce obțineți sau puneți date. Cu pub / sub, clientul care face publicarea nu trebuie să știe ce clienți sunt abonați: doar pompează mesajele, iar brokerul le redistribuie tuturor clienților abonați. Orice client poate publica și abona la subiecte, la fel ca un utilizator Twitter.
Spre deosebire de Twitter, MQTT nu este limitat la 140 de caractere. Sunt date agnostice, astfel încât să puteți trimite numere mici sau blocuri mari de text, dateagrame cu format JSON sau chiar imagini și fișiere binare.
Nu MQTT este mai bun decât HTTP pentru orice, dar asta este mai potrivită dacă vom avea o mulțime de senzori în toată casa, raportând constant.
De asemenea, este important să știm că OpenHAB nu va acționa în calitate de broker MQTT - vom aborda asta mai târziu. Cu toate acestea, OpenHAB va acționa ca un client: poate publica atât jurnalul dvs. de activități OpenHAB, cât și legătura particulară canale către dispozitive, astfel încât să puteți, de exemplu, să aveți un comutator controlat de mesajele MQTT pe un anumit anume canal. Acest lucru este ideal pentru crearea unei case pline de senzori.
Instalați Mosquitto pe Pi
Deși OpenHAB include un client MQTT, astfel încât să vă puteți abona la un subiect și să publicați și mesaje, acesta nu va acționa ca server. Pentru asta, trebuie să utilizați un broker MQTT bazat pe web (plătit sau gratuit), sau să instalați software-ul gratuit pe Pi. Aș dori să o țin totul în casă, așa că am instalat Mosquitto pe Pi.
Din păcate, versiunea disponibilă prin intermediul apt-get obișnuit este complet demodată. În schimb, să adăugăm cele mai recente surse.
wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key adaugă mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install mosquitto.
Este tot ce trebuie să facem pentru ca un server MQTT să funcționeze pe rețeaua locală. Brokerul rulează în mod implicit în portul 1883.
Verificați că serverul dvs. MQTT funcționează folosind gratuit MQTT.fx, care este multiplă platformă. Faceți clic pe pictograma setări pentru a crea un profil nou și introduceți adresa IP sau numele Raspberry Pi. Salvați și apăsați conectați. Dacă micul semafor din partea dreaptă sus devine verde, este bine să mergi.
Pentru un test rapid, faceți clic pe fila „abonați-vă” și tastați inTopic / în caseta de text, apoi apăsați pe Abonati-va buton. Acum sunteți abonat pentru a primi un mesaj pe tema denumită înTopic, deși va afișa 0 mesaje. Reveniți la fila de publicare, tastați InTopic în caseta mică și un mesaj scurt în caseta text mare de mai jos. Lovit Publica de câteva ori și priviți înapoi pe fila abonamentului. Ar trebui să vedeți câteva mesaje apărute în subiectul respectiv.
Înainte de a adăuga niște senzori efectivi în rețeaua noastră, trebuie să aflăm despre nivelurile de subiecte, care ne permit să structurăm și să filtrăm rețeaua MQTT. Numele de subiecte sunt sensibile cu majuscule și minuscule, nu ar trebui să înceapă cu $ sau să includă un spațiu sau caractere non-ASCII - practici de programare standard pentru nume variabile.
/ Separatorul indică un nivel de subiect, care este ierarhic, de exemplu, următoarele sunt toate nivelurile de subiect valabile.
inTopic / smallSubdivision / evenSmallerSubdivision. MyHome / SUFRAGERIE / temperatură. MyHome / SUFRAGERIE / umiditate. MyHome / bucătărie / temperatură. MyHome / bucătărie / umiditate
Deja, ar trebui să vedeți cum această structură de copac este perfectă pentru o casă inteligentă plină de senzori și dispozitive. Cea mai bună practică pentru utilizarea cu mai mulți senzori într-o singură cameră este publicarea fiecărei variabile de senzori, la nivel de subiect propriu - ramificându-vă la mai multă specificitate (ca în exemplele de mai sus) - mai degrabă decât să încercați să publicați mai multe tipuri de senzori la același canal.
Clienții pot apoi să publice sau să se aboneze la orice număr de niveluri de subiecte individuale sau să utilizeze unele caractere speciale cu caracter comod pentru a filtra din sus în sus.
+ Wildcard înlocuiește orice nivel de subiect. De exemplu:
MyHome / + / temperatură
ar subscrie clientul la ambele
MyHome / SUFRAGERIE / temperatură. MyHome / bucătărie / temperatură
... dar nu și nivelul de umiditate.
# Este un wildcard multi-nivel, astfel încât să puteți prelua orice din tabloul de senzori LivingRoom cu:
MyHome / SUFRAGERIE / #
Tehnic, vă puteți abona, de asemenea, la nivelul de rădăcină #, care vă oferă absolut orice merge trecând prin broker, dar asta poate fi ca și cum ți-ai lipi un furtun de foc în față: un pic copleșitoare. Încercați să vă conectați la brokerul public MQTT de la HiveMQ și să vă abonați la #. Am primit aproximativ 300 de mesaje în câteva secunde înainte ca clientul meu să se prăbușească.
Sfat pentru începător MQTT: „/myHome/” este un subiect diferit de „casa mea/" - inclusiv includerea unei raze la început creează un nivel de subiect gol, care, deși este valid din punct de vedere tehnic, nu este recomandat deoarece poate fi confuz.
Acum, că cunoaștem teoria, să mergem cu un Arduino, Ethernet Shield și un senzor de temperatură și umiditate DHT11 - probabil că aveți unul în kitul de pornire, dar, dacă nu, trebuie doar să schimbați senzorul de mediu pentru un senzor de mișcare (sau chiar un buton).
Publicarea MQTT dintr-un Arduino cu conexiune Ethernet
Dacă aveți un dispozitiv hibrid compatibil Arduino cu Wi-Fi sau Ethernet încorporat, acesta ar trebui să funcționeze și el. În cele din urmă, vom dori un mod mai bun / mai ieftin de a comunica faptul că trebuie să utilizăm o conexiune de rețea în fiecare cameră, dar acest lucru servește pentru a învăța elementele de bază.
Începeți prin descărcare biblioteca pubsubclient din Github. Dacă ați utilizat butonul „Descărcare ca ZIP”, structura este greșită. Decuplați, redenumiți folderul doar pubsubclient, apoi scoateți cele două fișiere din src folderul și mutați-le la un nivel la rădăcina folderului descărcat. Apoi mutați întregul dosar către dvs. Arduino / biblioteci director.
Iată codul meu de probă pe care îl puteți adapta: ieșirea semnalului DHT11 este pe pinul 7. Modificați IP-ul serverului pentru Pi-ul dvs. pe următoarea linie:
client.setServer ("192.168.1.99", 1883);
Din păcate, nu putem folosi numele său prietenos (OpenHAB.local în cazul meu) deoarece stiva TCP / IP de pe Arduino este foarte simplistă, iar adăugarea codului pentru denumirea Bonjour ar fi o mulțime de memorie pe care nu vrem să o pierdem. Pentru a schimba subiectele la care datele de senzor sunt difuzate, derulați în jos către aceste linii:
tampon de carbon [10]; dtostrf (t, 0, 0, tampon); client.publish ( "openhab / Himitsu / temperatură", tampon); dtostrf (h, 0, 0, tampon); client.publish ( "openhab / Himitsu / umiditate", tampon);
Codul include și abonarea la un canal de comandă. Găsiți și ajustați următoarea linie:
client.subscribe ( "openhab / Himitsu / comanda");
Examinați codul de acolo și veți vedea că puteți controla cu ușurință un LED sau un releu, de exemplu, trimițând comenzi către anumite canale. În codul de exemplu, pur și simplu trimite un mesaj înapoi confirmând primirea comenzii.
Încărcați codul, conectați-vă Arduino în rețea și utilizând MQTT.fx abonați-vă la oricare # sau openhab / Himitsu / # (sau orice altceva i-ați schimbat numele camerei, dar nu uitați să includeți numărul # la sfârșit). Destul de curând ar trebui să vezi mesajele care intră; și dacă trimiteți ON sau OFF la subiectul de comandă, veți vedea și recunoștințe care se vor întoarce.
Legătură MQTT pentru OpenHAB
Ultimul pas în ecuație este de a conecta acest lucru în OpenHAB. Pentru asta, desigur, avem nevoie de o legătură.
sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab
Și editați fișierul de configurare pentru a activa legarea.
mqtt: broker.url = tcp: // localhost: 1883. mqtt: broker.clientId = openhab
Reporniți OpenHAB
repornirea serviciului sudo openhab
Atunci adăugăm un element sau două:
/ * Senzori MQTT * / Număr Himitsu_Temp "Himitsu Temperatură [% .1f ° C]"(Himitsu, Temperatură) {mqtt = " (Himitsu, Umiditate) {mqtt = "
Până acum ar trebui să înțelegeți formatul; se obține un Număr articol din legarea MQTT, pe un subiect specificat. Acesta este un exemplu simplu, poate doriți să vă referiți la pagina wiki unde este poate deveni mult mai complex.
Felicitări, acum aveți la bază o gamă de senzori ieftină bazată pe Arduino. Vom revizui acest lucru în viitor și vom plasa Arduino pe propria rețea RF complet separată. Am creat și o versiune identică pentru placi Wizwiki 7500 dacă se întâmplă să aveți unul dintre acestea.
Persistența și graficarea datelor
Până acum, probabil, o grămadă de senzori configurați, indiferent de la Z-Wave sau Arduinos personalizați care rulează MQTT - deci puteți vizualiza în orice moment starea curentă a acestor senzori și ar trebui să fiți, de asemenea, să reacționați la valoarea lor din reguli. Însă, ceea ce este interesant în ceea ce privește valorile senzorului este, în general, că acestea se schimbă în timp: de acolo apare persistența și graficarea. persistență în OpenHAB înseamnă salvarea datelor în timp. Haideți să mergem mai departe și să configurați RRD4J (Baza de date Round Robin pentru Java), așa numit pentru că datele sunt salvate într-o manieră rotină - datele mai vechi sunt aruncate pentru a comprima dimensiunea bazei de date.
Instalați pachetele rrd4j cu următoarele comenzi.
sudo apt-get install openhab-addon-persistence-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab.
Apoi creați un nou fișier numit rrd4j.persist în Configurații / persistența pliant. Lipiți în următoarele:
Strategii {fiecareMinute: "0 * * * *?" fiecareHour: "0 0 * * *?" fiecare zi: "0 0 0 * *?" implicit = everyChange. } Elementele {// persistă totul atunci când valoarea este actualizată, doar o valoare implicită și restaurați-le din baza de date la pornire *: strategie = everyChange, restoreOnStartup // urmează definim strategii specifice de fiecare oră pentru orice în grupul de temperatură și în fiecare minut pentru temperatura umidității *: strategic = everyHour Umiditate *: strategie = everyMinute // În mod alternativ, puteți adăuga elemente specifice aici, cum ar fi // Bedroom_Humarity, JamesInOffice: strategie = fiecareMinute. }
În prima parte a acestui fișier, definim strategii, ceea ce înseamnă doar a da un nume unei expresii CRON. Acesta este același lucru pe care l-am făcut deja cu My. OpenHAB, dar de această dată am creat câteva strategii noi pe care le putem folosi de fiecare zi, de fiecare zi și de fiecare gestiune. Încă nu le-am folosit toate, dar s-ar putea să fiu în viitor.
În a doua jumătate a fișierului, spunem rr4dj ce valori de date trebuie salvate. În mod implicit, vom salva totul de fiecare dată când se actualizează, dar am specificat și câteva strategii bazate pe timp pentru senzori specifici. Temperaturile de care nu mă deranjează prea mult, așa că am setat să economisesc doar fiecare oră, dar umiditatea este o preocupare mare pentru mine, așa că vreau să văd cum se schimbă fiecare minut. Dacă există alte date pe care doriți să le salvați în mod specific la orele setate, adăugați-le aici acum sau ajustați-le după cum este necesar.
Notă: dacă doriți să graficați și datele, trebuie să le stocați cel puțin o dată pe minut. Nu contează dacă datele senzorului dvs. sunt chiar actualizate rapid, trebuie doar să spuneți rr4dj să îl stocheze o dată pe minut.
Cu această definiție, ar trebui să începeți să vedeți o ieșire de depanare care vă spune că valorile sunt stocate.
În continuare, să facem câteva grafice frumoase ale tuturor acestor date. Este foarte ușor. Pentru a crea un grafic al unui senzor individual, adăugați următoarele pe harta site-ului:
Element grafic = Perioadă dormitor_Humiditate = h
Aceasta este literalmente tot ce ai nevoie. Valorile valabile pentru perioadă sunt h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y; ar trebui să fie evident ce înseamnă acestea. Dacă nu este specificat, se implică D pentru o zi întreagă de date.
Pentru a crea un grafic cu mai multe elemente, nu trebuie decât să grafiați numele grupului:
Element grafic = Perioada de umiditate = h
Ați putea fi, de asemenea, interesat să știți că puteți utiliza acest grafic în altă parte; generează o imagine folosind următoarea adresă URL: http://YOUROPENHABURL: 8080 / diagramă? grupe = Umiditate & perioadă = h
Cum a Ta Sistemul OpenHAB vine?
Aceasta este pentru această tranșă a ghidului, dar nu așteptați că veți afla ultima dată despre noi despre OpenHAB. Sperăm că acesta și ghidul pentru începători v-au oferit o bază solidă pentru a vă dezvolta propriul sistem OpenHAB complet, dar este un proces care nu a fost niciodată complet finalizat.
Din fericire, OpenHAB se poate extinde bine de la câteva dispozitive la sute, de la simpla complexitate a regulilor la cea mai modernă în domeniul automatizării - deci cum merge sistemul tău? Ce dispozitive ai ales? Care este următorul mare proiect pe care îl vei aborda?
Să vorbim în comentarii - și vă rog, dacă ați găsit acest ghid util, faceți clic pe butoanele de distribuire pentru a le spune prietenilor dvs. cum și ei pot configura propriul sistem OpenHAB.
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.