Skelbimas

Nemokama ne visada reiškia „ne taip gerai, kaip mokama“, o „OpenHAB“ nėra išimtis. Atvirojo kodo namų automatikos programinė įranga žymiai viršija bet kurios kitos rinkoje esančios namų automatikos sistemos galimybes, tačiau ją nustatyti nėra lengva. Tiesą sakant, tai gali būti visiškai gąsdinanti.

Šį vadovą galima atsisiųsti kaip nemokamą PDF. Atsisiųskite „OpenHAB“ pradedančiųjų vadovo 2 dalį: „ZWave“, MQTT, taisyklės ir diagramos dabar. Nukopijuokite tai ir pasidalykite ja su draugais ir šeima.

1 vadovo dalyje aš jus apžvelgiau diegti „OpenHAB“ „Raspberry Pi“ Darbo su „OpenHAB Home Automation“ pradžia naudojant „Raspberry Pi“„OpenHAB“ yra brandi, atviro kodo namų automatikos platforma, veikianti įvairia aparatine įranga ir tokia Agnostic Protocol, ty jis gali prisijungti prie beveik bet kurios rinkoje esančios namų automatikos aparatūros šiandien. Skaityti daugiau , pristatė pagrindines „OpenHAB“ sąvokas ir parodė, kaip pridėti pirmuosius elementus į sistemą. Šiandien mes eisime toliau:

instagram viewer
  • „ZWave“ įrenginių pridėjimas
  • Pridedamas „Harmony Ultimate“ valdiklis
  • Pristatome taisykles
  • Pristatome MQTT ir įdiegiame MQTT brokerį ant savo Pi su jutikliais Arduino
  • Duomenų įrašymas ir jų grafikų sudarymas

Įvadas į „Z-Wave“

„Z-Wave“ daugelį metų buvo dominuojantis namų automatizavimo protokolas: jis yra patikimas, labai išplėtotas ir veikia daug platesniame diapazone nei bet kurie kiti išmaniųjų namų produktai. Jums yra šimtai „Z-Wave“ jutiklių, kurie atlieka daugybę užduočių. „OpenHAB“ gali dirbti su „Z-Wave“, tačiau jį nustatyti sudėtinga, o patikimumas negarantuojamas.

Jei ketinate įsigyti namą, pilną „Z-Wave“ jutiklių, skirtą naudoti tik su „OpenHAB“, raginčiau jus dar kartą apsvarstyti. Gali būti, kad jums tai puikiai tiks, ar gali varginti mažos, bet nuolatinės problemos. Bent jau nenusipirkite namo, kuriame pilna daviklių, kol jums nebuvo suteikta galimybė išbandyti keletą. Vienintelė priežastis pasirinkti „Z-Wave“ yra, jei nesate 100% įsitvirtinę „OpenHAB“ ir norėtumėte ateityje palikti savo galimybes atviras: pavyzdžiui, „Z-Wave“ veikia su „Samsung SmartThings“ Kuris „Smart Hub“ namų automatizavimui yra geriausias jums?Kurį laiką žmonės galvojo apie šią idėją kaip ne tik gudrybę, tačiau naujausi produktų leidimai parodė, kad išmanioji namų automatika pradeda vykdyti savo pažadus. Skaityti daugiau koncentratorius, taip pat specialūs „Z-Wave“ šakotuvai, tokie kaip „Homeseer“, ir daugybė kitų programinės įrangos parinkčių, tokių kaip Domotikas.

Nors „OpenHAB“ apima „Z-Wave“ įrišimą, vis tiek to reikia pirmiausia sukonfigūruokite „Z-Wave“ tinklą, prieš pradėdami OpenHAB pradėti duomenų užklausą. Jei turite „Rasberry“ valdiklio plokštę, turite tam tikrą programinę įrangą tinklui konfigūruoti, todėl mes čia to nenagrinėsime. Jei nusipirkote „Aeotec USB Z-Stick“ valdiklį ar panašų, greičiausiai neturite jokios programinės įrangos, todėl skaitykite toliau.

„Aeotec Z-Stick Gen5“, „Z-Wave Plus USB“ sukuria šliuzą„Aeotec Z-Stick Gen5“, „Z-Wave Plus USB“ sukuria šliuzą Pirkite dabar „Amazon“ $44.95

Jei jau turite „Z-Wave“ tinklo sąranką, galite tiesiog prijungti valdiklį prie Pi ir pradėti konfigūruoti įrišimą ir elementus. Jei tai pirmas jūsų įsijautimas į „Z-Wave“, tai yra šiek tiek sudėtingiau.

Pirma, kalbant apie techninę įrangą: kiekvienas valdiklis turi savo būdą susieti su įrenginiais (techniškai žinomas kaip „įtraukimo būdas“, kuriam priskiriamas mazgo ID). „Aotec Z-Stick“ atveju tai reiškia, kad jį reikia atjungti nuo USB prievado ir vieną kartą paspausti mygtuką, kad įjungtumėte įtraukties režimą. Tada nuneškite jį šalia jūsų suporuoto įrenginio ir paspauskite ir įtraukimo mygtuką (tai taip pat skirsis: mano „Everspring“ lizde reikia mygtuko, kurį reikia spausti 3 kartus iš eilės iš eilės, taigi čia reikia išmokti perskaityti jūsų įrenginio vadovą)..

