OpenHAB Nybegynnerguide Del 2: ZWave, MQTT, regler og kartlegging

OpenHAB Nybegynnerguide Del 2: ZWave, MQTT, regler og kartlegging

Gratis betyr ikke alltid 'ikke så godt som betalt', og OpenHAB er intet unntak. Programmet med åpen kildekode hjemmeautomatisering overgår langt mulighetene til alle andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å sette opp. Faktisk kan det være direkte frustrerende.





I del 1 av guiden gikk jeg deg gjennom installere OpenHAB på en Raspberry Pi , introduserte kjernekonseptene til OpenHAB, og viste deg hvordan du legger til de første elementene i systemet. I dag går vi videre:





  • Legger til ZWave -enheter
  • Legger til en Harmony Ultimate -kontroller
  • Innføring av regler
  • Vi introduserer MQTT, og installerer en MQTT -megler på din Pi, med sensorer på en Arduino
  • Registrere data og tegne dem

Introduksjon til Z-Wave

Z-Wave har vært den dominerende hjemmeautomatiseringsprotokollen i mange år: den er pålitelig, har blitt grundig utviklet og fungerer over et mye lengre område enn noen andre smarthusprodukter. Det er hundrevis av Z-Wave-sensorer tilgjengelig for deg som utfører en rekke oppgaver. OpenHAB kan arbeider med Z-Wave, men er et problem å sette opp, og påliteligheten 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 å revurdere. Det kan fungere bra for deg, eller det kan være plaget med små, men vedvarende problemer. I det minste må du ikke kjøpe et hus fullt av sensorer før du har fått sjansen til å prøve et par. Den eneste grunnen til å velge Z-Wave er hvis du ikke er 100% avgjort på OpenHAB, og ønsker å la alternativene være åpne i fremtiden: Z-Wave fungerer for eksempel med Samsung SmartThings-hub, samt Z-Wave-spesifikke hubber som Homeseer, og en rekke andre programvarealternativer som f.eks domoticz .

Selv om OpenHAB inkluderer en Z-Wave-binding, må du fortsatt konfigurer Z-Wave-nettverket først , før OpenHAB kan begynne å spørre etter data. Hvis du har et Rasberry -kontrollerkort, har du programvare som følger med for å konfigurere nettverket, så vi kommer ikke til å dekke det her. Hvis du har kjøpt en Aeotec USB Z-Stick-kontroller eller lignende, har du sannsynligvis ingen programvare inkludert, så les videre.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB for å lage gateway (vanlig hvit) KJØP NÅ PÅ AMAZON

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

Først på maskinvaresiden: hver kontroller har sin egen måte å koble til enheter (teknisk kjent som 'inkluderingsmodus' der en knutepunkt -ID er tilordnet). Når det gjelder Aotec Z-Stick, betyr dette at du kobler den fra USB-porten og trykker på knappen én gang for å sette den i inkluderingsmodus. Ta den så nær enheten du parer, og trykk på inkluderingsknappen på den også (dette vil også variere: min Everspring -kontakt krever at knappen trykkes 3 ganger i rask rekkefølge, så leksjonen her er å lese manualen for enheten din) .





Z-pinnen blinker kort for å indikere suksess. Dette gir problemer når du kobler den tilbake til Pi, ettersom en ny port er tilordnet. Start Pi på nytt for å tilbakestille den til standardporten hvis du finner ut at den er dynamisk tildelt en annen. Enda bedre: ikke koble den til Pi før du har gjort alle maskinvareparringene først.

Installere HABmin- og Z-Wave-bindinger

Siden OpenHAB faktisk ikke er et konfigurasjonsverktøy for Z-Wave, kommer vi til å installere et annet webadministrasjonsverktøy som gjør det-noe som kalles HABmin. Gå videre til HABmin Github -depot last ned den nåværende versjonen. Når du har pakket den ut, finner du 2 .krukke filer i addons -katalogen - disse skal plasseres i den tilsvarende addons -katalogen i OpenHAB Home -delingen (hvis du også bruker Aotec gen5 Z-Stick, må du kontrollere at du har minst versjon 1.8 av Z-Wave-bindingen) .





Deretter lager du en ny mappe i webapp -katalogen og kaller den 'habmin' (små bokstaver er viktig). Kopier resten av de nedlastede filene der.

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

Hvis du ikke allerede har det, kobler du kontrolleren til Pi. 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-pinnen 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.

Åpne OpenHAB-konfigurasjonsfilen og endre delen om Z-Wave, uten å kommentere begge linjene og sette den faktiske enhetsadressen. Et siste trinn for meg var å la OpenHAB -brukeren få tilgang til modemet.

sudo usermod -a -G dialout openhab

Nå, for å sparke alt til handling, start OpenHAB på nytt

sudo service openhab start på nytt

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

Det er mye å se i HABMIN, men vi er bare veldig opptatt av Konfigurasjon -> Bindinger -> Z -Wave -> Enheter kategorien, som du kan se nedenfor. Utvid noden for å redigere plasseringen og navnetiketten for enkel referanse.

Konfigurering av Z-Wave-elementer

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

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

Bytt avfukter_Switch 'Avfukter' {zwave = '3: command = switch_binary'}

Antall avfukter_Watt 'Avfukterens strømforbruk [%.1f W]' {zwave = '3: command = meter'}

Perfekt.

Neste opp er en Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) KJØP NÅ PÅ AMAZON

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

Nummer Hall_Temperature 'Hallway Temperature [%.1f ° C]' (Hall, Temperature) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Nummer Hall_Humidity 'Hallway Fuktighet [%.0f %%]' (Gang, fuktighet) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Nummer Hall_Luminance 'Hallway Luminance [%.0f Lux]' (Gang) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

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

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

Hvis formatet på dette ser merkelig ut for deg, kan du gå tilbake til det første nybegynnerguide , spesielt Hue -bindingsdelen, der jeg forklarer hvordan elementer legges til. Du trenger sannsynligvis bare å kopiere lim -eksempler som dette, men hvis du har en ny enhet, inneholder bindingsdokumentasjonen alle kommandoer .

Logitech Harmony Binding

Før vi hopper inn i regler, ønsket jeg å legge til et raskt notat om arbeidet med Harmony -bindingen. Jeg er en stor fan av Harmony -serien med ultimate fjernkontroller for å forenkle opplevelsen i hjemmemediasenteret, men de står ofte som et eget system i det smarte hjemmet. Med OpenHAB kan Logitech Harmony -aktiviteter og full enhetskontroll nå være en del av ditt sentraliserte system, og til og med inkludert i automatiseringsregler.

Begynn med å installere de tre bindingsfilene du finner ved å bruke apt-cache for å søke etter 'harmoni':

Ikke glem å 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, åpne filen openhab.cfg og legg til en ny seksjon som følger:

########## HARMONI FJERNKONTROLLER ###########

harmonyhub: vert = 192.168.1.181 eller din ip

harmonyhub: brukernavn = din-harmoni-e-post-pålogging

harmonyhub: passord = ditt passord

IP -adressen er Harmony -huben din. Bruk en nettverksskanner for å finne ut av det. Du må også skrive inn påloggingsinformasjonen din, de du angir når du starter standard Harmony -konfigurasjonsverktøy. Det er det. Når du starter Hue på nytt, bør feilsøkingsloggen ha et plutselig utbrudd av utdata fra bindingen.

Dette er en JSON -formatert liste over alle aktivitetene, enhetene og kommandoene som kan sendes. Det er en god idé å kopiere dette for fremtidig referanse. du kan gjøre det enda enklere å lese med sammenleggbare noder ved å lime inn i en online JSON -formatering som denne .

I tillegg til standard PowerOff -aktivitet som er en standard, finner du dine egne definerte aktiviteter oppført her ved navn. La oss nå lage en enkel knappekontroll for å starte aktiviteter. Legg først til følgende linje i varefilen. Endre gruppen og ikonet hvis du vil.

/ * Harmony Hub */

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

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

Bytt element = Harmony_Activity mappings = [PowerOff = 'Off', Exercise = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

filen er åpen i et annet program

I rammen finner du hver aktivitet sammen med etiketten. Vanligvis kan du referere direkte til aktiviteter som du har navngitt dem på fjernkontrollen, men unntaket fra dette fant jeg, var alt med et mellomrom i aktivitetsnavnet, for eksempel 'Se på TV'. I dette tilfellet må du bruke aktivitets -ID. Igjen kan du finne ID -en i JSON -feilsøkingsutgangen. Lagre og oppdater grensesnittet, du bør se noe som ligner på dette:

Du kan også referere til aktiviteter i reglene dine, som vi ser neste. Les wiki -siden for mer informasjon om Harmoni bindende .

En generell introduksjon til regler

De fleste smarthubber inkluderer noen form for regler, slik at du automatisk kan reagere på sensordata og hendelser i hjemmet. Faktisk vil jeg påstå at et virkelig smart hjem ikke er et 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 regler -skriptspråk som du kan programmere, og som langt overstiger kompleksiteten til de fleste smarte hjemmeknutepunkter eller IFTTT -oppskrifter.

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ærelsessensoren:

regelen 'Kontor lyser når James er tilstede'

når

Element JamesInOffice endret fra AV til PÅ

deretter

sendCommand (Office_Hue, ON)

slutt

regel 'Kontor lyser når James går'

når

Element JamesInOffice endret fra PÅ til AV

deretter

sendCommand (Office_Hue, OFF)

slutt

Først navngir vi regelen - vær beskrivende, så du vet hvilken hendelse som utløses. Deretter definerer vi vår enkle regel ved å si når x er sant, gjør du y . Slutt betyr at denne regelen er stengt. Det er en rekke spesialord 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 etter hvert som logikken min blir mer kompleks, vil det være fordelaktig å ha dem atskilt for om jeg skal inn eller ut av området - og det kan være lurt å legge til en lyssensor et sted inn i ligningen, slik at vi ikke unødvendig tenner lys.

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

regelen 'Tren hver morgen'

når

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

deretter

harmonyStartActivity ('Trening')

slutt

Igjen, vi navngir regelen, oppgir betingelser når den skal avfyres og handlingene som skal iverksettes. 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 å skape uttrykket, men du kan også lese formatguiden [No Longer Available] for en detaljert forklaring og flere eksempler.

CronMaker.com pleide å generere det korrekt formaterte Cron -uttrykket

Reglene mine sier ganske enkelt '8am hver morgen, hver dag i uken, fortell 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 annen regel jeg vil vise deg er noe jeg bruker for å håndtere fuktighetsnivået i hjemmet mitt. Jeg har en enkelt avfukter som jeg trenger å flytte 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. Det utløses for øyeblikket hvert minutt, men det kan enkelt senkes. Ta en titt først:

importer org.openhab.core.library.types.*

importer org.openhab.model.script.actions.*

import java.lang.String

regelen 'Fuktighetsmonitor'

når Time cron '0 * * * *?'

deretter

var prevHigh = 0

var highHum = ''

Fuktighet? .Medlemmer.for hver [nynn |

logDebug ('fuktighet.regler', hum.navn);

hvis (hum.state som DecimalType> prevHigh) {

prevHigh = hum.state

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

}

hvor kan du kjøpe en valp

]

logDebug ('fuktighet.regler', highHum);

postUpdate (Dehumidifier_Needed, highHum);

slutt

Kjernen i regelen er i Fuktighet? .Medlemmer.foreligge linje. Fuktighet er et gruppenavn for fuktighetssensorene mine; .medlemmer tar tak i alle elementene i den gruppen; for hver iterates over them (med et merkelig firkantet brakettformat du sannsynligvis ikke er kjent med). Syntaksen for regler er en derivat av Xtend, slik at du kan lese Xtend dokumentasjon hvis du ikke finner et eksempel å tilpasse.

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

MQTT for OpenHAB og Internet of Things

MQTT er et lett meldingssystem for maskin-til-maskin-kommunikasjon-en slags Twitter for Arduinos eller Raspberry Pis å snakke med hverandre (selv om det selvfølgelig fungerer med mye mer enn bare de). Det blir raskt mer og mer populært og finner seg et hjem med Internet of Things-enheter, som vanligvis er små ressursmikrokontrollere som trenger en pålitelig måte å overføre sensordata tilbake til huben din eller motta eksterne kommandoer. Det er akkurat det vi skal gjøre med det.

Men hvorfor gjenoppfinne hjulet?

MQ Telemetry Transport ble oppfunnet helt tilbake i 1999 for å koble til oljerørledninger via langsomme satellittforbindelser, spesielt designet for å minimere batteribruk og båndbredde, samtidig som det gir pålitelig datalevering. Gjennom årene har designprinsippene vært de samme, men brukstilfellet har skiftet fra spesialiserte innebygde systemer til generelle Internet of Things -enheter. I 2010 ble protokollen utgitt royalty -fri, åpen for alle å bruke og implementere. Vi liker gratis.

Du lurer kanskje på hvorfor vi bryr oss om enda en protokoll - vi har tross alt allerede HTTP - som kan brukes til å sende raske meldinger mellom alle slags webtilkoblede systemer (som OpenHAB og IFTTT, spesielt med den nye maker -kanalen ). Og du vil ha rett. Imidlertid er behandlingsomkostningene til en HTTP -server ganske store - så mye at du ikke enkelt kan kjøre en på en innebygd mikrokontroller som Arduino (i det minste kan du, men du vil ikke ha mye minne igjen til noe annet ). MQTT er derimot lett, så å sende meldinger rundt nettverket ditt vil ikke tette rørene, og det kan lett passe inn i vårt lille Arduino -minneplass.

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 dem på nytt til alle interesserte klienter.

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

HTTP krever at du når ut til maskinen du kommuniserer med, sier hei, så har du frem og tilbake for å konstant anerkjenne hverandre mens du får eller legger 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 abonnenter. Enhver klient kan både publisere og abonnere på emner, akkurat som en Twitter -bruker.

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

Det er ikke det at MQTT er bedre enn HTTP for alt - men det er mer egnet hvis vi skal ha mange sensorer rundt hele huset, som hele tiden rapporterer inn.

Det er også viktig å vite at OpenHAB ikke vil fungere som din MQTT -megler - den saken tar vi opp senere. Imidlertid vil OpenHAB fungere som en klient: den kan både publisere OpenHAB -aktivitetsloggen din, samt binde bestemte 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, fungerer den ikke som server. For det må du enten bruke en nettbasert MQTT -megler (betalt eller gratis), eller installere gratis programvare på din Pi. Jeg vil gjerne beholde alt internt, så jeg har installert Mosquitto på Pi.

Dessverre er versjonen tilgjengelig via den vanlige 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 på det lokale nettverket. Megleren din kjører på port 1883 som standard.

Sjekk at MQTT-serveren din fungerer med gratis MQTT.fx, som er plattformplattform. Klikk på innstillingsikonet for å opprette en ny profil, og skriv inn Raspberry Pi sin IP -adresse eller navn. Lagre, og klikk på Koble til. Hvis det lille trafikklyset øverst til høyre blir grønt, er du i gang.

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

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.

Skilleren / indikerer et emnenivå, som er hierarkisk, for eksempel er følgende alle gyldige emnenivåer.

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/livingRoom/temperatur

myHome/livingRoom/fuktighet

myHome/kjøkken/temperatur

myHome/kjøkken/fuktighet

Du bør allerede 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å - forgrening til mer spesifisitet (som i eksemplene ovenfor) - i stedet for å prøve å publisere flere sensortyper til 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.

+ Jokertegnet erstatter et emne nivå. For eksempel:

myHome/+/temperatur

ville abonnere klienten på begge

myHome/livingRoom/temperatur

myHome/kjøkken/temperatur

... men ikke fuktighetsnivået.

# Er et jokertegn på flere nivåer, så du kan hente alt fra livingRoom-sensorarrayet med:

myHome/livingRoom/#

Teknisk sett kan du også abonnere på rotnivå # som får deg til å gå alt 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 på noen få sekunder før klienten min krasjet.

MQTT Nybegynnertips: ' /mitt hjem/' er et annet tema enn ' mitt hjem/' - inkludert skråstrek i begynnelsen 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 prøve med en Arduino, Ethernet Shield og en DHT11 temperatur- og fuktighetssensor - du har sannsynligvis en i startpakken din, men hvis ikke, bytt ut miljøsensoren for en bevegelse sensor (eller til og med en knapp).

Publisering av MQTT fra en Arduino med Ethernet -tilkobling

Hvis du har en hybrid Arduino-kompatibel enhet med innebygd Wi-Fi eller Ethernet, bør det også fungere. Etter hvert vil vi ha en bedre/billigere måte å kommunisere at det å måtte bruke en nettverkstilkobling i alle 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, gi nytt navn til mappen til bare pubsubclient , og ta deretter de to filene ut av src mappen og flytt dem et nivå opp til roten til den nedlastede mappen. Flytt deretter hele mappen til din Arduino/biblioteker katalog.

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

client.setServer ('192.168.1.99', 1883);

Dessverre kan vi ikke bruke det vennlige navnet (OpenHAB.local i mitt tilfelle) ettersom TCP/IP -stakken på Arduino er veldig forenklet, og å legge til koden for Bonjour -navngivning ville være mye minne vi ikke vil kaste bort. For å endre emnene som sensordata blir kringkastet på, rull ned til disse linjene:

røyebuffer [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/command');

Undersøk koden der, og du vil se 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 mottak av kommandoen.

Last opp koden din, koble Arduino til nettverket, og bruk MQTT.fx for å abonnere på begge # eller openhab / himitsu / # (eller hva du endret romnavnet til, men ikke glem å inkludere # på slutten). Ganske snart skulle du se meldinger komme inn; og hvis du sender PÅ eller AV til kommandotemaet, vil du se bekreftelser som kommer tilbake også.

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: broker.url = tcp: // localhost: 1883

mqtt: broker.clientId = openhab

Start OpenHAB på nytt

sudo service openhab start på nytt

La oss deretter legge til et element eller to:

/ * MQTT -sensorer */

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

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

Nå bør du forstå formatet; det får en Nummerelement fra MQTT -bindingen, om et spesifisert emne. Dette er et enkelt eksempel. Det kan være lurt å referere til wikisiden der den er kan bli mye mer komplisert .

Gratulerer, du har nå grunnlaget for et billig Arduino-basert sensorarray. Vi kommer til å gå tilbake til dette i fremtiden og plassere Arduinoene på deres eget helt separate RF -nettverk. Jeg har også laget en identisk versjon for Wizwiki 7500 -tavler hvis du tilfeldigvis har en av dem.

Persistens og grafiske data

Nå har du sannsynligvis satt opp en haug med sensorer, enten det er fra Z-Wave eller tilpassede Arduinos som kjører MQTT-slik at du kan se den nåværende tilstanden til disse sensorene når som helst, og du bør også være å reagere på verdien i regler. Men det interessante med sensorverdier er generelt at de endres over tid: det er her utholdenhet og grafikk kommer inn. Standhaftighet i OpenHAB betyr å lagre dataene over tid. La oss gå videre og sette opp RRD4J (Round Robin Database for Java), såkalt fordi data lagres på en round robin -måte - eldre data kastes 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 = hver endring

}

Elementer {

// vedvarer alt når verdien er oppdatert, bare en standard, og gjenopprett dem fra databasen ved oppstart

*: strategy = everyChange, restoreOnStartup

// neste definerer vi spesifikke strategier for hver time for alt i temperaturgruppen, og hvert minutt for fuktighet

wpa psk tkip wpa2 psk aes

Temperatur*: strategi = hver time

Fuktighet*: strategi = hver minutt

// alternativt kan du legge til spesifikke varer her, for eksempel

// Soverom_Humidity, JamesInOffice: strategy = everyMinute

}

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 ennå, men jeg kan være det i fremtiden.

I andre halvdel av filen forteller vi rr4dj hvilke dataverdier som skal lagres. Som standard skal vi lagre alt hver gang det oppdateres, men jeg har også spesifisert noen tidsbaserte strategier for spesifikke sensorer. Temperaturer jeg ikke bryr meg så mye om, så jeg har satt det til å spare hver eneste time, men fuktighet 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 bestemte tidspunkter, 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 spiller ingen rolle om sensordataene dine oppdateres så raskt, du trenger bare å be rr4dj om å lagre det en gang i minuttet.

Med det definert, bør du begynne å se noen feilsøkingsutdata som forteller deg at verdier lagres.

La oss deretter lage noen flotte grafer over alle disse dataene. Det er veldig enkelt. For å lage en graf over en individuell sensor, legg til følgende på nettstedskartet:

Kartelement = Soverom_ Fuktighetstid = h

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

For å lage en graf med flere elementer, tegner du bare gruppenavnet i stedet:

Kartelement = Fuktighetsperiode = t

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/chart? groups = Fuktighet & periode = t

Hvordan er det? Din OpenHAB -system kommer?

Det er det for denne delen av guiden, men ikke forvent at dette blir 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 egentlig aldri er helt ferdig.

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

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.

Vi håper du liker elementene vi anbefaler og diskuterer! MUO har tilknyttede og sponsede partnerskap, så vi mottar en andel av inntektene fra noen av kjøpene dine. Dette påvirker ikke prisen du betaler, og hjelper oss med å tilby de beste produktanbefalingene.

Dele Dele kvitring E -post En nybegynnerguide for animering av tale

Å animere tale kan være en utfordring. Hvis du er klar til å begynne å legge til dialog i prosjektet ditt, bryter vi ned prosessen for deg.

Les neste
Relaterte temaer
  • DIY
  • Smart hjem
  • Arduino
  • Hjemmeautomatisering
  • Langform
  • Longform Guide
Om forfatteren James Bruce(707 artikler publisert)

James har en BSc i kunstig intelligens og er CompTIA A+ og Network+ sertifisert. Når han ikke er opptatt som Hardware Reviews Editor, liker han LEGO, VR og brettspill. Før han begynte i MakeUseOf, var han belysningstekniker, engelsklærer og datasenteringeniør.

Mer fra James Bruce

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere