Advertentie

Gratis betekent niet altijd "niet zo goed als betaald" en OpenHAB is daarop geen uitzondering. De open source domotica-software overtreft ver de mogelijkheden van elk ander domoticasysteem op de markt, maar het is niet eenvoudig om te installeren. Het kan zelfs ronduit frustrerend zijn.

Deze handleiding kan als gratis pdf worden gedownload. Download OpenHAB Beginnershandleiding deel 2: ZWave, MQTT, regels en grafieken nu. Voel je vrij om dit te kopiëren en te delen met je vrienden en familie.

In deel 1 van de gids heb ik je er doorheen geleid OpenHAB installeren op een Raspberry Pi Aan de slag met OpenHAB Home Automation op Raspberry PiOpenHAB is een volwassen, open source huisautomatiseringsplatform dat op verschillende hardware draait en dat is protocol agnostisch, wat betekent dat het kan worden aangesloten op bijna alle domotica-hardware op de markt vandaag. Lees verder , introduceerde de kernconcepten van OpenHAB en liet u zien hoe u uw eerste items aan het systeem kunt toevoegen. Vandaag gaan we verder:

instagram viewer
  • ZWave-apparaten toevoegen
  • Een Harmony Ultimate-controller toevoegen
  • Introductie van regels
  • Maak kennis met MQTT en installeer een MQTT-broker op je Pi, met sensoren op een Arduino
  • Gegevens vastleggen en grafisch weergeven

Inleiding 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 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 een gedoe om in te stellen en betrouwbaarheid is niet gegarandeerd.

Als u overweegt een huis te kopen vol Z-Wave-sensoren, specifiek voor gebruik met OpenHAB, raad ik u aan om dit opnieuw te overwegen. Het kan geweldig voor je zijn, of het kan geplaagd worden door kleine maar aanhoudende problemen. Koop in ieder geval geen huis vol sensoren totdat 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% op OpenHAB bent gevestigd 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?Een tijdlang dachten mensen dat het idee niets anders was dan een gimmick, maar recente productreleases hebben aangetoond dat slimme huisautomatisering zijn beloften begint waar te maken. Lees verder hub, evenals Z-Wave-specifieke hubs zoals Homeseer, en een reeks andere software-opties zoals Domoticz.

Hoewel OpenHAB een Z-Wave-binding bevat, moet je dat nog steeds doen configureer eerst het Z-Wave netwerk, voordat OpenHAB kan beginnen met het opvragen van gegevens. Als je een Rasberry-controllerkaart hebt, heb je wat software meegeleverd voor het configureren van het netwerk, dus daar gaan we hier niet op in. Als je een Aeotec USB Z-Stick-controller of iets dergelijks hebt gekocht, heb je waarschijnlijk geen software meegeleverd, dus lees verder.

Aeotec Z-Stick Gen5, Z-Wave Plus USB om gateway te creërenAeotec Z-Stick Gen5, Z-Wave Plus USB om gateway te creëren Koop nu op Amazon $44.95

Als je al een Z-Wave netwerkconfiguratie hebt, je kunt gewoon je controller op de Pi aansluiten en beginnen met het configureren van de binding en items. Als dit je eerste uitstapje naar Z-Wave is, is het iets complexer.

