OpenHAB Ghid pentru începători Partea 2: ZWave, MQTT, reguli și diagramă

OpenHAB Ghid pentru începători Partea 2: ZWave, MQTT, reguli și diagramă

Gratuit nu înseamnă întotdeauna „nu la fel de bun ca plătit”, iar OpenHAB nu face excepție. Software-ul de automatizare a sursei open source depășește cu mult capacitățile oricărui alt sistem de automatizare a locuințelor de pe piață - dar nu este ușor de configurat. De fapt, poate fi de-a dreptul frustrant.





În partea 1 a ghidului, te-am plimbat instalarea OpenHAB pe un Raspberry Pi , a introdus conceptele de bază ale OpenHAB și v-a arătat cum să adăugați primele elemente în sistem. Astăzi vom merge mai departe:





  • Adăugarea dispozitivelor ZWave
  • Adăugarea unui controler Harmony Ultimate
  • Introducerea regulilor
  • Introducerea MQTT și instalarea unui broker MQTT pe Pi, cu senzori pe un Arduino
  • Înregistrarea și graficarea datelor

Introducere în Z-Wave

Z-Wave a fost protocolul dominant de automatizare a locuinței de ani de zile: este fiabil, a fost dezvoltat pe scară largă și funcționează pe o gamă mult mai lungă decât orice alte produse inteligente pentru casă. Există sute de senzori Z-Wave disponibile pentru dvs. care îndeplinesc o gamă largă de sarcini. OpenHAB poate sa funcționează cu Z-Wave, dar este o problemă de configurat, iar fiabilitatea nu este garantată.





Dacă luați în considerare achiziționarea unei case pline de senzori Z-Wave special pentru a fi utilizată cu OpenHAB, vă îndemn să reconsiderați. S-ar putea să funcționeze excelent pentru dvs. sau poate fi afectat de probleme mici, dar persistente. Cel puțin, nu cumpărați o casă plină de senzori până nu ați avut ocazia să încercați câțiva. Singurul motiv pentru care alegeți Z-Wave este dacă nu sunteți 100% stabilit pe OpenHAB și doriți să vă lăsați opțiunile deschise în viitor: Z-Wave funcționează, de exemplu, cu hub-ul Samsung SmartThings, precum și cu hub-uri specifice Z-Wave. precum Homeseer și o serie de alte opțiuni software, cum ar fi domoticz .

Deși OpenHAB include o legare Z-Wave, tot trebuie să o faceți configurați mai întâi rețeaua Z-Wave , înainte ca OpenHAB să înceapă interogarea acestuia pentru date. Dacă aveți o placă de control Rasberry, aveți un software furnizat pentru configurarea rețelei, deci nu vom acoperi 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 Hub Z-Wave Z-Wave Plus USB pentru a crea gateway (alb obișnuit) CUMPĂRĂ ACUM PE AMAZON

Dacă aveți deja o configurare a rețelei Z-Wave , puteți doar să conectați controlerul la Pi și să începeți să configurați legarea și articolele. Dacă aceasta este prima dvs. 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 „mod de includere” în care este atribuit un ID de nod). În cazul Aotec Z-Stick, aceasta înseamnă deconectarea acestuia de la portul USB și apăsarea butonului o dată pentru ao plasa în modul de includere. Apoi, luați-l aproape de dispozitivul pe care îl asociați și apăsați butonul de includere (acest lucru va varia, de asemenea: mufa Everspring necesită apăsarea butonului de 3 ori succesiv, deci lecția de aici este să citiți manualul dispozitivului dvs.) .





Z-Stick clipește scurt pentru a indica succesul. Acest lucru prezintă probleme la conectarea acestuia din nou la Pi, deoarece este atribuit un port nou. Reporniți Pi-ul pentru a-l reseta înapoi la portul standard dacă descoperiți că a fost realocat dinamic altul. Mai bine: nu-l conectați la Pi până nu ați făcut mai întâi toate asocierile hardware.

Instalarea legăturilor HABmin și Z-Wave

Deoarece OpenHAB nu este de fapt un utilitar de configurare pentru Z-Wave, vom instala un alt instrument de gestionare web care funcționează - ceva numit HABmin. Mergeți la Depozitul HABmin Github descărcați versiunea curentă. După ce l-ai dezarhivat, vei găsi 2 .borcan fișiere din directorul addons - acestea trebuie plasate în directorul addons corespunzător din partajarea dvs. OpenHAB Home (dacă utilizați și Aotec gen5 Z-Stick, asigurați-vă că aveți cel puțin versiunea 1.8 a legăturii Z-Wave) .





