OpenHAB Beginnershandleiding Deel 2: ZWave, MQTT, regels en grafieken

OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen. In feite kan het ronduit frustrerend zijn.

OpenHAB, de open source domotica-software, overtreft ruimschoots de mogelijkheden van andere domoticasystemen op de markt, maar het is niet eenvoudig om deze in te stellen.  In feite kan het ronduit frustrerend zijn.
Advertentie

Vrij betekent niet altijd "niet zo goed als betaald", en OpenHAB is geen uitzondering. De open source domotica-software overtreft ver de mogelijkheden van elk ander huisautomatiseringssysteem op de markt - maar het is niet eenvoudig om het in te stellen. In feite kan het ronduit frustrerend zijn.

Deze handleiding kan als gratis PDF worden gedownload. Download OpenHAB Beginner's Guide Deel 2: ZWave, MQTT, regels en grafieken nu . U kunt dit kopiëren en delen met uw vrienden en familie.

In deel 1 van de gids heb ik je uitgebreid uitgelegd hoe OpenHAB op een Raspberry Pi werd geïnstalleerd Aan de slag met OpenHAB Home Automation op Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domotica-platform dat op verschillende manieren draait van hardware en is protocol agnostisch, wat betekent dat het verbinding kan maken met bijna elke huisautomatiseringshardware die vandaag op de markt is. Read More, introduceerde de kernconcepten van OpenHAB en liet u zien hoe u uw eerste items in het systeem kunt toevoegen. Vandaag gaan we verder:

  • ZWave-apparaten toevoegen
  • Een Harmony Ultimate-controller toevoegen
  • Regels invoeren
  • Introductie van MQTT en het installeren van een MQTT-makelaar op uw Pi, met sensoren op een Arduino
  • Gegevens opnemen en grafisch weergeven

Introductie tot Z-Wave

Z-Wave is al jaren het dominante domotica-protocol: het is betrouwbaar, is uitgebreid ontwikkeld en werkt over een veel groter bereik dan alle andere smart home-producten. Er zijn honderden Z-Wave-sensoren voor u beschikbaar die een breed scala aan taken uitvoeren. OpenHAB kan werken met Z-Wave, maar het is lastig om in te stellen en betrouwbaarheid is niet gegarandeerd.

Als u overweegt om een ​​huis vol met Z-Wave-sensoren aan te schaffen, speciaal voor gebruik met OpenHAB, dan verzoek ik u dringend om dit opnieuw te overwegen. Het kan voor u goed uitpakken, of het kan geplaagd worden door kleine maar aanhoudende problemen. Koop in ieder geval geen huis vol sensoren voordat je de kans hebt gehad om er een paar uit te proberen. De enige reden om voor Z-Wave te kiezen is als u niet 100% genoegen neemt met OpenHAB en uw opties in de toekomst open wilt laten: Z-Wave werkt bijvoorbeeld met Samsung SmartThings Welke Smart Hub voor Domotica is het beste voor u ? Welke slimme hub voor domotica is het beste voor u? Een tijdlang dachten mensen dat het idee niets meer was dan een gimmick, maar recente productreleases hebben aangetoond dat slimme huisautomatisering zijn beloftes waarmaakt. Lees meer hub, evenals Z-Wave specifieke hubs zoals Homeseer, en een reeks andere software-opties zoals Domoticz.

Hoewel OpenHAB een Z-Wave-binding bevat, moet u eerst het Z-Wave-netwerk configureren voordat OpenHAB het voor gegevens kan opvragen. Als je een Rasberry-controllerkaart hebt, heb je wat software meegeleverd voor het configureren van het netwerk, dus we zullen dat hier niet behandelen. Als je een Aeotec USB Z-Stick controller of iets dergelijks hebt gekocht, heb je waarschijnlijk geen software meegeleverd, lees dus verder.

Aeotec Z-Stick Gen5, Z-Wave Plus USB om gateway te maken Aeotec Z-Stick Gen5, Z-Wave Plus USB om gateway te maken Nu kopen bij Amazon $ 44, 95

Als je al een Z-Wave-netwerk hebt ingesteld, kun je gewoon je controller in de Pi pluggen en de binding en items configureren. Als dit je eerste poging tot Z-Wave is, is het een beetje ingewikkelder.

Ten eerste aan de hardwarezijde: elke controller heeft zijn eigen manier van koppelen met apparaten (technisch bekend als "inclusiemodus" waarin een knooppunt-ID is toegewezen). In het geval van de Aotec Z-Stick betekent dit dat u hem loskoppelt van de USB-poort en eenmaal op de knop drukt om hem in de insluitmodus te plaatsen. Plaats het dan in de buurt van het apparaat dat je koppelt, en druk ook op de insluitknop (dit zal ook variëren: mijn Everspring-aansluiting vereist dat de knop driemaal snel achter elkaar wordt ingedrukt, dus de les hier is om de handleiding te lezen voor uw apparaat) .