Ten eerste aan de hardware-kant: elke controller heeft zijn eigen manier om te koppelen met apparaten (technisch bekend als "inclusiemodus" waaraan 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 opnamemodus te plaatsen. Breng het vervolgens in de buurt van het apparaat dat u koppelt en druk daar ook op de opnameknop (dit zal ook variëren: mijn Everspring-aansluiting vereist dat de knop 3 keer snel achter elkaar wordt ingedrukt, dus de les hier is om de handleiding voor uw apparaat te lezen).

De Z-Stick knippert kort om succes aan te geven. Dit levert problemen op bij het opnieuw aansluiten op de Pi, omdat er een nieuwe poort wordt toegewezen. Start je Pi opnieuw op om hem terug te zetten naar de standaardpoort als je merkt dat hij dynamisch een andere is toegewezen. Sterker nog: sluit hem niet aan op de Pi voordat je eerst alle hardware-koppelingen hebt gedaan.

HABmin- en Z-Wave-bindingen installeren

Omdat OpenHAB niet echt een configuratiehulpprogramma is voor Z-Wave, gaan we een andere webbeheertool installeren die dat wel doet - iets dat HABmin heet. Ga naar de HABmin Github-opslagplaats download de huidige release. Zodra je het hebt uitgepakt, vind je er 2 .pot bestanden in de map met add-ons - deze zouden in de overeenkomstige map met add-ons in uw OpenHAB Home-share moeten worden geplaatst (als je ook de Aotec gen5 Z-Stick gebruikt, zorg dan dat je minimaal versie 1.8 van de Z-Wave binding hebt).

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

Opmerking: er is ook een HABmin 2 onder actieve ontwikkeling. Installatie is vrijwel hetzelfde, maar met een extra .jar-add-on. Het is misschien de moeite waard om beide te proberen, gewoon om te zien welke uw voorkeur heeft.

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 zoekt iets met USB in de naam, of in mijn specifieke geval presenteerde de Z-stick zichzelf /dev/ttyACM0 (een modem). Het is misschien gemakkelijker om de opdracht één keer uit te voeren voordat u hem aansluit en één keer daarna, zodat u kunt zien wat er verandert als u het niet zeker weet.

devtty

Open het OpenHAB-configuratiebestand en pas het gedeelte over Z-Wave aan, verwijder beide regels en plaats je daadwerkelijke apparaatadres. 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 actie te brengen, start u OpenHAB opnieuw

sudo service openhab herstart

Hopelijk ziet u iets als dit als u het debug-logboek controleert. Gefeliciteerd, je praat nu over Z-Wave. Mogelijk vindt u ook het foutopsporingslogboek overspoeld met berichten van verschillende Z-Wave-knooppunten. Laten we beginnen met HABMIN te controleren om te zien wat het heeft gevonden: http://openhab.local: 8080 / habmin / index.html (ter vervanging van openhab.local door uw Raspberry Pi-hostnaam of IP-adres).

zwave startend in openhab logboek

Er is veel te zien in HABMIN, maar we zijn alleen echt bezorgd over de Configuratie -> Bindingen -> Z-Wave -> Apparaten tabblad, zoals u hieronder kunt zien. Vouw het knooppunt uit om de locatie en het naamlabel te bewerken voor uw gemak van referentie.

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 zullen er al voorbeelden voor de jouwe zijn. Het configureren van aangepaste apparaten die niet worden herkend, valt ver buiten het bestek van deze handleiding, maar laten we aannemen dat deze voorlopig 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 Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Number Dehumidifier_Watts "Energieverbruik luchtontvochtiger [% .1f W]" {zwave = "3: command = meter"}

Perfect.

De volgende is een Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 multisensor (Z-Wave Plus) Koop nu op Amazon $69.27

Voor deze vond ik een voorbeeldconfiguratie op iwasdot.com, en mijn multisensor bevindt zich op knooppunt 2.

Nummer Hallway_Temperature "Haltemperatuur [% .1f ° C]" (Hal, temperatuur) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Humidity [% .0f %%]" (Gang, Vochtigheid) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Nummer Hal_Luminantie "Halluminantie [% .0f Lux]" (Hal) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 3"} Neem contact op met Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Nummer sensor_1_battery "Batterij [% s %%]" (beweging) {zwave = "2: 0: command = batterij"}

Als het formaat hiervan u vreemd lijkt, ga dan terug naar de eerste beginners gids Aan de slag met OpenHAB Home Automation op Raspberry PiOpenHAB is een volwassen, open source huisautomatiseringsplatform dat op verschillende hardware draait en dat is protocol agnostisch, wat betekent dat het kan worden aangesloten op bijna alle domotica-hardware op de markt vandaag. Lees verder , met name de Hue-bindende sectie, waar ik uitleg hoe items worden toegevoegd. U hoeft waarschijnlijk alleen voorbeelden als deze te kopiëren, maar als u een nieuw apparaat heeft, bevat de bindende documentatie alle commando's.

Logitech Harmony Binding

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

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

openhab apt-cache zoek naar harmoniebinding

Vergeet het niet chown de bindingsmap opnieuw wanneer u klaar bent:

sudo apt-get installeer openhab-addon-action-harmonyhub. sudo apt-get installeer openhab-addon-binding-harmonyhub. sudo apt-get installeer 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 AFSTANDSBEDIENINGEN ########## harmonyhub: host = 192.168.1.181of uw ip
harmonyhub: gebruikersnaam =uw-harmonie-e-mail-login
harmonyhub: wachtwoord =je wachtwoord

Het IP-adres is dat van uw Harmony-hub. Gebruik een netwerkscanner om daar achter te komen. U moet ook uw inloggegevens invoeren, die u invoert wanneer u het standaard Harmony-configuratiehulpprogramma start. Dat is het. Bij het herstarten van je Hue, zou je debug-log een plotselinge burst van output van de binding moeten 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 lezen met inklapbare knooppunten door het in een online JSON-formatter te plakken zoals deze.

json heeft openhab-uitvoer geformatteerd

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

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

Dit is een bidirectionele String-binding, die in staat is om de huidige activiteit op te halen en de huidige activiteit op te geven als iets anders. Nu kunnen we er een knop voor maken in het sitemapbestand.

Item wisselen = Harmony_Activity-toewijzingen = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

In de vierkante haak ziet u elke activiteit samen met het label. Over het algemeen kun je rechtstreeks verwijzen naar activiteiten 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 'Tv kijken'. In dit geval moet u de activiteit-ID gebruiken. Nogmaals, u kunt de ID vinden in de JSON-foutopsporingsuitvoer. Bewaar en vernieuw uw interface, u zou iets als dit moeten zien:

openhab harmonie in de sitemap

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

Een algemene inleiding tot regels

De meeste slimme thuishubs bevatten een soort regels waarmee u automatisch kunt reageren op sensorgegevens en gebeurtenissen in huis. Ik zou zelfs beweren dat een echt slim huis niet het enige is dat je nodig hebt om tijd te besteden aan interactie met mobiele apps, het is onzichtbaar voor de eindgebruiker en volledig geautomatiseerd. Hiertoe bevat OpenHAB ook een krachtige scriptscripttaal die u kunt programmeren en die de complexiteit van de meesten ver overtreft smart home hubs Battle of the Smart Home Hubs: wat is er en wat komt eraan? Lees verder of IFTTT-recepten IFTTT maakt nu verbinding met alles: Introductie van het Maker ChannelDe mogelijke toepassingen voor IFTTT zijn eindeloos. Maar tot nu toe was het moeilijk om het te koppelen aan uw eigen hardwareprojecten. Vandaag is dat allemaal veranderd. Lees verder .

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

regel "Office light on when James present" wanneer Item JamesInOffice veranderde van UIT naar AAN. stuur dan sendCommand (Office_Hue, ON) einde regel "Kantoorverlichting uit als James weggaat" wanneer Item JamesInOffice veranderde van AAN naar UIT. stuur sendCommand (Office_Hue, OFF) einde

Ten eerste noemen we de regel: wees beschrijvend, zodat je weet welke gebeurtenis wordt geactiveerd. Vervolgens definiëren we onze eenvoudige regel door te zeggen als x waar is, doe 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 u 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 apart te houden om te bepalen of ik het gebied binnenkomen of verlaten - en het is misschien een goed idee om ergens een lichtsensor in de vergelijking toe te voegen, zodat we niet onnodig aanzetten lichten.

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

regel "Oefening elke ochtend" wanneer Tijd cron "0 0 8 1/1 *? *" vervolgens harmonyStartActivity ("Oefening") einde.

Nogmaals, we noemen de regel, vermelden de voorwaarden wanneer deze moet worden geactiveerd en de te ondernemen acties. Maar in dit geval definiëren we een tijdpatroon. De grappige code die je in de aanhalingstekens ziet, is een CRON-expressie voor Quartz Scheduler (het formaat is iets anders dan een gewone CRONtab). ik gebruikte cronmaker.com om de uitdrukking te helpen creëren, maar u kunt ook de formaatgids [Niet meer beschikbaar] lezen voor een gedetailleerde uitleg en meer voorbeelden.

cron generator
CronMaker.com gebruikt om de correct opgemaakte Cron-expressie te genereren

Mijn regels zeggen eenvoudig: "Elke ochtend, elke dag van de week 8 uur 's morgens, vertel mijn Harmony Ultimate-systeem om de trainingsactiviteit te starten", die op zijn beurt de tv, de Xbox en de versterker activeert en na een minuut op de A-knop drukt om de schijf in de drive te starten.

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 luchtontvochtiger die ik moet verplaatsen waar dat nodig is, dus besloot ik al mijn vochtigheidssensoren te bekijken, te zoeken welke de hoogste is en die op te slaan in een variabele. Het wordt momenteel elke minuut geactiveerd, maar dat kan gemakkelijk worden verlaagd. Kijk eerst eens:

org.openhab.core.library.types importeren. * org.openhab.model.script.actions importeren. * importeer java.lang. Tekenreeksregel "Vochtigheidsmonitor" wanneer Tijd cron "0 * * * *?" dan var prevHigh = 0 var highHum = "" Vochtigheid? .members.forEach [hum | logDebug ("vochtigheid.regels", hum.name); if (hum.state als DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("vochtigheid.regels", highHum); postUpdate (Dehumidifier_Needed, highHum); einde.

De kern van de regel ligt in de Vochtigheid? .Leden. Foreach lijn. Vochtigheid is een groepsnaam voor mijn vochtigheidssensoren; .leden pakt alle items in die groep; foreach itereert erover (met een merkwaardig vierkant haakjesformaat dat u waarschijnlijk niet kent). De syntaxis van regels is een afgeleide van Xtend, dus je kunt de lezen Xtend documentatie als je geen voorbeeld kunt vinden om aan te passen.

U hoeft het waarschijnlijk niet te doen - er zijn honderden voorbeeldregels:

  • Gedetailleerde uitleg van regels op de officiële wiki
  • De officiële regels monsters wiki pagina
  • Regels naar nieuwe hoogten brengen
  • Geavanceerde voorbeelden op IngeniousFool.net

MQTT voor OpenHAB en Internet of Things

MQTT is een lichtgewicht berichtensysteem voor machine-to-machine communicatie - een soort Twitter voor jou Arduinos of Raspberry Pis om met elkaar te praten (hoewel het natuurlijk met veel meer werkt dan alleen die). Het wint snel aan populariteit en vindt zichzelf een thuis met Internet of Things-apparaten, die meestal laag zijn gebruik microcontrollers die een betrouwbare manier nodig hebben om sensorgegevens terug te sturen naar uw hub of om op afstand te ontvangen commando's. Dat is precies wat we ermee gaan doen.

Maar waarom het wiel opnieuw uitvinden?

MQ Telemetry Transport werd al in 1999 uitgevonden om oliepijpleidingen via een langzame satelliet aan te sluiten verbindingen, speciaal ontworpen om het batterijgebruik en de bandbreedte te minimaliseren, terwijl ze toch betrouwbaar zijn data levering. Door de jaren heen 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, zodat iedereen het kan gebruiken en implementeren. We houden van gratis.

Je vraagt ​​je misschien af ​​waarom we ons zelfs met nog een ander protocol bezighouden - we hebben immers al HTTP - wat kan worden gebruikt om snelle berichten te verzenden tussen allerlei web-verbonden systemen (zoals OpenHAB en IFTTT, vooral met de nieuwe maker kanaal IFTTT maakt nu verbinding met alles: Introductie van het Maker ChannelDe mogelijke toepassingen voor IFTTT zijn eindeloos. Maar tot nu toe was het moeilijk om het te koppelen aan uw eigen hardwareprojecten. Vandaag is dat allemaal veranderd. Lees verder ). En je zou gelijk hebben. De verwerkingsoverhead van een HTTP-server is echter vrij groot - zo erg zelfs dat je er niet gemakkelijk een op een kunt uitvoeren embedded microcontroller zoals de Arduino (tenminste, dat kan, maar je hebt nergens meer geheugen voor over) anders). MQTT is daarentegen lichtgewicht, dus het verzenden van berichten over uw netwerk verstopt de leidingen niet 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 naar geïnteresseerde klanten.

Laten we doorgaan met de Twitter-voor-machines analogie wel. Net zoals Twitter-gebruikers hun eigen betekenisloze 140 tekens kunnen tweeten en gebruikers andere gebruikers kunnen "volgen" om een ​​samengestelde stroom berichten te zien, MQTT-klanten kunnen zich abonneren op een bepaald kanaal om alle berichten van daaruit te ontvangen en hun eigen berichten daarop te publiceren kanaal. Dit patroon voor publiceren en abonneren wordt aangeduid als pub / sub, in tegenstelling tot de traditie client server model van HTTP.

HTTP vereist dat u contact opneemt met de machine waarmee u communiceert, zeg hallo, en vervolgens heen en weer gaat om elkaar constant te erkennen terwijl u gegevens ontvangt of plaatst. Met pub / sub hoeft de klant die de publicatie doet niet te weten welke klanten zijn geabonneerd: het pompt alleen de berichten uit en de makelaar verdeelt ze opnieuw naar alle geabonneerde klanten. Elke klant kan onderwerpen publiceren en zich erop abonneren, net als een Twitter-gebruiker.

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

Het is niet dat MQTT voor alles beter is dan HTTP, maar het wel is geschikter als we overal in huis veel sensoren zullen hebben, die constant rapporteren.

Het is ook belangrijk om te weten dat OpenHAB niet als uw MQTT-makelaar zal optreden - daar komen we later op terug. OpenHAB zal echter als klant optreden: het kan zowel uw OpenHAB-activiteitenlogboek publiceren als specifiek binden kanalen naar apparaten, dus u kunt bijvoorbeeld een schakelaar hebben die wordt bestuurd door MQTT-berichten op een bepaald apparaat kanaal. Dit is ideaal voor het creëren van een huis vol sensoren.

Installeer Mosquitto op je Pi

Hoewel OpenHAB een MQTT-client bevat, zodat u zich op een onderwerp kunt abonneren en ook berichten kunt publiceren, zal het niet als server fungeren. Daarvoor moet je ofwel een webgebaseerde MQTT-makelaar gebruiken (betaald of gratis), of de gratis software op je Pi installeren. Ik wil het allemaal in eigen beheer houden, dus ik heb 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 voeg mosquitto-repo.gpg.key toe. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get installeer mug.

Dat is alles wat we moeten doen om een ​​MQTT-server actief te hebben op het lokale netwerk. Uw makelaar draait 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 te maken en voer het IP-adres of de naam van je Raspberry Pi in. Sla op en klik op verbinden. Als het kleine stoplicht rechtsboven groen wordt, bent u klaar om te gaan.

mqttfx voorbeeldprofiel

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

inTopic MQTT-test

Voordat we enkele echte sensoren aan ons netwerk toevoegen, moeten we meer te weten komen over onderwerpniveaus, waarmee we het MQTT-netwerk kunnen structureren en filteren. Namen van onderwerpen zijn hoofdlettergevoelig, mogen niet beginnen met $ of een spatie bevatten of niet-ASCII-tekens - eigenlijk standaardprogrammeermethoden voor variabelenamen.

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

inTopic / smallSubdivision / evenSmallerSubdivision. myHome / livingRoom / temperatuur. myHome / livingRoom / vochtigheid. myHome / keuken / temperatuur. myHome / keuken / vochtigheid

Je zou al moeten zien hoe deze boomstructuur perfect is voor een slim huis vol sensoren en apparaten. De beste methode voor gebruik met meerdere sensoren in een enkele kamer is om elke sensorvariabele te publiceren als een eigen onderwerpniveau - vertakken naar meer specificiteit (zoals in de bovenstaande voorbeelden) - in plaats van te proberen meerdere typen sensoren op hetzelfde te publiceren kanaal.

Klanten kunnen dan publiceren of zich abonneren op een willekeurig aantal individuele onderwerpniveaus, of een aantal speciale jokertekens gebruiken om van hoger in de boom te filteren.

Het jokerteken + vervangt elk onderwerpniveau. Bijvoorbeeld:

myHome / + / temperatuur

zou de klant op beide abonneren

myHome / livingRoom / temperatuur. myHome / keuken / temperatuur

... maar niet de luchtvochtigheid.

De # is een wildcard met meerdere niveaus, dus u kunt alles uit de livingRoom-sensorarray halen met:

myHome / livingRoom / #

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

MQTT-beginnerstip: "/myHome/” is een ander onderwerp dan "mijn huis/" - het toevoegen van een schuine streep aan het begin creëert een leeg onderwerpniveau, wat technisch weliswaar niet wordt aanbevolen, omdat het verwarrend kan zijn.

Nu we de theorie kennen, gaan we het proberen met een Arduino, Ethernet Shield en een DHT11 temperatuur- en vochtigheidssensor - je hebt er waarschijnlijk een in je starterkit, maar zo niet, verwissel dan gewoon de omgevingssensor voor een bewegingssensor (of zelfs een knop).

MQTT publiceren vanaf een Arduino met Ethernet-verbinding

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

Begin met downloaden pubsubclient bibliotheek van Github. Als je de knop 'Downloaden als zip' hebt gebruikt, is de structuur een beetje verkeerd. Unzip, hernoem de map naar gewoon pubsubclienten haal vervolgens de twee bestanden uit de src map en verplaats ze een niveau omhoog naar de hoofdmap van de gedownloade map. Verplaats vervolgens de hele map naar je Arduino / bibliotheken directory.

Hier is mijn voorbeeldcode die u kunt aanpassen: de DHT11-signaaluitvoer is op pin 7. Wijzig de server-IP voor die van uw Pi op de volgende regel:

client.setServer ("192.168.1.99", 1883);

We kunnen de vriendelijke naam helaas niet gebruiken (OpenHAB.local in mijn geval) aangezien de TCP / IP-stack op de Arduino erg simplistisch is en het toevoegen van de code voor Bonjour-naamgeving veel geheugen zou zijn, willen we niet verspillen. Als u de onderwerpen wilt wijzigen waarop sensorgegevens worden uitgezonden, bladert 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 bevat ook een abonnement op een commandokanaal. Zoek en pas de volgende regel aan:

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

Bekijk de code daar en u zult zien dat u eenvoudig een LED of relais kunt bedienen, bijvoorbeeld door opdrachten naar specifieke kanalen te sturen. In de voorbeeldcode stuurt het eenvoudig een bericht terug om de ontvangst van de opdracht te bevestigen.

Upload uw code, sluit uw Arduino aan op het netwerk en abonneer u op MQTT.fx op beide # of openhab / himitsu / # (of waar je de naam van de kamer ook in hebt veranderd, maar vergeet niet de # aan het einde toe te voegen). Al snel zou je berichten moeten zien binnenkomen; en als je AAN of UIT naar het commando-onderwerp stuurt, zie je ook bevestigingen terugkomen.

mqtt arduino berichten komen terug

MQTT-binding voor OpenHAB

De laatste stap in de vergelijking is om dit in OpenHAB te haken. Daarvoor hebben we natuurlijk een binding nodig.

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

En bewerk het configuratiebestand om de binding mogelijk te maken.

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

Start OpenHAB opnieuw

sudo service openhab herstart

Laten we dan een paar items toevoegen:

/ * MQTT-sensoren * / Nummer Himitsu_Temp "Himitsu-temperatuur [% .1f ° C]"(Himitsu, temperatuur) {mqtt = " (Himitsu, vochtigheid) {mqtt = "

Inmiddels zou u het formaat moeten begrijpen; het krijgt een Nummer item van de MQTT-binding over een gespecificeerd onderwerp. Dit is een eenvoudig voorbeeld, misschien wilt u verwijzen naar de wikipagina waar het zich bevindt kan een stuk complexer worden.

Gefeliciteerd, je 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 afzonderlijke RF-netwerk plaatsen. Ik heb ook een identieke versie gemaakt voor Wizwiki 7500 boards als je er een hebt.

Persistentie en grafische gegevens

Inmiddels heb je waarschijnlijk een heleboel sensoren ingesteld, of het nu gaat om Z-Wave of aangepaste Arduinos met MQTT - dus je kan de huidige status van die sensoren op elk moment bekijken, en je zou ook moeten reageren op hun waarde in reglement. Maar het interessante van sensorwaarden is over het algemeen dat ze in de loop van de tijd veranderen: dat is waar persistentie en grafieken binnenkomen. Volharding in OpenHAB betekent het opslaan van de gegevens in de tijd. Laten we doorgaan en RRD4J (Round Robin Database for Java) instellen, zo genoemd omdat gegevens worden opgeslagen op een round robin-manier - oudere gegevens worden weggegooid om de grootte van de database te comprimeren.

Installeer rrd4j-pakketten met de volgende opdrachten.

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

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

Strategieën {everyMinute: "0 * * * *?" everyHour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange. } Items {// blijven alles behouden wanneer de waarde wordt bijgewerkt, alleen een standaard, en herstellen ze vanuit 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 // of u kunt hier specifieke items toevoegen, zoals // Bedroom_Humidity, JamesInOffice: strategy = elke minuut. }

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

In de tweede helft van het bestand vertellen we rr4dj welke gegevenswaarden moeten worden opgeslagen. Standaard gaan we elke keer dat het wordt bijgewerkt alles opslaan, maar ik heb ook een aantal op tijd gebaseerde strategieën voor specifieke sensoren gespecificeerd. Temperaturen waar ik me niet zo druk over maak, dus ik heb dat ingesteld om alleen elke uur te besparen, 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 bepaalde tijden wilt opslaan, voegt u die hier nu toe of past u ze indien nodig aan.

Opmerking: als u de gegevens ook wilt tekenen, MOET u deze minstens één keer per minuut opslaan. Het maakt niet uit of uw sensorgegevens zelfs zo snel worden bijgewerkt, u hoeft alleen maar aan rr4dj te vertellen dat het eenmaal per minuut moet worden opgeslagen.

Met dat gedefinieerd, zou u wat debug-uitvoer moeten zien die u vertelt dat waarden worden opgeslagen.

rrd4j die gegevens opslaat

Laten we vervolgens een aantal mooie grafieken maken van al deze gegevens. Het is heel eenvoudig. Om een ​​grafiek van een individuele sensor te maken, voegt u het volgende toe aan uw sitemap:

Diagramitem = Slaapkamer_Vochtigheidsperiode = h

Dat is letterlijk alles wat je nodig hebt. Geldige waarden voor periode zijn h, 4u, 8u, 12u, D, 3D, W, 2W, M, 2M, 4M, Y; het moet duidelijk zijn wat deze betekenen. Het is standaard D voor een volledige dag aan gegevens, indien niet gespecificeerd.

Als u een grafiek met meerdere items wilt maken, kunt u in plaats daarvan de groepsnaam grafisch tekenen:

Kaartitem = vochtigheidsperiode = h
grafiek

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

Hoe gaat het Jouw OpenHAB-systeem komt eraan?

Dat is het voor deze aflevering van de gids, maar verwacht niet dat dit de laatste is die je van ons hoort over OpenHAB. Hopelijk hebben deze en de beginnershandleiding u een solide basis gegeven om uw eigen complete OpenHAB-systeem te ontwikkelen, maar het is een proces dat nooit echt volledig is voltooid.

Gelukkig kan OpenHAB goed worden geschaald van een paar apparaten tot honderden, van eenvoudige regelcomplexiteit tot de ultieme domotica - dus hoe gaat het met uw systeem? Welke apparaten heb je gekozen? Wat is het volgende grote project dat je gaat aanpakken?

Laten we het in de comments hebben - en als je deze gids nuttig vond, klik dan op die deelknoppen om je vrienden te vertellen hoe zij ook hun eigen OpenHAB-systeem kunnen opzetten.

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.