Apoi, creați un folder nou în directorul webapps și îl numiți „habmin” (litera mică este importantă). Copiați restul fișierelor descărcate acolo.

Notă: Există, de asemenea, un HABmin 2 aflat în dezvoltare activă. Instalarea este la fel, dar cu un supliment .jar suplimentar .jar. S-ar putea să merite să le încercați pe amândouă doar pentru a vedea pe care le preferați.

Dacă nu ați făcut-o deja, conectați controlerul la Pi. Tastați următoarele pentru a găsi portul corect.

ls / dev / tty *

Căutați orice cu USB în nume sau, în cazul meu, stick-ul Z 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, astfel încât să puteți vedea ce se schimbă dacă nu sunteți sigur.

Deschideți fișierul de configurare OpenHAB și modificați secțiunea de pe Z-Wave, descommentâ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

sudo service openhab reporniți

Sperăm că, dacă verificați jurnalul de depanare, veți vedea așa ceva. Felicitări, acum vorbești despre Z-Wave. De asemenea, puteți găsi jurnalul de depanare inundat de mesaje de la diferite noduri Z-Wave. Să începem prin a verifica HABMIN pentru a vedea ce se găsește: http: //openhab.local: 8080 / habmin / index.html (înlocuind openhab.local cu numele de gazdă Raspberry Pi sau adresa IP).

Există multe de văzut în HABMIN, dar suntem cu adevărat preocupați doar de Configurare -> Legături -> Z-Wave -> Dispozitive , după cum puteți vedea mai jos. Extindeți nodul pentru a edita locația și eticheta de nume pentru ușurința dvs. de referință.

Configurarea articolelor Z-Wave

Fiecare dispozitiv Z-Wave va avea o configurație specifică pentru OpenHAB. Din fericire, majoritatea dispozitivelor au fost deja explorate și vor exista deja exemple pentru dvs. Configurarea dispozitivelor personalizate care nu sunt recunoscute depășește cu mult sfera acestui ghid, dar să presupunem că este acceptată pentru moment.

În primul rând, am un comutator și un contor de alimentare Everspring AN158 de bază pe nodul 3. Un Google Googling rapid m-a condus la o postare pe blog pe Wetwa.re, cu un exemplu de configurație a articolului. Am adaptat acest lucru după cum urmează:

Comutați Dehumidifier_Switch „Dehumidifier” {zwave = '3: command = switch_binary'}

Număr Dehumidifier_Watts 'Consum de energie al dezumidificatorului [% .1f W]' {zwave = '3: command = meter'}

Perfect.

Următorul este un senzor multiplu Aeotec Gen5.

Aeon Labs Multisenzor Aeotec Z-Wave Gen5 (Z-Wave Plus) CUMPĂRĂ ACUM PE AMAZON

Pentru aceasta, am găsit un eșantion de configurare la iwasdot.com , iar multisenzorul meu este pe nodul 2.

Număr Temperatură hol „Temperatură hol [% .1f ° C]” (Hol, temperatură) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Număr Umiditate hol 'Umiditate hol [% .0f %%]' (Hol, umiditate) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Număr Hallway_Luminance 'Hall Hall Luminance [% .0f Lux]' (Hall) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Contactați Hallway_Motion 'Motion Hallway [% s]' (Hallway, Motion) {zwave = '2: 0: command = sensor_binary, respond_to_basic = true'}

Number sensor_1_battery 'Baterie [% s %%]' (Mișcare) {zwave = '2: 0: command = battery'}

Dacă formatul acestui aspect vi se pare ciudat, vă rugăm să reveniți la primul ghid pentru începători , în special secțiunea de legare Hue, unde explic cum sunt adăugate elementele. Probabil că va trebui doar să copiați exemple de lipire de genul acesta, dar în cazul în care aveți 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 legătura Harmony. Sunt un mare fan al seriei Harmony de telecomenzi finale pentru a simplifica experiența centrului media acasă, dar adesea stau ca un sistem separat în casa inteligentă. Cu OpenHAB, activitățile Logitech Harmony și controlul complet al dispozitivului pot face acum parte din sistemul dvs. centralizat și chiar incluse în regulile de automatizare.

Începeți prin instalarea celor trei fișiere obligatorii pe care le găsiți folosind apt-cache pentru a căuta „armonie”:

Nu uita chown directorul de legături din nou când ați terminat:

sudo apt-get install openhab-addon-action-harmonhub

sudo apt-get install openhab-addon-binding-harmonhub

sudo apt-get install openhab-addon-io-harmonhub

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ă:

########## COMANDE DE LA DISTANȚĂ ARMONIE ###########

armoniahub: gazdă = 192.168.1.181 sau ip-ul tău

harmonhub: nume de utilizator = armonia-dvs.-email-login

armonia: parola = parola Dvs

Adresa IP este cea a hub-ului dvs. Harmony. Folosiți un scaner de rețea pentru a afla acest lucru. De asemenea, va trebui să introduceți detaliile de autentificare, cele pe care le introduceți atunci când lansați utilitarul de configurare standard Harmony. Asta e. La repornirea Hue, jurnalul de depanare ar trebui să aibă o explozie bruscă de ieșire din legare.

Aceasta este o listă formatată JSON cu toate activitățile, dispozitivele și comenzile dvs. care pot fi trimise. Este o idee bună să copiați acest lucru pentru referințe viitoare. puteți face chiar mai ușor de citit cu noduri pliabile, lipind într-un formatator JSON online precum acesta .

Pe lângă activitatea standard PowerOff, care este implicită, veți găsi propriile activități definite enumerate aici după nume. Acum să creăm un control simplu cu un singur buton pentru a începe activitățile. Mai întâi, în fișierul articolelor, adăugați rândul următor. Schimbați grupul și pictograma dacă doriți.

/ * Harmony Hub * /

String Harmony_Activity 'Harmony [% s]' (Living_Room) {harmoniahub = '* [currentActivity]'}

Acesta este un legătură șir cu două căi , care este capabil să preia activitatea curentă și să comande activitatea curentă să fie altceva. Acum putem crea un buton pentru acesta, în fișierul sitemap.

Comutați articolul = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

cum să remediați securitatea internetului

În paranteză 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-o, a fost orice cu un spațiu în numele activității, cum ar fi „Uita-te la TV”. În acest caz, va trebui să utilizați ID-ul activității. 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, puteți consulta activitățile din regulile dvs., după cum vom vedea în continuare. Citiți pagina wiki pentru mai multe informații despre Legarea armoniei .

O introducere generală la reguli

Majoritatea hub-urilor inteligente pentru acasă includ un fel de creare de reguli, astfel încât să puteți reacționa automat la datele senzorilor și la evenimentele din casă. De fapt, aș argumenta că o casă cu adevărat inteligentă nu este una de care trebuie să petreci timpul interacționând cu aplicațiile mobile - este una care este invizibilă pentru utilizatorul final și complet automatizată. În acest scop, OpenHAB include, de asemenea, un limbaj puternic de scriptare a regulilor pe care îl puteți programa, depășind cu mult complexitatea majorității hub-urilor inteligente sau rețetelor IFTTT.

Regulile de programare sună mai rău decât este. Să începem simplu cu o pereche de reguli care aprind sau sting lumina în funcție de senzorul de prezență:

regula „Lumina biroului aprinsă când James este prezent”

cand

Articolul JamesInOffice s-a schimbat din OFF în ON

atunci

sendCommand (Office_Hue, ON)

Sfârșit

regula „Lumina biroului stinsă când James pleacă”

cand

Articolul JamesInOffice s-a schimbat din ON în OFF

atunci

sendCommand (Office_Hue, OFF)

Sfârșit

Mai întâi, denumim regula - fiți descriptiv, astfel încât să știți ce eveniment declanșează. Apoi, ne definim regula simplă spunând când x este adevărat, atunci faceți y . Sfârșitul înseamnă închiderea acelei reguli. Există o serie de cuvinte speciale pe care le puteți folosi în reguli, dar deocamdată avem de-a face cu doi biți simpli de sintaxă - Articol , care vă permite să interogați starea a ceva; și sendCommand , care face exact ceea ce crezi că va face. Ți-am spus că este ușor.

Probabil că nu este necesar să folosesc o pereche de reguli, dar pe măsură ce logica mea devine mai complexă, va fi benefic să le separăm indiferent dacă intru sau părăsesc zona - și ar putea fi o idee bună să adăugăm undeva un senzor de lumină undeva în ecuație, astfel încât să nu aprindem inutil luminile.

Să vedem un alt exemplu pentru a crea o regulă programată.

regula „Exercițiu în fiecare dimineață”

cand

Timp cron '0 0 8 1/1 *? * '

atunci

harmonieStartActivity („Exercițiu”)

Sfârșit

Din nou, denumim regula, menționăm condițiile 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 și ghidul de format [Nu mai este disponibil] pentru o explicație detaliată și mai multe exemple.

CronMaker.com folosit pentru a genera expresia Cron formatată corect

Regulile mele spun pur și simplu „8 dimineața în fiecare dimineață, în fiecare zi a săptămânii, spuneți sistemului meu Harmony Ultimate să înceapă activitatea de exerciții”, care la rândul său activează televizorul, Xbox, amplificatorul și apasă butonul A după un minut pentru a lansa discul din unitate.

Din păcate, OpenHAB nu este încă capabil să facă exercițiul pentru mine.

Încă o regulă pe care vreau să ți-o arăt este ceva pe care îl folosesc pentru a gestiona nivelurile de umiditate din casa mea. Am un singur dezumidificator de 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 înalt și să-l păstrez într-o variabilă. În prezent, este declanșat în fiecare minut, dar acest lucru poate fi ușor coborât. Aruncă o privire mai întâi:

import org.openhab.core.library.types. *

import org.openhab.model.script.actions. *

import java.lang.String

regula „Umiditate Monitor”

când Time cron '0 * * * *?'

atunci

var prevHigh = 0

var highHum = '

Umiditate? .Members.forEach [hum |

logDebug ('umiditate.reguli', hum.nume);

if (hum.state ca DecimalType> prevHigh) {

prevHigh = hum.state

highHum = hum.name + ':' + hum.state + '%'

}

cum să redați muzică prin USB pe telefonul Android

]

logDebug ('umiditate.reguli', highHum);

postUpdate (Dehumidifier_Needed, highHum);

Sfârșit

Nucleul regulii se află în Umiditate? .Membri.foreach linia. Umiditatea este un nume de grup pentru senzorii mei de umiditate; .membri apucă toate articolele din grupul respectiv; pentru fiecare iterați peste ele (cu un format curios de paranteză pătrată pe care probabil nu îl cunoașteți). Sintaxa regulilor este un derivat al lui Xtend, deci puteți citi fișierul Xtend documentație dacă nu găsești un exemplu de adaptat.

Probabil că nu va trebui să faceți totuși - există sute de exemple de reguli acolo:

MQTT pentru OpenHAB și Internetul obiectelor

MQTT este un sistem de mesagerie ușor pentru comunicarea de la mașină la mașină - un fel de Twitter pentru ca Arduinos sau Raspberry Pis să poată vorbi între ei (deși, desigur, funcționează cu mult mai mult decât doar aceia). Câștigă rapid popularitate și își găsește o casă cu dispozitive Internet of Things, care sunt de obicei microcontrolere cu resurse reduse, care au nevoie de o modalitate fiabilă de a transmite datele senzorilor înapoi în hub sau de a primi comenzi de la distanță. Exact asta vom face cu el.

Dar de ce să reinventăm roata?

MQ Telemetry Transport a fost inventat mult înapoi în 1999 pentru a conecta conductele de petrol prin conexiuni lente prin satelit, special concepute pentru a minimiza utilizarea bateriei și lățimea de bandă, oferind în același timp furnizarea de date fiabilă. De-a lungul anilor, principiile de proiectare au rămas aceleași, dar cazul de utilizare a trecut de la sisteme integrate încorporate la dispozitive generale Internet of Things. În 2010, protocolul a fost lansat fără redevențe, deschis pentru utilizare și implementare de către oricine. Ne place gratuit.

S-ar putea să vă întrebați de ce ne deranjăm chiar și cu un alt protocol - avem deja HTTP până la urmă - care poate fi folosit pentru a trimite mesaje rapide între toate tipurile de sisteme conectate la web (cum ar fi OpenHAB și IFTTT, în special cu noul canal maker) ). Și ai avea dreptate. Cu toate acestea, cheltuielile de procesare ale unui server HTTP sunt destul de mari - atât de mult încât nu poți rula cu ușurință unul pe un microcontroler încorporat precum Arduino (cel puțin, poți, dar nu vei mai avea multă memorie pentru altceva ). MQTT este, pe de altă parte, ușor, astfel încât trimiterea de mesaje în jurul rețelei 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 redifuzându-le către clienții interesați.

Să continuăm cu Twitter pentru mașini analogie totuși. Așa cum utilizatorii Twitter își pot trimite propriile 140 de caractere fără sens, iar utilizatorii pot „urmări” alți utilizatori pentru a vedea un flux curat de postări, 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. la acel canal. Acest model de publicare și abonare este denumit pub / sub , spre deosebire de tradiție client server model de HTTP.

HTTP necesită să ajungeți la mașina cu care comunicați, spuneți Bună ziua, apoi să aveți înapoi și înapoi recunoașterea 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 oricăror clienți 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. Este agnostic de date, deci puteți trimite numere mici sau blocuri de text mari, datagrame formatate JSON sau chiar imagini și fișiere binare.

Nu este că MQTT este mai bun decât HTTP pentru toate - ci este mai potrivit dacă vom avea o mulțime de senzori în toată casa, raportând constant.

De asemenea, este important să știți că OpenHAB nu va acționa ca brokerul dvs. MQTT - vom aborda acest lucru mai târziu. Cu toate acestea, OpenHAB va acționa ca un client: vă poate publica jurnalul de activitate OpenHAB, precum și poate lega anumite canale de dispozitive, astfel încât să aveți, de exemplu, un comutator controlat de mesaje MQTT pe un anumit 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, de asemenea, să publicați mesaje, acesta nu va acționa ca server. Pentru aceasta, fie trebuie să utilizați un broker MQTT bazat pe web (cu plată sau gratuit), fie să instalați software-ul gratuit pe Pi. Aș vrea să păstrez totul în casă, așa că am instalat Mosquitto pe Pi.

Din păcate, versiunea disponibilă prin intermediul apt-get obișnuit este complet depășită. În schimb, să adăugăm cele mai recente surse.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key

sudo apt-key adăugați 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

Asta este tot ce trebuie să facem pentru ca un server MQTT să funcționeze în rețeaua locală. Brokerul dvs. rulează în mod implicit pe portul 1883.

Verificați dacă serverul MQTT funcționează folosind MQTT.fx gratuit, care este multiplataforma. Faceți clic pe pictograma de setări pentru a crea un profil nou și introduceți adresa IP sau numele Raspberry Pi. Salvați și apăsați pe conectare. Dacă semaforul din dreapta sus devine verde, ești 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 tasta Abonati-va buton. Acum sunteți abonat pentru a primi un mesaj cu privire la subiectul numit inTopic, deși acesta va afișa 0 mesaje. Reveniți la fila Publicare, tastați Tema în caseta mică și un mesaj scurt în caseta mare de mai jos. Lovit Publica de câteva ori și priviți înapoi pe fila de abonare. Ar trebui să vedeți câteva mesaje apărute în subiectul respectiv.

Înainte de a adăuga niște senzori reali la rețeaua noastră, trebuie să aflăm despre nivelurile de subiect, care ne permit să structurăm și să filtrăm rețeaua MQTT. Numele subiectelor sunt sensibile la majuscule și minuscule, nu ar trebui să înceapă cu $ sau să includă un spațiu sau caractere care nu sunt ASCII - practicile de programare standard pentru numele variabilelor, într-adevăr.

Separatorul / indică un nivel de subiect, care este ierarhic, de exemplu, următoarele sunt toate nivelurile de subiect valide.

inTopic / SmallSubdivision / evenSmallerSubdivision

myHome / livingRoom / temperature

myHome / livingRoom / 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 să publicați fiecare variabilă a senzorului ca nivel de subiect propriu - ramificându-se către mai multă specificitate (ca în exemplele de mai sus) - mai degrabă decât să încercați să publicați mai multe tipuri de senzori pe același canal .

Clienții pot apoi să publice sau să se aboneze la orice număr de niveluri individuale de subiecte sau să folosească unele caractere speciale cu caractere wildcard pentru a le filtra de sus în arbore.

+ Comodele + înlocuiesc orice nivel de subiect. De exemplu:

myHome / + / temperature

ar abona clientul la ambele

myHome / livingRoom / temperature

myHome / bucătărie / temperatură

... dar nu și nivelurile de umiditate.

# Este un wildcard pe mai multe niveluri, astfel încât să puteți prelua orice din matricea de senzori livingRoom cu:

myHome / livingRoom / #

Din punct de vedere tehnic, vă puteți abona, de asemenea, la nivelul rădăcină # care vă oferă absolut tot ce trece prin broker, dar asta poate fi ca și cum ați înfige un furtun de incendiu în față: un pic copleșitor. Î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ători MQTT: ' /casa mea/' este un subiect diferit de „ casa mea/' - includerea unei bare oblice 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ă încercăm un Arduino, Ethernet Shield și un senzor de temperatură și umiditate DHT11 - probabil aveți unul în kitul de pornire, dar dacă nu, schimbați senzorul de mediu pentru o mișcare senzor (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, ar trebui să funcționeze și. În cele din urmă, ne vom dori un mod mai bun / mai ieftin de comunicare, care trebuie să folosească 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 de la Github . Dacă ați folosit butonul „Descărcați ca ZIP”, structura este puțin greșită. Dezarhivați, redenumiți folderul doar pubsubclient , apoi scoateți cele două fișiere din src folder și mutați-le cu un nivel în sus la rădăcina folderului descărcat. Apoi mutați întregul dosar în Arduino / biblioteci director.

Iată exemplul meu de cod pe care îl puteți adapta : ieșirea semnalului DHT11 este pe pinul 7. Schimbați adresa IP a serverului pentru cea a Pi-ului 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ă și adăugarea codului pentru denumirea Bonjour ar fi o mulțime de memorie pe care nu vrem să o pierdem. Pentru a schimba subiectele pe care sunt difuzate datele senzorului, derulați în jos până la următoarele linii:

tampon char [10];

dtostrf (t, 0, 0, tampon);

client.publish ('openhab / himitsu / temperature', tampon);

dtostrf (h, 0, 0, tampon);

client.publish ('openhab / himitsu / umiditate', tampon);

Codul include, de asemenea, abonamentul la un canal de comandă. Găsiți și reglați următoarea linie:

client.subscribe ('openhab / himitsu / command');

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 exemplul de cod, trimite pur și simplu un mesaj de confirmare a primirii comenzii.

Încărcați codul, conectați-vă Arduino la rețea și utilizând MQTT.fx abonați-vă la oricare # sau openhab / himitsu / # (sau orice altceva ați schimbat numele camerei, dar nu uitați să includeți # la final). În curând ar trebui să vedeți mesaje care vin; iar dacă trimiteți PORNIT sau OPRIT subiectului de comandă, veți vedea și recunoștințe.

Legarea MQTT pentru OpenHAB

Ultimul pas al ecuației este să conectați acest lucru la 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

sudo service openhab reporniți

Apoi, să adăugăm un articol sau două:

/ * Senzori MQTT * /

Număr Himitsu_Temp 'Temperatura Himitsu [% .1f ° C]' (Himitsu, Temperatura) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Număr Himitsu_Humidity'Himitsu Umiditate [% .1f %%] '(Himitsu, Umiditate) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Până acum ar trebui să înțelegeți formatul; devine o Număr articol din legarea MQTT, pe un subiect specificat. Acesta este un exemplu simplu, poate doriți să consultați pagina wiki unde se află poate deveni mult mai complex .

Felicitări, aveți acum baza unui set de senzori ieftin bazat pe Arduino. Vom revizita acest lucru în viitor și vom plasa dispozitivele Arduino pe propria rețea RF complet separată. De asemenea, am creat o versiune identică pentru plăcile Wizwiki 7500 dacă se întâmplă să aveți una dintre acestea.

Persistența și graficarea datelor

Până acum probabil că ați configurat o grămadă de senzori, fie de la Z-Wave sau Arduinos personalizați care rulează MQTT - astfel încât să puteți vizualiza starea actuală a acestor senzori în orice moment și ar trebui să reacționați la valoarea lor în reguli. Dar aspectul interesant despre valorile senzorilor este, în general, că acestea se schimbă în timp: acolo intervin persistența și graficul. Persistenţă în OpenHAB înseamnă salvarea datelor în timp. Să mergem mai departe și să configurăm RRD4J (baza de date Round Robin pentru Java), așa-numita deoarece datele sunt salvate într-un mod round robin - datele mai vechi sunt eliminate 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 fișier nou numit rrd4j.persist în configurații / persistență pliant. Lipiți următoarele:

Strategii {

everyMinute: '0 * * * *?'

everyHour: '0 0 * * *?'

everyDay: '0 0 0 * *?'

implicit = everyChange

}

Elemente {

// persistă totul atunci când valoarea este actualizată, doar o valoare implicită și restaurează-le din baza de date la pornire

*: strategie = everyChange, restoreOnStartup

// apoi definim strategii specifice fiecărei ore pentru orice din grupul Temperatură și, în fiecare minut, pentru Umiditate

cum se monitorizează utilizarea lățimii de bandă a fiecărui dispozitiv din rețeaua wifi

Temperatura *: strategie = everyHour

Umiditate *: strategie = everyMinute

// alternativ, puteți adăuga elemente specifice aici, cum ar fi

// Bedroom_Humidity, JamesInOffice: Strategy = everyMinute

}

În prima parte a acestui fișier, definim strategii, ceea ce înseamnă doar să dai un nume unei expresii CRON. Acest lucru este la fel cum am făcut deja cu My.OpenHAB, dar de data aceasta creăm câteva strategii noi pe care le putem folosi pentru fiecare zi, fiecare oră și fiecare minut. Nu le-am folosit încă pe toate, dar s-ar putea să fiu și pe viitor.

În a doua jumătate a fișierului, îi 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 nu mă deranjează prea mult, așa că am stabilit ca să economisesc doar fiecare oră, dar umiditatea este o mare preocupare pentru mine, așa că vreau să văd cum se schimbă în fiecare minut. Dacă există alte date pe care doriți să le salvați în mod specific la orele stabilite, 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 pur și simplu să spuneți rr4dj să le stocheze o dată pe minut.

Odată definit acest lucru, 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 cu toate aceste date. Este foarte ușor. Pentru a crea un grafic al unui senzor individual, adăugați următoarele pe harta site-ului:

Elementul graficului = Dormitorul_Perioada de umiditate = h

Asta este literalmente tot ce ai nevoie. Valorile valide pentru perioada sunt h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; ar trebui să fie evident ce înseamnă acestea. Valoarea implicită este D pentru o zi întreagă de date, dacă nu este specificată.

Pentru a crea un grafic cu mai multe elemente, pur și simplu graficați numele grupului:

Elementul graficului = 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 / chart? groups = Umiditate & perioadă = h

Cum e Ta Sistemul OpenHAB vine?

Asta este pentru această versiune a ghidului, dar nu vă așteptați să fie ultima dată când veți auzi de la noi despre OpenHAB. Sperăm că acest lucru ș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 terminat.

Din fericire, OpenHAB poate scădea bine de la câteva dispozitive la sute, de la simplitatea complexității regulilor până la ultimul în domeniul automatizării casei - deci, cum vine sistemul tău? Ce dispozitive ai ales? Care este următorul mare proiect pe care îl veți aborda?

Să vorbim în comentarii - și vă rog, dacă ați găsit util acest ghid, faceți clic pe butoanele de partajare pentru a le spune prietenilor cum și ei își pot configura propriul sistem OpenHAB.

Sperăm să vă placă articolele pe care le recomandăm și le discutăm! MUO are parteneriate afiliate și sponsorizate, așa că primim o parte din venituri din unele dintre achizițiile dvs. Acest lucru nu va afecta prețul pe care îl plătiți și ne ajută să oferim cele mai bune recomandări de produse.

Acțiune Acțiune Tweet E-mail Un ghid pentru începători pentru vorbirea animată

Animarea vorbirii poate fi o provocare. Dacă sunteți gata să începeți să adăugați dialog la proiectul dvs., vom descompune procesul pentru dvs.

Citiți în continuare
Subiecte asemănătoare
  • DIY
  • Casa inteligentă
  • Arduino
  • Domotică
  • Forma lungă
  • Ghid Longform
Despre autor James Bruce(707 articole publicate)

James are o licență în inteligență artificială și este certificat CompTIA A + și Network +. Când nu este ocupat ca editor de recenzii hardware, îi place LEGO, VR și jocurile de societate. Înainte de a se alătura MakeUseOf, a fost tehnician de iluminat, profesor de engleză și inginer de date.

Mai multe de la James Bruce

Aboneaza-te la newsletter-ul nostru

Alăturați-vă newsletter-ului pentru sfaturi tehnice, recenzii, cărți electronice gratuite și oferte exclusive!

Faceți clic aici pentru a vă abona