OpenHAB-handleiding voor beginners, deel 2: ZWave, MQTT, regels en grafieken

OpenHAB-handleiding voor beginners, deel 2: ZWave, MQTT, regels en grafieken

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. Sterker nog, het kan ronduit frustrerend zijn.





In deel 1 van de gids heb ik je erdoorheen geleid OpenHAB installeren op een Raspberry Pi , introduceerde de kernconcepten van OpenHAB en liet u zien hoe u uw eerste items aan het systeem kunt toevoegen. Vandaag gaan we verder:





  • ZWave-apparaten toevoegen
  • Een Harmony Ultimate-controller toevoegen
  • Introductie van regels
  • Introductie van MQTT en het installeren van een MQTT-broker op je Pi, met sensoren op een Arduino
  • Gegevens opnemen en grafieken maken

Inleiding tot Z-Wave

Z-Wave is al jaren het dominante domotica-protocol: het is betrouwbaar, 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 is lastig in te stellen en betrouwbaarheid is niet gegarandeerd.





Als je overweegt een huis vol Z-Wave-sensoren aan te schaffen, speciaal voor gebruik met OpenHAB, zou ik je dringend willen vragen om je gedachten te heroverwegen. Het kan goed uitpakken voor je, of het kan worden geplaagd 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 je niet 100% genoegen neemt met OpenHAB en je opties in de toekomst open wilt laten: Z-Wave werkt bijvoorbeeld met de Samsung SmartThings-hub, evenals met Z-Wave-specifieke hubs zoals Homeseer, en een reeks andere software-opties zoals: Domoticz .

Hoewel OpenHAB een Z-Wave-binding bevat, moet u nog steeds: 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 dat gaan we hier niet behandelen. 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 Hub Z-Wave Plus USB om gateway te creëren (gewoon wit) KOOP NU OP AMAZON

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 kennismaking met Z-Wave is, ligt het iets ingewikkelder.

Ten eerste aan de hardwarekant: elke controller heeft zijn eigen manier om apparaten te koppelen (technisch bekend als 'inclusion mode' waarin een node-ID wordt toegewezen). In het geval van de Aotec Z-Stick betekent dit dat je hem loskoppelt van de USB-poort en eenmaal op de knop drukt om hem in de opnamemodus te zetten. Breng het dan in de buurt van het apparaat dat je koppelt en druk ook daarop 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 van je apparaat te lezen) .





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

HABmin- en Z-Wave-bindingen installeren

Omdat OpenHAB niet echt een configuratiehulpprogramma voor Z-Wave is, gaan we een andere webbeheertool installeren die dat wel doet - iets dat HABmin wordt genoemd. Ga naar de HABmin Github-repository download de huidige versie. Als je het eenmaal hebt uitgepakt, vind je 2 .kan bestanden in de addons-directory – deze moeten in de corresponderende add-onsdirectory in uw OpenHAB Home-share worden geplaatst (als je ook de Aotec gen5 Z-Stick gebruikt, zorg er dan voor dat je ten minste versie 1.8 van de Z-Wave binding hebt) .





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

Let op: er is ook een HABmin 2 onder actieve ontwikkeling. De 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 je 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 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 makkelijker om de opdracht één keer uit te voeren voordat je hem aansluit en één keer daarna, zodat je kunt zien wat er verandert als je het niet zeker weet.

Open het OpenHAB-configuratiebestand en wijzig de sectie over Z-Wave, verwijder de opmerkingen van beide regels en plaats uw werkelijke apparaatadres. Een laatste stap voor mij was om de OpenHAB-gebruiker toegang te geven tot de modem.

sudo usermod -a -G dialout openhab

Om alles in actie te brengen, start u OpenHAB opnieuw

sudo service openhab herstart

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

Er is veel te zien in HABMIN, maar het gaat ons alleen om 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.

Z-Wave-items configureren

Elk Z-Wave-apparaat heeft een specifieke configuratie voor OpenHAB. Gelukkig zijn de meeste apparaten al onderzocht 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 dit voorlopig wordt ondersteund.

Ten eerste heb ik een eenvoudige Everspring AN158-stroomschakelaar en -meter op Node 3. Een snelle Googlen leidde me naar een blogpost op Wetwa.re, met een voorbeelditemconfiguratie. Dit heb ik als volgt aangepast:

Switch Dehumidifier_Switch 'Ontvochtiger' {zwave='3:command=switch_binary'}

Nummer 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 Multi-Sensor (Z-Wave Plus) KOOP NU OP AMAZON

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

Nummer Gang_Temperature 'Haltemperatuur [%.1f °C]' (Hal, Temperatuur) {zwave='2:0:command=sensor_multilevel,sensor_type=1,sensor_scale=0'}

Nummer Hallway_Humidity 'Hal Humidity [%.0f %%]' (Hal, Humidity) {zwave='2:0:command=sensor_multilevel,sensor_type=5'}

Nummer Hallway_Luminance 'Halluminance [%.0f Lux]' (Hal) {zwave='2:0:command=sensor_multilevel,sensor_type=3'}

Neem contact op met Hallway_Motion 'Hallway Motion [%s]' (Hal, Motion) {zwave='2:0:command=sensor_binary,respond_to_basic=true'}

Nummer sensor_1_battery 'Batterij [%s %%]' (Motion) {zwave='2:0:command=battery'}

Als het formaat hiervan je vreemd lijkt, ga dan terug naar de eerste beginners gids , met name het gedeelte Hue-binding, waar ik uitleg hoe items worden toegevoegd. U hoeft waarschijnlijk alleen maar dergelijke voorbeelden te kopiëren, maar als u een nieuw apparaat heeft, bevat de bindende documentatie alle details commando's .

Logitech Harmony-binding

Voordat we ingaan op 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 om de ervaring van het thuismediacentrum te vereenvoudigen, maar ze staan ​​vaak als een apart systeem binnen het slimme huis. Met OpenHAB kunnen Logitech Harmony-activiteiten en volledige apparaatcontrole nu onderdeel zijn van uw gecentraliseerde systeem en zelfs worden opgenomen in automatiseringsregels.

Begin met het installeren van de drie bindingsbestanden die u vindt door apt-cache te gebruiken om naar 'harmony' te zoeken:

Vergeet niet om chown de bindingsdirectory opnieuw als je klaar bent:

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

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

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

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

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

########## HARMONIE AFSTANDSBEDIENINGEN ##########

harmoniehub:host=192.168.1.181 of je ip

harmoniehub:gebruikersnaam= uw-harmony-e-mail-login

harmoniehub:wachtwoord= je wachtwoord

Het IP-adres is dat van uw Harmony-hub. Gebruik een netwerkscanner om dat uit te zoeken. U moet ook uw inloggegevens invoeren, de gegevens die u invoert wanneer u het standaard Harmony-configuratiehulpprogramma start. Dat is het. Bij het herstarten van uw Hue, zou uw foutopsporingslogboek een plotselinge uitvoer van de binding moeten hebben.

Dit is een JSON-geformatteerde 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. je kunt het nog gemakkelijker maken om te lezen met inklapbare knooppunten door in een online JSON-formatter te plakken zoals deze .

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 de groep en het pictogram als je wilt.

/* Harmony-hub */

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

Dit is een twee richtingen String binding , die zowel de huidige activiteit kan ophalen als de huidige activiteit kan bevelen om iets anders te zijn. Nu kunnen we er een knop voor maken in het sitemapbestand.

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

hoe een bestand te verwijderen dat in een ander programma is geopend

In de vierkante haken zie je elke activiteit samen met het label. Over het algemeen kun je direct verwijzen naar activiteiten zoals je ze op je afstandsbediening hebt genoemd, maar de uitzondering hierop vond ik, was alles met een spatie in de naam van de activiteit, zoals 'Tv kijken'. 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 als dit moeten zien:

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

Een algemene inleiding tot regels

De meeste smart home-hubs bevatten een soort regelcreatie, zodat u automatisch kunt reageren op sensorgegevens en gebeurtenissen in huis. Ik zou zelfs willen beweren dat een echt slim huis niet een huis is dat je tijd hoeft te besteden aan interactie met mobiele apps - het is er een die onzichtbaar is voor de eindgebruiker en volledig geautomatiseerd. Daartoe bevat OpenHAB ook een krachtige scripttaal voor regels die u kunt programmeren, die de complexiteit van de meeste slimme thuishubs of IFTTT-recepten ver te boven gaat.

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

regel 'Kantoorlicht aan als James aanwezig is'

wanneer

Item JamesInOffice gewijzigd van UIT naar AAN

dan

sendCommand (Office_Hue,ON)

einde

regel 'Kantoorlicht uit als James vertrekt'

wanneer

Item JamesInOffice gewijzigd van AAN naar UIT

dan

sendCommand (Office_Hue,UIT)

einde

