„OpenHAB“ pradedančiųjų vadovas 2 dalis: „ZWave“, MQTT, taisyklės ir diagramos

„OpenHAB“ pradedančiųjų vadovas 2 dalis: „ZWave“, MQTT, taisyklės ir diagramos

Nemokama ne visada reiškia „ne taip gerai, kaip mokama“, ir „OpenHAB“ nėra išimtis. Atvirojo kodo namų automatizavimo programinė įranga gerokai 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 varginanti.





Pirmoje vadovo dalyje aš jus supažindinau „OpenHAB“ diegimas „Raspberry Pi“ , pristatė pagrindines „OpenHAB“ sąvokas ir parodė, kaip į sistemą įtraukti pirmuosius elementus. Šiandien mes eisime toliau:





  • Pridedami „ZWave“ įrenginiai
  • Pridedamas „Harmony Ultimate“ valdiklis
  • Pristatome taisykles
  • Pristatome „MQTT“ ir įdiegiame „MQTT“ tarpininką „Pi“ su jutikliais „Arduino“
  • Duomenų įrašymas ir grafikas

Įvadas į „Z-Wave“

„Z-Wave“ daugelį metų buvo pagrindinis namų automatizavimo protokolas: jis yra patikimas, plačiai išplėtotas ir veikia daug ilgesniame diapazone nei bet kurie kiti išmaniųjų namų produktai. Jums yra šimtai „Z-Wave“ jutiklių, atliekančių įvairias užduotis. „OpenHAB“ gali dirbti su „Z-Wave“, tačiau tai yra varginantis darbas, o patikimumas nėra garantuojamas.



Jei ketinate įsigyti namą, pilną „Z-Wave“ jutiklių, skirtų naudoti su „OpenHAB“, raginu dar kartą apsvarstyti. Tai gali jums puikiai pasiteisinti, arba gali būti kamuojama mažų, bet nuolatinių problemų. Bent jau nepirkite namų, pilnų jutiklių, kol neturėjote galimybės išbandyti kelių. Vienintelė priežastis pasirinkti „Z-Wave“ yra ta, kad jei nesate 100% nusiteikę „OpenHAB“ ir norėtumėte palikti savo galimybes ateityje: pavyzdžiui, „Z-Wave“ veikia su „Samsung SmartThings“ centru, taip pat su „Z-Wave“ specifiniais centrais pvz., „Homeseer“, ir daugybė kitų programinės įrangos parinkčių, tokių kaip domoticz .

Nors „OpenHAB“ apima „Z-Wave“ įrišimą, vis tiek turite tai padaryti pirmiausia sukonfigūruokite „Z-Wave“ tinklą , kad „OpenHAB“ galėtų pradėti jo ieškoti duomenų. Jei turite „Rasberry“ valdiklio plokštę, turite tam tikrą programinę įrangą, skirtą tinklui sukonfigūruoti, todėl čia to neaptarsime. Jei įsigijote „Aeotec USB Z-Stick“ valdiklį ar panašų, greičiausiai neturite jokios programinės įrangos, todėl skaitykite toliau.



„Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB“, kad sukurtumėte vartus (įprastas baltas) PIRKITE DABAR AMAZON

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 bandymas į „Z-Wave“, tai yra šiek tiek sudėtingiau.

Pirma, iš aparatūros pusės: kiekvienas valdiklis turi savo suporavimo su įrenginiais būdą (techniškai žinomas kaip „įtraukimo režimas“, kuriame priskirtas mazgo ID). „Aotec Z-Stick“ atveju tai reiškia, kad reikia atjungti jį nuo USB prievado ir vieną kartą paspausti mygtuką, kad įjungtumėte įtraukimo režimą. Tada priartinkite jį prie įrenginio, kurį susiejate, ir paspauskite ir įtraukimo mygtuką (tai taip pat skirsis: mano „Everspring“ lizdas reikalauja, kad mygtukas būtų paspaudžiamas 3 kartus iš eilės, todėl čia pamoka yra perskaityti jūsų įrenginio vadovą) .





„Z-Stick“ trumpai mirksi, kad parodytų sėkmę. Tai sukelia problemų, kai jis vėl prijungiamas prie „Pi“, nes priskiriamas naujas prievadas. Iš naujo paleiskite „Pi“, kad jis būtų grąžintas į standartinį prievadą, jei pastebėsite, kad jis buvo dinamiškai iš naujo priskirtas kitam. Dar geriau: nejunkite jo prie „Pi“, kol iš pradžių neatliksite visų aparatūros porų.

HABmin ir Z-Wave apkaustų montavimas