De Z-stick knippert kort om succes aan te geven. Dit levert problemen op bij het opnieuw aansluiten op de Pi, omdat een nieuwe poort is toegewezen. Start uw Pi opnieuw op om hem terug te zetten naar de standaardpoort als u vindt dat hij een andere heeft gekregen. Sterker nog: stop hem niet in de Pi totdat je alle hardware-paren eerst hebt gedaan.

Installeren van HABmin- en Z-Wave-bindingen

Omdat OpenHAB eigenlijk geen configuratiehulpprogramma voor Z-Wave is, gaan we een andere webbeheertool installeren die dat doet - iets dat HABmin heet. Ga door naar de HABmin Github-repository en download de huidige versie. Als je het uitgepakt hebt, zul je 2 .jar- bestanden vinden in de map addons - deze moeten in de bijbehorende map addons in je OpenHAB Home-share worden geplaatst (als je ook de Aotec gen5 Z-Stick gebruikt, zorg dan dat je heb tenminste versie 1.8 van de Z-Wave-binding) .

Maak vervolgens een nieuwe map in de map Webapps en noem deze "habmin" (kleine letters zijn belangrijk). Kopieer de rest van de gedownloade bestanden naar daar.

Opmerking: Er is ook een HABmin 2 in actieve ontwikkeling. Installatie is vrijwel hetzelfde, maar met één extra .jar-addon. Het kan de moeite waard zijn om beide te proberen, alleen om te zien welke u verkiest.

Als je dat nog niet hebt gedaan, sluit je je controller aan op je Pi. Typ het volgende om de juiste poort te vinden.

 ls / dev / tty * 

Je bent op zoek naar iets met USB in de naam, of in mijn specifieke geval presenteerde de Z-stick zichzelf als / dev / ttyACM0 (een modem). Het is misschien eenvoudiger om het commando één keer uit te voeren voordat u het aansluit en één keer erna, zodat u kunt zien wat er verandert als u het niet zeker weet.

devtty

Open het OpenHAB-configuratiebestand en wijzig het gedeelte over Z-Wave door beide regels onleesbaar te maken en uw eigen apparaatadres in te voeren. Een laatste stap voor mij was om de OpenHAB-gebruiker toegang te geven tot de modem.

 sudo usermod -a -G dialout openhab 

Om nu alles in gang te zetten, start OpenHAB opnieuw

 sudo service openhab herstarten 

Hopelijk zie je zoiets als dit in het logboek voor foutopsporing. Gefeliciteerd, je hebt het nu over Z-Wave. U kunt ook het logboek voor foutopsporing vinden volgelopen met berichten van verschillende Z-Wave-knooppunten. Laten we beginnen met het controleren van HABMIN om te zien wat het is gevonden: http: //openhab.local: 8080 / habmin / index.html (ter vervanging van openhab.local door uw Raspberry Pi-hostnaam of IP-adres).

zwave start in openhab log

Er is veel te zien in HABMIN, maar we houden ons alleen maar bezig met het tabblad Configuratie -> Bindingen -> Z-wave -> Apparaten, zoals u hieronder kunt zien. Vouw het knooppunt uit om de locatie en het naamlabel te bewerken voor uw gemak van verwijzing.

bewerk de apparaatnaam

Z-wave-items configureren

Elk Z-Wave-apparaat heeft een specifieke configuratie voor OpenHAB. Gelukkig zijn de meeste apparaten al verkend en zijn er al voorbeelden voor de uwe. Het configureren van aangepaste apparaten die niet worden herkend, is ver buiten het bereik van deze handleiding, maar laten we aannemen dat deze voor nu wordt ondersteund.

Ten eerste heb ik een standaard Everspring AN158 aan / uit-schakelaar en meter op knooppunt 3. Een snelle Googling leidde me naar een blogpost op Wetwa.re, met een voorbeeld van een itemconfiguratie. Ik heb dit als volgt aangepast:

 Switch Luchtontvochtiger_Switch "Luchtontvochtiger" {zwave = "3: command = switch_binary"} Nummer Luchtontvochtiger_Watts "Luchtverbruik stroomontvochtiger [% .1f W]" {zwave = "3: command = meter"} 

Perfect.

De volgende is een Aeotec Gen5-multisensor.

Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus) Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus) Nu kopen bij Amazon

Voor deze vond ik een voorbeeldconfiguratie op iwasdot.com en mijn multisensor staat op knooppunt 2.

 Number Hallway_Temperature "Gangpadtemperatuur [% .1f ° C]" (hal, temperatuur) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Aantal haltes_vochtigheid "Halvochtigheid [% .0f %% ] "(Hal, Luchtvochtigheid) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 5 "} Number Hallway_Luminance" Hallway Luminance [% .0f Lux] "(Hal) {zwave =" 2: 0: command = sensor_multilevel, sensor_type = 3 "} Contact Hallway_Motion" Halbeweging [% s] "(hal, beweging) {zwave =" 2: 0: command = sensor_binary, response_to_basic = true "} Aantal sensor_1_batterij" Batterij [% s %%] "( Motion) {zwave = "2: 0: command = battery"} 

Als het formaat hiervan voor jou vreemd lijkt, ga dan terug naar de eerste beginnershandleiding Aan de slag met OpenHAB Home Automation op Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry Pi OpenHAB is een volwassen, open source domotica-platform dat draait op een verscheidenheid aan hardware en is protocol agnostisch, wat betekent dat het verbinding kan maken met bijna elke huisautomatiseringshardware die vandaag op de markt is. Meer lezen, met name de Hue-inbindsectie, waarin ik uitleg hoe items worden toegevoegd. U hoeft waarschijnlijk alleen maar dergelijke voorbeelden te kopiëren, maar als u een nieuw apparaat heeft, geeft de bindende documentatie alle opdrachten weer.

Logitech Harmony-binding

Voordat we in regels springen, wilde ik een korte opmerking toevoegen over het werken met de Harmony-binding. Ik ben een grote fan van de Harmony-reeks van ultieme afstandsbedieningen Logitech Harmony Ultimate Review en Giveaway Logitech Harmony Ultimate Review en Giveaway Je woonkamer is chaos - geef het toe. Het is je vergeven om je af te vragen op welke afstandsbedieningen welk apparaat. Wat met de tv, versterker, TiVO, BluRay-speler, misschien zelfs de verlichting-schakelactiviteiten wordt een lange ... Lees meer om de ervaring van het thuismediacentrum te vereenvoudigen, maar ze staan ​​vaak als een afzonderlijk systeem binnen het slimme huis. Met OpenHAB kunnen Logitech Harmony-activiteiten en volledige apparaatbesturing nu deel uitmaken van uw gecentraliseerde systeem en zelfs worden opgenomen in automatiseringsregels.

Begin met het installeren van de drie bindende bestanden die u vindt door apt-cache te gebruiken om te zoeken naar "harmonie":

openhab apt-cache zoeken naar harmoniebinding

Vergeet niet om de directory van de binding opnieuw te checken als je klaar bent:

 sudo apt-get installeren openhab-addon-actie-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 

Om de binding te configureren, opent u het bestand openhab.cfg en voegt u als volgt een nieuwe sectie toe:

 ########## HARMONY AFSTANDSBEDIENING ########## harmonyhub: host = 192.168.1.181 of uw ip harmonyhub: gebruikersnaam = uw-harmony-email-login harmonyhub: wachtwoord = uw- wachtwoord 

Het IP-adres is dat van uw Harmony Hub. Gebruik een netwerkscanner om dat uit te zoeken. U moet ook uw inloggegevens invoeren, die u invoert wanneer u het standaard Harmony-configuratiehulpprogramma start. Dat is het. Bij het opnieuw opstarten van uw Hue moet uw foutopsporingslog een plotselinge burst van uitvoer van de binding hebben.

Dit is een JSON-opgemaakte lijst van al uw activiteiten, apparaten en opdrachten die kunnen worden verzonden. Het is een goed idee om dit te kopiëren voor toekomstig gebruik. u kunt het nog gemakkelijker maken om te lezen met samenvouwbare knooppunten door in een online JSON-formatter zoals deze te plakken.

json geformatteerde openhab output

Naast de standaard PowerOff-activiteit die een standaard is, vindt u uw eigen gedefinieerde activiteiten hier op naam. Laten we nu een eenvoudige bediening met één knop maken om activiteiten te starten. Voeg eerst de volgende regel toe aan uw itemsbestand. Verander de groep en het pictogram als je wilt.

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

Dit is een bidirectionele tekenreeksbinding, waarmee de huidige activiteit kan worden opgehaald en de huidige activiteit als iets anders kan worden beschouwd. Nu kunnen we er een knop voor maken, in het sitemapbestand.

 Wisselitem = Harmony_Activity-toewijzingen = [PowerOff = 'Uit', Oefening = 'Oefening', 13858434 = 'TV', Karaoke = 'Karaoke'] 

In de vierkante haak ziet u elke activiteit samen met het label. Over het algemeen kun je direct naar activiteiten verwijzen zoals je ze op je afstandsbediening hebt genoemd, maar de uitzondering hierop vond ik alles met een spatie in de naam van de activiteit, zoals 'Kijk tv'. In dit geval moet u de activiteits-ID gebruiken. Nogmaals, u kunt de ID vinden in de JSON-foutopsporingsuitvoer. Sla uw interface op en vernieuw deze, u zou iets gelijkaardigs moeten zien als dit:

openhab harmonie in de sitemap

U kunt ook verwijzen naar activiteiten in uw regels, zoals we hierna zullen zien. Lees de wiki-pagina voor meer informatie over de Harmony-binding.

Een algemene inleiding tot regels

De meeste slimme thuishubs bevatten regels voor het maken van regels, zodat u automatisch kunt reageren op sensorgegevens en gebeurtenissen thuis. Sterker nog, ik zou zeggen dat een echt slim huis niet iets is dat je nodig hebt om tijd te besteden aan interactie met mobiele apps - het is er een dat onzichtbaar is voor de eindgebruiker en volledig geautomatiseerd is. Hiertoe bevat OpenHAB ook een krachtige regelscripttaal die u kunt programmeren, die de complexiteit van de meeste Smart Home Hubs, de Battle of Smart Home Hubs, overtreft: wat is er daar en wat komt eraan? Battle of the Smart Home Hubs: wat is er daar en wat komt eraan? Read More of IFTTT-recepten IFTTT maakt nu verbinding met alles: Kennismaken met het Maker Channel IFTTT maakt nu verbinding met alles: Kennismaken met het Maker Channel De mogelijke toepassingen voor IFTTT zijn eindeloos. Maar tot nu toe was het moeilijk om het te verbinden met je eigen hardware-projecten. Vandaag is dat allemaal veranderd. Lees verder .

Programmeerregels klinkt slechter dan het is. Laten we eenvoudig beginnen met een paar regels die het licht in- of uitschakelen, afhankelijk van de aanwezigheidssensor:

 regel "Kantoorlicht aan wanneer James aanwezig is" toen Item JamesInOffice van UIT naar AAN veranderde en vervolgens verzendopdracht (Office_Hue, AAN) eindregel "Kantoorverlichting uit wanneer James vertrekt" wanneer artikel JamesInOffice veranderde van AAN naar UIT en vervolgens verzendencommando (Office_Hue, UIT) 

Eerst noemen we de regel - wees beschrijvend, zodat je weet welke gebeurtenis aan het vuren is. Vervolgens definiëren we onze eenvoudige regel door te zeggen wanneer x waar is, en dan y . Einde betekent de sluiting van die specifieke regel. Er zijn een aantal speciale woorden die u in regels kunt gebruiken, maar voor nu hebben we te maken met twee eenvoudige stukjes syntaxis: item, waarmee u de status van iets kunt opvragen; en sendCommand, wat precies doet wat je denkt dat het zal doen. Ik zei toch dat dit makkelijk was.

Het is waarschijnlijk niet nodig om een ​​paar regels te gebruiken, maar naarmate mijn logica complexer wordt, is het nuttig om ze gescheiden te houden voor het binnenkomen of verlaten van het gebied - en het kan een goed idee zijn om ergens een lichtsensor toe te voegen in de vergelijking, zodat we niet onnodig lampen aanzetten.

Laten we naar een ander voorbeeld kijken om een ​​geplande regel te maken.

 regel "Oefening elke ochtend" wanneer Tijd cron "0 0 8 1/1 *? *" en dan harmonyStartActivity ("Oefening") eindigen 

Nogmaals, we noemen de regel, de toestand waarin het moet vuren en de acties die moeten worden ondernomen. Maar in dit geval definiëren we een tijdpatroon. De grappige code die u in de aanhalingstekens ziet, is een CRON-uitdrukking voor Quartz Scheduler (het formaat wijkt enigszins af van een gewone CRONtab). Ik heb cronmaker.com gebruikt om de expressie te helpen maken, maar je kunt ook de indelingsgids lezen voor een gedetailleerde uitleg en meer voorbeelden.

cron generator
CronMaker.com genereerde de correct geformatteerde Cron-expressie

Mijn regels zeggen eenvoudig "8am elke ochtend, elke dag van de week, vertel mijn Harmony Ultimate-systeem om de Oefening-activiteit te starten", die op zijn beurt de TV, de Xbox, de versterker activeert en op de A-knop drukt na een minuut om te starten de schijf in het station.

Helaas kan OpenHAB de oefening nog niet voor mij doen.

Nog een regel die ik je wil laten zien, is iets dat ik gebruik om de luchtvochtigheid in mijn huis te regelen. Ik heb een enkele ontvochtiger die ik waar nodig moet verplaatsen, dus heb ik besloten om naar al mijn luchtvochtigheidssensoren te kijken, welke de hoogste is, en sla die op in een variabele. Het wordt momenteel elke minuut geactiveerd, maar dat kan eenvoudig worden verlaagd. Neem eerst een kijkje:

 import org.openhab.core.library.types. * import org.openhab.model.script.actions. * import java.lang.String rule "Humidity Monitor" when Time cron "0 * * * *?" then var prevHigh = 0 var highHum = "" Vochtigheid? .leden. voor Elk [brom | logDebug ("humidity.rules", hum.name); if (hum.state als DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); einde 

De kern van de regel ligt in de vochtigheidsgraad? Leden voor elke regel. Luchtvochtigheid is een groepsnaam voor mijn vochtigheidssensoren; .leden pakt alle items in die groep; foreach iterates over hen (met een nieuwsgierig vierkant beugel-formaat dat u waarschijnlijk niet kent). De syntaxis van regels is een afgeleide van Xtend, dus u kunt de Xtend-documentatie lezen als u geen voorbeeld kunt vinden om aan te passen.

Dat zal waarschijnlijk niet nodig zijn - er zijn honderden voorbeeldregels die er zijn:

  • Gedetailleerde uitleg van regels over de officiële wiki
  • De officiële regels zijn voorbeelden van wikipagina's
  • Regels naar nieuwe hoogten brengen
  • Geavanceerde voorbeelden op IngeniousFool.net

MQTT voor OpenHAB en Internet of Things

MQTT is een lichtgewicht berichtensysteem voor machine-naar-machine communicatie - een soort Twitter voor uw Arduinos of Raspberry Pis om met elkaar te praten (hoewel het natuurlijk met veel meer dan alleen die werkt). Het wint snel aan populariteit en vindt zichzelf een thuis met Internet of Things-apparaten, meestal micro-controllers met een lage resource die een betrouwbare manier nodig hebben om sensorgegevens terug naar je hub te verzenden of opdrachten op afstand te ontvangen. Dat is precies wat we ermee zullen doen.

Maar waarom zou u het wiel opnieuw uitvinden?

MQ Telemetry Transport is al in 1999 uitgevonden om oliepijpleidingen aan te sluiten via trage satellietverbindingen, speciaal ontworpen om het batterijgebruik en de bandbreedte te minimaliseren en toch betrouwbare gegevens te leveren. In de loop der jaren zijn de ontwerpprincipes hetzelfde gebleven, maar de use case is verschoven van gespecialiseerde embedded systemen naar algemene Internet of Things-apparaten. In 2010 werd het protocol royaltyvrij vrijgegeven, open voor iedereen om te gebruiken en te implementeren. Wij houden van gratis.

U vraagt ​​zich misschien af ​​waarom we ons zelfs bezighouden met een ander protocol - we hebben immers al de HTTP - waarmee snel berichten kunnen worden verzonden tussen allerlei web-gekoppelde systemen (zoals OpenHAB en IFTTT, met name met het nieuwe makerskanaal) IFTTT maakt nu verbinding met alles: Kennismaken met het Maker Channel IFTTT maakt nu verbinding met alles: Kennismaken met het Maker Channel De mogelijke toepassingen voor IFTTT zijn eindeloos, maar tot nu toe was het moeilijk om het te verbinden met uw eigen hardware-projecten. Lees verder ). En je hebt gelijk. De verwerkingsoverhead van een HTTP-server is echter vrij groot - zo erg dat je er niet zo gemakkelijk een kunt uitvoeren op een ingebouwde microcontroller zoals de Arduino (althans, dat kan, maar je hebt niet veel geheugen meer voor iets anders ). MQTT is daarentegen licht van gewicht, dus het verzenden van berichten op uw netwerk zal de leidingen niet verstoppen en past gemakkelijk in onze kleine Arduino-geheugenruimte.

Hoe werkt MQTT?

MQTT vereist zowel een server (een "broker" genoemd) als een of meer clients. De server fungeert als tussenpersoon, ontvangt berichten en zendt deze opnieuw uit aan geïnteresseerde klanten.

Laten we doorgaan met de analogie van Twitter-voor-machines . Net zoals Twitter-gebruikers hun eigen betekenisloze 140 tekens kunnen tweeten, en gebruikers andere gebruikers kunnen "volgen" om een ​​samengestelde stroom berichten te zien, kunnen MQTT-clients zich abonneren op een bepaald kanaal om alle berichten van daar te ontvangen, evenals hun eigen berichten publiceren naar dat kanaal. Dit patroon voor publiceren en abonneren wordt pub / sub genoemd, in tegenstelling tot het traditionele client / servermodel van HTTP.

HTTP vereist dat u contact opneemt met de machine waarmee u communiceert, bijvoorbeeld hallo, en vervolgens heen en weer bent gegaan van het voortdurend bevestigen van elkaar terwijl u gegevens ontvangt of plaatst. Met pub / sub hoeft de klant die de publicatie doet niet te weten welke clients zijn geabonneerd: het pompt gewoon de berichten weg en de broker herdistribueert ze naar elke geabonneerde klant. Elke client kan zowel onderwerpen publiceren als abonneren op onderwerpen, net als een Twitter-gebruiker.

In tegenstelling tot Twitter is MQTT niet beperkt tot 140 tekens. Het is data-agnostisch, dus je kunt kleine getallen of grote tekstblokken, JSON-opgemaakte datagrammen of zelfs afbeeldingen en binaire bestanden verzenden.

Het is niet zo dat MQTT voor alles beter is dan HTTP, maar het is meer geschikt als we heel veel sensoren overal in huis hebben, constant rapporterend.

Het is ook belangrijk om te weten dat OpenHAB niet zal optreden als uw MQTT-makelaar - we zullen later iets doen. OpenHAB zal echter als een client fungeren: het kan zowel uw OpenHAB-activiteitenlogboek publiceren als bepaalde kanalen aan apparaten binden, zodat u bijvoorbeeld een switch kunt hebben die wordt bestuurd door MQTT-berichten op een bepaald kanaal. Dit is ideaal voor het maken van een huis vol met sensoren.

Installeer Mosquitto op je Pi

Hoewel OpenHAB een MQTT-client bevat, zodat u zich kunt abonneren op een onderwerp en ook berichten kunt publiceren, fungeert het niet als de server. Daarvoor moet u ofwel een webgebaseerde MQTT-makelaar (betaald of gratis) gebruiken of de gratis software op uw Pi installeren. Ik zou het allemaal in huis willen houden, dus heb ik Mosquitto op de Pi geïnstalleerd.

Helaas is de versie die beschikbaar is via de gebruikelijke apt-get volledig verouderd. Laten we in plaats daarvan de nieuwste bronnen toevoegen.

 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 

Dat is alles wat we moeten doen om een ​​MQTT-server op het lokale netwerk te laten werken. Uw makelaar werkt standaard op poort 1883.

Controleer of uw MQTT-server werkt met de gratis MQTT.fx, die platformonafhankelijk is. Klik op het instellingenpictogram om een ​​nieuw profiel aan te maken en voer het IP-adres of de naam van uw Raspberry Pi in. Opslaan en druk op verbinden. Als het kleine verkeerslicht in de rechterbovenhoek groen wordt, bent u klaar om te gaan.

mqttfx voorbeeld profiel

Klik voor een snelle test op het tabblad "Abonneren" en typ inTopic / in het tekstvak en druk op de knop Abonneren . U bent nu geabonneerd om een ​​bericht te ontvangen over het onderwerp met de naam inTopic, maar er worden wel 0 berichten weergegeven. Ga terug naar het tabblad Publiceren, typ inTopic in het vakje en een kort bericht in het grote tekstvak hieronder. Druk een paar keer op Publiceren en kijk terug op het tabblad Abonneren. Je zou een paar berichten moeten zien verschijnen in dat onderwerp.

inTopic MQTT-test

Voordat we een aantal echte sensoren toevoegen aan ons netwerk, moeten we meer te weten komen over de niveaus van onderwerpen, zodat we het MQTT-netwerk kunnen structureren en filteren. Onderwerpnamen zijn hoofdlettergevoelig, mogen niet beginnen met $, of bevatten een spatie, of niet-ASCII-tekens - standaard programmeermethoden voor variabele namen, echt.

Het / scheidingsteken geeft een onderwerpniveau aan, dat hiërarchisch is, de volgende zijn bijvoorbeeld alle geldige onderwerpniveaus.

 inTopic / smallSubdivision / evenSmallerSubdivisie myHome / livingRoom / temperature myHome / livingRoom / humidity myHome / kitchen / temperature myHome / kitchen / humidity 

Je zou al moeten zien hoe deze boomstructuur perfect is voor een slimme woning vol met sensoren en apparaten. De beste methode voor gebruik met meerdere sensoren in een enkele ruimte is om elke sensorvariabele te publiceren als zijn eigen topicniveau - vertakkend naar meer specificiteit (zoals in de bovenstaande voorbeelden) - in plaats van te proberen meerdere soorten sensoren op hetzelfde kanaal te publiceren .

Cliënten kunnen vervolgens een onbeperkt aantal afzonderlijke onderwerpniveaus publiceren of zich erop abonneren, of een aantal speciale jokertekens gebruiken om van hogerop in de boomstructuur te filteren.

De + jokerteken vervangt elk onderwerpniveau. Bijvoorbeeld:

 MyHome / + / temperatuur 

zou de klant abonneren op beide

 myHome / livingRoom / temperature myHome / kitchen / temperature 

... maar niet de vochtigheidsgraad.

De # is een wildcard met meerdere niveaus, dus je zou iets van de livingRoom-sensorarray kunnen ophalen met:

 MyHome / livingroom / # 

Technisch gezien kun je je ook abonneren op het root-niveau # waarmee je echt alles door de makelaar laat gaan, maar dat kan zijn als het steken van een brandslang in je gezicht: een beetje overweldigend. Probeer verbinding te maken met de openbare MQTT-makelaar van HiveMQ en abonneer u op #. Ik kreeg ongeveer 300 berichten binnen enkele seconden voordat mijn client net crashte.

MQTT Beginner Tip: " / myHome /" is een ander onderwerp dan " myHome /" - met een schuine streep aan het begin wordt een leeg onderwerpniveau gecreëerd, dat technisch geldig is, maar niet wordt aanbevolen, omdat het verwarrend kan zijn.

Nu we de theorie kennen, laten we het eens proberen met een Arduino, Ethernet Shield en een DHT11 temperatuur- en vochtigheidssensor - u hebt waarschijnlijk een exemplaar in uw starterkit, maar als dat niet het geval is, verwisselt u gewoon de omgevingssensor voor een beweging sensor (of zelfs een knop).

MQTT publiceren vanuit een Arduino met Ethernet-verbinding

Als u een hybride Arduino-compatibel apparaat met ingebouwde Wi-Fi of Ethernet hebt, zou dat ook moeten werken. Uiteindelijk willen we een betere / goedkopere manier om te communiceren dat we een netwerkverbinding moeten gebruiken in elke kamer, maar dit dient om de basis te leren.

Begin door pubsubclient-bibliotheek te downloaden van Github. Als u de knop "Downloaden als ZIP" hebt gebruikt, is de structuur een beetje verkeerd. Unzip, hernoem de map naar just pubsubclient, haal de twee bestanden uit de src- map en verplaats ze één niveau omhoog naar de root van de gedownloade map. Verplaats vervolgens de hele map naar uw Arduino / bibliotheken- map.

Hier is mijn voorbeeldcode die je kunt aanpassen: de DHT11-signaaluitvoer staat op pin 7. Verander het server-IP voor dat van je Pi op de volgende regel:

 client.setServer ("192.168.1.99", 1883); 

Helaas kunnen we de vriendelijke naam (OpenHAB.local in mijn geval) niet gebruiken, omdat de TCP / IP-stack op de Arduino erg simplistisch is en het toevoegen van de code voor Bonjour-naamgeving een hoop geheugen is dat we niet willen verspillen . Als u de onderwerpen wilt wijzigen waarop sensorgegevens worden uitgezonden, scrolt u omlaag naar deze regels:

 char buffer [10]; dtostrf (t, 0, 0, buffer); client.publish ( "openhab / himitsu / temperatuur", buffer); dtostrf (h, 0, 0, buffer); client.publish ( "openhab / himitsu / vochtigheid", buffer); 

De code omvat ook een abonnement op een opdrachtkanaal. Zoek en pas de volgende regel aan:

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

Bestudeer de code daar en u zult zien dat u eenvoudig een LED of relais kunt besturen door bijvoorbeeld opdrachten naar specifieke kanalen te sturen. In de voorbeeldcode verzendt het eenvoudig een bericht dat de ontvangst van de opdracht bevestigt.

Upload je code, sluit je Arduino aan op het netwerk en gebruik MQTT.fx om je te abonneren op # of openhab / himitsu / # (of hoe je de kamernaam ook hebt gewijzigd, maar vergeet niet om de # aan het einde in te vullen ). Al snel zou je berichten moeten zien binnenkomen; en als u het opdrachtonderwerp AAN of UIT verzendt, ziet u ook bevestigingen terugkomen.

mqtt arduino-berichten komen terug

MQTT-binding voor OpenHAB

De laatste stap in de vergelijking is om dit aan OpenHAB te koppelen. Daar hebben we natuurlijk een binding voor nodig.

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

En bewerk het configuratiebestand om de binding in te schakelen.

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

Start OpenHAB opnieuw

 sudo service openhab herstarten 

Laten we dan een of twee items toevoegen:

 / * MQTT-sensoren * / nummer Himitsu_Temp "Himitsu-temperatuur [% .1f ° C]" (Himitsu, temperatuur) {mqtt = "<[makelaar: openhab / himitsu / temperatuur: status: standaard]"} Nummer Himitsu_Humidity "Himitsu Humidity [ % .1f %%] "(Himitsu, Humidity) {mqtt =" <[makelaar: openhab / himitsu / humidity: state: standaard] "} 

Inmiddels zou je het formaat moeten begrijpen; het krijgt een Nummer-item van de MQTT-binding, op een bepaald onderwerp. Dit is een eenvoudig voorbeeld, misschien wilt u verwijzen naar de wikipagina waar het een stuk ingewikkelder kan worden.

Gefeliciteerd, u hebt nu de basis van een goedkope Arduino-gebaseerde sensorarray. We zullen dit in de toekomst opnieuw bekijken en de Arduino's op hun eigen volledig gescheiden RF-netwerk plaatsen. Ik heb ook een identieke versie voor Wizwiki 7500-borden gemaakt als je er een hebt.

Persistentie en grafische gegevens

Inmiddels heb je waarschijnlijk een stel sensoren opgezet, of het nu gaat om Z-Wave of aangepaste Arduinos met MQTT - zodat je op elk moment de huidige status van die sensoren kunt bekijken en je ook moet reageren op hun waarde in regels. Maar het interessante aan sensorwaarden is dat ze in de loop van de tijd veranderen: dat is waar persistentie en grafische weergave binnenkomen. Persistentie in OpenHAB betekent dat de gegevens in de loop van de tijd worden opgeslagen. Laten we doorgaan met het instellen van RRD4J (Round Robin Database voor Java), zo genoemd omdat gegevens op een Round Robin-manier worden opgeslagen - oudere gegevens worden verwijderd om de grootte van de database te comprimeren.

Installeer rrd4j-pakketten met de volgende opdrachten.

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

Maak vervolgens een nieuw bestand met de naam rrd4j.persist in de map configurations / persistence . Plak in het volgende:

 Strategieën {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange} Items {// houdt alles aan wanneer de waarde wordt bijgewerkt, slechts een standaardwaarde en herstelt ze uit de database bij het opstarten *: strategy = everyChange, restoreOnStartup // vervolgens definiëren we specifieke strategieën van everyHour voor alles in de temperatuurgroep, en en elke minuut voor Vochtigheidstemperatuur *: strategy = everyHour Humidity *: strategy = everyMinute // u kunt hier ook specifieke items toevoegen, zoals // Bedroom_Humidity, JamesInOffice: strategy = everyMinute} 

In het eerste deel van dit bestand definiëren we strategieën, wat betekent dat we een CRON-expressie een naam geven. Dit is hetzelfde als dat we al deden met My.OpenHAB, maar deze keer creëren we een aantal nieuwe strategieën die we elke dag, elke en elke minuut kunnen gebruiken. Ik heb ze nog niet allemaal gebruikt, maar in de toekomst misschien wel.

In de tweede helft van het bestand vertellen we rr4dj welke gegevenswaarden moeten worden opgeslagen. Als standaardinstelling gaan we alles opslaan elke keer dat het wordt bijgewerkt, maar ik heb ook een aantal op tijd gebaseerde strategieën voor specifieke sensoren opgegeven. Temperaturen waar ik niet teveel last van heb, dus ik heb dat ingesteld om everyHour alleen te redden, maar vochtigheid is een grote zorg voor mij, dus ik wil zien hoe het elke minuut verandert. Als er andere gegevens zijn die u specifiek op gezette tijden wilt opslaan, voegt u deze hier nu toe of past u deze aan waar nodig.

Opmerking: als u de gegevens ook wilt plotten, MOET u deze minstens één keer per minuut opslaan. Het maakt niet uit of uw sensorgegevens zelfs zo snel worden bijgewerkt, u hoeft rr4dj slechts eenmaal per minuut op te geven om het op te slaan.

Met dat gedefinieerd, zou u enkele debug-uitvoer moeten zien vertellen dat waarden worden opgeslagen.

rrd4j gegevens opslaan

Laten we vervolgens een paar mooie grafieken maken van al deze gegevens. Het is echt gemakkelijk. Als u een grafiek van een afzonderlijke sensor wilt maken, voegt u het volgende toe aan uw sitemap:

 Grafiekitem = Slaapkamer_Humiditeitsperiode = h 

Dat is letterlijk alles wat je nodig hebt. Geldige waarden voor periode zijn h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; het zou duidelijk moeten zijn wat deze betekenen. Het is standaard ingesteld op D voor een volledige dag gegevens als dit niet is opgegeven.

Om een ​​grafiek met meerdere items te maken, hoeft u alleen maar de groepsnaam in te kaderen:

 Grafiekitem = vochtigheidsduur = h 

tabel

Mogelijk bent u ook geïnteresseerd om te weten dat u deze grafiek elders kunt gebruiken; het genereert een afbeelding met behulp van de volgende URL: http: // YOUROPENHABURL: 8080 / diagram? groups = Vochtigheid & periode = h

Hoe gaat het met uw OpenHAB-systeem?

Dat is het voor deze installatie van de gids, maar verwacht niet dat dit de laatste keer is dat je van OpenHAB hoort. Hopelijk hebben deze en de beginnersgids je een solide basis gegeven om je eigen complete OpenHAB-systeem te ontwikkelen - maar het is een proces dat nooit echt helemaal is voltooid.

Gelukkig kan OpenHAB goed opschalen van een paar apparaten naar honderden, van eenvoudige regelcomplexiteit tot het ultieme in huisautomatisering - dus hoe gaat uw systeem mee? Welke apparaten heb je gekozen? Wat is het volgende grote project dat je gaat aanpakken?

Laten we praten in de opmerkingen - en als u deze handleiding nuttig vond, klik dan op die deelknoppen om uw vrienden te vertellen hoe zij ook hun eigen OpenHAB-systeem kunnen instellen.

In this article