„Z-Stick“ trumpai mirksi, kad parodytų sėkmę. Tai sukelia problemų, kai jį vėl prijungiate prie „Pi“, nes yra priskirtas naujas prievadas. Paleiskite „Pi“ iš naujo, kad jis būtų atstatytas į standartinį prievadą, jei pastebėsite, kad jam dinamiškai priskirta kita. Dar geriau: nejunkite jo į „Pi“, kol pirmiausia nepadarysite visų aparatūros porų.

„HABmin“ ir „Z-Wave“ įrišimų diegimas

Kadangi „OpenHAB“ iš tikrųjų nėra „Z-Wave“ konfigūravimo programa, ketiname įdiegti kitą žiniatinklio valdymo įrankį, vadinamą HABmin. Eikite link „HABmin Github“ saugykla atsisiųskite dabartinę versiją. Išpakavę jį, rasite 2 .jar failai priedų kataloge - jie turėtų būti patalpinti į atitinkamą priedų katalogą jūsų „OpenHAB Home“ bendrinime (jei taip pat naudojate „Aotec gen5 Z-Stick“, įsitikinkite, kad turite bent „Z-Wave“ įrišimo 1.8 versiją).

Tada sukurkite naują katalogą internetinių programų kataloge ir pavadinkite jį „habmin“ (svarbu naudoti mažąsias raides). Nukopijuokite likusius atsisiųstus failus į ten.

Pastaba: Taip pat yra: HABmin 2 aktyviai plėtojamas. Diegimas yra beveik tas pats, bet su vienu papildomu .jar priedu. Galbūt verta pabandyti abu, kad suprastumėte, kuris jums labiau patinka.

Jei to dar nepadarėte, prijunkite valdiklį prie savo Pi. Norėdami rasti teisingą prievadą, įveskite toliau nurodytus dalykus.

ls / dev / tty *

Jūs nieko ieškote, naudodamiesi USB pavadinimu, arba mano konkrečiu atveju „Z-stick“ save pristatė kaip /dev/ttyACM0 (modemas). Galbūt bus lengviau atlikti komandą vieną kartą prieš ją įjungiant ir dar kartą po to, kad galėtumėte pamatyti, kas pasikeičia, jei nesate tikri.

velniškas

Atidarykite „OpenHAB“ konfigūracijos failą ir pakeiskite „Z-Wave“ skyrių, nekomentuodami abiejų eilučių ir nurodydami tikrąjį įrenginio adresą. Paskutinis žingsnis man buvo leisti „OpenHAB“ vartotojui pasiekti modemą.

sudo usermod -a -G dialogo „openhab“

Dabar, norėdami viską pradėti veikti, paleiskite „OpenHAB“ iš naujo

„sudo“ paslaugos „openhab“ paleidimas iš naujo

Tikimės, kad tikrindami derinimo žurnalą pamatysite kažką panašaus. Sveikiname, jūs dabar kalbate „Z-Wave“. Taip pat galite rasti derinimo žurnalą, užpildytą pranešimais iš įvairių „Z-Wave“ mazgų. Pradėkime nuo HABMIN patikrinimo, kad sužinotume, ką jis rado: http://openhab.local: 8080 / habmin / index.html („openhab.local“ pakeičia savo „Raspberry Pi“ pagrindinio kompiuterio pavadinimu arba IP adresu).

„zwave“ paleidimas „openhab“ žurnale

„HABMIN“ yra daug ką pamatyti, tačiau mums rūpi tik Konfigūracija -> Įrišimai -> Z-Wave -> Įrenginiai skirtuką, kaip matote žemiau. Išskleiskite mazgą, kad galėtumėte lengviau tvarkyti vietos ir vardo etiketę.

redaguoti įrenginio pavadinimą

„Z-Wave“ elementų konfigūravimas

Kiekvienas „Z-Wave“ įrenginys turės specifinę „OpenHAB“ konfigūraciją. Laimei, dauguma įrenginių jau buvo ištirti, o pavyzdžių bus jau ir jūsų. Konfigūruoti nepripažintus nepripažintus įrenginius nepatenka į šio vadovo taikymo sritį, tačiau tarkime, kad dabar jis palaikomas.

Pirma, aš turiu pagrindinį „Everspring AN158“ maitinimo jungiklį ir matuoklį 3 mazge. Greita „Google“ paieška paskatino mane į tinklaraščio įrašą Wetwa.re su pavyzdžio elemento konfigūracija. Aš pritaikiau tai taip:

„Dehumidifier_Switch“ jungiklis „Dehumidifier“ {zwave = "3: command = switch_binary"} Skaičius Dehumidifier_Watts „Sausintuvo energijos sunaudojimas [% .1f W]" {zwave = "3: command = meter"}

Puikus.

Kitas „Aeotec Gen5“ daugialypis jutiklis.

Aeon Labs Aeotec Z-Wave Gen5 daugialypis jutiklis (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 daugialypis jutiklis (Z-Wave Plus) Pirkite dabar „Amazon“ $69.27

Tam aš radau konfigūracijos pavyzdį iwasdot.com, o mano multisensorius yra 2 mazge.

Skaičius Prieškambario_temperatūra „Prieškambario temperatūra [% .1f ° C]“ (prieškambaris, temperatūra) {zwave = "2: 0: komanda = jutiklis_molektyvo lygis, jutiklio_ tipas = 1, jutiklio_ skalė = 0"} Numeris Prieškambario_ drėgnumas "Prieškambario drėgmė [% .0f %%]" (prieškambario, oro drėgnumas) {zwave = "2: 0: komanda = sensor_multilevel, sensor_type = 5"} Skaičius Prieškambario_šviesumas „Prieškambario skaistis [% .0f Lux]“ (prieškambaris) {zwave = "2: 0: komanda = sensor_multilevel, sensor_type = 3"} Susisiekite su „Hallway_Motion“ Prieškambario judesys [% s] “(Prieškambaris, judesys) {zwave =" 2: 0: komanda = jutiklis_binarinis, reaguoti_to_basikas = tiesa "} Skaičiaus jutiklis_1_ baterija „Baterija [% s %%]“ (judesys) {zwave = "2: 0: komanda = baterija"}

Jei jums tai atrodo keista, prašau grįžti į pirmąjį pradedančiojo vadovas Darbo su „OpenHAB Home Automation“ pradžia naudojant „Raspberry Pi“„OpenHAB“ yra brandi, atviro kodo namų automatikos platforma, veikianti įvairia aparatine įranga ir tokia Agnostic Protocol, ty jis gali prisijungti prie beveik bet kurios rinkoje esančios namų automatikos aparatūros šiandien. Skaityti daugiau , ypač „Hue“ įrišimo skyrius, kuriame paaiškinu, kaip pridedami elementai. Turbūt kada nors reikės nukopijuoti tokius įklijavimo pavyzdžius, tačiau tuo atveju, jei turite naują įrenginį, įrišimo dokumentuose pateikiama visa komandos.

„Logitech Harmony“ įrišimas

Prieš pereidamas prie taisyklių, norėjau pridurti trumpą pastabą apie darbą su „Harmony“ įrišimu. Aš esu didelis gerbėjas „Harmony“ nuotolinio valdymo pulto serija „Logitech Harmony Ultimate“ peržiūra ir dovanosJūsų svetainė yra chaosas - pripažinkite. Jums atleista, kad įdomu, kurį nuotolinio valdymo pultelius pasirinkti. Ką su televizoriumi, stiprintuvu, „TiVO“, „BluRay“ grotuvu, gal net apšvietimu - perjungimo veikla tampa ilga ... Skaityti daugiau supaprastinti namų žiniasklaidos centro patirtį, tačiau jie dažnai yra kaip atskira išmaniųjų namų sistema. Naudodami „OpenHAB“, „Logitech Harmony“ veikla ir visiškas įrenginio valdymas dabar gali būti jūsų centralizuotos sistemos dalis ir netgi įtraukti į automatikos taisykles.

Pradėkite diegdami tris įrišimo failus, kuriuos rasite naudodami apt-cache ieškoti „harmonijos“:

„openhab apt-cache“ - harmonijos įrišimo paieška

Nepamiršk chown vėl įrišimų katalogą, kai baigsite:

sudo apt-get install openhab-addon-action-harmonyhub. sudo apt-get install openhab-addon-binding-harmonyhub. sudo apt-get install openhab-addon-io-harmonyhub. sudo chown -hR openhab: openhab / usr / share / openhab

Norėdami sukonfigūruoti įrišimą, atidarykite failą openhab.cfg ir pridėkite naują skyrių taip:

########## HARMONIJOS KAIMO VALDIKLIAI ########### harmonikų klubas: šeimininkas = 192.168.1.181arba jūsų IP
harmonyhub: vartotojo vardas =jūsų harmonija-el-paštas-prisijungimas
harmonyhub: slaptažodis =Jūsų slaptažodis

IP adresas yra jūsų „Harmony“ centro adresas. Norėdami tai sužinoti, naudokite tinklo skaitytuvą. Taip pat turėsite įvesti savo prisijungimo duomenis, kuriuos įvesite paleidę standartinę „Harmony“ konfigūravimo priemonę. Viskas. Iš naujo paleidus „Hue“, derinimo žurnale turėtų būti staigus išvesties įrišimas.

Tai yra JSON suformatuotas visos jūsų veiklos, įrenginių ir komandų, kurias galima siųsti, sąrašas. Patartina nukopijuoti tai ateityje. galite dar lengviau perskaityti sulankstomus mazgus, įklijuodami internetiniame JSON formatuoklyje tokių kaip šis.

json suformatuotas „Openhab“ išėjimas

Taip pat kaip standartinę „PowerOff“ veiklą, kuri yra numatytoji, rasite ir savo apibrėžtą veiklą, išvardytą čia pagal pavadinimą. Dabar pradėkime kurti paprastą vieno mygtuko valdiklį. Pirmiausia į savo elementų failą įtraukite šią eilutę. Jei norite, pakeiskite grupę ir piktogramą.

/ * „Harmony Hub“ * / Styginių harmonija_Aktyvumas „Harmonija [% s]“ („Living_Room“) {harmonyhub = "* [currentActivity]"}

Tai yra dvipusis stygų rišimas, kuris gali tiek gauti esamą veiklą, tiek nurodyti, kad dabartinė veikla būtų kažkas kita. Dabar mes galime sukurti jį mygtuką svetainės schemos faile.

Perjungti elementą = Harmony_Activity mappings = [PowerOff = 'Išjungta', Pratimai = 'Pratimai', 13858434 = 'Televizorius', Karaoke = 'Karaoke']

Krašto skliaustelyje matysite kiekvieną veiklą kartu su etikete. Paprastai jūs galite tiesiogiai kreiptis į veiklą, kai ją pavadinote savo nuotolinio valdymo pulte, tačiau išimtis, kurią radau, buvo bet kuri su veiklos pavadinime esančia erdve, pavyzdžiui, „Žiūrėti televizorių“. Tokiu atveju turėsite naudoti veiklos ID. Vėlgi, ID galite rasti JSON derinimo išvestyje. Išsaugokite ir atnaujinkite sąsają, turėtumėte pamatyti kažką panašaus į šį:

„openhab“ harmonija svetainės schemoje

Taip pat savo taisyklėse galite nurodyti veiklą, kaip matysime toliau. Perskaitykite wiki puslapį, kad gautumėte daugiau informacijos apie Harmonijos įpareigojimas.

Bendras įvadas į taisykles

Daugelyje išmaniųjų namų centrų yra tam tikrų taisyklių kūrimo būdas, kad galėtumėte automatiškai reaguoti į jutiklių duomenis ir įvykius namuose. Tiesą sakant, aš tvirtinčiau, kad tikrai intelektualūs namai nėra tie, kuriems reikia skirti laiko sąveikai su programomis mobiliesiems - tai tie, kurie nėra matomi galutiniam vartotojui ir yra visiškai automatizuoti. Šiuo tikslu „OpenHAB“ taip pat apima galingą taisyklių scenarijavimo kalbą, kurią galite programuoti, ir tai daug daugiau nei daugumos sudėtingumas išmaniųjų namų mazgai Išmaniųjų namų centrų mūšis: kas čia dar ir kas darosi? Skaityti daugiau arba IFTTT receptai IFTTT dabar prisijungia prie bet ko: pristatome „Maker“ kanaląGalimas IFTTT panaudojimas yra begalinis. Tačiau iki šiol buvo sunku tai susieti su savo aparatinės įrangos projektais. Šiandien viskas pasikeitė. Skaityti daugiau .

Programavimo taisyklės skamba blogiau nei yra. Pradėkime nuo kelių taisyklių, kurios įjungia arba išjungia šviesą, atsižvelgiant į buvimo daviklį:

taisyklė „Biuro apšvietimas, kai Džeimsas pristato“ kai punktas „JamesInOffice“ pasikeitė iš IŠJUNGTAS į ĮJUNGTAS. tada siųsti „Command“ („Office_Hue“, ON) pabaigos taisyklė: „Biuro šviesa užges, kai Džeimsas išeis“ kai punktas „JamesInOffice“ pasikeitė iš „ON“ į „OFF“. tada siųsti „Command“ („Office_Hue“, OFF) pabaiga

Pirmiausia mes įvardijame taisyklę - būkite aprašomieji, kad žinotumėte, koks įvykis šaudė. Toliau mes apibūdiname savo paprastą taisyklę sakydami kai x yra tiesa, tada daryk y. Pabaiga reiškia tos konkrečios taisyklės uždarymą. Yra keletas specialių žodžių, kuriuos galite naudoti taisyklėse, tačiau kol kas mes kalbame apie du paprastus sintaksės bitus - Punktas, leidžiančią paklausti apie kažkokią būseną; ir siųsti komandą, kuris daro tiksliai tai, kas, jūsų manymu, bus. Aš tau sakiau, kad tai buvo lengva.

Turbūt nereikia naudoti poros taisyklių, tačiau kadangi mano logika tampa sudėtingesnė, bus naudinga jas atskirti, nesvarbu, ar aš įvažiavimas į teritoriją arba iš jos išplaukimas - ir gali būti gera idėja kažkur į lygtį įtraukti šviesos jutiklį, kad be reikalo neįjungtume žibintai.

Pažvelkime į kitą pavyzdį, kaip sukurti suplanuotą taisyklę.

taisyklė „Mankšta kiekvieną rytą“ kai laiko kronas "0 0 8 1/1 *? *" tada harmonyStartActivity („Pratimai“) pabaiga.

Vėlgi mes įvardijame taisyklę, valstybės sąlygas, kada ji turėtų suveikti, ir veiksmus, kurių reikia imtis. Bet šiuo atveju mes apibrėžiame laiko modelį. Juokingas kodas, kurį matote kabutėse, yra „CRON“ išraiška „Quartz Scheduler“ (formatas šiek tiek skiriasi nuo įprasto „CRONtab“). aš naudojau cronmaker.com norėdami padėti sukurti išraišką, bet taip pat galite perskaityti formato vadovą [nebėra], jei norite gauti išsamesnį paaiškinimą ir daugiau pavyzdžių.

cron generatorius
„CronMaker.com“ naudojamas teisingai suformatuotos „Cron“ išraiškos generavimui

Mano taisyklės sako: „Kiekvieną rytą 8:00 kiekvieną savaitės dieną liepkite savo„ Harmony Ultimate “sistemai pradėti mankštą“. kuris savo ruožtu suaktyvina televizorių, „Xbox“, stiprintuvą ir po minutės paspaudžia mygtuką A, kad paleistų diską į diską.

Deja, „OpenHAB“ dar negali atlikti manęs.

Dar viena taisyklė, kurią noriu jums parodyti, yra tai, ką aš naudoju savo namų drėgmės lygiui valdyti. Turiu vieną sausintuvą, kurį turiu perkelti visur, kur reikia, todėl nusprendžiau apžiūrėti visus savo drėgmės jutiklius, surasti, kuris yra aukščiausias, ir laikyti jį kintamajame. Šiuo metu jis suveikia kiekvieną minutę, tačiau jį galima lengvai sumažinti. Pirmiausia pažiūrėkite:

importuoti org.openhab.core.library.types. * importuoti org.openhab.model.script.actions. * importuoti java.lang. Styginė taisyklė „Drėgmės monitorius“ kai laikas skamba "0 * * * *?" tada var prevHigh = 0 var highHum = "" Drėgmė?. nariai. forEach [hum | „logDebug“ („drėgmė.rules“, hum.pavadinimas); if (hum.state kaip DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humid.rules", highHum); „postUpdate“ („Dehumidifier_Needed“, „highHum“); pabaiga.

Taisyklės esmė yra Drėgmė? linija. Drėgmė yra mano drėgmės jutiklių grupės pavadinimas; .nariai griebia visus tos grupės daiktus; kiekvienam kartojasi per juos (naudodamas įdomų kvadratinių skliaustų formatą, su kuriuo greičiausiai nežinote). Taisyklių sintaksė yra Xtend darinys, todėl galite perskaityti Xtend dokumentacija jei nerandate prisitaikymo pavyzdžio.

Turbūt to ir nereikės - yra šimtai taisyklių pavyzdžių:

  • Išsamus taisyklių paaiškinimas oficialiame wiki
  • oficialių taisyklių pavyzdžiai wiki puslapis
  • Taisyklių perėmimas į naujas aukštumas
  • Išplėstiniai pavyzdžiai „IngeniousFool.net“

MQTT, skirtas „OpenHAB“ ir daiktų internetui

MQTT yra lengva pranešimų siuntimo sistema, skirta bendravimui tarp mašinų - savotiškas „Twitter“ Arduinos ar Raspberry Pis kalbėtis tarpusavyje (nors, žinoma, tai veikia daug daugiau nei tik tie). Jis greitai populiarėja ir susiranda namus su daiktų interneto įrenginiais, kurių paprastai yra mažai išteklių mikrovaldiklius, kuriems reikalingas patikimas būdas perduoti jutiklio duomenis atgal į jūsų centrą arba priimti nuotolinį komandos. Būtent tai mes ir darysime.

Bet kodėl išradus ratą?

„MQ Telemetry Transport“ buvo išrastas dar 1999 m., Norint sujungti naftos vamzdynus per lėtą palydovą jungtys, specialiai sukurtos siekiant sumažinti akumuliatoriaus naudojimą ir pralaidumą, kartu užtikrinant patikimumą duomenų pateikimas. Bėgant metams projektavimo principai išliko tokie patys, tačiau naudojimo atvejis pasikeitė iš specializuotų įterptųjų sistemų į bendruosius daiktų interneto įrenginius. 2010 m. Protokolas buvo išleistas nemokamai, juo galėjo naudotis ir įgyvendinti visi. Mums patinka nemokama.

Jums gali kilti klausimas, kodėl mes net nerimaujame dėl dar vieno protokolo - juk jau turime HTTP - kuris gali būti naudojamas greitoms žinutėms siųsti tarp visų prie interneto prijungtų sistemų (pvz., „OpenHAB“ ir IFTTT, ypač su naujosiomis) gamintojo kanalas IFTTT dabar prisijungia prie bet ko: pristatome „Maker“ kanaląGalimas IFTTT panaudojimas yra begalinis. Tačiau iki šiol buvo sunku tai susieti su savo aparatinės įrangos projektais. Šiandien viskas pasikeitė. Skaityti daugiau ). Ir tu būsi teisus. Tačiau HTTP serverio apdorojimas yra gana didelis - tiek, kad jūs negalite jo lengvai paleisti įterptą mikrovaldiklį, pavyzdžiui, „Arduino“ (bent jau galite, bet nieko daugiau neturėsite Kitas). Kita vertus, „MQTT“ yra lengvas, todėl žinučių siuntimas visame tinkle neužsikimš vamzdžių ir gali lengvai tilpti į mūsų mažąją „Arduino“ atminties vietą.

Kaip veikia MQTT?

MQTT reikalingas ir serveris (vadinamas „tarpininku“), ir vienas ar keli klientai. Serveris veikia kaip tarpininkas, priimdamas pranešimus ir perduodamas juos bet kuriems suinteresuotiems klientams.

Tęskime toliau „Twitter“ - mašinoms analogija nors. Kaip „Twitter“ vartotojai gali tweet savo pačių beprasmius 140 simbolius, o vartotojai gali „sekti“ kitus vartotojus, kad pamatytų kuruojamą įrašų srautą, MQTT klientai gali užsiprenumeruoti tam tikrą kanalą, norėdami iš ten gauti visus pranešimus, taip pat paskelbti savo pranešimus kanalą. Šis skelbimo ir prenumeratos modelis yra vadinamas pub / sub, priešingai nei tradicija kliento serveris HTTP modelis.

HTTP reikalauja, kad jūs susisiektumėte su kompiuteriu, su kuriuo bendraujate, tarkime „Sveiki“, tada eikite pirmyn ir atgal, kad nuolat pripažintumėte vienas kitą, kol gaunate ar įvedate duomenis. Naudodamasis pub / sub, klientas, atliekantis leidybą, neprivalo žinoti, kurie klientai yra prenumeruojami: jis tiesiog išsiurbia pranešimus, o brokeris juos perskirsto visiems prenumeruojamiems klientams. Bet kuris klientas gali ir skelbti, ir prenumeruoti temas, kaip ir „Twitter“ vartotojas.

Tačiau skirtingai nuo „Twitter“, MQTT yra ne tik 140 simbolių. Tai yra duomenų agnostika, todėl galite siųsti mažus skaičius arba didelius teksto blokus, JSON formato duomenų schemas ar net vaizdus ir dvejetainius failus.

Nėra taip, kad MQTT viskam yra geresnė nei HTTP, bet taip yra labiau tinka, jei aplink namus turėsime daug jutiklių, nuolatos teikiančių pranešimus.

Taip pat svarbu žinoti, kad „OpenHAB“ neveiks kaip jūsų MQTT tarpininkas - mes apie tai kreipsimės vėliau. Tačiau „OpenHAB“ veiks kaip klientas: jis gali ir skelbti jūsų „OpenHAB“ veiklos žurnalą, ir surišti tam tikras kanalus į įrenginius, taigi, pavyzdžiui, galite turėti jungiklį, valdomą MQTT pranešimais tam tikrame įrenginyje kanalą. Tai idealiai tinka sukurti namą, kuriame pilna jutiklių.

Įdiekite „Mosquitto“ ant savo Pi

Nors „OpenHAB“ yra MQTT klientas, todėl galite užsiprenumeruoti temą ir taip pat skelbti pranešimus, jis neveiks kaip serveris. Tam jums reikia naudoti internetinį MQTT brokerį (mokamą arba nemokamą), arba įdiegti nemokamą programinę įrangą į „Pi“. Norėčiau, kad visa tai būtų namuose, todėl aš įdiegiau „Mosquitto“ ant Pi.

Deja, versija, pasiekiama per įprastą apt-get, yra visiškai pasenusi. Pridėkime naujausius šaltinius.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key pridėti 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.

Tai viskas, ką turime padaryti, kad MQTT serveris veiktų ir veiktų vietiniame tinkle. Pagal numatytuosius nustatymus jūsų brokeris veikia 1883 uoste.

Patikrinkite, ar jūsų „MQTT“ serveris veikia naudodamas nemokamą „MQTT.fx“, kuri yra kryžminė platforma. Spustelėkite nustatymų piktogramą, kad sukurtumėte naują profilį, ir įveskite savo „Raspberry Pi“ IP adresą arba vardą. Išsaugokite ir paspauskite prisijungti. Jei mažai šviesoforo viršuje dešinėje tampa žalia, jums gera eiti.

mqttfx profilio pavyzdys

Norėdami atlikti greitą testą, spustelėkite skirtuką „užsiprenumeruoti“ ir įveskite „inTopic“ į teksto lauką, tada paspauskite Prenumeruoti mygtuką. Dabar esate užsiprenumeravę gauti pranešimus tema, pavadinta „inTopic“, nors joje bus rodoma 0 pranešimų. Grįžkite į paskelbimo skirtuką, įveskite „inTopic“ į mažą laukelį, o trumpą pranešimą - į didelį žemiau esantį teksto lauką. Pataikė Paskelbti keletą kartų ir žiūrėkite atgal į prenumeruoti skirtuką. Turėtumėte pamatyti keletą pranešimų, pasirodžiusių ta tema.

„inTopic“ MQTT testas

Prieš įtraukdami keletą realių jutiklių į savo tinklą, turime sužinoti apie temų lygius, kurie įgalina mus struktūrizuoti ir filtruoti MQTT tinklą. Temų pavadinimai yra jautrūs didžiosiomis ir mažosiomis raidėmis, neturėtų prasidėti simboliu $, jame neturėtų būti tarpo arba simbolių, kurie nėra ASCII - iš tikrųjų standartinė kintamųjų pavadinimų programavimo praktika.

„/ Separator“ nurodo temos lygį, kuris yra hierarchinis, pavyzdžiui, visi šie galiojantys temos lygiai yra šie.

inTopic / smallSubdivision / evenSmallerSubdivision. „myHome“ / „livingRoom“ / temperatūra. „myHome“ / „livingRoom“ / drėgmė. „myHome“ / virtuvė / temperatūra. „myHome“ / virtuvė / drėgmė

Jau turėtumėte pamatyti, kaip ši medžio struktūra puikiai tinka protingiems namams, kuriuose pilna jutiklių ir prietaisų. Geriausia praktika naudojant kelis jutiklius vienoje patalpoje yra skelbti kiekvieną jutiklio kintamąjį, atsižvelgiant į jo temos lygmenį. išsišakojimą į konkrečiau (kaip aukščiau pateiktuose pavyzdžiuose) - užuot bandę paskelbti kelių tipų jutiklius tuo pačiu kanalą.

Tada klientai gali paskelbti arba užsiprenumeruoti daugybę atskirų temų lygių arba naudoti keletą specialių pakaitos ženklų, kad filtruotųsi iš aukščiau esančio medžio.

+ Pakaitos simbolis pakeičia bet kurį temos lygį. Pavyzdžiui:

„myHome“ / + / temperatūra

prenumeruotų klientą abiem

„myHome“ / „livingRoom“ / temperatūra. „myHome“ / virtuvė / temperatūra

... bet ne drėgmės lygis.

# Yra daugiapakopė pakaitos kortelė, todėl galėtumėte bet ką gauti iš „livingRoom“ jutiklio masyvo naudodami:

„myHome“ / „livingRoom“ / #

Techniškai jūs taip pat galite užsiprenumeruoti pagrindinį lygį #, kuris suteikia jums absoliučiai viską einant per brokerį, bet tai gali būti kaip prilipus ugnies žarną prie veido: truputį pribloškiantis. Pabandykite prisijungti prie viešojo MQTT brokerio iš „HiveMQ“ ir užsiprenumeruoti #. Gavau apie 300 pranešimų per kelias sekundes, kol mano klientas tiesiog sudužo.

MQTT patarimas pradedančiajam: „/myHome/” yra kita tema nei „Mano namai/" - jei įtrauksite brūkšnį pradžioje, sukuriamas tuščias temos lygis, kuris, nors ir techniškai pagrįstas, nerekomenduojamas, nes jis gali būti klaidinantis.

Dabar, kai žinome teoriją, pasivaikščiokime su „Arduino“, „Ethernet Shield“ ir DHT11 temperatūros ir drėgmės jutikliu - tikriausiai tokį turite savo pradiniame rinkinyje, bet jei ne, tiesiog iškeiskite aplinkos jutiklį į judesio jutiklį (ar net mygtuką).

MQTT publikavimas iš „Arduino“ su eterneto jungtimi

Jei turite hibridinį „Arduino“ įrenginį, kuriame yra įmontuotas „Wi-Fi“ ar „Ethernet“, tai taip pat turėtų veikti. Galiausiai norėsime geresnio / pigesnio bendravimo būdo, kai tinklo ryšį reikia naudoti kiekviename kambaryje, tačiau tai padeda išmokti pagrindų.

Pradėkite atsisiųsdami „Github“ pubsclient biblioteka. Jei naudojote mygtuką „Atsisiųsti kaip ZIP“, struktūra šiek tiek neteisinga. Išpakuokite, pervardykite aplanką į teisingą pubsklientas, tada išimkite du failus iš src aplanką ir perkelkite juos vienu lygiu aukštyn iki atsisiųsto aplanko šaknies. Tada perkelkite visą aplanką į savo Arduino / bibliotekos katalogą.

Štai mano pavyzdžio kodas, kurį galite pritaikyti: DHT11 signalo išvestis yra 7 kaištyje. Pakeiskite „Pi“ serverio IP adresą šioje eilutėje:

klientas.setServeris („192.168.1.99“, 1883 m.);

Deja, negalime naudoti to draugiško vardo („OpenHAB.local“ mano atveju) kadangi TCP / IP krūva Arduino mieste yra labai paprasta, o Bonjour pavadinimo kodo pridėjimas būtų daug atminties, kurios nenorime eikvoti. Norėdami pakeisti temas, kuriomis perduodami jutiklių duomenys, slinkite žemyn iki šių eilučių:

char buferis [10]; dtostrf (t, 0, 0, buferis); klientas.paskelbti („openhab / himitsu / temperatuur“, buferis); dtostrf (h, 0, 0, buferis); klientas.paskelbti („openhab / himitsu / drėgmė“, buferis);

Į kodą taip pat įeina komandos kanalo prenumerata. Raskite ir sureguliuokite šią eilutę:

klientas.prenumeruoti („openhab / himitsu / command“);

Apžiūrėkite ten esantį kodą ir pamatysite, kad lengvai galėtumėte valdyti šviesos diodą ar relę, pavyzdžiui, siųsdami komandas į konkrečius kanalus. Kodo pavyzdyje jis tiesiog siunčia pranešimą atgal, patvirtindamas komandos gavimą.

Įkelkite savo kodą, prijunkite „Arduino“ prie tinklo ir naudodamiesi MQTT.fx užsiprenumeruokite vieną iš jų # arba openhab / himitsu / # (ar ką jūs pakeitėte kambario pavadinimą į, bet nepamirškite jo pabaigoje įrašyti #). Gana greitai turėtumėte pamatyti pranešimus; ir jei į komandų temą siųsite ĮJUNGTI arba IŠJUNGTI, pamatysite, kad grąžinimai taip pat grįš.

mqtt arduino žinutės grįžta

MQTT įrišimas „OpenHAB“

Paskutinis lygties žingsnis yra tai pajungti į „OpenHAB“. Tam, be abejo, mums reikia įpareigojimo.

sudo apt-get install openhab-addon-binding-mqtt. sudo chown -hR openhab: openhab / usr / share / openhab

Ir redaguokite konfigūracijos failą, kad įgalintumėte įrišimą.

mqtt: broker.url = tcp: // localhost: 1883 m. mqtt: broker.clientId = openhab

Iš naujo paleiskite „OpenHAB“

„sudo“ paslaugos „openhab“ paleidimas iš naujo

Tada pridėkime elementą ar du:

/ * MQTT jutikliai * / Skaičius Himitsu_Temp "Himitsu temperatūra [% .1f ° C]"(„Himitsu“, temperatūra) {mqtt = " („Himitsu“, „Drėgmė“) {mqtt = "

Dabar jūs turėtumėte suprasti formatą; tai tampa a Prekės numeris iš MQTT įrišimo, nurodyta tema. Tai paprastas pavyzdys, jūs galite kreiptis į wiki puslapį, kur jis yra gali tapti daug sudėtingesnis.

Sveikiname, dabar jūs turite pigios „Arduino“ pagrindu sukurtos jutiklių masyvo pagrindą. Ateityje mes tai dar kartą peržiūrėsime ir įleisime arduiniečius į jų pačių visiškai atskirą radijo dažnių tinklą. Aš taip pat sukūriau identišką versiją skirtas „Wizwiki 7500“ lentoms jei atsitiks vienas iš tų.

Patvarumas ir grafikų duomenys

Iki šiol tikriausiai esate sukūrę daugybę jutiklių, nesvarbu, ar tai „Z-Wave“, ar „Arduinos“, valdantys MQTT - taigi jūs bet kuriuo metu galite peržiūrėti dabartinę šių jutiklių būseną, o jūs taip pat turėtumėte reaguoti į jų vertę taisykles. Bet įdomus dalykas, susijęs su jutiklių vertėmis, yra tai, kad laikui bėgant jie keičiasi: štai kur atkaklumas ir grafikai. Patvarumas „OpenHAB“ reiškia duomenų išsaugojimą laikui bėgant. Leiskite eiti į priekį ir sukonfigūruokite RRD4J („Java“ apvalioji Robin duomenų bazė), taip vadinamą todėl, kad duomenys išsaugomi apvaliu robinu - senesni duomenys yra išmetami, kad būtų galima suspausti duomenų bazės dydį.

Įdiekite „rrd4j“ paketus šiomis komandomis.

sudo apt-get install openhab-addon-persistent-rrd4j. sudo chown -hR openhab: openhab / usr / share / openhab. 

Tada sukurkite naują failą pavadinimu rrd4j.persist viduje konors konfigūracijos / atkaklumas aplankas. Įklijuokite taip:

Strategijos {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" „everyDay“: „0 0 0 * *?“ numatytasis = everyChange. } Elementai {// išlieka viskas, kai reikšmė atnaujinama, tik numatytąją, ir atkurkite juos iš duomenų bazės paleisdami *: strategija = everyChange, restOnStartup // toliau mes apibrėžiame specialias „everyHour“ strategijas bet kuriai temperatūros grupei ir kiekvieną minutę drėgnumo temperatūrai *: strategija = everyHour Humidity *: strategija = everyMinute // taip pat galite čia pridėti konkrečių elementų, tokių kaip // Bedroom_Humidity, JamesInOffice: strategija = kiekviena minutė. }

Pirmoje šio failo dalyje mes apibrėžiame strategijas, kurios reiškia tik pavadinimo suteikimą CRON išraiškai. Tai yra tas pats, ką mes jau darėme su „My“. „OpenHAB“, tačiau šį kartą mes sukursime keletą naujų strategijų, kuriomis galėsime naudotis kiekvieną dieną, kiekvieną valandą ir kiekvieną minutę. Aš jų dar nenaudojau, bet ateityje galbūt būsiu.

Antroje failo pusėje mes nurodome rr4dj, kurias duomenų vertes reikia išsaugoti. Kaip numatytuosius nustatymus, mes ketiname išsaugoti viską kaskart, kai jis atnaujinamas, tačiau aš taip pat nurodiau tam tikras laiko pagrįstas strategijas konkretiems jutikliams. Temperatūra manęs nelabai jaudina, todėl nusprendžiau taupyti tik kiekvieną valandą, tačiau drėgmė man kelia didelį rūpestį, todėl noriu pamatyti, kaip ji keičiasi kiekvieną minutę. Jei yra kitų duomenų, kuriuos konkrečiai norite išsaugoti nustatytu laiku, pridėkite juos čia arba koreguokite, jei reikia.

Pastaba: jei norite grafikuoti ir duomenis, BŪTINATE juos saugoti bent kartą per minutę. Nesvarbu, ar jūsų jutiklio duomenys netgi greitai atnaujinami, jums tiesiog reikia pasakyti rr4dj, kad jis būtų saugomas kartą per minutę.

Tai apibrėžę, turėtumėte pradėti matyti derinimo išvestį, pasakojančią, kad vertės yra saugomos.

rrd4j saugoti duomenis

Toliau padarykime gražius visų šių duomenų grafikus. Tai labai lengva. Norėdami sudaryti atskiro jutiklio schemą, į savo svetainės žemėlapį pridėkite:

Diagramos elementas = Miegamojo_ drėgmės laikotarpis = h

Tai tiesiog viskas, ko jums reikia. Galiojančios laikotarpio vertės yra h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y; turėtų būti akivaizdu, ką tai reiškia. Jei nenurodyta, visos dienos duomenų numatytasis reikšmė yra D.

Norėdami sukurti diagramą su keliais elementais, paprasčiausiai nubrėžkite grupės pavadinimą:

Diagramos elementas = Drėgmės periodas = h
diagrama

Taip pat gali būti įdomu žinoti, kad šią schemą galite naudoti kur nors kitur; jis sukuria vaizdą naudodamas šį URL: http://YOUROPENHABURL: 8080 / diagrama? grupės = drėgmė ir periodas = h

Kaip yra Tavo Ateina „OpenHAB“ sistema?

Tai yra šita vadovo dalis, tačiau nesitikėkite, kad tai bus paskutinis dalykas, kurį išgirdote iš mūsų apie „OpenHAB“. Tikimės, kad šis ir pradedančiojo vadovas suteikė tvirtą pagrindą kurti savo visą „OpenHAB“ sistemą, tačiau tai procesas, kuris niekada nebūna visiškai baigtas.

Laimei, „OpenHAB“ gali būti nuo kelių įrenginių iki šimtų, pradedant nuo paprastų taisyklių sudėtingumo ir baigiant namų automatizavimu. Tai kaip jūsų sistema tinka? Kokius įrenginius pasirinkote? Koks kitas didelis projektas, kurio ketini imtis?

Pakalbėkime komentaruose - ir, jei jums šis vadovas buvo naudingas, spustelėkite tuos bendrinimo mygtukus, kad papasakotumėte savo draugams, kaip jie taip pat gali nustatyti savo „OpenHAB“ sistemą.

Jamesas yra dirbtinio intelekto bakalauras ir yra CompTIA A + bei Network + sertifikuotas. Jis yra pagrindinis „MakeUseOf“ kūrėjas ir laisvalaikį praleidžia žaisdamas VR dažasvydį ir stalo žaidimus. Nuo mažens jis statė kompiuterius.