Kadangi „OpenHAB“ iš tikrųjų nėra „Z-Wave“ konfigūravimo priemonė, mes įdiegsime kitą žiniatinklio valdymo įrankį, vadinamą „HABmin“. Eikite į „HABmin Github“ saugykla atsisiųskite dabartinį leidimą. Atsisiuntę, rasite 2 .jar failus priedų kataloge - jie turėtų būti dedami į atitinkamą „OpenHAB Home“ bendrinimo priedų katalogą (jei taip pat naudojate „Aotec gen5 Z-Stick“, įsitikinkite, kad turite bent 1.8 versiją „Z-Wave“ įrišimo) .





Tada sukurkite naują aplanką žiniatinklio programų kataloge ir pavadinkite jį „habmin“ (mažosios raidės yra svarbios). Nukopijuokite likusius atsisiųstus failus į ten.

Pastaba: taip pat yra a HABmin 2 aktyviai plėtojamas. Diegimas yra beveik tas pats, bet su vienu papildomu .jar priedu. Galbūt verta išbandyti abu, kad pamatytumėte, kuris jums labiau patinka.

Jei to dar nepadarėte, prijunkite valdiklį prie „Pi“. Norėdami rasti tinkamą prievadą, įveskite šį.

ls /dev /tty*

Jūs ieškote bet ko su USB pavadinimu, arba mano konkrečiu atveju „Z-stick“ pasirodė kaip / dev / ttyACM0 (modemas). Gali būti lengviau atlikti komandą vieną kartą prieš prijungiant ir vieną kartą po to, kad galėtumėte pamatyti, kas pasikeis, jei nesate tikri.

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

sudo usermod -a -G dialout openhab

Dabar, kad pradėtumėte veikti, paleiskite „OpenHAB“ iš naujo

„sudo“ paslaugos „openhab“ paleidimas iš naujo

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

„HABMIN“ yra daug ką pamatyti, tačiau mums rūpi tik tai Konfigūracija -> Įrišimai -> Z -Wave -> Įrenginiai skirtuką, kaip matote žemiau. Išplėskite mazgą, kad galėtumėte redaguoti vietą ir pavadinimo etiketę, kad būtų lengviau naudotis.

„Z-Wave“ elementų konfigūravimas

Kiekvienas „Z-Wave“ įrenginys turės konkrečią „OpenHAB“ konfigūraciją. Laimei, dauguma įrenginių jau buvo ištirti, ir jūsų pavyzdžių jau bus. Neatpažintų priskirtų įrenginių konfigūravimas gerokai viršija šio vadovo taikymo sritį, tačiau tarkime, kad jis šiuo metu palaikomas.

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

Perjunkite sausintuvą_Įjunkite sausintuvą {zwave = '3: command = switch_binary'}

Skaičius Dehumidifier_Watts 'Sausintuvo energijos suvartojimas [%.1f W]' {zwave = '3: command = meter'}

Puikus.

Kitas yra „Aeotec Gen5 Multi-Sensor“.

„Aeon Labs“ „Aeotec Z-Wave Gen5“ kelių jutiklių („Z-Wave Plus“) PIRKITE DABAR AMAZON

Šiuo atveju radau konfigūracijos pavyzdį adresu iwasdot.com , o mano multisensor yra 2 mazge.

Skaičius Prieškambario_temperatūra 'Prieškambario temperatūra [%.1f ° C]' (prieškambaris, temperatūra) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Skaičius Prieškambario_ drėgmė 'Prieškambario drėgmė [%.0f %%]' (prieškambaris, drėgmė) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Skaičius Prieškambario šviesumas 'Prieškambario šviesumas [%.0f Lux]' (prieškambaris) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Susisiekite su „Hallway_Motion“ „Prieškambario judesys [%s]“ (prieškambaris, judesys) {zwave = '2: 0: command = sensor_binary, answer_to_basic = true'}

Skaičių jutiklis_1_battery 'Battery [%s %%]' (Motion) {zwave = '2: 0: command = battery'}

Jei jums tai atrodo keistai, grįžkite prie pirmojo pradedančiojo vadovas , konkrečiai Hue privalomų skyrių, kur paaiškinu, kaip pridedami elementai. Tikriausiai kada nors reikės kopijuoti tik tokius įklijavimo pavyzdžius, tačiau, jei turite naują įrenginį, visa privaloma dokumentacija yra išsami komandas .

„Logitech Harmony Binding“

Prieš pereinant prie taisyklių, norėjau pridėti trumpą pastabą apie darbą su „Harmony“ įrišimu. Esu didelis „Harmony“ serijos galutinių nuotolinio valdymo pultų gerbėjas, siekiant supaprastinti namų žiniasklaidos centro patirtį, tačiau jie dažnai yra atskira išmaniųjų namų sistema. Naudojant „OpenHAB“, „Logitech Harmony“ veikla ir visas įrenginio valdymas dabar gali būti jūsų centralizuotos sistemos dalis ir netgi įtraukti į automatikos taisykles.

Pradėkite diegdami tris privalomus failus, kuriuos radote naudodami „apt-cache“ ieškodami „harmonijos“:

Nepamirškite šaukimas įrišimų katalogą dar kartą, kai baigsite:

sudo apt-get įdiegti openhab-addon-action-harmonyhub

sudo apt-get įdiegti openhab-addon-bind-harmonyhub

sudo apt-get įdiegti openhab-addon-io-harmonyhub

sudo chown -hR openhab: openhab/usr/share/openhab

Norėdami sukonfigūruoti susiejimą, atidarykite failą openhab.cfg ir pridėkite naują sekciją taip:

########## Harmonijos nuotolinio valdymo pulteliai ##########

harmonyhub: šeimininkas = 192.168.1.181 arba tavo IP

harmonyhub: vartotojo vardas = your-harmony-email-login

harmonyhub: slaptažodis = Jūsų slaptažodis

IP adresas yra jūsų „Harmony hub“ adresas. Norėdami tai išsiaiškinti, naudokite tinklo skaitytuvą. Taip pat turėsite įvesti prisijungimo duomenis, kuriuos įvedate paleidę standartinę „Harmony“ konfigūravimo priemonę. Viskas. Iš naujo paleidus „Hue“, derinimo žurnalas turėtų staigiai įstrigti.

Tai JSON suformatuotas visų jūsų veiklos, įrenginių ir komandų, kurias galima siųsti, sąrašas. Patartina tai nukopijuoti ateityje. galite dar labiau palengvinti skaitymą su sulankstomais mazgais, įklijuodami į internetinį JSON formatavimo įrankį toks kaip šis .

Be standartinės „PowerOff“ veiklos, kuri yra numatytoji, čia rasite savo apibrėžtą veiklą pagal pavadinimą. Dabar sukurkime paprastą vieno mygtuko valdiklį, kad pradėtumėte veiklą. Pirma, elementų faile pridėkite šią eilutę. Jei norite, pakeiskite grupę ir piktogramą.

/ * Harmony Hub */

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

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

Switch item = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

perkelkite programą į kitą diską

Kvadratiniame skliauste matysite kiekvieną veiklą kartu su etikete. Paprastai galite tiesiogiai nurodyti veiklas, kaip jas pavadinote nuotolinio valdymo pulte, tačiau išimtis, kurią radau, buvo viskas, kur veiklos pavadinime buvo tarpas, pvz., „Ž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 į šį:

Savo veikloje taip pat galite nurodyti veiklą, kaip matysime toliau. Norėdami gauti daugiau informacijos apie tai, perskaitykite „wiki“ puslapį Harmonijos įrišimas .

Bendras taisyklių įvadas

Daugelyje išmaniųjų namų centrų yra sukurtos tam tikros taisyklės, kad galėtumėte automatiškai reaguoti į jutiklių duomenis ir įvykius namuose. Tiesą sakant, norėčiau teigti, kad tikrai protingi namai nėra tie, kuriuos reikia praleisti bendraudami su programomis mobiliesiems - tai galutiniam vartotojui nematomi ir visiškai automatizuoti. Šiuo tikslu „OpenHAB“ taip pat yra galinga taisyklių scenarijų kalba, kurią galite užprogramuoti, gerokai viršijanti daugumos išmaniųjų namų centrų ar IFTTT receptų sudėtingumą.

Programavimo taisyklės skamba blogiau nei yra. Pradėkime nuo paprastų taisyklių, kurios įjungia arba išjungia šviesą, priklausomai nuo buvimo jutiklio:

taisyklė „Biuro šviesa dega, kai Jamesas pristato“

kada

Elementas „JamesInOffice“ pakeistas iš OFF į ON

tada

sendCommand („Office_Hue“, ĮJUNGTA)

galas

taisyklė „Biuro šviesa išjungiama, kai Jamesas išeina“

kada

Elementas „JamesInOffice“ pakeistas iš ON į OFF

tada

sendCommand („Office_Hue“, IŠJUNGTA)

galas

Pirma, mes įvardijame taisyklę - būkite aprašomoji, kad žinotumėte, koks įvykis suaktyvinamas. Toliau mes apibrėžiame savo paprastą taisyklę sakydami kai x yra tiesa, tada daryk y . Pabaiga reiškia tos konkrečios taisyklės uždarymą. Taisyklėse galite naudoti daugybę specialių žodžių, tačiau kol kas mes susiduriame su dviem paprastais sintaksės elementais - Prekė , kuri leidžia jums užklausti kažko būseną; ir sendCommand , kuris daro būtent tai, ką jūs manote. Aš tau sakiau, kad tai lengva.

Tikriausiai nebūtina naudoti poros taisyklių, tačiau, kai mano logika tampa vis sudėtingesnė, bus naudinga jas atskirti, nesvarbu, ar aš įeinu į teritoriją, ar iš jos išeinu - ir gali būti gera idėja kažkur pridėti šviesos jutiklį į lygtį, kad be reikalo neįjungtume šviesų.

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

taisyklė „Pratimai kiekvieną rytą“

kada

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

tada

harmonyStartActivity (pratimas)

galas

Vėlgi, įvardijame taisyklę, nurodome sąlygas, kada ji turėtų būti suaktyvinta, ir veiksmus, kurių reikia imtis. Bet šiuo atveju mes apibrėžiame laiko modelį. Juokingas kodas, kurį matote kabutėse, yra kvarco planavimo priemonės CRON išraiška (formatas šiek tiek skiriasi nuo įprasto „CRONtab“). aš naudojau cronmaker.com kad padėtų sukurti išraišką, tačiau taip pat galite perskaityti formato vadovą [No Longer Available], kur rasite išsamų paaiškinimą ir daugiau pavyzdžių.

„CronMaker.com“ naudojama tinkamai suformatuotai „Cron“ išraiškai generuoti

Mano taisyklės sako tiesiog „kiekvieną rytą, 8 valandą ryto, kiekvieną savaitės dieną, liepkite mano„ Harmony Ultimate “sistemai pradėti mankštos veiklą“, o tai savo ruožtu suaktyvina televizorių, „Xbox“, stiprintuvą ir po minutės paspaudžia mygtuką A. diske diske.

Deja, „OpenHAB“ dar negali atlikti pratimo už mane.

Dar viena taisyklė, kurią noriu jums parodyti, yra kažkas, ką naudoju savo namų drėgmės lygiui valdyti. Turiu vieną sausintuvą, kurį turiu judėti visur, kur reikia, todėl nusprendžiau pažvelgti į visus savo drėgmės jutiklius, rasti aukščiausią ir išsaugoti jį kintamajame. Šiuo metu jis įjungiamas 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.String

taisyklė „Drėgmės monitorius“

kai laikas cron '0 * * * *?'

tada

var prevHigh = 0

var highHum = '

Drėgmė? .Prisimena.už kiekvieną [hum |

logDebug ('drėgmės taisyklės', hum.pavadinimas);

if (hum.state kaip DecimalType> prevHigh) {

prevHigh = hum.state

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

}

Kaip priversti kompiuterį greičiau veikti „Windows 10“

]

logDebug ('drėgmės taisyklės', highHum);

postUpdate (Dehumidifier_Needed, highHum);

galas

Taisyklės esmė yra Drėgmė? .Prisimena.pradėk linija. Drėgmė yra mano drėgmės jutiklių grupės pavadinimas; .nariai griebia visus tos grupės elementus; kiekvienam kartoja juos (su įdomiu kvadratinio skliaustelio formatu, kurio tikriausiai nesate susipažinę). Taisyklių sintaksė yra „Xtend“ išvestinė, todėl galite perskaityti „Xtend“ dokumentacija jei nerandate pritaikymo pavyzdžio.

Tikriausiai to neprireiks - yra šimtai pavyzdinių taisyklių:

„MQTT“, skirta „OpenHAB“ ir daiktų internetui

„MQTT“ yra lengva pranešimų sistema, skirta bendravimui iš mašinos į mašiną-savotiškas „Twitter“, skirtas jūsų „Arduinos“ ar „Raspberry Pis“ kalbėtis tarpusavyje (nors, žinoma, tai veikia daug daugiau nei tik tie). Jis sparčiai populiarėja ir atranda sau namus su daiktų interneto įrenginiais, kurie paprastai yra mažai išteklių turintys mikrovaldikliai, kuriems reikia patikimo būdo perduoti jutiklių duomenis atgal į jūsų centrą arba gauti nuotolines komandas. Būtent tai mes su juo darysime.

Bet kodėl išradinėti ratą?

„MQ Telemetry Transport“ buvo išrastas dar 1999 m., Kad būtų galima prijungti naftotiekius lėtu palydoviniu ryšiu, specialiai sukurtu taip, kad būtų sumažintas akumuliatoriaus naudojimas ir pralaidumas, tuo pačiu užtikrinant patikimą duomenų perdavimą. Bėgant metams projektavimo principai išliko tie patys, tačiau naudojimo atvejis iš specializuotų įterptųjų sistemų perėjo prie bendrų daiktų interneto įrenginių. 2010 m. Protokolas buvo išleistas nemokamai, jį gali naudoti ir įgyvendinti visi. Mums patinka nemokamai.

Jums gali kilti klausimas, kodėl mes net nerimaujame dėl dar vieno protokolo - galų gale mes jau turime HTTP, kuris gali būti naudojamas norint siųsti greitus pranešimus tarp visų prie interneto prijungtų sistemų (pvz., „OpenHAB“ ir „IFTTT“, ypač naudojant naują kūrėjo kanalą) ). Ir tu būtum teisus. Tačiau HTTP serverio apdorojimo pridėtinės išlaidos yra gana didelės - tiek, kad negalite lengvai jų paleisti įterptame mikrovaldiklyje, pvz., „Arduino“ (bent jau galite, bet neturėsite daug atminties kitiems dalykams) ). Kita vertus, „MQTT“ yra lengvas, todėl pranešimų siuntimas aplink jūsų tinklą neužkimš vamzdžių ir lengvai tilps į mūsų mažąją „Arduino“ atminties vietą.

Kaip veikia MQTT?

MQTT reikalingas ir serveris (vadinamas „tarpininku“), ir vienas ar daugiau klientų. Serveris veikia kaip tarpininkas, gauna pranešimus ir retransliuoja juos visiems suinteresuotiems klientams.

Tęskime su „Twitter“, skirtas mašinoms nors analogija. Kaip „Twitter“ vartotojai gali įrašyti savo beprasmiškus 140 simbolių, o vartotojai gali „sekti“ kitus vartotojus, kad pamatytų kuruojamą įrašų srautą, MQTT klientai gali užsiprenumeruoti tam tikrą kanalą, kad gautų visus pranešimus iš ten, ir paskelbti savo žinutes į tą kanalą. Šis paskelbimo ir prenumeratos modelis vadinamas pub / sub , priešingai nei tradicija kliento serveris HTTP modelis.

HTTP reikalauja, kad jūs pasiektumėte aparatą, su kuriuo bendraujate, pvz., „Sveiki“, tada turėsite pirmyn ir atgal nuolat patvirtinti vienas kitą, kol gausite ar įdėsite duomenis. Naudodamas pub/sub, publikuojantis klientas neturi žinoti, kurie klientai yra užsiprenumeravę: jis tiesiog išpumpuoja pranešimus, o brokeris perskirsto juos visiems prenumeruojamiems klientams. Bet kuris klientas gali skelbti ir prenumeruoti temas, kaip ir „Twitter“ vartotojas.

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

Nėra taip, kad MQTT yra geresnis už HTTP viskam - bet tai yra labiau tinka, jei namuose turėsime daug jutiklių, kurie nuolatos praneš.

Taip pat svarbu žinoti, kad „OpenHAB“ neveiks kaip jūsų MQTT tarpininkas - mes tai aptarsime vėliau. Tačiau „OpenHAB“ veiks kaip klientas: jis gali skelbti jūsų „OpenHAB“ veiklos žurnalą, taip pat susieti tam tikrus kanalus su įrenginiais, todėl, pavyzdžiui, galite turėti jungiklį, valdomą MQTT pranešimų tam tikrame kanale. Tai idealiai tinka norint sukurti namą, pilną jutiklių.

Įdiekite „Mosquitto“ savo „Pi“

Nors „OpenHAB“ apima MQTT klientą, kad galėtumėte užsiprenumeruoti temą ir paskelbti pranešimus, jis neveiks kaip serveris. Norėdami tai padaryti, turite naudoti žiniatinklio MQTT brokerį (mokamą arba nemokamą) arba įdiegti nemokamą programinę įrangą „Pi“. Norėčiau visa tai laikyti savo namuose, todėl įdiegiau „Mosquitto“ „Pi“.

Deja, versija, pasiekiama naudojant įprastą apt-get, yra visiškai pasenusi. Vietoj to 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ų tarpininkas veikia 1883 prievade.

Patikrinkite, ar veikia jūsų MQTT serveris, naudodami nemokamą „MQTT.fx“, kuris yra kelių platformų. Spustelėkite nustatymų piktogramą, kad sukurtumėte naują profilį, ir įveskite „Raspberry Pi“ IP adresą arba vardą. Išsaugokite ir paspauskite prisijungti. Jei mažas šviesoforas viršutiniame dešiniajame kampe užsidega žalia spalva, galite eiti.

Norėdami greitai patikrinti, spustelėkite skirtuką „prenumeruoti“ ir įveskite inTopic / į teksto laukelį, tada paspauskite Prenumeruoti mygtuką. Dabar užsiprenumeravote gauti pranešimą tema „TopTic“, nors joje bus rodoma 0 pranešimų. Grįžkite į skirtuką „Skelbti“, įveskite „Tema“ į mažą laukelį ir trumpą pranešimą į didelį teksto laukelį žemiau. Rezultatas Paskelbti kelis kartus ir pažvelkite į prenumeratos skirtuką. Turėtumėte pamatyti keletą pranešimų, pasirodžiusių šioje temoje.

Prieš pridėdami kai kuriuos tikrus jutiklius prie savo tinklo, turime sužinoti apie temų lygius, kurie leidžia mums struktūrizuoti ir filtruoti MQTT tinklą. Temų pavadinimuose skiriamos didžiosios ir mažosios raidės, jos neturėtų prasidėti „$“, jose neturėtų būti tarpo arba ne ASCII simbolių-standartinė kintamųjų pavadinimų programavimo praktika.

/ Separatorius nurodo temos lygį, kuris yra hierarchinis, pvz., Toliau nurodyti visi galiojantys temos lygiai.

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/livingRoom/temperatūra

myHome/livingRoom/drėgmė

myHome/virtuvė/temperatūra

myHome/virtuvė/drėgmė

Jau dabar turėtumėte pamatyti, kaip ši medžio struktūra puikiai tinka protingiems namams, pilniems jutiklių ir prietaisų. Geriausia praktika naudoti su keliais jutikliais viename kambaryje yra paskelbti kiekvieną jutiklio kintamąjį kaip jo temos lygmenį, suskirstant į daugiau specifiškumo (kaip aukščiau pateiktuose pavyzdžiuose), o ne bandyti paskelbti kelių tipų jutiklius tame pačiame kanale .

Tada klientai gali publikuoti arba užsiprenumeruoti bet kokį skaičių atskirų temų lygių arba naudoti specialius pakaitos simbolius, kad filtruotų iš aukščiau esančio medžio.

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

myHome/+/temperatūra

užsakytų klientui abu

myHome/livingRoom/temperatūra

myHome/virtuvė/temperatūra

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

# Yra daugiapakopis pakaitos simbolis, todėl iš „LivingRoom“ jutiklių masyvo galite gauti bet ką, naudodami:

myHome/livingRoom/#

Techniškai taip pat galite užsiprenumeruoti šakninį lygį #, kurį gausite, kad viskas vyktų per tarpininką, tačiau tai gali būti kaip įkišti priešgaisrinę žarną į veidą: šiek tiek pribloškia. Pabandykite prisijungti prie viešojo MQTT tarpininko iš „HiveMQ“ ir užsiprenumeruoti #. Per kelias sekundes gavau apie 300 pranešimų, kol mano klientas tiesiog sudužo.

MQTT patarimas pradedantiesiems: ' /Mano namai/' yra kita tema ' Mano namai/' - įtraukus pasvirąjį brūkšnį pradžioje sukuriamas tuščias temos lygis, kuris, nors ir techniškai pagrįstas, nerekomenduojamas, nes gali būti painus.

Dabar, kai žinome teoriją, pabandykime su „Arduino“, „Ethernet Shield“ ir DHT11 temperatūros ir drėgmės jutikliu - tikriausiai tokį turite savo pradiniame rinkinyje, bet jei ne, tiesiog pakeiskite aplinkos jutiklį judesiui jutiklis (ar net mygtukas).

MQTT leidimas iš „Arduino“ su Ethernet ryšiu

Jei turite hibridinį „Arduino“ suderinamą įrenginį su įmontuotu „Wi-Fi“ arba „Ethernet“, tai taip pat turėtų veikti. Galų gale norėsime geresnio/pigesnio bendravimo būdo, kad kiekviename kambaryje turėsite naudoti tinklo ryšį, tačiau tai padeda išmokti pagrindų.

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

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

client.setServer ('192.168.1.99', 1883);

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

anglies buferis [10];

dtostrf (t, 0, 0, buferis);

client.publish ('openhab/himitsu/temperatūra', buferis);

dtostrf (h, 0, 0, buferis);

client.publish ('openhab/himitsu/drėgmė', buferis);

Kodas taip pat apima komandų kanalo prenumeratą. Raskite ir sureguliuokite šią eilutę:

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

Išnagrinėkite kodą ir pamatysite, kad galite lengvai valdyti šviesos diodą ar relę, pavyzdžiui, siųsdami komandas tam tikriems kanalams. Kodo pavyzdyje jis tiesiog atsiunčia pranešimą, patvirtinantį komandos gavimą.

Įkelkite kodą, prijunkite „Arduino“ prie tinklo ir naudodamiesi „MQTT.fx“ užsiprenumeruokite bet kurį iš jų # arba openhab / himitsu / # (ar į ką pakeisite kambario pavadinimą, bet nepamirškite pabaigoje įrašyti #). Gana greitai turėtumėte pamatyti gaunamus pranešimus; o jei komandų temą siunčiate ĮJUNGTA arba IŠJUNGTA, pamatysite ir patvirtinimus.

„MQTT Binding“, skirtas „OpenHAB“

Paskutinis lygties žingsnis yra prijungti jį prie „OpenHAB“. Tam, žinoma, mums reikia įrišimo.

sudo apt-get install openhab-addon-bind-mqtt

sudo chown -hR openhab: openhab/usr/share/openhab

Ir redaguokite konfigūracijos failą, kad įjungtumėte.

mqtt: broker.url = tcp: // localhost: 1883

mqtt: broker.clientId = openhab

Iš naujo paleiskite „OpenHAB“

„sudo“ paslaugos „openhab“ paleidimas iš naujo

Tada pridėkime vieną ar du elementus:

/ * MQTT jutikliai */

Skaičius Himitsu_Temp 'Himitsu temperatūra [%.1f ° C]' (Himitsu, temperatūra) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Skaičius Himitsu_Humidity'Himitsu Drėgmė [%.1f %%] '(Himitsu, Drėgmė) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Iki šiol turėtumėte suprasti formatą; tai tampa a Skaičius nuo MQTT įrišimo, nurodyta tema. Tai paprastas pavyzdys, galbūt norėsite kreiptis į „wiki“ puslapį, kuriame jis yra gali būti daug sudėtingesnis .

Sveikiname, dabar turite pigios „Arduino“ pagrindu pagamintos jutiklių masyvo pagrindą. Ateityje tai peržiūrėsime ir „Arduino“ įdėsime į visiškai atskirą RF tinklą. Aš taip pat sukūriau identišką versiją „Wizwiki 7500“ lentoms jei atsitiktinai turite vieną iš jų.

Atkaklumo ir grafikų duomenys

Tikriausiai jau esate sukūrę daugybę jutiklių, tiek „Z-Wave“, tiek pasirinktinių „Arduinos“, kuriuose veikia MQTT, kad galėtumėte bet kada peržiūrėti dabartinę šių jutiklių būseną, taip pat turėtumėte reaguoti į jų vertę taisyklėse. Tačiau įdomus dalykas apie jutiklių vertes paprastai yra tas, kad laikui bėgant jie keičiasi: čia atsiranda atkaklumas ir grafikas. Atkaklumas „OpenHAB“ reiškia duomenų išsaugojimą laikui bėgant. Eikime į priekį ir nustatykime RRD4J („Round Robin“ duomenų bazę, skirtą „Java“), taip vadinamą, nes duomenys išsaugomi apvaliu būdu - senesni duomenys atmetami, kad būtų suspaustas duomenų bazės dydis.

Įdiekite „rrd4j“ paketus naudodami šias komandas.

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

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

Strategijos {

everyMinute: '0 * * * *?'

everyHour: '0 0 * * *?'

kiekvieną dieną: '0 0 0 * *?'

numatytasis = everyChange

}

Elementai {

// išlaikyti viską, kai vertė atnaujinama, tik numatytoji, ir paleisti juos iš duomenų bazės paleidžiant

*: strategija = everyChange, restoreOnStartup

// toliau mes apibrėžiame konkrečias strategijas kiekvienai valandai bet kam, kas yra Temperatūros grupėje, ir kiekvieną minutę, kai yra drėgmė

kur rasti parduodamų šunų

Temperatūra*: strategija = everyHour

Drėgmė*: strategija = everyMinute

// Arba čia galite pridėti konkrečių elementų, pvz

// „Bedroom_Humidity“, „JamesInOffice“: strategija = everyMinute

}

Pirmoje šio failo dalyje mes apibrėžiame strategijas, o tai reiškia tik pavadinimo suteikimą CRON išraiškai. Tai tas pats, ką jau padarėme su „My.OpenHAB“, tačiau šį kartą mes kuriame naujas strategijas, kurias galime naudoti kiekvieną dieną, kiekvieną valandą ir kiekvieną minutę. Aš dar jų visų nenaudojau, bet galbūt būsiu ateityje.

Antroje failo pusėje rr4dj nurodome, kurias duomenų reikšmes reikia išsaugoti. Pagal numatytuosius nustatymus viską išsaugosime kiekvieną kartą, kai jie bus atnaujinami, tačiau aš taip pat nurodžiau tam tikras konkrečių jutiklių strategijas. Dėl temperatūros aš pernelyg nesijaudinu, todėl nusprendžiau taupyti tik kiekvieną valandą, tačiau drėgmė man kelia didelį susirūpinimą, 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 dabar arba koreguokite, jei reikia.

Pastaba: jei taip pat norite grafikuoti duomenis, privalote juos saugoti bent kartą per minutę. Nesvarbu, ar jūsų jutiklio duomenys net taip greitai atnaujinami, tiesiog turite pasakyti rr4dj, kad jie saugotų juos kartą per minutę.

Kai tai bus apibrėžta, turėtumėte pradėti matyti tam tikrą derinimo išvestį, nurodančią, kad vertės yra saugomos.

Toliau padarykime gražias visų šių duomenų diagramas. Tai tikrai lengva. Norėdami sudaryti atskiro jutiklio grafiką, prie svetainės žemėlapio pridėkite:

Diagramos elementas = Miegamasis_ Drėgmės laikotarpis = h

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

Norėdami sukurti grafiką su keliais elementais, tiesiog nubrėžkite grupės pavadinimą:

Diagramos elementas = Drėgmės laikotarpis = h

Jums taip pat gali būti įdomu žinoti, kad galite naudoti šią diagramą kitur; jis sukuria vaizdą naudodami šį URL: http: // YOUROPENHABURL: 8080/chart? groups = Drėgmė ir periodas = h

Kaip Tavo Artėja „OpenHAB“ sistema?

Tai šiai vadovo daliai, bet nesitikėkite, kad tai bus paskutinis, kurį iš mūsų išgirsite apie „OpenHAB“. Tikimės, kad šis ir pradedančiųjų vadovas suteikė jums tvirtą pagrindą sukurti savo pilną „OpenHAB“ sistemą, tačiau tai procesas, kuris niekada nėra visiškai baigtas.

Laimei, „OpenHAB“ gali būti nuo kelių įrenginių iki šimtų, nuo paprastų taisyklių sudėtingumo iki galutinio namų automatizavimo - taigi kaip sekasi jūsų sistemai? Kokius prietaisus pasirinkote? Koks yra kitas didelis projektas, kurį ketinate įgyvendinti?

Pakalbėkime komentaruose - ir prašome, jei šis vadovas jums buvo naudingas, spustelėkite tuos bendrinimo mygtukus ir pasakykite savo draugams, kaip ir jie gali nustatyti savo „OpenHAB“ sistemą.

Tikimės, kad jums patiks mūsų rekomenduojami ir aptarti dalykai! MUO turi filialų ir remiamų partnerysčių, todėl mes gauname dalį pajamų iš kai kurių jūsų pirkinių. Tai neturės įtakos jūsų mokamai kainai ir padės mums pasiūlyti geriausias produktų rekomendacijas.

Dalintis Dalintis „Tweet“ Paštu Kalbos animacijos vadovas pradedantiesiems

Kalbos animacija gali būti iššūkis. Jei būsite pasirengę pradėti dialogą prie savo projekto, mes suskaidysime procesą už jus.

Skaityti toliau
Susijusios temos
  • Pasidaryk pats
  • Išmanieji namai
  • Arduino
  • Namų automatika
  • Ilga forma
  • „Longform“ vadovas
Apie autorių Jamesas Bruce'as(Paskelbti 707 straipsniai)

Jamesas turi dirbtinio intelekto bakalauro laipsnį ir yra „CompTIA A+“ ir „Network+“ sertifikuotas. Kai jis nėra užsiėmęs aparatūros apžvalgų redaktoriumi, jam patinka LEGO, VR ir stalo žaidimai. Prieš pradėdamas dirbti „MakeUseOf“, jis buvo apšvietimo technikas, anglų kalbos mokytojas ir duomenų centro inžinierius.

Daugiau iš Jameso Bruce'o

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia