Annonse

Gratis betyr ikke alltid "ikke så bra som betalt", og OpenHAB er intet unntak. Open source-hjemmeautomatiseringsprogramvaren overskrider langt mulighetene til noe annet hjemmeautomatiseringssystem på markedet - men det er ikke lett å få satt opp. Faktisk kan det være direkte frustrerende.

Denne guiden er tilgjengelig for nedlasting som en gratis PDF. Last ned OpenHAB Beginner's Guide Del 2: ZWave, MQTT, regler og kartlegging nå. Kopier og del dette med familie og venner.

I del 1 av guiden gikk jeg gjennom deg installere OpenHAB på en Raspberry Pi Komme i gang med OpenHAB Home Automation på Raspberry PiOpenHAB er en moden, åpen kildekode-hjemme-automatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble seg til nesten all hjemmeautomatiseringsmaskinvare på markedet i dag. Les mer , introduserte kjernekonseptene til OpenHAB, og viste deg hvordan du legger til dine første elementer i systemet. I dag kommer vi videre:

  • Legge til ZWave-enheter
  • Legge til en Harmony Ultimate-kontroller
  • Innføring av regler
  • Introduserer MQTT, og installerer en MQTT megler på din Pi, med sensorer på en Arduino
  • Registrerer data og grafer dem

Introduksjon til Z-Wave

Z-Wave har vært den dominerende hjemmeautomatiseringsprotokollen i mange år: den er pålitelig, har blitt omfattende utviklet og fungerer over en mye lengre rekkevidde enn noen andre smarte hjemmeprodukter. Det er hundrevis av Z-Wave sensorer tilgjengelig for deg som utfører et bredt spekter av oppgaver. OpenHAB kan jobber med Z-Wave, men er et problem å sette opp, og pålitelighet er ikke garantert.

Hvis du vurderer å kjøpe et hus fullt av Z-Wave-sensorer spesielt for bruk med OpenHAB, vil jeg oppfordre deg til å vurdere på nytt. Det kan fungere utmerket for deg, eller det kan være plaget med små, men vedvarende problemer. I hvert fall, ikke kjøp et hus fullt av sensorer før du har hatt en sjanse til å prøve ut noen få. Den eneste grunnen til å velge Z-Wave er hvis du ikke er 100% bosatt i OpenHAB, og ønsker å la alternativene dine være åpne i fremtiden: Z-Wave fungerer for eksempel med Samsung SmartThings Hvilken smart hub for hjemmeautomasjon er best for deg?En stund tenkte folk på ideen som noe mer enn en gimmick, men nylige produktutgivelser har vist at automatisering av smarthus begynner å oppfylle løftene. Les mer hub, samt Z-Wave-spesifikke huber som Homeseer, og en rekke andre programvarealternativer som Domoticz.

Selv om OpenHAB inkluderer en Z-Wave-binding, må du likevel gjøre det konfigurer Z-Wave-nettverket først, før OpenHAB kan begynne å spørre etter data. Hvis du har et Rasberry-kontrollkort, har du programvare for konfigurering av nettverket, så vi vil ikke dekke det her. Hvis du kjøpte en Aeotec USB Z-Stick-kontroller eller lignende, har du sannsynligvis ikke noen programvare inkludert, så les videre.

Aeotec Z-Stick Gen5, Z-Wave Plus USB for å lage gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB for å lage gateway Kjøp nå på Amazon $44.95

Hvis du allerede har et Z-Wave-nettverksoppsett, kan du bare koble kontrolleren til Pi og begynne å konfigurere innbindingen og elementene. Hvis dette er ditt første forsøk på Z-Wave, er det litt mer sammensatt.

For det første på maskinvaresiden: hver kontroller har sin egen måte å sammenkoble med enheter (teknisk kjent som "inkluderingsmodus" der en node-ID er tilordnet). Når det gjelder Aotec Z-Stick, betyr dette å koble den fra USB-porten, og trykke en gang på knappen for å plassere den i inkluderingsmodus. Ta den deretter nær enheten du kobler sammen, og trykk på inkluderingsknappen på den også (dette vil også variere: Everspring-kontakten krever at knappen trykkes tre ganger etter hverandre, så leksjonen her er å lese bruksanvisningen til enheten din).

Z-Stick blinker kort for å indikere suksess. Dette gir problemer når du kobler den tilbake til Pi-en, da det tilordnes en ny port. Start Pi-enheten på nytt for å få den til å tilbakestilles til standardporten hvis du synes det er dynamisk tilordnet en annen. Bedre fremdeles: ikke koble den til Pi-en før du har gjort alle maskinvareparringene først.

Installere HABmin og Z-Wave bindinger

Siden OpenHAB ikke egentlig er et konfigurasjonsverktøy for Z-Wave, kommer vi til å installere et annet nettadministrasjonsverktøy som gjør det - noe som heter HABmin. Gå videre til HABmin Github depot last ned gjeldende utgivelse. Når du har pakket opp det, finner du 2 .krukke filer i addons-katalogen - disse skal plasseres i den tilsvarende addons-katalogen i din OpenHAB Home-deling (hvis du også bruker Aotec gen5 Z-Stick, må du sørge for at du har minst versjon 1.8 av Z-Wave-bindingen).

Deretter lager du en ny mappe i webapps-katalogen, og kalte den "habmin" (små bokstaver er viktig). Kopier resten av nedlastede filer der inne.

Merk: Det er også en HABmin 2 under aktiv utvikling. Installasjonen er stort sett den samme, men med ett tillegg .jar addon. Det kan være verdt å prøve begge deler bare for å se hvilket du foretrekker.

Hvis du ikke allerede har gjort det, kan du koble kontrolleren til Pi-en. Skriv inn følgende for å finne riktig port.

ls / dev / tty *

Du leter etter noe med USB i navnet, eller i mitt spesielle tilfelle presenterte Z-stick seg som /dev/ttyACM0 (et modem). Det kan være lettere å gjøre kommandoen en gang før du kobler den til, og en gang etter, slik at du kan se hva som endres hvis du er usikker.

devtty

Åpne OpenHAB-konfigurasjonsfilen og modifiser seksjonen på Z-Wave ved å fjerne begge linjene og angi den faktiske enhetsadressen. Et siste skritt for meg var å la OpenHAB-brukeren få tilgang til modemet.

sudo usermod -a -G dialout openhab

For å sparke alt til handling, start OpenHAB på nytt

sudo service openhab omstart

Forhåpentligvis, hvis du sjekker avlusingsloggen, vil du se noe slikt. Gratulerer, du snakker nå Z-Wave. Du kan også finne avlusingsloggen oversvømmet av meldinger fra forskjellige Z-Wave-noder. La oss begynne med å sjekke HABMIN for å se hva den er funnet: http://openhab.local: 8080 / habmin / index.html (erstatter openhab.local med Raspberry Pi vertsnavnet eller IP-adressen).

zwave starter opp i åpen logg

Det er mye å se i HABMIN, men vi er bare veldig opptatt av Konfigurasjon -> Bindinger -> Z-Wave -> Enheter, som du kan se nedenfor. Utvid noden for å redigere etiketten for plassering og navn slik at du kan referere.

rediger enhetsnavnet

Konfigurere Z-Wave-elementer

Hver Z-Wave-enhet har en spesifikk konfigurasjon for OpenHAB. Heldigvis har de fleste enhetene allerede blitt utforsket, og det vil være eksempler der ute allerede for deg. Konfigurering av tilpassede enheter som ikke blir gjenkjent, er langt utenfor omfanget av denne guiden, men la oss anta at den støttes for nå.

Først har jeg en enkel Everspring AN158 strømbryter og måler på Node 3. En rask Googling førte meg til et blogginnlegg på Wetwa.re, med en konfigurasjonseksempel på eksempler. Jeg tilpasset dette slik:

Bytt avfukter_Switch "Avfukter" {zwave = "3: kommando = switch_binary"} Nummer avfukter_vatt "Avfukter strømforbruk [% .1f W]" {zwave = "3: kommando = meter"}

Perfekt.

Neste opp er en Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multisensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multisensor (Z-Wave Plus) Kjøp nå på Amazon $69.27

For denne fant jeg en prøvekonfigurasjon kl iwasdot.com, og multisensoren min er på Node 2.

Antall Hallway_Temperature "Hallway Temperatur [% .1f ° C]" (Gang, temperatur) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Antall Hallway_Humidity "Hallway Fuktighet [% .0f %%]" (Gang, Fuktighet) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 5"} Number Hallway_Luminance "Hallway Luminance [% .0f Lux]" (Hallway) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 3"} Kontakt Hallway_Motion "Hallway Motion [% s]" (Hallway, Motion) {zwave = "2: 0: kommando = sensor_binary, respond_to_basic = true"} Nummerføler_1_batteri "Batteri [% s%%]" (Bevegelse) {zwave = "2: 0: kommando = batteri"}

Hvis formatet på dette ser rart ut for deg, kan du gå tilbake til det første nybegynnerguide Komme i gang med OpenHAB Home Automation på Raspberry PiOpenHAB er en moden, åpen kildekode-hjemme-automatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble seg til nesten all hjemmeautomatiseringsmaskinvare på markedet i dag. Les mer , spesielt Hue-bindingsdelen, hvor jeg forklarer hvordan elementer legges til. Du trenger sannsynligvis bare noen gang å kopiere limeeksempler som dette, men i tilfelle du har en ny enhet, inneholder den bindende dokumentasjonen alle kommandoer.

Logitech Harmony Binding

Før vi hoppet inn på regler, ønsket jeg å legge til en rask merknad om å jobbe med Harmony-bindingen. Jeg er en stor tilhenger av Harmony-serien med ultimate fjernkontroller Logitech Harmony Ultimate Review and GiveawayStuen din er kaos - innrøm det. Du blir tilgitt for å lure på hvilke fjernkontroller hvilken enhet. Hva med TV, forsterker, TiVO, BluRay-spiller, kanskje til og med belysning - bytteaktiviteter blir en lang ... Les mer for å forenkle opplevelsen av hjemmemediesenteret, men de står ofte som et eget system i smarthuset. Med OpenHAB kan Logitech Harmony-aktiviteter og full enhetskontroll nå være en del av det sentraliserte systemet ditt, og til og med inngå i automatiseringsregler.

Begynn med å installere de tre bindende filene du finner ved å bruke apt-cache for å søke etter “harmoni”:

openhab apt-cache søk etter harmonibinding

Ikke glem å gjøre det chown bindingsmappen igjen når du er ferdig:

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

For å konfigurere bindingen, åpner du openhab.cfg-filen og legger til en ny seksjon som følger:

########## HARMONY FJERNKONTROLLER ########## harmonyhub: host = 192.168.1.181eller ip-en din
harmonyhub: brukernavn =your-harmoni-e-login
harmonyhub: passord =ditt passord

IP-adressen er den til Harmony-huben. Bruk en nettverksskanner for å finne ut av det. Du må også oppgi innloggingsdetaljene dine, de du oppgir når du starter standard Harmony konfigurasjonsverktøy. Det er det. Når du begynner å starte nyansen på ny, skal feilspråkloggen din ha en plutselig utbrudd med utdata fra bindingen.

Dette er en JSON-formatert liste over alle aktiviteter, enheter og kommandoer som kan sendes. Det er lurt å kopiere dette for fremtidig referanse. Du kan gjøre det enda enklere å lese med sammenleggbare noder ved å lime inn i en online JSON-formater som denne.

json formatert openhab-utgang

I tillegg til standard PowerOff-aktivitet som er en standard, finner du dine egne definerte aktiviteter oppført her med navn. La oss nå lage en enkel knappknapp for å starte aktiviteter. Først legger du til følgende linje i varefilen. Endre gruppe og ikon hvis du vil.

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

Dette er en toveis strengbinding, som både kan hente den nåværende aktiviteten, og kommandere den nåværende aktiviteten til å være noe annet. Nå kan vi opprette en knapp for den, i områdekartfilen.

Bytt vare = Harmony_Activity mappings = [PowerOff = 'Off', Trening = 'Trening', 13858434 = 'TV', Karaoke = 'Karaoke']

I den firkantede beslaget ser du hver aktivitet sammen med etiketten. Generelt kan du henvise direkte til aktiviteter som du har navngitt dem på fjernkontrollen, men unntaket fra dette fant jeg, var noe med et mellomrom i aktivitetsnavnet, for eksempel "Se TV". I dette tilfellet må du bruke aktivitets-IDen. Igjen, kan du finne IDen i JSON feilsøkingsutdata. Lagre og frisk opp grensesnittet, bør du se noe som ligner på dette:

openhab-harmoni i nettstedskartet

Du kan også se på aktiviteter i reglene dine, som vi ser neste. Les wikisiden for mer info om Harmony binding.

En generell introduksjon til regler

De fleste smarthus-huber inkluderer en slags regler for å lage regler, slik at du automatisk kan reagere på sensordata og hendelser i hjemmet. Faktisk vil jeg hevde at et virkelig smart hjem ikke er det du trenger å bruke tid på å samhandle med mobilapper - det er et som er usynlig for sluttbrukeren og fullstendig automatisert. For dette formål inkluderer OpenHAB også et kraftig regelscript-språk som du kan programmere, langt overgår kompleksiteten til de fleste smarte hjemme knutepunkter Battle of the Smart Home Hubs: Hva er der ute og hva som kommer? Les mer eller IFTTT-oppskrifter IFTTT kobles nå til noe: Vi presenterer Maker ChannelDe potensielle bruksområdene for IFTTT er uendelige. Men til nå har det vært vanskelig å grense det til dine egne maskinvareprosjekter. I dag er det alt endret. Les mer .

Programmeringsregler høres verre ut enn det er. La oss starte enkelt med et par regler som slår på eller av lyset avhengig av tilstedeværelsessensor:

regel "Kontoret lyser på når James er til stede" da element JamesInOffice ble endret fra OFF til ON. send deretter kommandoen (Office_Hue, ON) sluttregel "Kontor lys av når James forlater" da element JamesInOffice ble endret fra ON til OFF. send deretter kommandoen (Office_Hue, OFF) slutt

Først kaller vi regelen - vær beskrivende, så du vet hvilken hendelse som avfyres. Deretter definerer vi vår enkle regel ved å si når x er sant, gjør du da. Slutt betegner lukkingen av den bestemte regelen. Det er en rekke spesielle ord du kan bruke i regler, men foreløpig har vi å gjøre med to enkle syntaksbiter - Punkt, som lar deg spørre om tilstanden til noe; og sendCommand, som gjør akkurat det du tror det vil. Jeg fortalte deg at dette var enkelt.

Det er sannsynligvis unødvendig å bruke et par regler, men ettersom logikken min blir mer kompleks, vil det være en fordel å ha dem adskilt for om jeg er inn eller ut av området - og det kan være en god ide å legge til en lyssensor et sted i ligningen, slik at vi ikke unødvendig slår på tennes.

La oss se på et annet eksempel for å lage en planlagt regel.

regel "Trening hver morgen" når Time cron "0 0 8 1/1 *? *" deretter harmoniStartActivity ("Trening") slutt.

Igjen kaller vi regelen, oppgir forholdene når den skal fyre, og handlingene som skal utføres. Men i dette tilfellet definerer vi et tidsmønster. Den morsomme koden du ser i sitatene er et CRON-uttrykk for Quartz Scheduler (formatet er litt annerledes enn en vanlig CRONtab). jeg brukte cronmaker.com for å hjelpe til med å lage uttrykket, men du kan også lese formatguiden [No Longer Available] for en detaljert forklaring og flere eksempler.

cron generator
CronMaker.com brukes til å generere riktig formatert Cron-uttrykk

Mine regler sier ganske enkelt “08.00 hver morgen, hver dag i uken, be Harmony Ultimate-systemet mitt starte treningsaktiviteten”, som igjen aktiverer TV-en, Xbox, forsterkeren og trykker på A-knappen etter et minutt for å starte disken i stasjonen.

Dessverre er OpenHAB ennå ikke i stand til å gjøre øvelsen for meg.

En regel til som jeg vil vise deg er noe jeg bruker for å styre fuktighetsnivåene i hjemmet mitt. Jeg har en enkelt avfukter som jeg trenger å bevege meg rundt der det trengs, så jeg bestemte meg for å se på alle fuktighetssensorene mine, finne hvilken som er høyest og lagre den i en variabel. Den utløses for øyeblikket hvert minutt, men det kan lett senkes. Ta en titt først:

import org.openhab.core.library.types. * importer org.openhab.model.script.actions. * importer java.lang. Strenge regel "Fuktighetsmonitor" når Time cron "0 * * * *?" deretter var prevHigh = 0 var highHum = "" Fuktighet? .medlemmer.for hver [brum | logDebug ("fuktighet.regler", hum.navn); if (hum.state som DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); slutt.

Kjernen av regel er i Fuktighet? .Members.foreach linje. Fuktighet er et gruppenavn for mine fuktighetssensorer; .members griper alle elementene i den gruppen; for hver gjentas over dem (med et nysgjerrig firkantet brakettformat du sannsynligvis ikke er kjent med). Syntaks for regler er et derivat av Xtend, slik at du kan lese Xtend dokumentasjon hvis du ikke finner et eksempel du kan tilpasse.

Du trenger sannsynligvis ikke å gjøre det - det er hundrevis av eksempler på regler der ute:

  • Detaljert forklaring av regler på den offisielle wikien
  • De offisielle regler prøver wikiside
  • Tar regler til nye høyder
  • Avanserte prøver på IngeniousFool.net

MQTT for OpenHAB og Internet of Things

MQTT er et lett meldingssystem for kommunikasjon fra maskin til maskin - en slags Twitter for deg Arduinos eller Raspberry Pis for å snakke med hverandre (selv om det selvfølgelig fungerer med mye mer enn bare de). Det vokser raskt i popularitet og finner seg et hjem med Internet of Things-enheter, som vanligvis er lave ressursmikrokontrollere som trenger en pålitelig måte å overføre sensordata tilbake til huben din eller motta fjernkontrollen kommandoer. Det er nøyaktig hva vi skal gjøre med det.

Men hvorfor finne opp hjulet på nytt?

MQ Telemetry Transport ble oppfunnet helt tilbake i 1999 for å koble oljerørledninger via treg satellitt tilkoblinger, spesielt designet for å minimere batteribruk og båndbredde, samtidig som de gir pålitelige datautlevering. Gjennom årene har designprinsippene forblitt de samme, men brukstilfellet har flyttet seg fra spesialiserte innebygde systemer til generelle Internet of Things-enheter. I 2010 ble protokollen utgitt royaltyfritt, åpent for alle å bruke og implementere. Vi liker gratis.

Du lurer kanskje på hvorfor vi til og med bry oss med nok en protokoll - vi har jo tross alt HTTP - som kan brukes til å sende hurtigmeldinger mellom alle slags nettkoblede systemer (som OpenHAB og IFTTT, spesielt med det nye produsentkanal IFTTT kobles nå til noe: Vi presenterer Maker ChannelDe potensielle bruksområdene for IFTTT er uendelige. Men til nå har det vært vanskelig å grense det til dine egne maskinvareprosjekter. I dag er det alt endret. Les mer ). Og du hadde rett. Imidlertid er behandlingsoverheadene til en HTTP-server ganske stor - så mye at du ikke lett kan kjøre en på en innebygd mikrokontroller som Arduino (i det minste, du kan, men du har ikke mye minne igjen til noe ellers). MQTT er derimot lett, så å sende meldinger rundt nettverket ditt vil ikke tette rørene opp, og det kan lett passe inn i det lille Arduino-minneplassen.

Hvordan fungerer MQTT?

MQTT krever både en server (kalt en "megler") og en eller flere klienter. Serveren fungerer som mellommann, mottar meldinger og sender den ut til alle interesserte klienter.

La oss fortsette med Twitter-for-maskiner analogi skjønt. Akkurat som Twitter-brukere kan tweete sine egne meningsløse 140 tegn, og brukerne kan "følge" andre brukere for å se en kuratert strøm av innlegg, MQTT-klienter kan abonnere på en bestemt kanal for å motta alle meldinger derfra, samt publisere egne meldinger til det kanal. Dette publiserings- og abonnementsmønsteret kalles pub / sub, i motsetning til tradisjonen klient server modell av HTTP.

HTTP krever at du når frem til maskinen du kommuniserer med, si hei, for så å ha frem og tilbake for å konstant erkjenne hverandre mens du får eller legger inn data. Med pub / sub trenger ikke klienten som publiserer vite hvilke klienter som abonnerer: den pumper bare ut meldingene, og megleren distribuerer dem til eventuelle abonnerte klienter. Enhver klient kan både publisere og abonnere på emner, akkurat som en Twitter-bruker.

I motsetning til Twitter er MQTT ikke begrenset til 140 tegn. Det er dataagnostisk, slik at du kan sende små tall eller store tekstblokker, JSON-formatert datagrammer, eller til og med bilder og binære filer.

Det er ikke slik at MQTT er bedre enn HTTP for alt - men det er mer egnet hvis vi skal ha mange sensorer rundt om i huset, og rapporterer kontinuerlig.

Det er også viktig å vite at OpenHAB ikke vil fungere som din MQTT-megler - vi tar opp den biten senere. OpenHAB vil imidlertid fungere som en klient: den kan både publisere OpenHAB-aktivitetsloggen din, så vel som å binde spesiell kanaler til enheter, slik at du for eksempel kan ha en bryter som styres av MQTT-meldinger på en bestemt kanal. Dette er ideelt for å lage et hus fullt av sensorer.

Installer Mosquitto på din Pi

Selv om OpenHAB inkluderer en MQTT-klient, slik at du kan abonnere på et emne og også publisere meldinger, vil den ikke fungere som serveren. For det må du enten bruke en nettbasert MQTT-megler (betalt eller gratis), eller installere gratis programvare på Pi-en din. Jeg vil gjerne ha det hele i huset, så jeg har installert Mosquitto på Pi.

Dessverre er den tilgjengelige versjonen via vanlig apt-get helt utdatert. La oss i stedet legge til de nyeste kildene.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key legg til mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install mygg.

Det er alt vi trenger å gjøre for å ha en MQTT-server i gang i det lokale nettverket. Megleren din kjører som standard på port 1883.

Sjekk at MQTT-serveren din bruker den gratis MQTT.fx, som er plattform. Klikk på innstillingsikonet for å opprette en ny profil, og skriv inn Raspberry Pi sin IP-adresse eller navn. Lagre og trykk på tilkoblingen. Hvis det lille trafikklyset øverst til høyre blir grønt, er du god til å gå.

mqttfx eksempelprofil

For en rask test, klikk på "abonner" -fanen og skriv inTopic / inn i tekstboksen, og trykk deretter på Abonnere knapp. Du er nå abonnert på å motta melding om emnet som heter inTopic, selv om det viser 0 meldinger. Gå tilbake til publiseringsfanen, skriv inTopic i den lille boksen og en kort melding i den store tekstboksen nedenfor. Truffet publisere noen få ganger og se tilbake på abonnementsfanen. Du bør se noen få meldinger som har dukket opp i det emnet.

inTopic MQTT-test

Før vi legger til noen faktiske sensorer i nettverket vårt, må vi lære om emnenivåer, som gjør at vi kan strukturere og filtrere MQTT-nettverket. Emnenavn er store og små bokstaver, bør ikke starte med $, eller inneholde et mellomrom eller ikke-ASCII-tegn - standard programmeringspraksis for variabelnavn, egentlig.

Separatoren indikerer et emnenivå, som er hierarkisk, for eksempel er følgende gyldige emnenivåer.

inTopic / smallSubdivision / evenSmallerSubdivision. MyHome / stue / temperatur. MyHome / stue / fuktighet. MyHome / kjøkken / temperatur. Myhome / kjøkken / fuktighet

Allerede bør du se hvordan denne trestrukturen er perfekt for et smart hjem fullt av sensorer og enheter. Den beste fremgangsmåten for bruk med flere sensorer i et enkelt rom er å publisere hver sensorvariabel som sitt eget emnenivå - forgrener seg til mer spesifisitet (som i eksemplene ovenfor) - heller enn å prøve å publisere flere sensortyper til det samme kanal.

Klienter kan deretter publisere eller abonnere på et hvilket som helst antall individuelle emnenivåer, eller bruke noen spesielle jokertegn for å filtrere fra høyere opp i treet.

+ Jokertegnene erstatter alle emnivåer. For eksempel:

MyHome / + / temperatur

vil abonnere klienten på begge

MyHome / stue / temperatur. MyHome / kjøkken / temperatur

... men ikke fuktighetsnivåene.

# Er et jokertegn på flere nivåer, slik at du kan hente hva som helst fra LivingRoom-sensorgruppen med:

Myhome / stue / #

Teknisk kan du også abonnere på rotnivået # som du får deg absolutt alt til å gå passerer gjennom megleren, men det kan være som å stikke en brannslange i ansiktet ditt: litt overveldende. Prøv å koble til den offentlige MQTT-megleren fra HiveMQ og abonnere på #. Jeg fikk omtrent 300 meldinger i løpet av få sekunder før klienten min bare krasjet.

MQTT begynnertips: “/myHome/” er et annet tema som “mitt hjem/" - inkludert en skråstrek i starten skaper et tomt emnenivå, som selv om det er teknisk gyldig, ikke anbefales fordi det kan være forvirrende.

Nå som vi kjenner teorien, la oss gå med en Arduino, Ethernet Shield og en DHT11 temperatur- og fuktighetssensor - har du sannsynligvis en i startpakken, men hvis ikke, bare bytt ut miljøføleren for en bevegelsessensor (eller til og med en knapp).

Publisering av MQTT fra en Arduino med Ethernet-tilkobling

Hvis du har en hybrid Arduino-kompatibel enhet med Wi-Fi eller Ethernet innebygd, skal det også fungere. Etter hvert vil vi ha en bedre / billigere måte å kommunisere at det å måtte bruke en nettverkstilkobling i hvert rom, men dette tjener til å lære det grunnleggende.

Start med å laste ned pubsubclient-bibliotek fra Github. Hvis du har brukt “Last ned som ZIP” -knappen, er strukturen litt feil. Pakk ut, endre navn på mappen til bare pubsubclient, ta deretter de to filene ut av src mappen og flytt dem opp ett nivå til roten til den nedlastede mappen. Flytt deretter hele mappen til din Arduino / bibliotek katalogen.

Her er min prøvekode du kan tilpasse: DHT11-signalutgangen er på pinne 7. Endre server-IP for Pi-en din på følgende linje:

client.setServer ("192.168.1.99", 1883);

Vi kan dessverre ikke bruke det vennlige navnet (OpenHAB.local i mitt tilfelle) ettersom TCP / IP-stabelen på Arduino er veldig forenklet og å legge til koden for Bonjour-navngiving ville være mye minne vi ikke vil kaste bort. Hvis du vil endre emnene som sensordata blir sendt på, blar du ned til disse linjene:

røye buffer [10]; dtostrf (t, 0, 0, buffer); client.publish ( "openhab / Himitsu / temperatur", buffer); dtostrf (h, 0, 0, buffer); client.publish ( "openhab / Himitsu / fuktighet", buffer);

Koden inkluderer også abonnement på en kommandokanal. Finn og juster følgende linje:

client.subscribe ( "openhab / Himitsu / kommando");

Undersøk koden der rundt, så ser du at du enkelt kan kontrollere en LED eller relé, for eksempel ved å sende kommandoer til bestemte kanaler. I eksempelkoden sender den ganske enkelt en melding tilbake som bekrefter mottakelsen av kommandoen.

Last opp koden, koble Arduino til nettverket, og bruk MQTT.fx abonner på en av dem # eller openhab / Himitsu / # (eller hva du endret romnavnet til, men ikke glem å ta med # på slutten). Ganske snart skulle du se meldinger som kommer inn; og hvis du sender ON eller OFF til kommandoemnet, vil du se bekreftelser som kommer tilbake også.

mqtt arduino-meldinger kommer tilbake

MQTT Binding for OpenHAB

Det siste trinnet i ligningen er å koble dette til OpenHAB. For det trenger vi selvfølgelig en binding.

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

Og rediger konfigurasjonsfilen for å aktivere bindingen.

mqtt: megler.url = tcp: // localhost: 1883. mqtt: megler.klientId = åpen

Start OpenHAB på nytt

sudo service openhab omstart

La oss deretter legge til et element eller to:

/ * MQTT-sensorer * / Nummer Himitsu_Temp "Himitsu temperatur [% .1f ° C]"(Himitsu, temperatur) {mqtt = " (Himitsu, Fuktighet) {mqtt = "

Nå bør du forstå formatet; det begynner å bli en Antall vare fra MQTT-bindingen, om et spesifikt emne. Dette er et enkelt eksempel, kan det være lurt å henvise til wikisiden der den er kan bli mye mer sammensatt.

Gratulerer, du har nå grunnlaget for en billig Arduino-basert sensormatrise. Vi vil se på dette i fremtiden og plassere Arduino’ene på deres eget helt separate RF-nettverk. Jeg har også laget en identisk versjon for Wizwiki 7500 brett hvis du tilfeldigvis har en av disse.

Persistens- og grafikkdata

Nå har du sannsynligvis satt opp en gjeng sensorer, enten fra Z-Wave eller tilpassede Arduinos som kjører MQTT - så du kan se på dagens sensorer når som helst, og du bør også reagere på verdien av dem i regler. Men det interessante med sensorverdiene er generelt at de endres over tid: det er der utholdenhet og grafering kommer inn. Standhaftighet i OpenHAB betyr å lagre dataene over tid. La oss gå foran og sette opp RRD4J (Round Robin Database for Java), såkalt fordi data lagres på en runde Robin-måte - eldre data blir kastet for å komprimere størrelsen på databasen.

Installer rrd4j-pakker med følgende kommandoer.

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

Lag deretter en ny fil som heter rrd4j.persist i konfigurasjoner / utholdenhet mappe. Lim inn følgende:

Strategier {everyMinute: "0 * * * *?" hver time: "0 0 * * *?" hver dag: "0 0 0 * *?" standard = everyChange. } Elementer {// vedvarer alt når verdien oppdateres, bare en standard, og gjenoppretter dem fra databasen ved oppstart *: strategi = hverBytte, RestoreOnStartup // neste definerer vi spesifikke strategier for hver time for hva som helst i temperaturgruppen, og og hvert minutt for fuktighetstemperatur *: strategi = everyHour Fuktighet *: strategy = everyMinute // alternativt kan du legge til bestemte elementer her, for eksempel // Bedroom_Humidity, JamesInOffice: strategy = hver Minute. }

I den første delen av denne filen definerer vi strategier, som bare betyr å gi et navn til et CRON-uttrykk. Dette er det samme som vi allerede gjorde med My. OpenHAB, men denne gangen lager vi noen nye strategier som vi kan bruke hver dag, hver time og hver minutt. Jeg har ikke brukt dem alle enda, men det kan være jeg i fremtiden.

I andre halvdel av filen forteller vi rr4dj hvilke dataverdier som skal lagres. Som standard vil vi lagre alt hver gang det oppdateres, men jeg har også spesifisert noen tidsbaserte strategier for spesifikke sensorer. Temperaturer jeg ikke har så mye bryr meg om, så jeg har bestemt at det bare skal redde hver time, men luftfuktighet er en stor bekymring for meg, så jeg vil se hvordan det endrer seg hvert minutt. Hvis det er andre data du spesifikt vil lagre til angitte tider, kan du legge dem til her nå eller justere etter behov.

Merk: Hvis du vil tegne dataene også, MÅ du lagre dem minst en gang i minuttet. Det har ikke noe å si om sensordataene dine til og med blir oppdatert raskt, du trenger ganske enkelt å fortelle rr4dj å lagre dem en gang i minuttet.

Med det definert, bør du begynne å se noen feilsøking som forteller deg at verdier blir lagret.

rrd4j lagring av data

La oss deretter lage noen pene grafer over alle disse dataene. Det er veldig enkelt. Hvis du vil lage en graf over en individuell sensor, legger du følgende til nettstedskartet:

Kartobjekt = Soverom_Fukthetsperiode = h

Det er bokstavelig talt alt du trenger. Gyldige verdier for periode er h, 4 t, 8 t, 12 t, D, 3D, W, 2W, M, 2M, 4M, Y; det skal være åpenbart hva disse betyr. Standardinnstillingen er D for en hel dag med data hvis ikke spesifisert.

For å lage en graf med flere elementer, graf ganske enkelt gruppenavnet i stedet:

Kartpost = Fuktighetsperiode = h
diagram

Du kan også være interessert i å vite at du kan bruke denne grafen andre steder; det genererer et bilde ved hjelp av følgende URL: http://YOUROPENHABURL: 8080 / kart? grupper = Fuktighet & periode = h

hvordan er Din OpenHAB-systemet kommer?

Det er det for denne avbetalingen av guiden, men ikke forvent at dette vil være det siste du hører fra oss om OpenHAB. Forhåpentligvis har denne og nybegynnerguiden gitt deg en solid forankring for å utvikle ditt eget komplette OpenHAB-system - men det er en prosess som aldri blir helt ferdig.

Heldigvis kan OpenHAB skalere godt fra noen få enheter til hundrevis, fra enkel regelkompleksitet til den ultimate innen hjemmeautomatisering - så hvordan kommer systemet ditt sammen? Hvilke enheter valgte du? Hva er det neste store prosjektet du skal takle?

La oss snakke i kommentarene - og vær så snill, hvis du synes denne guiden var nyttig, klikker du på delingsknappene for å fortelle vennene dine hvordan de også kan sette opp sitt eget OpenHAB-system.

James har en BSc i kunstig intelligens, og er CompTIA A + og Network + sertifisert. Han er hovedutvikler av MakeUseOf, og bruker fritiden sin på å spille VR paintball og brettspill. Han har bygd pc-er siden han var liten.