OpenHAB kezdő útmutató 2. rész: ZWave, MQTT, szabályok és diagramok

OpenHAB kezdő útmutató 2. rész: ZWave, MQTT, szabályok és diagramok

Az ingyenes nem mindig azt jelenti, hogy „nem olyan jó, mint a fizetett”, és az OpenHAB sem kivétel. A nyílt forráskódú otthoni automatizálási szoftver messze meghaladja a piacon található bármely más otthoni automatizálási rendszer képességeit - de nem könnyű beállítani. Sőt, kifejezetten frusztráló tud lenni.





Az útmutató 1. részében végigvezettelek az OpenHAB telepítése egy Raspberry Pi -re , bemutatta az OpenHAB alapfogalmait, és megmutatta, hogyan adhatja hozzá első elemeit a rendszerhez. Ma tovább megyünk:





  • ZWave eszközök hozzáadása
  • Harmony Ultimate vezérlő hozzáadása
  • Szabályok bemutatása
  • Bemutatjuk az MQTT -t, és telepítünk egy MQTT -brókert a Pi -re, érzékelőkkel az Arduino -ra
  • Adatok rögzítése és ábrázolása

Bevezetés a Z-Wave-be

A Z-Wave évek óta az uralkodó otthoni automatizálási protokoll: megbízható, széles körben kifejlesztett, és sokkal hosszabb tartományban működik, mint bármely más intelligens otthoni termék. Több száz Z-Wave érzékelő áll rendelkezésére, amelyek sokféle feladatot látnak el. OpenHAB tud dolgozik a Z-Wave-rel, de gondot okoz a beállítása, és a megbízhatóság nem garantált.





Ha egy Z-Wave érzékelőkkel teli ház megvásárlását fontolgatja kifejezetten az OpenHAB-hoz való használathoz, azt javaslom, hogy gondolja át. Lehet, hogy kiválóan működik az Ön számára, vagy apró, de tartós problémákkal küszködik. Legalább ne vásároljon érzékelőkkel teli házat, amíg nem volt lehetősége kipróbálni néhányat. Az egyetlen ok, amiért a Z-Wave választása az, ha nem 100% -ig elégedett az OpenHAB rendszerrel, és a jövőben is nyitva szeretné hagyni a lehetőségeit: a Z-Wave például a Samsung SmartThings hubgal, valamint a Z-Wave specifikus hubokkal működik együtt mint a Homeseer, és számos más szoftveropció, mint pl domoticz .

Bár az OpenHAB tartalmaz Z-Wave kötést, akkor is szüksége van rá először konfigurálja a Z-Wave hálózatot , mielőtt az OpenHAB megkezdheti az adatok lekérdezését. Ha rendelkezik Rasberry vezérlőpanellel, akkor a szoftver konfigurálásával rendelkezik a hálózat konfigurálásával, ezért itt nem foglalkozunk ezzel. Ha Aeotec USB Z-Stick vezérlőt vagy hasonlót vásárolt, akkor valószínűleg nincs benne szoftver, ezért olvassa el.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB átjáró létrehozásához (normál fehér) Vásároljon most az AMAZON -on

Ha már rendelkezik Z-Wave hálózati beállításokkal , csak csatlakoztathatja a vezérlőt a Pi -hez, és elkezdheti konfigurálni a kötést és az elemeket. Ha ez az első próbálkozásod a Z-Wave-be, akkor kicsit bonyolultabb.

Először is, a hardver oldaláról: minden vezérlőnek saját módja van az eszközök párosítására (technikailag „befogadási mód” néven, amelyben egy csomópont -azonosító van hozzárendelve). Az Aotec Z-Stick esetében ez azt jelenti, hogy ki kell húzni az USB-portból, és egyszer kell megnyomni a gombot, hogy bekapcsolási módba helyezze. Ezután vigye közel a párosítani kívánt eszközhöz, és nyomja meg a befogadó gombot is (ez is változhat: az Everspring aljzatom megköveteli, hogy a gombot háromszor egymás után nyomják meg, ezért a lecke az, hogy olvassa el a készülék használati útmutatóját) .





A Z-Stick rövid ideig villog, jelezve a sikert. Ez problémákat okoz, amikor újra csatlakoztatja a Pi -hez, mivel új port van hozzárendelve. Indítsa újra a Pi -t, hogy visszaálljon a normál portra, ha úgy találja, hogy dinamikusan át lett rendelve egy másikhoz. Még jobb: ne csatlakoztassa a Pi -hez, amíg először nem végezte el az összes hardverpárosítást.

A HABmin és a Z-Wave kötések telepítése

Mivel az OpenHAB valójában nem konfigurációs segédprogram a Z-Wave számára, telepítünk egy másik webes kezelőeszközt, amely igen-valami úgynevezett HABmin. Irány a HABmin Github adattár töltse le az aktuális kiadást. Miután kicsomagolta, 2 -et talál .befőttes üveg fájlokat az addons könyvtárban - ezeket az OpenHAB Home megosztás megfelelő addons könyvtárába kell helyezni (ha az Aotec gen5 Z-Stick-et is használja, győződjön meg róla, hogy rendelkezik a Z-Wave kötés legalább 1.8-as verziójával) .





Ezután hozzon létre egy új mappát a webapps könyvtárban, és nevezze el 'habmin' -nak (a kisbetűk fontosak). Másolja oda a többi letöltött fájlt.

Megjegyzés: Van még egy HABmin 2 aktív fejlesztés alatt. A telepítés nagyjából ugyanaz, de egy további .jar kiegészítővel. Érdemes kipróbálni mindkettőt, hogy lássuk, melyiket részesítjük előnyben.

Ha még nem tette meg, csatlakoztassa a vezérlőt a Pi -hez. A megfelelő port megtalálásához írja be a következőt.

ls /dev /tty*

Bármit keres, USB-vel a nevében, vagy az én konkrét esetemben a Z-stick úgy mutatkozott be / dev / ttyACM0 (modem). Könnyebb lehet egyszer végrehajtani a parancsot, mielőtt csatlakoztatná, majd egyszer, hogy lássa, mi változik, ha bizonytalan.

Nyissa meg az OpenHAB konfigurációs fájlt, és módosítsa a Z-Wave szakaszt, mindkét sor megjegyzése nélkül, és adja meg az eszköz tényleges címét. Az utolsó lépés számomra az volt, hogy engedélyeztem az OpenHAB felhasználónak a modem elérését.

sudo usermod -a -G tárcsázás openhab

Most, hogy mindent működésbe hozzon, indítsa újra az OpenHAB -ot

sudo szolgáltatás openhab újraindítása

Remélhetőleg, ha ellenőrzi a hibakeresési naplót, akkor valami ilyesmit fog látni. Gratulálok, most Z-Wave-ről beszélsz. A hibakeresési naplót is eláraszthatják a különböző Z-Wave csomópontok üzenetei. Kezdjük a HABMIN ellenőrzésével, hogy mit talál: http: //openhab.local: 8080/habmin/index.html (az openhab.local lecserélése a Raspberry Pi gazdagépnevére vagy IP -címére).

Sok látnivaló van a HABMIN -ban, de igazán csak a Konfiguráció -> Kötések -> Z -Wave -> Eszközök lapon, mint alább látható. Bontsa ki a csomópontot a hely és a névcímke szerkesztéséhez, hogy könnyebben tájékozódhasson.

Z-Wave elemek konfigurálása

Minden Z-Wave eszköz saját konfigurációval rendelkezik az OpenHAB számára. Szerencsére a legtöbb eszközt már felfedezték, és lesznek példák a tiédre. A felismerhetetlen egyéni eszközök konfigurálása messze túlmutat ezen útmutató keretein, de tegyük fel, hogy egyelőre támogatott.

Először is van egy alapvető Everspring AN158 tápkapcsolóm és mérőm a 3. csomóponton. Egy gyors Google -keresés vezetett egy blogbejegyzéshez a Wetwa.re webhelyen, egy mintaelem konfigurációval. Ezt a következőképpen módosítottam:

Párátlanító kapcsolása_Kapcsolja a 'Párátlanítót' {zwave = '3: command = switch_binary'}

Szám Dehumidifier_Watts 'Párátlanító energiafogyasztása [%.1f W]' {zwave = '3: command = meter'}

Tökéletes.

A következő egy Aeotec Gen5 többérzékelő.

Aeon Labs Aeotec Z-Wave Gen5 többérzékelő (Z-Wave Plus) Vásároljon most az AMAZON -on

Ehhez találtam egy minta konfigurációt a címen iwasdot.com , és a multiszenzorom a 2. csomóponton van.

Szám Hallway_Temperature 'Folyosó hőmérséklete [%.1f ° C]' (folyosó, hőmérséklet) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Szám Folyosó -páratartalom 'Folyosó páratartalma [%.0f %%]' (Előszoba, páratartalom) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Szám Hallway_Luminance 'Folyosó fényessége [%.0f Lux]' (folyosó) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

Kapcsolat a Hallway_Motion 'Hallway Motion [%s]' (Hallway, Motion) {zwave = '2: 0: command = sensor_binary, answer_to_basic = true'}

Számérzékelő_1_battery 'Battery [%s %%]' (Motion) {zwave = '2: 0: command = battery'}

Ha ez a formátum furcsának tűnik számodra, térj vissza az elsőhöz kezdő útmutató , különösen a Hue kötési szakasz, ahol elmagyarázom, hogyan kell hozzáadni az elemeket. Valószínűleg csak ilyen példákat kell másolnia, de ha új eszköze van, a kötelező dokumentáció minden részletét tartalmazza parancsokat .

Logitech Harmony Binding

Mielőtt belevágnánk a szabályokba, szerettem volna egy gyors megjegyzést fűzni a Harmónia kötéssel való munkához. Nagy rajongója vagyok a Harmony végső távvezérlő sorozatnak, amely egyszerűsíti az otthoni médiaközpont élményét, de gyakran külön rendszerként állnak az intelligens otthonon belül. Az OpenHAB segítségével a Logitech Harmony tevékenységek és a teljes eszközvezérlés mostantól a központi rendszer részét képezhetik, és akár az automatizálási szabályokban is szerepelhetnek.

Kezdje azzal, hogy telepíti a három kötési fájlt, amelyeket az apt-cache használatával talál a „harmónia” kereséséhez:

Ne felejtsd el dudálás a kötések könyvtárát, ha végzett:

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

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

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

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

A kötés konfigurálásához nyissa meg az openhab.cfg fájlt, és adjon hozzá egy új szakaszt az alábbiak szerint:

########## HARMÓNIA TÁVIRÁNYÍTÓK ##########

harmonyhub: host = 192.168.1.181 vagy az ip -jét

harmonyhub: felhasználónév = your-harmony-email-login

harmonyhub: jelszó = a jelszavad

Az IP -cím a Harmony -központ címe. Használjon hálózati szkennert ennek megállapításához. Meg kell adnia a bejelentkezési adatait is, amelyeket a szabványos Harmony konfigurációs segédprogram indításakor ad meg. Ez az. A színárnyalat újraindításakor a hibakeresési naplónak hirtelen kitörnie kell a kötésből.

Ez egy JSON formátumú lista az összes elküldhető tevékenységéről, eszközéről és parancsáról. Érdemes ezt másolni későbbi használatra. még könnyebbé teheti az olvasást az összecsukható csomópontokkal, ha beilleszti egy online JSON formázóba mint ez .

Az alapértelmezett alapértelmezett PowerOff tevékenység mellett itt találja a saját meghatározott tevékenységeit név szerint. Most hozzunk létre egy egyszerű, egygombos vezérlőt a tevékenységek elindításához. Először az elemfájlban adja hozzá a következő sort. Változtassa meg a csoportot és az ikont, ha úgy tetszik.

/ * Harmony Hub */

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

Ez egy kétirányú String kötés , amely képes lehívni az aktuális tevékenységet, és parancsot adni az aktuális tevékenységnek valami másnak. Most létrehozhatunk hozzá egy gombot a webhelytérkép fájlban.

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

xbox one magától bekapcsol

A szögletes zárójelben minden tevékenység látható a címkével együtt. Általában közvetlenül hivatkozhat a tevékenységekre, ahogy a távvezérlőn megnevezte őket, de ez alól kivételt találtam, bármit, ahol szóköz van a tevékenység nevében, például a „TV -nézés”. Ebben az esetben a tevékenység azonosítóját kell használnia. Ismét megtalálhatja az azonosítót a JSON hibakeresési kimenetben. Mentse el és frissítse a kezelőfelületet, ehhez hasonlót kell látnia:

A szabályokban hivatkozhat a tevékenységekre is, amint ezt a továbbiakban látni fogjuk. További információért olvassa el a wiki oldalt Harmónia kötés .

Általános bevezetés a szabályokba

A legtöbb intelligens otthoni elosztó tartalmaz bizonyos szabályok létrehozását, így automatikusan reagálhat az érzékelők adataira és az otthoni eseményekre. Valójában azt állítanám, hogy az igazán okos otthon nem olyan, amellyel időt kell töltenie a mobilalkalmazásokkal való interakcióban - ez a végfelhasználó számára láthatatlan és teljesen automatizált. Ebből a célból az OpenHAB tartalmaz egy hatékony szabály -szkriptnyelvet is, amelyet programozhat, messze felülmúlva a legtöbb intelligens otthoni hub vagy IFTTT recept összetettségét.

A programozási szabályok rosszabbul hangzanak, mint amilyenek. Kezdjük egyszerűen egy pár szabálysal, amelyek a jelenlét -érzékelőtől függően be- vagy kikapcsolják a fényt:

szabály: „Iroda világít, amikor James jelen van”

amikor

A JamesInOffice tétel OFF -ról ON -ra vált

azután

sendCommand (Office_Hue, BE)

vége

„Az irodai lámpa kikapcsol, amikor James elhagyja”

amikor

A JamesInOffice elem ON -ról OFF -ra vált

azután

sendCommand (Office_Hue, KI)

vége

Először nevezzük el a szabályt - legyen leíró, hogy tudd, melyik esemény indul. Ezután az egyszerű szabályunkat úgy határozzuk meg, hogy ha x igaz, akkor y . A vége az adott szabály bezárását jelenti. Számos speciális szót használhat a szabályokban, de most két egyszerű szintaxisrészlettel foglalkozunk - Tétel , amely lehetővé teszi valaminek az állapotának lekérdezését; és sendCommand , amely pontosan azt teszi, amit gondol. Mondtam, hogy ez könnyű.

Valószínűleg felesleges pár szabályt használni, de ahogy a logikám egyre bonyolultabbá válik, előnyös lesz, ha külön választjuk el őket attól, hogy belépek -e a területre, vagy elhagyom azt - és jó ötlet lehet valahol fényérzékelőt hozzáadni az egyenletbe, így nem kapcsoljuk fel szükségtelenül a lámpákat.

Nézzünk egy másik példát ütemezett szabály létrehozásához.

szabály 'Gyakorolj minden reggel'

amikor

Idő cron '0 0 8 1/1 *? *'

azután

harmonyStartActivity („Gyakorlat”)

vége

Ismét megnevezzük a szabályt, az állapotokat, amikor aktiválódnia kell, és a teendőket. De ebben az esetben definiálunk egy időmintát. Az idézőjelekben látható vicces kód a Quartz Scheduler CRON kifejezése (a formátum kissé eltér a szokásos CRONtab -tól). használtam cronmaker.com hogy segítsen a kifejezés létrehozásában, de elolvashatja a formai útmutatót is [No Longer Available], ahol részletes magyarázatot és további példákat talál.

A CronMaker.com generálta a megfelelően formázott Cron kifejezést

A szabályaim egyszerűen azt mondják, hogy „minden reggel 8 óra, a hét minden napján, mondd meg a Harmony Ultimate rendszernek, hogy kezdje meg a gyakorlatot”, ami aktiválja a TV -t, az Xbox -ot, az erősítőt, és egy perc múlva megnyomja az A gombot az indításhoz a lemezt a meghajtóban.

Sajnos az OpenHAB még nem tudja elvégezni a gyakorlatot helyettem.

Még egy szabályt szeretnék mutatni, amit az otthonom páratartalmának szabályozására használok. Egyetlen párátlanítóm van, és mindenhol mozognom kell, ahol szükséges, ezért úgy döntöttem, hogy megvizsgálom az összes páratartalom -érzékelőmet, megtalálom a legmagasabbat, és eltárolom egy változóban. Jelenleg minden percben aktiválódik, de könnyen csökkenthető. Először nézd meg:

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

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

import java.lang.String

„Nedvességfigyelő” szabály

amikor az idő cron '0 * * * *?'

azután

var prevHigh = 0

var highHum = '

Páratartalom? .Tagok.forEach [hum |

logDebug ('páratartalom.szabályok', hum.név);

if (hum.state as DecimalType> prevHigh) {

prevHigh = hum.állapot

highHum = hum.név + ':' + hum.állapot + '%'

}

hogyan kell játszani a minecraftot egy barátommal

]

logDebug ('páratartalom.szabályok', highHum);

postUpdate (Párátlanító_szükséges, highHum);

vége

A szabály lényege a Páratartalom? .Tagok.előre vonal. A páratartalom a nedvességérzékelőim csoportneve; .tagok megragadja a csoport összes elemét; az egyes iterál felettük (egy furcsa szögletes zárójeles formátummal, amelyet valószínűleg nem ismer). A szabályok szintaxisa az Xtend származéka, így elolvashatja a Xtend dokumentáció ha nem talál példát az alkalmazkodásra.

Valószínűleg nem is kell - több száz példaszabály létezik:

MQTT az OpenHAB és a dolgok internete számára

Az MQTT egy könnyű üzenetküldő rendszer a gépek közötti kommunikációhoz-egyfajta Twitter az Arduinos vagy a Málna Pis számára, hogy beszéljenek egymással (bár természetesen sokkal többel is működik, mint ezek). Rohamosan népszerűvé válik, és otthont talál magának a dolgok internete eszközeivel, amelyek tipikusan alacsony erőforrású mikrovezérlők, és amelyek megbízható módot igényelnek az érzékelőadatok visszajuttatására a hubra vagy távoli parancsok fogadására. Pontosan ezt fogjuk csinálni vele.

De miért kell feltalálni a kereket?

Az MQ Telemetry Transport -t még 1999 -ben találták ki, hogy lassú műholdas kapcsolatokon keresztül csatlakoztassák az olajvezetékeket, amelyeket kifejezetten az akkumulátorhasználat és a sávszélesség minimalizálására terveztek, miközben továbbra is megbízható adatátvitelt biztosítanak. Az évek során a tervezési elvek változatlanok maradtak, de a használati eset a speciális beágyazott rendszerekről az általános tárgyak internetes eszközeire vált. 2010 -ben a protokollt jogdíjmentesen adták ki, bárki használhatja és végrehajthatja. Ingyen szeretünk.

Elgondolkodhat azon, miért bajlódunk még egy másik protokollal - végülis már megvan a HTTP -, amellyel gyors üzeneteket lehet küldeni mindenféle, internethez kapcsolódó rendszer (például OpenHAB és IFTTT) között, különösen az új készítőcsatornával ). És igazad lenne. A HTTP szerver feldolgozási költségei azonban meglehetősen nagyok - olyannyira, hogy nem lehet könnyen futtatni egy olyan beágyazott mikrovezérlőn, mint az Arduino (legalábbis megteheti, de nem marad sok memóriája másra) ). Az MQTT viszont könnyű, így az üzenetek küldése a hálózat körül nem tömíti el a csöveket, és könnyen elfér a kis Arduino memóriaterületünkön.

Hogyan működik az MQTT?

Az MQTT kiszolgálót (brókernek nevezett) és egy vagy több ügyfelet is igényel. A szerver közvetítőként működik, üzeneteket fogad és újra sugározza az érdeklődő ügyfeleknek.

Folytassuk a Twitter-for-gépek analógia mégis. Ahogy a Twitter -felhasználók tweetelhetik saját értelmetlen 140 karakterüket, és a felhasználók „követhetik” a többi felhasználót, hogy lássák a bejegyzések kurátorait, az MQTT -ügyfelek feliratkozhatnak egy adott csatornára, hogy megkapják az összes üzenetet onnan, valamint közzétehessék saját üzeneteiket. arra a csatornára. Erre a közzétételi és feliratkozási mintára hivatkozunk kocsma / al , szemben a hagyományokkal kliens/szerver HTTP modellje.

A HTTP megköveteli, hogy nyújtsa a kapcsolatot azzal a géppel, amellyel kommunikál, mondjuk Hello, majd oda -vissza folyamatosan nyugtázza egymást, miközben adatokat kap. A pub/sub esetében a publikálást végző ügyfélnek nem kell tudnia, hogy mely ügyfelek vannak előfizetve: csak kiszivattyúzza az üzeneteket, és a bróker újra elosztja azokat az előfizetett ügyfeleknek. Bármely ügyfél publikálhat és feliratkozhat a témákra, akár egy Twitter -felhasználó.

A Twittertől eltérően azonban az MQTT nem korlátozódik 140 karakterre. Az adatok agnosztikusak, így kis számokat vagy nagy szövegtömböket, JSON-formátumú datagramokat vagy akár képeket és bináris fájlokat küldhet.

Nem az, hogy az MQTT mindenhol jobb a HTTP -nél - de ez van sokkal alkalmasabb, ha sok érzékelőnk lesz a ház körül, folyamatosan jelentve.

Fontos tudni azt is, hogy az OpenHAB nem az Ön MQTT -közvetítőjeként fog működni - ezt a részt később tárgyaljuk. Az OpenHAB azonban ügyfélként fog működni: közzéteheti az OpenHAB tevékenységnaplóját, valamint bizonyos csatornákat eszközhöz köthet, így például rendelkezhet olyan kapcsolóval, amelyet egy adott csatornán MQTT üzenetek vezérelnek. Ez ideális egy érzékelőkkel teli ház létrehozásához.

Telepítse a Mosquitto -t a Pi -re

Bár az OpenHAB tartalmaz egy MQTT ügyfelet, így előfizethet egy témára, és üzeneteket is közzétehet, ez nem fog kiszolgálóként működni. Ehhez vagy használnia kell egy webalapú MQTT brókert (fizetős vagy ingyenes), vagy telepítenie kell az ingyenes szoftvert a Pi -re. Szeretném mindezt házon belül tartani, ezért telepítettem a Mosquitto-t a Pi-re.

Sajnos a szokásos apt-get segítségével elérhető verzió teljesen elavult. Helyette tegyük hozzá a legújabb forrásokat.

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

sudo apt-key add 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

Ennyit kell tennünk ahhoz, hogy az MQTT szerver működőképes legyen a helyi hálózaton. A közvetítő alapértelmezés szerint az 1883 -as porton fut.

Ellenőrizze, hogy működik-e az MQTT szervere az ingyenes MQTT.fx segítségével, amely több platformra kiterjed. Kattintson a beállítások ikonra új profil létrehozásához, majd írja be a Raspberry Pi IP -címét vagy nevét. Mentse, majd nyomja meg a Csatlakozás gombot. Ha a jobb felső sarokban lévő kis jelzőlámpa zöldre vált, akkor indulhat.

A gyors teszteléshez kattintson a 'feliratkozás' fülre, és írja be inTopic / a szövegmezőbe, majd nyomja meg a gombot Iratkozz fel gomb. Most feliratkozott, hogy üzeneteket kapjon az inTopic nevű témában, bár 0 üzenetet fog látni. Térjen vissza a közzététel lapra, írja be a Témát a kis mezőbe, és egy rövid üzenetet az alábbi nagy szövegmezőbe. Találat Közzététel párszor, és nézzen vissza a feliratkozás fülre. Látnia kell, hogy néhány üzenet megjelent a témában.

Mielőtt néhány tényleges érzékelőt hozzáadnánk a hálózatunkhoz, meg kell ismernünk a témakör szintjeit, amelyek lehetővé teszik az MQTT hálózat felépítését és szűrését. A témanevekben a kis- és nagybetűket kell megkülönböztetni, nem kezdődhet dollárral, nem tartalmazhatnak szóközt vagy nem ASCII karaktereket.

A / elválasztó jelzi a témakör szintjét, amely hierarchikus, például az alábbiak mindegyike érvényes témaszint.

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/livingRoom/hőmérséklet

myHome/livingRoom/páratartalom

myHome/konyha/hőmérséklet

myHome/konyha/páratartalom

Már látnod kell, hogyan tökéletes ez a fa szerkezet egy intelligens otthonhoz, tele érzékelőkkel és eszközökkel. A legjobb gyakorlat több érzékelővel történő használathoz egyetlen szobában az, ha minden érzékelőváltozót a saját témakörének megfelelően tesz közzé - elágazva a specifikusabbakhoz (mint a fenti példákban) - ahelyett, hogy többféle érzékelőt próbálna közzétenni ugyanazon a csatornán .

Az ügyfelek ezután tetszőleges számú egyedi témakört közzétehetnek vagy feliratkozhatnak, vagy speciális helyettesítő karakterek segítségével szűrhetnek a fa magasabb szintjéről.

A + helyettesítő karakter helyettesíthet bármely témakört. Például:

myHome/+/hőmérséklet

előfizetné az ügyfelet mindkettőre

myHome/livingRoom/hőmérséklet

myHome/konyha/hőmérséklet

... de nem a páratartalom.

A # egy többszintű helyettesítő karakter, így bármit lekérhet a livingRoom érzékelő tömbből:

myHome/livingRoom/#

Technikailag feliratkozhat a gyökérszintre is #, amellyel abszolút mindent eljuttathat a brókeren keresztül, de ez olyan lehet, mintha tűzoltó tömlőt ragadna az arcába: kissé lehengerlő. Próbáljon csatlakozni a HiveMQ nyilvános MQTT közvetítőjéhez, és iratkozzon fel a #-ra. Körülbelül 300 üzenetet kaptam néhány másodpercen belül, mielőtt az ügyfelem összeomlott.

MQTT kezdő tipp: ' /az otthonom/' más téma mint ' az otthonom/' - a kezdőjel perjelezéssel egy üres témaszintet hoz létre, amely ugyan műszakilag érvényes, de nem ajánlott, mert zavaró lehet.

Most, hogy ismerjük az elméletet, próbálkozzunk egy Arduino, Ethernet Shield, valamint egy DHT11 hőmérséklet- és páratartalom -érzékelővel - valószínűleg van ilyen az indítókészletben, de ha nem, akkor cserélje ki a környezeti érzékelőt egy mozgásra érzékelő (vagy akár gomb).

Az MQTT közzététele Arduino -ból Ethernet -kapcsolattal

Ha van egy hibrid Arduino-kompatibilis eszköze, beépített Wi-Fi-vel vagy Ethernet-rel, akkor annak is működnie kell. Végül jobb/olcsóbb kommunikációs módszert szeretnénk, ha minden szobában hálózati kapcsolatot kell használni, de ez az alapok elsajátítását szolgálja.

Kezdje a letöltéssel pubsubclient könyvtár a Github -tól . Ha a „Letöltés ZIP -ként” gombot használta, a szerkezet kissé rossz. Csomagolja ki, nevezze át a mappát csak pubsubclient , majd vegye ki a két fájlt a src mappát, és helyezze őket egy szinttel feljebb a letöltött mappa gyökerébe. Ezután helyezze át az egész mappát a mappájába Arduino/könyvtárak Könyvtár.

Itt van a mintakódom, amelyet adaptálhat : a DHT11 jelkimenet a 7. tűn van. Módosítsa a Pi kiszolgáló IP -címét a következő sorban:

client.setServer ('192.168.1.99', 1883);

Sajnos nem használhatjuk barátságos nevét (OpenHAB.local az én esetemben) mivel a TCP/IP verem az Arduino -n nagyon leegyszerűsített, és a kód hozzáadása a Bonjour elnevezéshez sok memóriát igényelne, amit nem szeretnénk vesztegetni. Ha módosítani szeretné az érzékelőadatok sugárzásának témáit, görgessen le az alábbi sorokhoz:

szénpuffer [10];

dtostrf (t, 0, 0, puffer);

client.publish ('openhab/himitsu/hőmérséklet', puffer);

dtostrf (h, 0, 0, puffer);

client.publish ('openhab/himitsu/páratartalom', puffer);

A kód tartalmazza a parancscsatorna előfizetését is. Keresse meg és módosítsa a következő sort:

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

Vizsgálja meg a kódot a környéken, és látni fogja, hogy könnyen irányíthat egy LED -et vagy relét, például parancsokat küldve bizonyos csatornákra. A példakódban egyszerűen üzenetet küld vissza a parancs kézhezvételéről.

Töltse fel kódját, csatlakoztassa Arduino -ját a hálózathoz, és az MQTT.fx használatával iratkozzon fel bármelyikre # vagy openhab / himitsu / # (vagy bármire módosította a szoba nevét, de ne felejtse el beírni a # karaktert a végén). Hamarosan látnia kell a beérkező üzeneteket; és ha be- vagy kikapcsolja a parancs témát, akkor a visszaigazolások is visszatérnek.

MQTT kötés az OpenHAB számára

Az egyenlet utolsó lépése az OpenHAB -ra való csatlakoztatása. Ehhez természetesen kötésre van szükségünk.

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

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

És szerkessze a konfigurációs fájlt a kötés engedélyezéséhez.

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

mqtt: broker.clientId = openhab

Indítsa újra az OpenHAB -ot

sudo szolgáltatás openhab újraindítása

Akkor adjunk hozzá egy -két elemet:

/ * MQTT érzékelők */

Szám Himitsu_Temp 'Himitsu hőmérséklet [%.1f ° C]' (Himitsu, hőmérséklet) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

Szám Himitsu_Humidity'Himitsu Nedvesség [%.1f %%] '(Himitsu, Páratartalom) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Mostanra meg kell értenie a formátumot; kezd a Szám elem az MQTT kötésből, egy meghatározott témában. Ez egy egyszerű példa, érdemes hivatkozni a wiki oldalra, ahol található sokkal összetettebb lehet .

Gratulálunk, most van egy olcsó Arduino-alapú érzékelő tömb alapja. Ezt a jövőben újra megvizsgáljuk, és az Arduino -kat saját, teljesen különálló RF hálózatra helyezzük. Én is készítettem egy hasonló verziót Wizwiki 7500 táblákhoz ha véletlenül van ilyen.

Perzisztencia és grafikus adatok

Mostanra valószínűleg egy csomó érzékelőt állított be, akár a Z-Wave-ből, akár az MQTT-t futtató egyedi Arduinos-ból-így bármikor megtekintheti az érzékelők aktuális állapotát, és reagálnia kell az értékükre a szabályokban. De az érdekesség az érzékelői értékekben általában az, hogy idővel változnak: itt jön létre a kitartás és a grafikonok. Kitartás az OpenHAB -ban az adatok időbeli mentését jelenti. Menjünk előre, és állítsuk be az RRD4J -t (Round Robin Database for Java), amelyet azért hívnak, mert az adatok körkörös módon kerülnek mentésre - a régebbi adatokat elvetjük, hogy tömörítsük az adatbázis méretét.

Telepítse az rrd4j csomagokat a következő parancsokkal.

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

Ezután hozzon létre egy új fájlt rrd4j.marad ban,-ben konfigurációk/kitartás mappa. Illessze be a következőket:

Stratégiák {

everyMinute: '0 * * * *?'

everyHour: '0 0 * * *?'

mindennap: '0 0 0 * *?'

alapértelmezett = everyChange

}

Elemek {

// az érték frissítésekor mindent megtart, csak alapértelmezett, és indításkor visszaállítja őket az adatbázisból

*: stratégia = everyChange, restoreOnStartup

// ezután meghatározzuk minden óra konkrét stratégiáit a Hőmérséklet csoport bármire, és minden percre a Páratartalomra

mi a funkciója a programozásnak

Hőmérséklet*: stratégia = everyHour

Páratartalom*: stratégia = everyMinute

// Alternatív megoldásként itt hozzáadhat bizonyos elemeket, például a

// Hálószoba_nedvesség, JamesInOffice: stratégia = everyMinute

}

A fájl első részében stratégiákat definiálunk, ami csak azt jelenti, hogy nevet adunk egy CRON kifejezésnek. Ez ugyanaz, mint a My.OpenHAB esetében, de ezúttal néhány új stratégiát hozunk létre, amelyeket minden nap, minden óra és minden perc használhatunk. Még nem használtam mindet, de lehet, hogy a jövőben.

A fájl második felében megmondjuk az rr4dj -nek, hogy mely adatértékeket kell menteni. Alapértelmezés szerint minden frissítéskor menteni fogunk mindent, de meghatározott időalapú stratégiákat is megadtam bizonyos érzékelőkhöz. A hőmérsékletek engem nem zavarnak, ezért úgy döntöttem, hogy csak minden órát takarítsak meg, de a páratartalom nagy gondot jelent számomra, ezért szeretném látni, hogyan változik minden perc. Ha más adatokat is szeretne menteni meghatározott időpontokban, adja hozzá ezeket most, vagy szükség szerint módosítsa.

Megjegyzés: ha az adatokat is grafikonokkal szeretné ábrázolni, akkor azokat percenként legalább egyszer KELL tárolni. Nem számít, hogy az érzékelői adatok frissülnek -e ilyen gyorsan, egyszerűen meg kell mondania az rr4dj -nek, hogy percenként egyszer tárolja.

Ha ezt definiálta, látnia kell egy hibakeresési kimenetet, amely azt jelzi, hogy az értékeket tárolja.

Ezután készítsünk néhány szép grafikont ezekből az adatokból. Valóban könnyű. Egy egyedi érzékelő grafikonjának elkészítéséhez adja hozzá a következőket a webhely térképéhez:

Diagram elem = Hálószoba_Páratartalom időszak = h

Szó szerint ennyi kell. A periódus érvényes értékei a következők h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; nyilvánvalónak kell lenniük, hogy ezek mit jelentenek. Ha nincs megadva, akkor egy egész napos adat esetén alapértelmezett értéke D.

Több elemből álló grafikon létrehozásához egyszerűen ábrázolja a csoport nevét:

Diagram elem = Páratartalom időszak = h

Az is érdekelheti, hogy ezt a grafikont máshol is használhatja; képet készít a következő URL segítségével: http: // YOUROPENHABURL: 8080/chart? groups = Páratartalom és időszak = h

Hogy van A ti Jön az OpenHAB rendszer?

Ennyi az útmutató ezen részében, de ne számíts arra, hogy ez lesz az utolsó, amit az OpenHAB -ról hall. Remélhetőleg ez és a kezdő útmutató szilárd alapokat adott Önnek saját teljes OpenHAB rendszerének kifejlesztéséhez - de ez egy olyan folyamat, amely soha nem fejeződött be teljesen.

Szerencsére az OpenHAB jól méretezhető néhány eszköztől százig, az egyszerű szabályok bonyolultságától a végső otthoni automatizálásig - tehát hogy áll a rendszer? Milyen eszközöket választott? Mi a következő nagy projekt, amellyel foglalkozni fog?

Beszélgessünk a megjegyzésekben - és kérjük, ha hasznosnak találta ezt az útmutatót, kattintson a megosztás gombra, és mondja el barátainak, hogyan tudják ők is beállítani saját OpenHAB rendszerüket.

Reméljük tetszeni fognak az általunk ajánlott és megbeszélt elemek! A MUO társult és szponzorált partnerkapcsolatokkal rendelkezik, így egyes vásárlásaiból származó bevétel egy részét kapjuk. Ez nem befolyásolja az Ön által fizetett árat, és segít nekünk a legjobb termékajánlásokat nyújtani.

Részvény Részvény Csipog Email Kezdő útmutató a beszéd animálásához

A beszéd animálása kihívást jelenthet. Ha készen áll arra, hogy párbeszédet adjon hozzá a projekthez, akkor lebontjuk a folyamatot.

Olvassa tovább
Kapcsolódó témák
  • DIY
  • Okos otthon
  • Arduino
  • Otthoni automatizálás
  • Hosszú alak
  • Longform útmutató
A szerzőről James Bruce(707 megjelent cikk)

James mesterséges intelligenciával rendelkezik, és rendelkezik CompTIA A+ és Network+ tanúsítvánnyal. Amikor nem a Hardware Reviews szerkesztőként van elfoglalva, élvezi a LEGO, a VR és a társasjátékokat. Mielőtt csatlakozott volna a MakeUseOf -hoz, fénytechnikus, angol tanár és adatközpont -mérnök volt.

Továbbiak James Bruce -tól

Iratkozzon fel hírlevelünkre

Csatlakozz hírlevelünkhöz, ahol technikai tippeket, értékeléseket, ingyenes e -könyveket és exkluzív ajánlatokat találsz!

Feliratkozáshoz kattintson ide