Eerst noemen we de regel - wees beschrijvend, zodat u 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 je in regels kunt gebruiken, maar voor nu hebben we te maken met twee eenvoudige stukjes syntaxis: Item , waarmee u de staat van iets kunt opvragen; en sendCommand , die 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 handig om ze gescheiden te hebben voor of ik het gebied binnenkom of verlaat - en het kan een goed idee zijn om ergens een lichtsensor toe te voegen in de vergelijking, zodat we niet onnodig lichten aandoen.

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

regel 'Elke ochtend trainen'

wanneer

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

dan

harmonieStartActivity('Oefening')

einde

Nogmaals, we noemen de regel, geven de voorwaarden aan wanneer deze moet vuren en de acties die moeten worden ondernomen. Maar in dit geval definiëren we een tijdpatroon. De grappige code die je tussen de aanhalingstekens ziet, is een CRON-expressie voor Quartz Scheduler (het formaat is iets anders dan een gewone CRONtab). ik gebruikte cronmaker.com om te helpen bij het maken van de uitdrukking, maar u kunt ook de indelingsgids [niet langer beschikbaar] lezen voor een gedetailleerde uitleg en meer voorbeelden.

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

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

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 beheersen. Ik heb een enkele luchtontvochtiger die ik overal moet verplaatsen waar dat nodig is, dus ik besloot naar al mijn vochtigheidssensoren te kijken, uit te zoeken welke de hoogste is en die in een variabele op te slaan. Het wordt momenteel elke minuut geactiveerd, maar dat kan gemakkelijk worden verlaagd. Neem eerst een kijkje:

importeer org.openhab.core.library.types.*

importeer org.openhab.model.script.actions.*

import java.lang.String

regel 'Vochtigheidsmeter'

wanneer Tijd cron '0 * * * * ?'

dan

var prevHigh = 0

var highHum = ''

Vochtigheid?.members.forEach[hum|

logDebug('humidity.rules', hum.name);

if(hum.state als DecimalType > prevHigh){

prevHigh = brom.status

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

}

hoe pagina's te herschikken in word mac

]

logDebug('humidity.rules', highHum);

postUpdate (Ontvochtiger_Needed,highHum);

einde

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

Maar dat is waarschijnlijk niet nodig - er zijn honderden voorbeeldregels:

MQTT voor OpenHAB en Internet of Things

MQTT is een lichtgewicht berichtensysteem voor machine-naar-machine communicatie - een soort Twitter voor je Arduino's of Raspberry Pi's 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, meestal microcontrollers met weinig middelen die een betrouwbare manier nodig hebben om sensorgegevens terug naar uw hub te verzenden of externe opdrachten te ontvangen. Dat is precies wat we ermee gaan doen.

Maar waarom het wiel opnieuw uitvinden?

MQ Telemetry Transport is al in 1999 uitgevonden om oliepijpleidingen te verbinden via langzame satellietverbindingen, speciaal ontworpen om het batterijgebruik en de bandbreedte te minimaliseren en toch betrouwbare gegevenslevering te bieden. 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, zodat iedereen het kon gebruiken en implementeren. We houden van gratis.

Je vraagt ​​je misschien af ​​waarom we ons zelfs maar druk maken over nog een ander protocol - we hebben toch al HTTP - dat kan worden gebruikt om snelle berichten te verzenden tussen allerlei met internet verbonden systemen (zoals OpenHAB en IFTTT, vooral met het nieuwe makerkanaal ). En je zou gelijk hebben. De verwerkingsoverhead van een HTTP-server is echter vrij groot - zozeer zelfs dat je er niet gemakkelijk een kunt uitvoeren op een ingebouwde microcontroller zoals de Arduino (tenminste, dat kan, maar je hebt niet veel geheugen meer over voor iets anders ). MQTT is aan de andere kant licht van gewicht, dus het verzenden van berichten over uw netwerk zal de leidingen niet verstoppen, en het 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, kunnen MQTT-clients zich abonneren op een bepaald kanaal om alle berichten van daar te ontvangen, en hun eigen berichten publiceren naar dat kanaal. Dit patroon voor publiceren en inschrijven wordt aangeduid als: kroeg / sub , in tegenstelling tot de traditie client server HTTP-model.

HTTP vereist dat je contact opneemt met de machine waarmee je communiceert, hallo zegt, en vervolgens heen en weer moet gaan om elkaar constant te erkennen terwijl je gegevens ontvangt of plaatst. Met pub/sub hoeft de client die publiceert niet te weten welke clients zijn geabonneerd: het pompt gewoon de berichten uit en de broker distribueert ze opnieuw naar alle geabonneerde clients. Elke klant kan zowel onderwerpen publiceren als zich abonneren op onderwerpen, 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 getallen of grote tekstblokken, JSON-geformatteerde datagrammen of zelfs afbeeldingen en binaire bestanden verzenden.

Het is niet zo dat MQTT voor alles beter is dan HTTP, maar het is is meer geschikt als we veel sensoren door het hele huis gaan hebben die constant rapporteren.

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

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 je ofwel een webgebaseerde MQTT-makelaar gebruiken (betaald of gratis), of de gratis software op je Pi installeren. Ik wil het allemaal in huis 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 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 mug

Dat is alles wat we hoeven te doen om een ​​MQTT-server op het lokale netwerk te laten draaien. Uw broker draait standaard op poort 1883.

Controleer of uw MQTT-server werkt met behulp van 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. Sla op en klik op verbinden. Als het kleine stoplicht rechtsboven op groen springt, ben je klaar om te gaan.

Voor een snelle test, klik op het tabblad 'abonneren' en typ inTopic / in het tekstvak en druk vervolgens op de Abonneren knop. Je bent nu geabonneerd om berichten te ontvangen over het onderwerp met de naam inTopic, hoewel er 0 berichten worden 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 in dat onderwerp moeten zien verschijnen.

Voordat we echte sensoren aan ons netwerk toevoegen, moeten we meer weten over onderwerpniveaus, waarmee we het MQTT-netwerk kunnen structureren en filteren. Onderwerpnamen zijn hoofdlettergevoelig, mogen niet beginnen met $, of een spatie bevatten, of niet-ASCII-tekens - standaard programmeerpraktijken voor variabelenamen, eigenlijk.

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

inTopic / smallSubdivision / evenSmallerSubdivisie

myHome/livingRoom/temperature

myHome/livingRoom/humidity

myHome/keuken/temperatuur

myHome/keuken/vochtigheid

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

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

De joker + vervangt elk onderwerpniveau. Bijvoorbeeld:

myHome/+/temperatuur

zou de klant op beide abonneren

myHome/livingRoom/temperature

myHome/keuken/temperatuur

... maar niet de luchtvochtigheid.

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

mijnHuis/woonkamer/#

Technisch gezien kun je je ook abonneren op het rootniveau # waarmee je werkelijk alles op gang krijgt via de makelaar, 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 ongeveer 300 berichten in een paar seconden voordat mijn client crashte.

MQTT-beginnerstip: ' /mijn huis/' is een ander onderwerp dan ' mijn huis/' – het toevoegen van een schuine streep aan het begin zorgt voor een leeg onderwerpniveau, wat weliswaar technisch geldig is, maar niet wordt aanbevolen omdat het verwarrend kan zijn.

Nu we de theorie kennen, gaan we een Arduino, Ethernet Shield en een DHT11 temperatuur- en vochtigheidssensor gebruiken - je hebt er waarschijnlijk een in je starterskit, maar zo niet, verwissel dan gewoon de omgevingssensor voor een beweging sensor (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 dan het gebruik van een netwerkverbinding in elke kamer, maar dit dient om de basis te leren.

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

Hier is mijn voorbeeldcode die je kunt aanpassen : de DHT11-signaaluitgang bevindt zich op pin 7. Wijzig het server-IP voor dat van uw Pi op de volgende regel:

client.setServer('192.168.1.99', 1883);

Helaas kunnen we de vriendelijke naam 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 dat we niet willen verspillen. Om de onderwerpen te wijzigen waarover 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/humidity',buffer);

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

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

Bestudeer de code daar en je zult zien dat je gemakkelijk een LED of relais kunt aansturen door bijvoorbeeld commando's 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 met MQTT.fx op een van 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). Vrij snel zou je berichten moeten zien binnenkomen; en als u AAN of UIT naar het opdrachtonderwerp stuurt, ziet u ook bevestigingen terugkomen.

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 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

Restart OpenHAB

sudo service openhab herstart

Laten we dan een of twee items toevoegen:

/* MQTT-sensoren */

Nummer Himitsu_Temp 'Himitsu Temperatuur [%.1f °C]' (Himitsu,Temperatuur) {mqtt='<[broker:openhab/himitsu/temperature:state:default]'}

Nummer Himitsu_Humidity'Himitsu Vochtigheid [% .1f %%]' (Himitsu, Vochtigheid) {mqtt ='<[broker:openhab/himitsu/humidity:state:default]'}

Inmiddels zou je het formaat moeten begrijpen; het wordt een Nummer item van de MQTT-binding, over een bepaald onderwerp. Dit is een eenvoudig voorbeeld, misschien wilt u verwijzen naar de wiki-pagina waar het kan veel 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 gescheiden RF-netwerk plaatsen. Ik heb ook een identieke versie gemaakt voor Wizwiki 7500-borden: 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 kunt op elk moment de huidige status van die sensoren bekijken, en je zou ook moeten 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 grafieken om de hoek komen kijken. Vasthoudendheid 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 op een round robin-manier worden opgeslagen - oudere gegevens worden weggegooid 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 dan een nieuw bestand aan met de naam rrd4j.volhouden in de configuraties/persistentie map. Plak het volgende in:

Strategieën {

elke minuut : '0 * * * * ?'

elk uur : '0 0 * * * ?'

elke dag : '0 0 0 * * ?'

standaard = elke Wijziging

}

Artikelen {

// zet alles voort wanneer de waarde wordt bijgewerkt, alleen een standaardwaarde, en herstel ze vanuit de database bij het opstarten

* : strategy = everyChange, restoreOnStartup

// vervolgens definiëren we specifieke strategieën van elk uur voor alles in de temperatuurgroep en en elke minuut voor vochtigheid

beste videobewerkings-app voor Android

Temperatuur*: strategie = elk uur

Vochtigheid*: strategie = elke minuut

// als alternatief kunt u hier specifieke items toevoegen, zoals

//Bedroom_Humidity,JamesInOffice: strategie = elke minuut

}

In het eerste deel van dit bestand definiëren we strategieën, wat gewoon betekent dat we een CRON-expressie een naam geven. 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 van elke dag, elk uur en elke minuut. Ik heb ze nog niet allemaal gebruikt, maar dat kan in de toekomst wel.

In de tweede helft van het bestand vertellen we rr4dj welke gegevenswaarden moeten worden opgeslagen. Standaard slaan we alles op elke keer dat het wordt bijgewerkt, maar ik heb ook een aantal op tijd gebaseerde strategieën gespecificeerd voor specifieke sensoren. Temperaturen waar ik me niet zo druk om maak, dus ik heb dat ingesteld om alleen elk uur op te slaan, maar vochtigheid is een grote zorg voor mij, dus ik wil zien hoe het elke minuut verandert. Als er andere gegevens zijn die je specifiek op gezette tijden wilt bewaren, voeg die dan hier nu toe of pas aan waar nodig.

Opmerking: als u de gegevens ook in een grafiek wilt weergeven, MOET u deze minimaal één keer per minuut opslaan. Het maakt niet uit of uw sensorgegevens zelfs zo snel worden bijgewerkt, u hoeft rr4dj alleen maar een keer per minuut te vertellen om ze op te slaan.

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

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

Grafiekitem=Slaapkamer_vochtigheidsperiode=h

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

Om een ​​grafiek met meerdere items te maken, tekent u in plaats daarvan gewoon de groepsnaam:

Grafiekitem=Vochtigheidsperiode=h

Misschien is het ook interessant om te weten dat u deze grafiek elders kunt gebruiken; het genereert een afbeelding met behulp van de volgende URL: http://YOUROPENHABURL:8080/chart?groups=Humidity&period=h

Hoe gaat het? Jouw OpenHAB-systeem op komst?

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

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

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

We hopen dat je de items die we aanbevelen en bespreken leuk vindt! MUO heeft gelieerde en gesponsorde partnerschappen, dus we ontvangen een deel van de inkomsten van sommige van uw aankopen. Dit heeft geen invloed op de prijs die u betaalt en helpt ons de beste productaanbevelingen te doen.

Deel Deel Tweeten E-mail Een beginnershandleiding voor het animeren van spraak

Het animeren van spraak kan een uitdaging zijn. Als u klaar bent om dialoog aan uw project toe te voegen, zullen we het proces voor u opsplitsen.

Lees volgende
Gerelateerde onderwerpen
  • doe-het-zelf
  • Slimme woning
  • Arduino
  • Domotica
  • lange vorm
  • Longform-gids
Over de auteur James Bruce(707 artikelen gepubliceerd)

James heeft een BSc in Artificial Intelligence en is CompTIA A+ en Network+ gecertificeerd. Als hij het niet druk heeft als redacteur van hardwarerecensies, geniet hij van LEGO, VR en bordspellen. Voordat hij bij MakeUseOf kwam, was hij lichttechnicus, leraar Engels en datacenteringenieur.

Meer van James Bruce

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren