OpenHAB Beginner's Guide Del 2: ZWave, MQTT, Regler og kartlegging

OpenHAB, open source hjemmeautomatiseringsprogramvaren, overskrider kapasiteten til andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende.

OpenHAB, open source hjemmeautomatiseringsprogramvaren, overskrider kapasiteten til andre hjemmeautomatiseringssystemer på markedet - men det er ikke lett å bli satt opp.  Faktisk kan det være rett og slett frustrerende.
Annonse

Gratis betyr ikke alltid "ikke så bra som betalt", og OpenHAB er ikke noe unntak. Open source-hjemmeautomatiseringsprogramvaren overgår langt mer enn evnen til ethvert annet hjemmeautomatiseringssystem på markedet - men det er ikke lett å bli satt opp. Faktisk kan det være rett og slett frustrerende.

Denne veiledningen er tilgjengelig for nedlasting som en gratis PDF. Last ned OpenHAB Beginner's Guide Del 2: ZWave, MQTT, Regler og kartlegging nå . Du er velkommen til å kopiere og dele dette med venner og familie.

I del 1 av guiden gikk jeg deg gjennom installering av OpenHAB på en Raspberry Pi Komme i gang med OpenHAB Hjemmeautomatisering på Raspberry Pi Komme i gang med OpenHAB Hjem Automation på Raspberry Pi OpenHAB er en moden, åpen kildekode hjemmeautomatiseringsplattform som kjører på en rekke av maskinvare og er protokoll agnostisk, noe som betyr at den kan koble til nesten hvilken som helst hjemmevirksomhets maskinvare på markedet i dag. Les mer, introduserte kjernekonceptene for OpenHAB, og viste deg hvordan du legger til de første elementene i systemet. I dag skal vi gå videre:

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

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 et langt lengre område 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 fungere med Z-Wave, men det er et problem å sette opp, og påliteligheten er ikke garantert.

Hvis du vurderer kjøp av et hus fullt av Z-Wave sensorer spesielt for bruk med OpenHAB, vil jeg oppfordre deg til å revurdere. Det kan virke bra for deg, eller det kan bli plaget av 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 noen. 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 Hvilken smart hub for hjemmevirksomhet er best for deg ? Hvilken Smart Hub for Home Automation er best for deg? For en stund tenkte folk på ideen som ingenting annet enn en gimmick, men nylige produktutgivelser har vist at smart hjemmeautomatisering begynner å leve opp til sine løfter. Les mer hub, så vel som Z-Wave-spesifikke nav som Homeseer, og en rekke andre programvarealternativer som Domoticz.

Selv om OpenHAB inkluderer en Z-Wave-binding, trenger du fortsatt å konfigurere Z-Wave-nettverket først, før OpenHAB kan begynne å spørre om det for data. Hvis du har et Rasberry-kontrollerkort, har du noe programvare levert 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 ingen programvare inkludert, så les videre.

Aeotec Z-Stick Gen5, Z-Wave Plus USB for å lage gateway Aeotec 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 bindingen og elementene. Hvis dette er din første foray i Z-Wave, er det litt mer komplisert.

For det første på maskinvaresiden: hver kontroller har sin egen måte å para sammen med enheter (teknisk kjent som "inkluderingsmodus" der en nod-ID er tildelt). Når det gjelder Aotec Z-Stick, betyr dette at du kobler den fra USB-porten, og trykker på knappen en gang for å plassere den i innlemmingsmodus. Ta det så nært til enheten du parrer, og trykk på inkluderingsknappen på den også (dette vil også variere: Everspring-kontakten min krever at knappen trykker tre ganger i rask rekkefølge, så leksjonen her er å lese håndboken for enheten din) .

Z-Stick blinker kort for å indikere suksess. Dette gir problemer når du plugger den inn i Pi, som en ny port er tildelt. Start pi på nytt for å få det tilbakestilt tilbake til standardporten hvis du finner det blitt dynamisk tilordnet en annen. Bedre still: Ikke koble den til Pi før du har gjort alle maskinvareparingenes først.

Installere HABmin og Z-Wave Bindings

Siden OpenHAB egentlig ikke er et konfigureringsverktøy for Z-Wave, skal vi installere et annet webbehandlingsverktøy som gjør - noe som heter HABmin. Gå videre til HABmin Github-depotet, last ned den nåværende utgivelsen. Når du har slettet den, finner du 2 .jar- filer i addons-katalogen - disse bør plasseres i tilhørende addons-mappen i OpenHAB Home-delen din (hvis du også bruker Aotec gen5 Z-Stick, må du sørge for at du Jeg 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 viktige). Kopier resten av de nedlastede filene inn der.

Merk: Det er også en HABmin 2 under aktiv utvikling. Installasjonen er mye den samme, men med en ekstra .jar tillegg. Det kan være verdt å prøve både bare å se hvilken du foretrekker.

Hvis du ikke allerede har det, må du koble kontrolleren din til Pi. Skriv inn følgende for å finne riktig port.

 ls / dev / tty * 

Du leter etter noe med USB i navnet, eller i mitt 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 inn, og en gang etter, slik at du kan se hva som endres hvis du er usikker.

devtty

Åpne OpenHAB-konfigurasjonsfilen og modifiser delen på Z-Wave, unommenting begge linjene og legg inn din faktiske enhetsadresse. Et siste skritt for meg var å la OpenHAB-brukeren få tilgang til modemet.

 sudo usermod -a -G dialout openhab 

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

 sudo service openhab restart 

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 er funnet: http: //openhab.local: 8080 / habmin / index.html (erstatter openhab.local med ditt Raspberry Pi vertsnavn eller IP-adresse).

Zwave starter opp i openhab logg

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

rediger navnet på enheten

Konfigurere Z-Wave-elementer

Hver Z-Wave-enhet vil ha en bestemt konfigurasjon for OpenHAB. Heldigvis har de fleste enheter allerede blitt utforsket, og det vil være eksempler der ute for din allerede. Konfigurering av egendefinerte enheter som ikke er gjenkjent ligger langt utenfor omfanget av denne veiledningen, men la oss anta at det 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 som følger:

 Bytt dehumidifier_Switch "Avfuktingsmiddel" {zwave = "3: command = switch_binary"} Nummer Dehumidifier_Wattts "Avfuktingsenergiforbruk [% .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) Aeon Labs Aeotec Z-Wave Gen5 Multi-Sensor (Z-Wave Plus) Kjøp nå På Amazon

For dette fant jeg en sample config på iwasdot.com, og multisensoren min er på Node 2.

 Nummer Hallway_Temperature "Hall Temperatur [% .1f ° C]" (Hall, Temperatur) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Antall Hallway_Humidity "Hall Fuktighet [% .0f %% ] "(Hallway, Fuktighet) {zwave =" 2: 0: kommando = sensor_multilevel, sensor_type = 5 "} Antall Hallway_Luminance" Hall Luminance [% .0f Lux] "(Hallway) {zwave =" 2: 0: kommando = sensor_multilevel, sensor_type = 3 "} Kontakt Hallway_Motion" Hallway Motion [% s] "(hallway, bevegelse) {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 til deg, kan du gå videre til den første nybegynnershåndboken. Komme i gang med OpenHAB Home Automation på Raspberry Pi Komme i gang med OpenHAB Hjem Automation på Raspberry Pi OpenHAB er en moden, åpen kildekode-hjemmautomatiseringsplattform som kjører på en rekke maskinvare og er protokoll agnostisk, noe som betyr at den kan koble til nesten hvilken som helst hjemmevirksomhets maskinvare på markedet i dag. Les mer, spesielt Hue-bindingsseksjonen, der jeg forklarer hvordan elementer legges til. Du vil sannsynligvis bare trenger å kopiere lime eksempler som dette, men hvis du har en ny enhet, viser den bindende dokumentasjonen alle kommandoene.

Logitech Harmony Binding

Før vi hopper inn i regler, ville jeg legge til et kort notat om å jobbe med Harmony-bindingen. Jeg er en stor fan av Harmony-serien av ultimate fjernbetjeninger Logitech Harmony Ultimate Review og Giveaway Logitech Harmony Ultimate Review og Giveaway Stuen din er kaos - innrøm det. Du er tilgitt for å lure på hvilken fjernkontroll som kontrollerer hvilken enhet. Hva med TV, forsterker, TiVO, BluRay-spiller, kanskje til og med belysningsaktivitetene blir en lang ... Les mer for å forenkle hjemmemedia-senteropplevelsen, men de står ofte som et eget system i smart hjem. Med OpenHAB kan Logitech Harmony-aktiviteter og full enhetskontroll nå være en del av ditt sentraliserte system, og selv inkludert i automatiseringsregler.

Begynn med å installere de tre bindende filene du finner ved hjelp av apt-cache for å søke etter "harmoni":

openhab apt-cache søk etter harmoni bindende

Ikke glem å kjenne 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 åpenbaring: openhab / usr / share / openhab 

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

 HARMONY REMOTE CONTROLS # harmonyhub: host = 192.168.1.181 eller din ip harmonyhub: brukernavn = din-harmony-email-login harmonyhub: password = your- passord 

IP-adressen er den til Harmony-huben. Bruk en nettverksskanner for å finne ut det. Du må også angi innloggingsdetaljer, de du skriver inn når du starter standard Harmony-konfigurasjonsverktøyet. Det er det. Når du starter Tue på nytt, bør feilsøkingsloggen din ha en plutselig utbrudd av utskriften fra bindingen.

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

json formatert openhab-utgang

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

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

Dette er en toveis String-binding, som både kan hente den nåværende aktiviteten og beordre den gjeldende aktiviteten til å være noe annet. Nå kan vi lage en knapp for den, i sitemapfilen.

 Switch item = Harmony_Activity mappings = [PowerOff = 'Av', Øvelse = 'Motion', 13858434 = 'TV', Karaoke = 'Karaoke'] 

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

openhab harmoni i sitemap

Du kan også referere til aktiviteter i reglene dine, slik vi ser neste. Les wiki-siden for mer informasjon om Harmony-bindingen.

En generell introduksjon til regler

De fleste smarte hjemmeknapper inkluderer noen form for regleropprettelse, slik at du automatisk kan reagere på sensordata og hendelser i hjemmet. Faktisk vil jeg argumentere for at et virkelig smart hjem ikke er en du trenger å bruke tid på å samhandle med mobilapper - det er en som er usynlig for sluttbrukeren og fullstendig automatisert. Til dette formål inneholder OpenHAB også et kraftig regler skriptspråk som du kan programmere, langt overstiger kompleksiteten til de fleste smarte hjemmehubs. Battle of the Smart Home Hubs: Hva er der ute og hva som kommer? Slaget ved Smart Home Hubs: Hva er der ute og hva som kommer? Les mer eller IFTTT-oppskrifter IFTTT kobler nå til noe: Introduksjon til Maker Channel IFTTT kobler nå til noe: Introduksjon av Maker Channel Den potensielle bruken for IFTTT er uendelig. Men til nå har det vært vanskelig å grensesnittere det med dine egne maskinvareprosjekter. I dag er det alt forandret. Les mer .

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

 regelen "Kontantlys på når James presenterer" når Element JamesInOffice endret fra OFF til ON, deretter sendCommand (Office_Hue, ON) sluttregel "Kontor lyser når James forlater" når Element JamesInOffice endret fra ON til OFF, deretter sendCommand (Office_Hue, OFF) 

Først nevner vi regelen - vær beskrivende, så du vet hva hendelsen skyter. Deretter definerer vi vår enkle regel ved å si når x er sant, så gjør du y . Slutt betyr at regelen er lukket. Det finnes en rekke spesielle ord du kan bruke i regler, men for nå har vi å gjøre med to enkle biter av syntaks - Element, 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 lett.

Det er sannsynligvis unødvendig å bruke et par regler, men ettersom logikken min blir mer kompleks, vil det være fordelaktig å få dem til å skille seg fra om jeg kommer inn eller forlater området - og det kan være lurt å legge til en lyssensor et sted inn i ligningen slik at vi ikke unødvendig slår på 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 harmoniStartActivity ("Exercise") slutten 

Igjen, vi heter regelen, tilstandsforhold når den skal brenne, og handlingene som skal tas. 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 å bidra til å lage uttrykket, men du kan også lese formatguiden for en detaljert forklaring og flere eksempler.

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

Mine regler sier bare "8 am hver morgen, hver dag i uken, fortell Harmony Ultimate-systemet for å starte treningsaktiviteten", som igjen aktiverer TVen, Xbox, forsterkeren og trykker på A-knappen etter et minutt for å starte disken i stasjonen.

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

En ekstra regel jeg vil vise deg er noe jeg bruker til å håndtere luftfuktighetsnivåene i hjemmet mitt. Jeg har en enkelt avfukter som jeg trenger å bevege seg om nødvendig, så jeg bestemte meg for å se på alle mine fuktighetssensorer, 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. * Import org.openhab.model.script.actions. * Import java.lang.String regel "Fuktighetsmonitor" når Time cron "0 * * * *?" da var prevHigh = 0 var highHum = "" Fuktighet? .members.forEach [hum | logDebug ("humidity.rules", hum.name); hvis (hum.state som DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); slutt 

Kjerne av regel er i luftfuktigheten? .members.foreach line. Fuktighet er et gruppenavn for mine fuktighetssensorer; .medlemmer griper alle elementene i den gruppen foreach iterates over dem (med et nysgjerrig square bracket format du er sannsynligvis ikke kjent med). Regelskriptet er et derivat av Xtend, så du kan lese Xtend-dokumentasjonen hvis du ikke finner et eksempel for å tilpasse.

Du trenger sannsynligvis ikke, men det finnes hundrevis av eksempelregler der ute:

  • Detaljert forklaring av regler på den offisielle wiki
  • De offisielle reglene viser wiki-siden
  • Å ta regler til nye høyder
  • Avanserte prøver på IngeniousFool.net

MQTT for OpenHAB og Internett av ting

MQTT er et lett messaging system for maskin-til-maskin kommunikasjon - en slags Twitter for din Arduinos eller Raspberry Pis å snakke med hverandre (selvfølgelig fungerer det med mye mer enn bare de). Det er raskt i ferd med å bli populært og finne seg et hjem med enheter for Internett av ting, som vanligvis er små ressursmikrokontrollere som trenger en pålitelig måte å overføre sensordata tilbake til huben din eller motta fjernkommandoer. Det er akkurat hva vi skal gjøre med det.

Men hvorfor gjenoppfinne hjulet?

MQ Telemetry Transport ble oppfunnet vei tilbake i 1999 for å koble til oljerørledninger via langsomme satellittilkoblinger, spesielt designet for å minimere batteribruk og båndbredde, samtidig som det gir pålitelig dataoverføring. Gjennom årene har designprinsippene vært de samme, men brukssaken har skiftet fra spesialiserte embedded-systemer til generelle enheter for Internett av ting. I 2010 ble protokollen gitt ut gratis, åpen for alle å bruke og implementere. Vi liker gratis.

Du lurer kanskje på hvorfor vi enda plager oss med enda en protokoll - vi har allerede HTTP - som kan brukes til å sende raske meldinger mellom alle slags nettilkoblede systemer (som OpenHAB og IFTTT, spesielt med den nye produsentkanalen IFTTT kobler nå til noe: Introduksjon av Maker Channel IFTTT kobler nå til noe: Introduksjon av Maker Channel De potensielle bruksområdene til IFTTT er uendelige. Men til nå har det vært vanskelig å grensesnittere det med dine egne maskinvareprosjekter. I dag er alt dette endret. Les mer ). Og du ville ha rett. Imidlertid er prosesseringskostnaden for en HTTP-server ganske stor - 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 for noe annet ). MQTT er den andre hånden er lett, så sending av meldinger rundt nettverket ditt vil ikke tette opp rørene, og det kan enkelt passe inn i vår lille Arduino-minneplass.

Hvordan jobber MQTT?

MQTT krever både en server (kalt en «megler») og en eller flere klienter. Serveren fungerer som mellommann, mottar meldinger og rebroadcasting dem til noen interesserte kunder.

La oss fortsette med Twitter-for-maskiner- analogien skjønt. Akkurat som Twitter-brukere kan tweet sine egne meningsløse 140 tegn, og brukere kan "følge" andre brukere for å se en kurert strøm av innlegg, kan MQTT-klienter abonnere på en bestemt kanal for å motta alle meldinger derfra, samt publisere egne meldinger til den kanalen. Dette publiserings- og abonnementsmønsteret kalles pub / sub, i motsetning til tradisjonsklient / servermodellen til HTTP.

HTTP krever at du kommer ut til maskinen du kommuniserer med, sier Hei, og så frem og tilbake med å konstant anerkjenne hverandre mens du får eller legger data. Med pub / sub, klienten som gjør publiseringen, trenger ikke å vite hvilke kunder som abonnerer: det pumper bare ut meldingene, og megleren distribuerer dem til noen abonnenter. Enhver klient kan både publisere og abonnere på emner, akkurat som en Twitter-bruker.

Til forskjell fra Twitter, er MQTT ikke begrenset til 140 tegn. Det er data agnostisk, slik at du kan sende små tall eller store tekstblokker, JSON-formaterte datagrammer, eller til og med bilder og binære filer.

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

Det er også viktig å vite at OpenHAB ikke vil fungere som din MQTT-megler - vi tar det litt senere. OpenHAB vil imidlertid fungere som en klient: den kan både publisere OpenHAB aktivitetslogg, 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 å skape et hus fullt av sensorer.

Installer Mosquitto på Pi

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

Dessverre er versjonen tilgjengelig via vanlig apt-get helt utdatert. I stedet la vi 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 installere mosquitto 

Det er alt vi trenger å gjøre for å få en MQTT-server oppe i det lokale nettverket. Din megler kjører som standard på port 1883.

Sjekk at MQTT-serveren jobber med den gratis MQTT.fx, som er kryssplattform. Klikk på innstillingsikonet for å opprette en ny profil, og skriv inn din Raspberry Pis IP-adresse eller navn. Lagre, og klikk på Koble til. Hvis det lille trafikklyset øverst til høyre blir grønt, er det godt å gå.

mqttfx eksempelprofil

For en rask test, klikk på "abonner" -fanen, og skriv innTopic / i tekstboksen, og klikk deretter Abonner- knappen. Du abonnerer nå på å motta melding om emnet heter inTopic, selv om det vil vise 0 meldinger. Gå tilbake til publiseringsfanen, skriv innTopic i den lille boksen, og en kort melding i den store tekstboksen under. Hit Publiser et par ganger og se tilbake på abonnentfanen. Du bør se noen meldinger som har dukket opp i det aktuelle emnet.

inopisk MQTT-test

Før vi legger til noen faktiske sensorer i nettverket, må vi lære om emnelivåer, noe som gjør oss i stand til å strukturere og filtrere MQTT-nettverket. Emnetavnene er bokstavsfølsomme, bør ikke starte med $, eller inkludere et mellomrom, eller ikke-ASCII-tegn - standard programmeringspraksis for variable navn, egentlig.

/ Separatoren indikerer et emne nivå, som er hierarkisk, for eksempel følgende er alle gyldige emnelivåer.

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / temperatur myHome / livingRoom / 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 enkeltrom er å publisere hver sensorvariabel som sitt eget emnenivå - forgrene seg til mer spesifisitet (som i eksemplene ovenfor) - i stedet for å prøve å publisere flere typer sensorer til samme kanal .

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

+ Wildcard erstatter et hvilket som helst emne nivå. For eksempel:

 MyHome / + / temperatur 

ville abonnere klienten til begge deler

 myHome / livingRoom / temperatur myHome / kjøkken / temperatur 

... men ikke fuktighetsnivåene.

# Er et wildcard-kort på flere nivåer, slik at du kan hente alt fra LivingRoom-sensoren med:

 Myhome / stue / # 

Teknisk kan du også abonnere på rotenivået # som du får deg til, alt kommer til å passere 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 om noen få sekunder før klienten min bare krasjet.

MQTT Beginner Tips: " / myHome /" er et annet emne for " myHome /" - inkludert et skråstrek ved starten skaper et tomt emnenivå, som ikke er teknisk gyldig, 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 - du har sikkert fått en i startpakken din, men hvis ikke, bytt bare ut miljøsensoren til en bevegelse sensor (eller til og med en knapp).

Publisering MQTT fra en Arduino med Ethernet-tilkobling

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

Start med å laste ned pubsubclient bibliotek fra Github. Hvis du har brukt "Download as ZIP" -knappen, er strukturen litt feil. Unzip, 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. Deretter flytter du hele mappen til din arkduino / bibliotek katalog.

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

 client.setServer ("192.168.1.99", 1883); 

Dessverre kan vi ikke bruke det vennlige navnet (OpenHAB.local i mitt tilfelle) som 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 emner som sensordata sendes på, rull ned til disse linjene:

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

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

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

Undersøk koden rundt der, og du vil se at du enkelt kan styre en LED eller et relé, for eksempel ved å sende kommandoer til bestemte kanaler. I eksempelkoden sender den bare en melding tilbake som bekrefter kvittering for kommandoen.

Last opp koden, koble Arduino til nettverket, og bruk MQTT.fx til å abonnere på enten # eller openhab / himitsu / # (eller hva du endret romnavnet til, men ikke glem å inkludere # på slutten). Ganske snart bør du se meldinger som kommer inn; og hvis du sender ON eller OFF til kommandotemnet, vil du se bekreftelser som kommer tilbake også.

mqtt arduino meldinger kommer tilbake

MQTT Binding for OpenHAB

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

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

Og rediger config-filen for å aktivere bindingen.

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

Start OpenHAB på nytt

 sudo service openhab restart 

La oss legge til et element eller to:

 / * MQTT Sensorer * / Nummer Himitsu_Temp "Himitsu Temperatur [% .1f ° C]" (Himitsu, Temperatur) {mqtt = "<[megler: openhab / himitsu / temperatur: tilstand: standard]"} Nummer Himitsu_Humidity "Himitsu Fuktighet [ % .1f %%] "(Himitsu, fuktighet) {mqtt =" <[megler: openhab / himitsu / fuktighet: tilstand: standard] "} 

Nå skal du forstå formatet; det får et nummer fra MQTT-bindingen, på et bestemt emne. Dette et enkelt eksempel, kan du ønske å referere til wikisiden hvor den kan bli mye mer kompleks.

Gratulerer, du har nå grunnlaget for et billig Arduino-basert sensorgruppe. Vi vil se på dette i fremtiden og plassere Arduino på sitt eget helt separate RF-nettverk. Jeg har også laget en identisk versjon for Wizwiki 7500 boards hvis du tilfeldigvis har en av dem.

Persistens og grafikkdata

Nå har du nok en masse sensorer satt opp, enten fra Z-Wave eller egendefinerte Arduinos som kjører MQTT - slik at du kan se nåværende tilstand for disse sensorene når som helst, og du bør også være å reagere på deres verdi i regler. Men det interessante med sensorverdier er generelt at de endrer seg over tid: det er der utholdenhet og grafer kommer inn. Persistens i OpenHAB betyr å lagre dataene over tid. La oss gå videre og sette opp RRD4J (Round Robin Database for Java), såkalt fordi data er lagret i en round robin-mote - eldre data blir kassert 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 

Deretter oppretter du en ny fil kalt rrd4j.persist i mappen konfigurasjon / utholdenhet . Lim inn følgende:

 Strategier {everyMinute: "0 * * * *?" hver time: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange} Elementer {// vedvarer alt når verdien er oppdatert, bare en standard og gjenoppretter dem fra databasen ved oppstart *: strategy = everyChange, restoreOnStartup // neste definerer vi bestemte strategier for hver time for noe i Temperaturgruppen, og hvert minutt for fuktighetstemperatur *: strategi = hver luftfuktighet *: strategy = everyMinute // alternativt du kan legge til bestemte elementer her, for eksempel // Bedroom_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 oppretter vi noen nye strategier som vi kan bruke hver dag, hver gang og hver gang. Jeg har ikke brukt dem alle ennå, men jeg kan være i fremtiden.

I den andre halvdelen av filen forteller vi rr4dj hvilke dataværdier som skal lagres. Som standard vil vi lagre alt hver gang det oppdateres, men jeg har også angitt noen tidsbaserte strategier for bestemte sensorer. Temperaturer Jeg er ikke så plaget, så jeg har satt det for å redde hver eneste gang, men fuktighet er en stor bekymring for meg, så jeg vil se hvordan det skifter hvert minutt. Hvis det er andre data du spesifikt vil lagre på bestemte tidspunkter, legg til de her nå, eller juster etter behov.

Merk: Hvis du også vil grafisere dataene, må du lagre det minst en gang i minuttet. Det spiller ingen rolle om sensordataene dine oppdateres raskt, du må bare fortelle rr4dj å lagre den en gang i minuttet.

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

rrd4j lagrer data

Neste opp, la oss lage noen fine grafer av alle disse dataene. Det er veldig enkelt. For å lage en graf av en enkelt sensor, legg til følgende på ditt nettstedskart:

 Figurelement = Bedroom_Humidity periode = 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 bør være tydelig hva dette betyr. Det er standard D for en hel dag med data hvis ikke spesifisert.

Hvis du vil opprette en graf med flere elementer, kan du bare grave gruppenavnet i stedet:

 Figurelement = 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 / chart? groups = Fuktighet og periode = h

Hvordan kommer ditt OpenHAB-system?

Det er det for denne delen av guiden, men forvent ikke at dette er sist du hører fra oss om OpenHAB. Forhåpentligvis har denne og nybegynnerveiledningen gitt deg en solid grunn for å utvikle ditt eget komplette OpenHAB-system - men det er en prosess som aldri er helt ferdig.

Heldigvis kan OpenHAB skala seg godt fra noen få enheter til hundrevis, fra enkel regelkompleksitet til det ultimate innen hjemmautomatisering - så hvordan kommer systemet ditt med? Hvilke enheter har du valgt? Hva er det neste store prosjektet du skal takle?

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

In this article