Reklame

Gratis betyder ikke altid "ikke så godt som betalt", og OpenHAB er ingen undtagelse. Open source-hjemmeautomatiseringssoftwaren overskrider langt mulighederne for ethvert andet hjemmeautomatiseringssystem på markedet - men det er ikke let at få opsat. Faktisk kan det være direkte frustrerende.

Denne vejledning kan downloades som en gratis PDF. Download OpenHAB Begyndervejledning Del 2: ZWave, MQTT, regler og kortlægning nu. Du er velkommen til at kopiere og dele dette med dine venner og familie.

I del 1 af guiden gik jeg igennem dig installation af OpenHAB på en Raspberry Pi Kom godt i gang med OpenHAB-hjemmeautomatisering på Raspberry PiOpenHAB er en moden, open source hjemmeautomatiseringsplatform, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. Læs mere , introducerede kernekoncepterne i OpenHAB og viste dig, hvordan du tilføjer dine første elementer til systemet. I dag går vi videre:

instagram viewer
  • Tilføjelse af ZWave-enheder
  • Tilføjelse af en Harmony Ultimate-controller
  • Introduktion af regler
  • Introduktion af MQTT og installation af en MQTT mægler på din Pi med sensorer på en Arduino
  • Optagelse af data og tegning af dem

Introduktion til Z-Wave

Z-Wave har været den dominerende hjemmeautomatiseringsprotokol i årevis: den er pålidelig, er blevet omfattende udviklet og fungerer over en meget længere rækkevidde end nogen andre smarte hjemmeprodukter. Der er hundreder af Z-Wave sensorer tilgængelige for dig, der udfører en lang række opgaver. OpenHAB kan arbejde med Z-Wave, men det er en besvær at opsætte, og pålidelighed er ikke garanteret.

Hvis du overvejer at købe et hus fuldt af Z-Wave sensorer specifikt til brug med OpenHAB, vil jeg opfordre dig til at overveje igen. Det fungerer måske godt for dig, eller det kan være plaget med små, men vedvarende problemer. Køb i det mindste ikke et hus fuldt af sensorer, før du har haft en chance for at prøve nogle få. Den eneste grund til at vælge Z-Wave er, hvis du ikke er 100% bosat på OpenHAB, og gerne vil lade dine muligheder være åbne i fremtiden: Z-Wave fungerer f.eks. Med Samsung SmartThings Hvilken smart hub til hjemmeautomation er bedst for dig?I et stykke tid tænkte folk på ideen som intet andet end en gimmick, men de nylige produktudgivelser har vist, at smart home automation begynder at leve op til dens løfter. Læs mere hub samt Z-Wave-specifikke hubs som Homeseer og en række andre softwaremuligheder, f.eks Domoticz.

Selvom OpenHAB inkluderer en Z-Wave-binding, skal du stadig konfigurer Z-Wave-netværket først, inden OpenHAB kan begynde at spørge efter data. Hvis du har et Rasberry-kontrolkort, har du nogle software, der leveres til konfiguration af netværket, så vi dækker ikke det her. Hvis du har købt en Aeotec USB Z-Stick-controller eller lignende, har du sandsynligvis ikke nogen software inkluderet, så læs videre.

Aeotec Z-Stick Gen5, Z-Wave Plus USB til at oprette gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB til at oprette gateway Køb nu på Amazon $44.95

Hvis du allerede har en Z-Wave-netværksopsætning, kan du bare tilslutte din controller til Pi og begynde at konfigurere indbindingen og emnerne. Hvis dette er din første foray til Z-Wave, er den lidt mere kompleks.

For det første på hardwaresiden: hver controller har sin egen måde at parre med enheder (teknisk kendt som "inklusionstilstand", hvor et knudepunkt-ID er tildelt). For Aotec Z-Stick betyder det, at du tager stikket ud af USB-porten og trykker én gang på knappen for at placere den i inkluderingstilstand. Tag det derefter tæt på den enhed, du parrer, og tryk også på inkluderingsknappen på den (dette vil også variere: min Everspring-sokkel kræver, at knappen trykkes 3 gange efter hinanden, så lektionen her er at læse manualen til din enhed).

Z-Stick blinker kort for at indikere succes. Dette giver problemer, når du tilslutter den til Pi, da der tildeles en ny port. Genstart din Pi for at få den nulstillet til standardporten, hvis du finder ud af, at den dynamisk er blevet tildelt en anden. Endnu bedre: Tilslut det ikke til Pi'en, før du først har udført alle hardware-sammenkoblinger.

Installation af HABmin og Z-Wave bindinger

Da OpenHAB faktisk ikke er et konfigurationsværktøj til Z-Wave, vil vi installere et andet webadministrationsværktøj, der gør det - noget kaldet HABmin. Gå videre til HABmin Github-lager download den aktuelle version. Når du har pakket det ud, finder du 2 .krukke filer i addons-biblioteket - disse skal placeres i det tilsvarende addons-bibliotek i din OpenHAB Home-deling (hvis du også bruger Aotec gen5 Z-Stick, skal du sørge for at have mindst version 1.8 af Z-Wave-bindingen).

Opret derefter en ny mappe i webapps-biblioteket og kaldte den "habmin" (små bogstaver er vigtige). Kopier resten af ​​de downloadede filer derinde.

Bemærk: Der er også en HABmin 2 under aktiv udvikling. Installation er stort set den samme, men med en yderligere .jar-tilføjelse. Det kan være værd at prøve begge bare for at se, hvad du foretrækker.

Hvis du ikke allerede har gjort det, skal du tilslutte din controller til din Pi. Skriv følgende for at finde den rigtige port.

ls / dev / tty *

Du leder efter noget med USB i navnet, eller i mit særlige tilfælde præsenterede Z-stick sig som /dev/ttyACM0 (et modem). Det kan være lettere at udføre kommandoen en gang, før du tilslutter den, og en gang efter, så du kan se, hvad der ændrer sig, hvis du er usikker.

devtty

Åbn OpenHAB-konfigurationsfilen, og modificer sektionen om Z-Wave, fjerner begge linjer og sætter din faktiske enhedsadresse. Et sidste skridt for mig var at give OpenHAB-brugeren adgang til modemet.

sudo usermod -a -G dialout openhab

For at sparke alt til handling skal du genstarte OpenHAB igen

sudo service openhab genstart

Forhåbentlig, hvis du tjekker fejlfindingsloggen, vil du se noget lignende. Tillykke, du taler nu Z-Wave. Du kan også finde fejlfindingsloggen oversvømmet med beskeder fra forskellige Z-Wave-noder. Lad os starte med at tjekke HABMIN for at se, hvad den findes: http://openhab.local: 8080 / habmin / index.html (erstatter openhab.local med dit Raspberry Pi-værtsnavn eller IP-adresse).

zwave starter i openhab-log

Der er meget at se i HABMIN, men vi er kun virkelig interesserede i Konfiguration -> Bindinger -> Z-Wave -> Enheder som du kan se nedenfor. Udvid noden for at redigere placering og navnemærke for at lette referencen.

rediger enhedsnavnet

Konfiguration af Z-Wave-genstande

Hver Z-Wave-enhed har en specifik konfiguration for OpenHAB. Heldigvis er de fleste enheder allerede blevet udforsket, og der vil allerede være eksempler derude til dine. Konfiguration af brugerdefinerede enheder, der ikke genkendes, ligger langt uden for denne vejledning, men lad os antage, at det understøttes i øjeblikket.

Først har jeg en grundlæggende Everspring AN158-afbryder og måler på Node 3. En hurtig googling førte mig til et blogindlæg på Wetwa.re, med en prøveeksempelkonfiguration. Jeg tilpassede dette som følger:

Skift Dehumidifier_Switch "Dehumidifier" {zwave = "3: command = switch_binary"} Number Dehumidifier_Watts "Luftfugterens strømforbrug [% .1f W]" {zwave = "3: command = meter"}

Perfekt.

Dernæst kommer 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) Køb nu på Amazon $69.27

Til denne fandt jeg en prøvekonfiguration kl iwasdot.com, og min multisensor er på knudepunkt 2.

Nummer Gang_Temperatur "Gangstemperatur [% .1f ° C]" (Gang, temperatur) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Fugtighed [% .0f %%]" (Hallway, Fugtighed) {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_battery "Batteri [% s %%]" (Bevægelse) {zwave = "2: 0: kommando = batteri"}

Hvis formatet på dette ser mærkeligt ud for dig, skal du gå tilbage til det første begyndervejledning Kom godt i gang med OpenHAB-hjemmeautomatisering på Raspberry PiOpenHAB er en moden, open source hjemmeautomatiseringsplatform, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan oprette forbindelse til næsten enhver hjemmeautomatiseringshardware på markedet i dag. Læs mere , specielt Hue-bindingsafsnittet, hvor jeg forklarer, hvordan artikler tilføjes. Du har sandsynligvis kun nogensinde behov for at kopiere indsæt eksempler som dette, men i tilfælde af at du har en ny enhed, indeholder den bindende dokumentation alle kommandoer.

Logitech Harmony Binding

Inden vi springer ind i reglerne, ville jeg tilføje en hurtig note om at arbejde med Harmony-bindingen. Jeg er en stor fan af Harmony-serien med ultimative fjernbetjeninger Logitech Harmony Ultimate Review og GiveawayDin stue er kaos - indrøm det. Du bliver tilgivet for at undre dig over, hvilken fjernbetjening der styrer hvilken enhed. Hvad med tv'et, forstærkeren, TiVO, BluRay-afspilleren, måske endda lys - skifteaktiviteter bliver en lang ... Læs mere for at forenkle oplevelsen af ​​hjemme-mediecenteret, men de står ofte som et separat system inden for det smarte hjem. Med OpenHAB kan Logitech Harmony-aktiviteter og fuld enhedskontrol nu være en del af dit centraliserede system og endda inkluderet i automatiseringsregler.

Begynd med at installere de tre bindende filer, som du finder ved at bruge apt-cache til at søge efter "harmoni":

openhab apt-cache søgning efter harmoni-binding

Glem ikke at gøre det chown bindingsbiblioteket igen, når du er færdig:

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 at konfigurere bindingen skal du åbne filen openhab.cfg og tilføje en ny sektion som følger:

########## HARMONY FJERNKONTROL ########## harmonyhub: vært = 192.168.1.181eller din ip
harmonyhub: brugernavn =din-harmoni-mail-login
harmonyhub: password =dit kodeord

IP-adressen er den til dit Harmony-hub. Brug en netværksscanner til at finde ud af det. Du skal også indtaste dine loginoplysninger, dem, du indtaster, når du starter standard Harmony-konfigurationsværktøjet. Det er det. Når du genstarter din nuance, skal din debug-log have et pludseligt burst af output fra bindingen.

Dette er en JSON-formateret liste over alle dine aktiviteter, enheder og kommandoer, der kan sendes. Det er en god ide at kopiere dette ud til fremtidig reference. du kan gøre det endnu lettere at læse med sammenklappelige noder ved at indsætte i en online JSON-formater som denne.

json formateret openhab output

Udover standard PowerOff-aktiviteten, som er en standard, finder du dine egne definerede aktiviteter, der er anført her med navn. Lad os nu oprette en enkel kontrol med en knap for at starte aktiviteter. Først skal du tilføje følgende linje i din artikelfil. Skift gruppe og ikon, hvis du vil.

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

Dette er en to-vejs strengbinding, som er i stand til både at hente den aktuelle aktivitet og kommandere den aktuelle aktivitet til at være noget andet. Nu kan vi oprette en knap til det i sitemap-filen.

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

I det firkantede beslag ser du hver aktivitet sammen med etiketten. Generelt kan du henvise direkte til aktiviteter, som du har navngivet dem på din fjernbetjening, men undtagelsen fra dette, jeg fandt, var noget med et mellemrum i aktivitetsnavnet, såsom "Se tv". I dette tilfælde skal du bruge aktivitets-ID'et. Igen kan du finde ID'et i JSON-debugoutput. Gem og opdater din interface, skal du se noget, der ligner dette:

openhab-harmoni i sitemap

Du kan også henvise til aktiviteter i dine regler, som vi ser næste. Læs wiki-siden for mere information om Bindende harmoni.

En generel introduktion til regler

De fleste smarte hjemknudepunkter inkluderer en slags regler for oprettelse af regler, så du automatisk kan reagere på sensordata og begivenheder i hjemmet. Faktisk vil jeg hævde, at et virkelig smart hjem ikke er det, du har brug for at bruge tid på at interagere med mobile apps - det er et, der er usynligt for slutbrugeren og helt automatiseret. Til dette formål inkluderer OpenHAB også et kraftfuldt script-sprog, som du kan programmere, hvilket langt overstiger kompleksiteten hos de fleste smarte hjemknudepunkter Slaget om smarthusnavne: Hvad er derude og hvad der kommer? Læs mere eller IFTTT-opskrifter IFTTT Opretter nu forbindelse til alt: Introduktion af Maker ChannelDe potentielle anvendelser til IFTTT er uendelige. Men indtil nu har det været vanskeligt at interface det med dine egne hardwareprojekter. I dag er det alt sammen ændret. Læs mere .

Programmeringsregler lyder dårligere end det er. Lad os starte enkelt med et par regler, der tænder eller slukker for lyset afhængigt af tilstedeværelsessensoren:

regel "Kontor lys på, når James er til stede" da artikel JamesInOffice ændrede sig fra OFF til ON. send derefter kommando (Office_Hue, ON) slutregel "Kontorlys slukket, når James forlader" da artikel JamesInOffice skiftede fra ON til OFF. send derefter kommando (Office_Hue, OFF) ende

Først navngiver vi reglen - vær beskrivende, så du ved, hvilken begivenhed der affyres. Dernæst definerer vi vores enkle regel ved at sige når x er sandt, så gør y. Slut betegner lukningen af ​​den bestemte regel. Der er en række specielle ord, du kan bruge i regler, men i øjeblikket har vi at gøre med to enkle syntaksbits - Vare, som giver dig mulighed for at forespørge om status for noget; og sendCommand, der gør nøjagtigt det, du tror, ​​det vil. Jeg sagde, at dette var let.

Det er sandsynligvis unødvendigt at bruge et par regler, men efterhånden som min logik bliver mere kompliceret, vil det være fordelagtigt at have dem adskilt for om jeg er ind i eller forlader området - og det kan være en god ide at tilføje en lyssensor et eller andet sted i ligningen, så vi ikke unødigt tænder lyser.

Lad os se på et andet eksempel for at oprette en planlagt regel.

regel "Træning hver morgen" når Time cron "0 0 8 1/1 *? *" derefter harmoniStartActivity ("Træning") ende.

Igen nævner vi reglen, angiver betingelser, hvornår den skal affyre, og de handlinger, der skal tages. Men i dette tilfælde definerer vi et tidsmønster. Den sjove kode, du ser i citaterne, er et CRON-udtryk for Quartz Scheduler (formatet er lidt anderledes end et almindeligt CRONtab). jeg brugte cronmaker.com for at hjælpe med at oprette udtrykket, men du kan også læse formatguiden [Ikke længere tilgængelig] for en detaljeret forklaring og flere eksempler.

cron generator
CronMaker.com bruges til at generere det korrekt formaterede Cron-udtryk

Mine regler siger simpelthen "08.00 hver morgen, hver dag i ugen, fortæl mit Harmony Ultimate-system at starte træningsaktiviteten", som igen aktiverer tv'et, Xbox, forstærkeren og trykker på A-knappen efter et minut for at starte disken i drevet.

Desværre er OpenHAB endnu ikke i stand til at udføre øvelsen for mig.

Én regel mere, jeg vil vise dig, er noget, jeg bruger til at styre fugtighedsniveauerne i mit hjem. Jeg har en enkelt affugter, som jeg har brug for at bevæge mig rundt, hvor det er nødvendigt, så jeg besluttede at kigge på alle mine fugtighedsfølere, finde hvilken der er den højeste og gemme den i en variabel. Det udløses i øjeblikket hvert minut, men det kan let sænkes. Se først:

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

Kernen i regel er i Fugtighed? .Members.foreach linje. Fugtighed er et gruppenavn for mine fugtighedsfølere; .medlemmer griber alle elementerne i denne gruppe; for hver itererer over dem (med et nysgerrig firkantet parentesformat, du sandsynligvis ikke er bekendt med). Regelsens syntaks er et derivat af Xtend, så du kan læse Xtend-dokumentation hvis du ikke kan finde et eksempel til at tilpasse sig.

Du har sandsynligvis ikke brug for det - der er hundredvis af eksempler på reglerne derude:

  • Detaljeret forklaring af regler på den officielle wiki
  • Det officielle regler prøver wikiside
  • At tage regler til nye højder
  • Avancerede prøver på IngeniousFool.net

MQTT til OpenHAB og Internet of Things

MQTT er et let meddelelsessystem til maskine-til-maskinkommunikation - en slags Twitter til din Arduinos eller Raspberry Pis for at tale med hinanden (selvom det selvfølgelig fungerer med meget mere end bare de der). Det vinder hurtigt popularitet og finder sig selv et hjem med Internet of Things-enheder, som typisk er lave ressourcemikro-controllere, der har brug for en pålidelig måde at transmittere sensordata tilbage til din hub eller modtage fjernbetjening kommandoer. Det er nøjagtigt, hvad vi skal gøre med det.

Men hvorfor opfinde hjulet igen?

MQ Telemetry Transport blev opfundet helt tilbage i 1999 for at forbinde olierørledninger via langsom satellit tilslutninger, specielt designet til at minimere batteriforbrug og båndbredde, mens de stadig leverer pålidelige data levering. I årenes løb har designprincipperne forblevet de samme, men brugssagen er skiftet fra specialiserede indlejrede systemer til generelle Internet of Things-enheder. I 2010 blev protokollen frigivet royaltyfri, åben for enhver at bruge og implementere. Vi kan godt lide gratis.

Du spekulerer måske på, hvorfor vi endda gider med endnu en protokol - vi har jo alligevel HTTP - hvilket kan bruges til at sende hurtige beskeder mellem alle former for internetforbundne systemer (som OpenHAB og IFTTT, især med det nye producent kanal IFTTT Opretter nu forbindelse til alt: Introduktion af Maker ChannelDe potentielle anvendelser til IFTTT er uendelige. Men indtil nu har det været vanskeligt at interface det med dine egne hardwareprojekter. I dag er det alt sammen ændret. Læs mere ). Og du har ret. Imidlertid er behandlingsomkostningen på en HTTP-server ganske stor - så meget, at du ikke let kan køre en på en indlejret mikrocontroller som Arduino (i det mindste kan du, men du har ikke meget hukommelse tilbage til noget andet). MQTT er på den anden side let, så at sende beskeder rundt på dit netværk vil ikke tilstoppe rørene, og det kan nemt passe ind i vores lille Arduino hukommelsesplads.

Hvordan fungerer MQTT?

MQTT kræver både en server (kaldet en "mægler") og en eller flere klienter. Serveren fungerer som mellemmand, modtager beskeder og genudsender dem til alle interesserede klienter.

Lad os fortsætte med Twitter-til-maskiner analogi dog. Ligesom Twitter-brugere kan tweet deres egne meningsløse 140 tegn, og brugerne kan "følge" andre brugere for at se en kurateret strøm af indlæg, MQTT-klienter kan abonnere på en bestemt kanal for at modtage alle meddelelser derfra samt offentliggøre deres egne meddelelser til det kanal. Dette udgivelses- og abonnementsmønster kaldes pub / subi modsætning til traditionen klient / server model af HTTP.

HTTP kræver, at du når frem til den maskine, du kommunikerer med, siger Hej, så har en frem og tilbage for konstant at anerkende hinanden, mens du får eller lægger data. Med pub / sub behøver ikke klienten, der laver publiceringen, at vide, hvilke klienter der abonneres: den pumper bare meddelelserne ud, og mægleren distribuerer dem til eventuelle abonnerede klienter. Enhver klient kan både offentliggøre og abonnere på emner, ligesom en Twitter-bruger.

I modsætning til Twitter er MQTT dog ikke begrænset til 140 tegn. Det er data-agnostisk, så du kan sende små numre eller store tekstblokke, JSON-formaterede datagrammer eller endda billeder og binære filer.

Det er ikke, at MQTT er bedre end HTTP for alting - men det er mere velegnet, hvis vi vil have masser af sensorer rundt omkring i huset, der konstant rapporterer ind.

Det er også vigtigt at vide, at OpenHAB ikke vil fungere som din MQTT-mægler - vi adresserer den bit senere. OpenHAB vil imidlertid fungere som en klient: det kan både offentliggøre din OpenHAB-aktivitetslog, såvel som binde bestemt kanaler til enheder, så du f.eks. kan have en switch, der styres af MQTT-meddelelser på en bestemt kanal. Dette er ideelt til at skabe et hus fuldt af sensorer.

Installer Mosquitto på din Pi

Selvom OpenHAB inkluderer en MQTT-klient, så du kan abonnere på et emne og også offentliggøre meddelelser, fungerer den ikke som serveren. Til det skal du enten bruge en webbaseret MQTT-mægler (betalt eller gratis) eller installere den gratis software på din Pi. Jeg vil gerne have det hele internt, så jeg har installeret Mosquitto på Pi.

Desværre er den tilgængelige version via den sædvanlige apt-get fuldstændig forældet. Lad os i stedet tilføje de nyeste kilder.

wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key. sudo apt-key tilføj mosquitto-repo.gpg.key. cd /etc/apt/sources.list.d/ sudo wget http://repo.mosquitto.org/debian/mosquitto-wheezy.list. sudo apt-get install mosquitto.

Det er alt, hvad vi skal gøre for at have en MQTT-server i gang på det lokale netværk. Din mægler kører som standard på port 1883.

Kontroller, at din MQTT-server fungerer ved hjælp af den gratis MQTT.fx, som er tværplatform. Klik på indstillingerikonet for at oprette en ny profil, og indtast din Raspberry Pis IP-adresse eller navn. Gem og tryk på forbindelse. Hvis det lille trafiklys øverst til højre bliver grønt, er du god til at gå.

mqttfx eksempelprofil

For en hurtig test skal du klikke på fanen "abonnere" og skrive inTopic / i tekstboksen, og tryk derefter på Tilmeld knap. Du er nu tilmeldt at modtage en besked om emnet, der hedder inTopic, selvom det viser 0 beskeder. Gå tilbage til fanen Udgiv, skriv inTopic i den lille boks og en kort meddelelse i det store tekstfelt nedenfor. Hit Offentliggøre et par gange og se tilbage på fanebladet Abonner. Du skal se et par meddelelser, der er vist i dette emne.

inTopic MQTT-test

Inden vi tilføjer nogle faktiske sensorer til vores netværk, er vi nødt til at lære om emneniveau, som gør det muligt for os at strukturere og filtrere MQTT-netværket. Emne navne er store og små bogstaver, bør ikke starte med $ eller indeholde et mellemrum eller ikke-ASCII-tegn - standard programmeringspraksis til variabelnavne, virkelig.

Separatoren angiver et emneniveau, som er hierarkisk, for eksempel er følgende alle gyldige emneniveauer.

inTopic / smallSubdivision / evenSmallerSubdivision. myhome / STUE / temperatur. myhome / STUE / fugtighed. MyHome / køkken / temperatur. MyHome / køkken / fugtighed

Allerede skulle du se, hvordan denne træstruktur er perfekt til et smart hjem fuld af sensorer og enheder. Den bedste praksis til brug med flere sensorer i et enkelt rum er at offentliggøre hver sensorvariabel som deres eget emneniveau - forgrening til mere specificitet (som i eksemplerne ovenfor) - snarere end at prøve at offentliggøre flere sensortyper til det samme kanal.

Kunder kan derefter offentliggøre eller abonnere på et vilkårligt antal individuelle emneniveauer eller bruge nogle specielle jokertegn til at filtrere fra højere op i træet.

+ Jokertegnene erstatter ethvert emneniveau. For eksempel:

myhome / + / temperatur

ville abonnere klienten på begge

myhome / STUE / temperatur. MyHome / køkken / temperatur

... men ikke fugtighedsniveauerne.

# Er et wild level på flere niveauer, så du kan hente alt fra LivingRoom-sensorrækket med:

myhome / STUE / #

Teknisk set kan du også abonnere på rodniveau #, som du får dig til at alting går passerer gennem mægleren, men det kan være som at stikke en brandslange i dit ansigt: lidt overvældende. Prøv at oprette forbindelse til den offentlige MQTT-mægler fra HiveMQ og abonnere på #. Jeg fik omkring 300 beskeder på få sekunder, før min klient lige styrtede ned.

MQTT Begyndertips: “/myHome/” er et andet emne end “mit hjem/" - inklusive en skråstreg i starten opretter et tomt emneniveau, som selvom det er teknisk gyldigt, ikke anbefales, fordi det kan være forvirrende.

Nu, hvor vi kender teorien, lad os tage et slag med en Arduino, Ethernet-skjold og en DHT11-temperatur- og fugtighedsføler - har du sandsynligvis en i dit startsæt, men hvis ikke, skal du bare bytte miljøsensoren ud for en bevægelsessensor (eller endda en knap).

Udgivelse af MQTT fra en Arduino med Ethernet-forbindelse

Hvis du har en hybrid Arduino-kompatibel enhed med Wi-Fi eller Ethernet indbygget, skal det også fungere. Til sidst vil vi have en bedre / billigere måde at kommunikere på, at det er nødvendigt at bruge en netværksforbindelse i hvert værelse, men dette tjener til at lære det grundlæggende.

Start med at downloade pubsubclient-bibliotek fra Github. Hvis du har brugt knappen "Download som ZIP", er strukturen en smule forkert. Pak ud, omdøb mappen til bare pubsubclient, tag derefter de to filer ud af src mappe og flytte dem op et niveau til roden af ​​den downloadede mappe. Flyt derefter hele mappen til din Arduino / biblioteker vejviser.

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

client.setServer ("192.168.1.99", 1883);

Desværre kan vi ikke bruge dets venlige navn (OpenHAB.local i mit tilfælde) da TCP / IP-stakken på Arduino er meget forenklet, og tilføjelse af koden til Bonjour-navngivning ville være en masse hukommelse, som vi ikke ønsker at spilde. Hvis du vil ændre de emner, som sensordata udsendes på, skal du rulle ned til disse linjer:

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

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

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

Undersøg koden deromkring, så ser du, at du nemt kunne kontrollere en LED eller relæ, f.eks. Ved at sende kommandoer til specifikke kanaler. I eksempelkoden sender den blot en meddelelse tilbage, der bekræfter modtagelse af kommandoen.

Upload din kode, tilslut din Arduino til netværket, og brug MQTT.fx til at abonnere på enten # eller openhab / Himitsu / # (eller hvad du end har ændret rummets navn til, men glem ikke at medtage # i slutningen). Temmelig snart skulle du se meddelelser der kommer ind; og hvis du sender ON eller OFF til kommandoemnet, ser du også kvitteringer, der kommer tilbage.

mqtt arduino-beskeder, der kommer tilbage

MQTT-binding til OpenHAB

Det sidste trin i ligningen er at koble dette ind i OpenHAB. Til dette har vi selvfølgelig brug for en binding.

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

Og rediger konfigurationsfilen for at aktivere indbindingen.

mqtt: mægler.url = tcp: // localhost: 1883. mqtt: mægler.clientId = openhab

Genstart OpenHAB

sudo service openhab genstart

Lad os derefter tilføje en vare eller to:

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

Nu skal du forstå formatet; det bliver en Nummer vare fra MQTT-bindingen om et specifikt emne. Dette er et simpelt eksempel, som du måske ønsker at henvise til wikisiden, hvor den er kan blive meget mere kompleks.

Tillykke, du har nu grundlaget for en billig Arduino-baseret sensorrække. Vi reviderer dette fremover og placerer Arduino'erne på deres eget helt separate RF-netværk. Jeg har også oprettet en identisk version til Wizwiki 7500 plader hvis du tilfældigvis har en af ​​dem.

Persistens- og grafikdata

I øjeblikket har du sandsynligvis en masse sensorer sat op, hvad enten det er fra Z-Wave eller brugerdefinerede Arduinos, der kører MQTT - så du kan se den aktuelle tilstand af disse sensorer til enhver tid, og du skal også reagere på deres værdi i regler. Men det interessante ved sensorværdier er generelt, at de ændrer sig over tid: det er her, persistens og grafering kommer ind. Udholdenhed i OpenHAB betyder det at gemme dataene over tid. Lad os gå videre og konfigurere RRD4J (Round Robin Database for Java), såkaldt fordi data gemmes på en runde robin-måde - ældre data kasseres for at komprimere databasens størrelse.

Installer rrd4j-pakker med følgende kommandoer.

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

Opret derefter en ny fil kaldet rrd4j.persist i konfigurationer / persistens folder. Indsæt følgende:

Strategier {everyMinute: "0 * * * *?" hver time: "0 0 * * *?" hver dag: "0 0 0 * *?" standard = everyChange. } Elementer {// vedvarer alt, når værdien opdateres, bare en standard og gendanner dem fra databasen ved opstart *: strategi = hver Ændring, RestoreOnStartup // næste definerer vi specifikke strategier for hver time for noget i temperaturgruppen og og hvert minut for fugtighedstemperatur *: strategi = everyHour Fugtighed *: strategi = everyMinute // alternativt kan du tilføje specifikke elementer her, såsom // Bedroom_Humidity, JamesInOffice: strategy = everyMinute. }

I den første del af denne fil definerer vi strategier, som bare betyder at give et navn til et CRON-udtryk. Dette er det samme, som vi allerede gjorde med My. OpenHAB, men denne gang opretter vi nogle nye strategier, som vi kan bruge hver dag, hver time og hver minut. Jeg har ikke brugt dem alle endnu, men jeg er måske i fremtiden.

I anden halvdel af filen fortæller vi rr4dj, hvilke dataværdier, der skal gemmes. Som standard gemmer vi alt, hver gang det opdateres, men jeg har også specificeret nogle tidsbaserede strategier for specifikke sensorer. Temperaturer, som jeg ikke har for meget af, så jeg har indstillet det til kun at spare hver time, men fugtighed er en stor bekymring for mig, så jeg vil se, hvordan det ændrer sig hvert minut. Hvis der er andre data, som du specifikt vil gemme på bestemte tidspunkter, skal du tilføje dem her nu eller justere efter behov.

Bemærk: Hvis du også ønsker at tegne grafikken, SKAL du gemme dem mindst en gang om minuttet. Det betyder ikke noget, om dine sensordata endda opdateres hurtigt, du skal blot fortælle rr4dj om at gemme dem en gang om minuttet.

Med det definerede, skal du begynde at se nogle debugoutput, der fortæller dig, at værdier gemmes.

rrd4j lagring af data

Lad os næste oprette nogle smukke grafer over alle disse data. Det er virkelig let. For at lave en graf over en individuel sensor skal du tilføje følgende til dit site map:

Diagrampost = Soveværelse_Fugtighedstid = h

Det er bogstaveligt talt alt hvad du har brug for. Gyldige værdier for periode er h, 4 timer, 8 timer, 12 timer, D, 3D, W, 2W, M, 2M, 4M, Y; det burde være indlysende, hvad disse betyder. Det er standard til D for en hel dag med data, hvis ikke angivet.

For at oprette en graf med flere elementer skal du blot tegne gruppens navn i stedet for:

Diagrampost = Fugtighedsperiode = h
diagram

Du er måske også interesseret i at vide, at du kan bruge denne graf andetsteds; det genererer et billede ved hjælp af følgende URL: http://YOUROPENHABURL: 8080 / diagram? grupper = Fugtighed & periode = h

Hvordan er Dit OpenHAB-system kommer?

Det er det for denne installation af guiden, men forvent ikke, at dette vil være det sidste, du hører fra os om OpenHAB. Forhåbentlig har denne og begynderguiden givet dig et solidt grundlag for at udvikle dit eget komplette OpenHAB-system - men det er en proces, der aldrig rigtig er færdig.

Heldigvis kan OpenHAB skalere godt fra et par enheder til hundreder, fra enkel regelkompleksitet til den ultimative inden for hjemmeautomation - så hvordan kommer dit system sammen? Hvilke enheder valgte du? Hvad er det næste store projekt, du skal tackle?

Lad os tale i kommentarerne - og vær venlig, hvis du fandt denne guide nyttig, skal du klikke på disse delingsknapper for at fortælle dine venner, hvordan de også kan opsætte deres eget OpenHAB-system.

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.