OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler og diagrammer

OpenHAB, open source home automation software, overstiger langt de øvrige hjemmautomatiseringssystemers muligheder på markedet - men det er ikke let at komme i gang. Faktisk kan det være retfærdigt frustrerende.

OpenHAB, open source home automation software, overstiger langt de øvrige hjemmautomatiseringssystemers muligheder på markedet - men det er ikke let at komme i gang.  Faktisk kan det være retfærdigt frustrerende.
Reklame

Gratis betyder ikke altid "ikke så godt som betalt", og OpenHAB er ingen undtagelse. Open source-hjemmeautomatiseringssoftwaren overskrider langt de fleste andre hjemmeautomatiseringssystemers muligheder på markedet - men det er ikke let at komme i gang. Faktisk kan det være retfærdigt frustrerende.

Denne vejledning er tilgængelig til download som en gratis PDF. Download OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler og diagrammer nu . Du er velkommen til at kopiere og dele dette med dine venner og familie.

I vejledningens del 1 gik jeg igennem installation af OpenHAB på en Raspberry Pi Kom i gang med OpenHAB Home Automation on Raspberry Pi Kom i gang med OpenHAB Home Automation on Raspberry Pi OpenHAB er en moden, open source home automation platform, der kører på en bred vifte af hardware og er protokol agnostic, hvilket betyder, at den kan forbinde til næsten enhver hjemmeautomatiserings hardware på markedet i dag. Læs mere, introducerede de grundlæggende begreber i OpenHAB, og viste dig hvordan du tilføjer dine første elementer til systemet. I dag går vi videre:

  • Tilføjelse af ZWave-enheder
  • Tilføje en Harmony Ultimate controller
  • Indførelse af regler
  • Introduktion til MQTT, og installation af en MQTT-mægler på din Pi, med sensorer på en Arduino
  • Optage data og grafer det

Introduktion til Z-Wave

Z-Wave har været den dominerende hjemmeautomatiseringsprotokol i årevis. Den er pålidelig, er udviklet i vid udstrækning og arbejder over et langt længere interval end nogen anden smart hjemme-produkt. Der er hundredvis af Z-Wave sensorer til rådighed for dig, der udfører en lang række opgaver. OpenHAB kan arbejde med Z-Wave, men det er en besvær at sætte op, og pålideligheden er ikke garanteret.

Hvis du overvejer at købe et hus fyldt med Z-Wave sensorer specielt til brug sammen med OpenHAB, vil jeg opfordre dig til at genoverveje. Det kan virke godt for dig, eller det kan være plaget af små men vedvarende problemer. I det mindste må du ikke købe et hus fyldt med 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% afviklet på OpenHAB, og vil gerne lade dine muligheder åbne i fremtiden: Z-Wave fungerer f.eks. Med Samsung SmartThings Hvilken Smart Hub til Home Automation er bedst for dig? ? Hvilken Smart Hub til Home Automation er bedst for dig? I et øjeblik tænkte folk på ideen som intet andet end en gimmick, men nylige produktudgivelser har vist, at smart hjemmeautomatisering begynder at leve op til sine løfter. Læs mere hub, samt Z-Wave-specifikke hubs som Homeseer, og en række andre software muligheder som Domoticz.

Selvom OpenHAB indeholder en Z-Wave-binding, skal du stadig konfigurere Z-Wave-nettet først, før OpenHAB kan begynde at spørge det til data. Hvis du har et Rasberry-controllerkort, har du noget 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 ingen software inkluderet, så læs videre.

Aeotec Z-Stick Gen5, Z-Wave Plus USB til oprettelse af gateway Aeotec Z-Stick Gen5, Z-Wave Plus USB til oprettelse af gateway Køb nu hos 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 bindingen og elementerne. Hvis dette er din første foray i Z-Wave, er det lidt mere komplekst.

For det første på hardware side: hver controller har sin egen måde at parre med enheder (teknisk kendt som "inklusionstilstand", hvor et nod-id er tildelt). I tilfælde af Aotec Z-Stick betyder det, at du trækker det ud af USB-porten og trykker på knappen en gang for at placere det i optagelsestilstand. Så tag det tæt på den enhed, du parrer, og tryk på inklusionsknappen på den også (dette vil også variere: min Everspring-stikkontakt kræver, at knappen trykker 3 gange hurtigt efter hinanden, så lektionen her er at læse manualen for din enhed) .

Z-Stick blinker kort for at indikere succes. Dette giver problemer, når du plugger det tilbage i Pi, som en ny port er tildelt. Genstart din Pi for at få det nulstillet tilbage til standardporten, hvis du finder det blevet dynamisk omfordelt et andet. Endnu bedre: Slut det ikke til Pi, før du først har lavet alle hardwareparringerne.

Installation af HABmin og Z-Wave bindinger

Da OpenHAB faktisk ikke er et konfigurationsprogram til Z-Wave, skal vi installere et andet webstyringsværktøj, som gør - noget, der hedder HABmin. Gå videre til HABmin Github-depotet, download den aktuelle udgave. Når du har slettet det, finder du 2 .jar- filer i addons-mappen - disse skal placeres i den tilsvarende addons-mappe i din OpenHAB Home-del (hvis du også bruger Aotec gen5 Z-Stick, skal du sørge for at Jeg har i det mindste version 1.8 af Z-Wave bindingen) .

Opret derefter en ny mappe i webapps-biblioteket, og kaldes det "habmin" (små bogstaver er vigtige). Kopier resten af ​​de downloadede filer ind der.

Bemærk: Der er også en HABmin 2 under aktiv udvikling. Installationen er meget den samme, men med en ekstra .jar addon. Det kan være værd at prøve, bare for at se, hvad du foretrækker.

Hvis du ikke allerede har det, skal du tilslutte din controller til din Pi. Indtast følgende for at finde den korrekte 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 nemmere at gøre kommandoen en gang før du tilslutter den, og en gang efter, så du kan se, hvad der ændres, hvis du er i tvivl.

devtty

Åbn OpenHAB-konfigurationsfilen og ændre sektionen på Z-Wave, uden at kommentere begge linjer og lægge din aktuelle enhedsadresse. Et sidste skridt for mig var at give OpenHAB-brugeren adgang til modemet.

 sudo usermod -a -G dialout openhab 

Nu, for at sparke alt til handling, genstart OpenHAB

 sudo service openhab genstart 

Forhåbentlig, hvis du kontrollerer fejlfindingsloggen, vil du se noget som dette. Tillykke, du taler nu Z-Wave. Du kan også finde fejlfindingsloggen oversvømmet med meddelelser fra forskellige Z-Wave noder. Lad os begynde med at kontrollere HABMIN for at se, hvad den er fundet: 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 bekymret for fanen Configuration -> Bindings -> Z-Wave -> Devices, som du kan se nedenfor. Udvid noden til at redigere placerings- og navneetiketten for din lethed.

rediger enhedens navn

Konfiguration af Z-Wave-elementer

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

For det første har jeg en grundlæggende Everspring AN158 strømafbryder 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:

 Switch Dehumidifier_Switch "Affugter" {zwave = "3: command = switch_binary"} Antal Dehumidifier_Watts "Affugtningsforbruget [% .1f W]" {zwave = "3: command = meter"} 

Perfekt.

Næste op 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) Køb Nu På Amazon

Til dette fandt jeg en sample config på iwasdot.com, og min multisensor er på Node 2.

 Nummer Hallway_Temperature "Hall Temperatur [% .1f ° C]" (Hall, Temperatur) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Antal Hallway_Humidity "Hall Fugtighed [% .0f %% ] "(Hallway, Fugtighed) {zwave =" 2: 0: kommando = sensor_multilevel, sensor_type = 5 "} Nummer Hallway_Luminance" Hall 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 "} Nummer sensor_1_battery" Batteri [% s %%] " Bevægelse) {zwave = "2: 0: command = battery"} 

Hvis formatet af dette ser mærkeligt ud til dig, skal du gå videre til den første begynderguide. Kom godt i gang med OpenHAB Home Automation på Raspberry Pi Kom i gang med OpenHAB Home Automation on Raspberry Pi OpenHAB er en moden, åben kilde til hjemmevirksomhed, der kører på en række hardware og er protokol agnostic, hvilket betyder, at den kan forbinde til næsten enhver hjemmeautomatiserings hardware på markedet i dag. Læs mere, specifikt Hue-bindingsafsnittet, hvor jeg forklarer, hvordan emner tilføjes. Du behøver nok kun at kopiere indsæt eksempler som dette, men hvis du har en ny enhed, beskriver den bindende dokumentation alle kommandoer.

Logitech Harmony Binding

Før vi hopper ind i regler, ville jeg tilføje en hurtig note om at arbejde med Harmony-bindingen. Jeg er en stor fan af Harmony-serien af ​​ultimative fjernbetjeninger Logitech Harmony Ultimate Review og Giveaway Logitech Harmony Ultimate Review og Giveaway Din stue er kaos - indrøm det. Du er tilgivet for at undre sig over hvilken fjernbetjening hvilken enhed. Hvad med fjernsynet, forstærkeren, TiVO, BluRay-afspilleren, måske endda lyset - skifteaktiviteter bliver en lang ... Læs mere for at forenkle hjemmemediacenteroplevelsen, men de står ofte som et separat system i 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 automatiseringsreglerne.

Start med at installere de tre bindende filer, du finder ved hjælp af apt-cache for at søge efter "harmoni":

openhab apt-cache søgning efter harmoni bindende

Glem ikke at kaste bindekataloget 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 openhab.cfg filen og tilføje en ny sektion som følger:

 Harmonyhub: host = 192.168.1.181 eller din ip harmonyhub: brugernavn = din-harmony-email-login harmonyhub: password = your- adgangskode 

IP-adressen er din 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-konfigurationsprogrammet. Det er det. Når du genstarter din nuance, skal din fejlfinding logge pludselig udbrud 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 for fremtidig reference. Du kan gøre det endnu nemmere at læse med sammenklappelige knuder ved at indsætte i en online JSON formatter som denne.

json formateret openhab output

Ud over den standard PowerOff-aktivitet, som er en standard, finder du dine egne definerede aktiviteter, der er angivet her ved navn. Lad os nu oprette en enkel knapkontrol for at starte aktiviteter. Først skal du tilføje følgende linje i din emnefil. Skift gruppe og ikon, hvis du vil.

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

Dette er en tovejs streng bindende, som både kan hente den aktuelle aktivitet og kommandere den aktuelle aktivitet til at være noget andet. Nu kan vi oprette en knap for den, i sitemapfilen.

 Switch item = Harmony_Aktivitet mappings = [PowerOff = 'Off', Motion = 'Motion', 13858434 = 'TV', Karaoke = 'Karaoke'] 

I firkantbøjlen ses hver aktivitet sammen med etiketten. Generelt kan du henvise direkte til aktiviteter, som du har navngivet dem på din fjernbetjening, men undtagelsen til dette fandt jeg, var noget med et mellemrum i aktivitetsnavnet, som f.eks. "Se tv". I dette tilfælde skal du bruge aktivitets-id'et. Igen kan du finde ID'et i JSON debug output. Gem og opdater din grænseflade, så skal du se noget der ligner dette:

openhab harmoni i sitemap

Du kan også henvise til aktiviteter i dine regler, som vi vil se næste. Læs wiki-siden for mere information om Harmony-bindingen.

En generel introduktion til regler

De fleste smarte hjemhubs indeholder nogle slags regler, så du kan reagere automatisk på sensordata og hændelser i hjemmet. Faktisk vil jeg argumentere for, at et virkelig smart hjem ikke er en, du har brug for at bruge tid på at interagere med mobilapps - det er en, der er usynlig for slutbrugeren og helt automatiseret. Til dette formål indeholder OpenHAB også et kraftigt regelscriptsprog, som du kan programmere, langt overstiger kompleksiteten hos de fleste smarte hjemmecenter. Battle of the Smart Home Hubs: Hvad er derude og hvad kommer der? Slaget ved Smart Home Hubs: Hvad er derude og hvad kommer der? Læs mere eller IFTTT-opskrifter IFTTT forbinder nu med noget: Introduktion til Maker Channel IFTTT forbinder nu med noget: Introduktion til Maker Channel De potentielle anvendelser til IFTTT er uendelige. Men indtil nu har det været svært at interface det med dine egne hardwareprojekter. I dag er det alle ændret. Læs mere .

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

 Regel "Kontrollys på, når James præsenterer", når Item JamesInOffice ændret fra OFF til ON, sendCommand (Office_Hue, ON) slutreglen "Kontor lyser ud, når James forlader", når Item JamesInOffice ændres fra ON til OFF, så sendCommand (Office_Hue, OFF) slut 

For det første navngiver vi reglen - vær beskrivende, så du ved, hvilken begivenhed der skyder. Dernæst definerer vi vores enkle regel ved at sige, når x er sandt, så gør y . End betyder, at den pågældende regel lukkes. Der er en række specielle ord, du kan bruge i regler, men vi beskæftiger nu med to enkle bit af syntaks - Item, som giver dig mulighed for at forespørge om noget. og sendCommand, hvilket gør præcis, hvad du synes det vil. Jeg fortalte dig det var let.

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

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

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

Igen hedder vi reglen, tilstandsbetingelser, når den skal ild, og de handlinger, der skal træffes. 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 en almindelig CRONtab). Jeg brugte cronmaker.com til at hjælpe med at skabe udtrykket, men du kan også læse formatguiden for en detaljeret forklaring og flere eksempler.

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

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

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

En mere regel, jeg vil vise dig, er noget, jeg bruger til at styre luftfugtighedsniveauerne i mit hjem. Jeg har en enkelt affugter, som jeg har brug for at flytte rundt, hvor det er nødvendigt, så jeg besluttede at se på alle mine luftfugtighedssensorer, find hvilken er den højeste og gem den i en variabel. Det udløses for øjeblikket hvert minut, men det kan let sænkes. Tag et kig først:

 importer org.openhab.core.library.types. * Import org.openhab.model.script.actions. * Import java.lang.String regel "Fugtighed Monitor" når Time cron "0 * * * *?" så var prevHigh = 0 var highHum = "" Fugtighed? .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); ende 

Kernen i reglen er i luftfugtigheden? .members.foreach line. Fugtighed er et firmanavn for mine fugtighedssensorer; .medlemmer griber alle elementerne i den gruppe foreach iterates over dem (med et nysgerrig firkantet parentes format, du er formentlig ikke bekendt med). Regelsyntaxen er et derivat af Xtend, så du kan læse Xtend-dokumentationen, hvis du ikke kan finde et eksempel til at tilpasse.

Du har sikkert ikke brug for det - der er hundredvis af eksempelregler derude:

  • Detaljeret forklaring af reglerne på den officielle wiki
  • De officielle regler prøver wiki side
  • Regler til nye højder
  • Avancerede prøver på IngeniousFool.net

MQTT for OpenHAB og Internet af Ting

MQTT er et letvægts messagesystem til maskin-til-maskine kommunikation - en slags Twitter til din Arduinos eller Raspberry Pis at tale med hinanden (selvfølgelig fungerer det med meget mere end bare dem). Det er hurtigt ved at blive populært og finde sig selv et hjem med Internet of Things-enheder, som typisk er små ressource mikrocontrollere, der har brug for en pålidelig måde at overføre sensor data tilbage til dit hub eller modtage fjernkommandoer. Det er præcis hvad vi skal gøre med det.

Men hvorfor genopfinde hjulet?

MQ Telemetry Transport blev opfundet vej tilbage i 1999 for at forbinde olierørledninger via langsomme satellitforbindelser, der er specielt designet til at minimere batteriforbruget og båndbredden, samtidig med at de leverer pålidelig dataudlevering. I årenes løb har designprincipperne forblevet ens, men brugen er blevet skiftet fra specialiserede embedded-systemer til generelle Internet of Things-enheder. I 2010 blev protokollen frigivet gratis, åben for alle at bruge og implementere. Vi kan lide gratis.

Du kan måske undre sig over, hvorfor vi endda har problemer med endnu en protokol - vi har jo allerede HTTP - som kan bruges til at sende hurtige beskeder mellem alle slags webforbundne systemer (som OpenHAB og IFTTT, især med den nye maker kanal IFTTT forbinder nu med noget: Introduktion til Maker Channel IFTTT forbinder nu med noget: Introduktion til Maker Channel De potentielle anvendelser til IFTTT er uendelige. Men indtil nu har det været svært at interface det med dine egne hardwareprojekter. I dag er det alle ændret. Læs mere ). Og du ville have ret. Behandlingsomkostningerne på en HTTP-server er imidlertid ret store - så meget, at du ikke nemt kan køre en på en indlejret mikrocontroller som Arduino (i det mindste kan du, men du vil ikke have meget hukommelse tilbage til noget andet ). MQTT er den anden side er let, så at sende meddelelser omkring dit netværk vil ikke tilstoppe rørene, og det kan nemt passe ind i vores lille Arduino-hukommelsesplads.

Hvordan virker MQTT?

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

Lad os fortsætte med Twitter-for-machines- analogien. Ligesom Twitter-brugere kan tweet deres egne meningsløse 140 tegn, og brugere kan "følge" andre brugere for at se en kureret strøm af indlæg, kan MQTT-klienter abonnere på en bestemt kanal for at modtage alle meddelelser derfra, samt offentliggøre deres egne meddelelser til den kanal. Dette publicere og abonnere mønster kaldes pub / sub, i modsætning til tradition klient / server model af HTTP.

HTTP kræver, at du når ud til den maskine, du kommunikerer med, siger Hej, så frem og tilbage med at konstant anerkende hinanden, mens du får eller sætter data. Med pub / sub har klienten, der gør forlaget, ikke brug for at vide, hvilke kunder der abonnerer på: det pumper bare ud meddelelserne, og mægleren omfordeler dem til abonnenter. Enhver kunde kan både offentliggøre og abonnere på emner, ligesom en Twitter-bruger.

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

Det er ikke, at MQTT er bedre end HTTP for alt - men det er mere hensigtsmæssigt, hvis vi skal have masser af sensorer rundt om i huset, som konstant rapporterer ind.

Det er også vigtigt at vide, at OpenHAB ikke vil fungere som din MQTT-mægler - vi retter os lidt senere. OpenHAB vil dog fungere som en klient: den kan både udgive din OpenHAB aktivitetslog og binde bestemte kanaler til enheder, så du kan f.eks. Have en switch, der styres af MQTT-meddelelser på en bestemt kanal. Dette er ideelt til at skabe et hus fyldt med sensorer.

Installer Mosquitto på din Pi

Selvom OpenHAB indeholder en MQTT-klient, så du kan abonnere på et emne og også offentliggøre meddelelser, fungerer det ikke som serveren. Til det skal du enten bruge en web-baseret MQTT-mægler (betalt eller gratis), eller installer den gratis software på din Pi. Jeg vil gerne holde alt inde i huset, så jeg har installeret Mosquitto på Pi.

Desværre er den version, der er tilgængelig via den sædvanlige apt-get, helt 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 få en MQTT-server til at køre på det lokale netværk. Din mægler kører som standard på port 1883.

Kontrollér, at din MQTT-server arbejder med den gratis MQTT.fx, som er cross-platform. Klik på ikonet Indstillinger for at oprette en ny profil, og indtast din Raspberry Pi's IP-adresse eller navn. Gem og tryk på forbindelsen. Hvis det lille trafiklys øverst til højre bliver grønt, er det godt at gå.

mqttfx eksempelprofil

For en hurtig test skal du klikke på fanen "abonner" og skrive inTopic / i tekstboksen og derefter trykke på knappen Abonner . Du abonnerer nu på at modtage besked om emnet, der hedder inTopic, selvom det vil vise 0 meddelelser. Gå tilbage til fanen Publicer, skriv inTopic i den lille boks og en kort besked i den store tekstboks nedenfor. Hit Udgiv et par gange og se tilbage på fanen Abonner. Du skal se et par beskeder, der har dukket op i det pågældende emne.

inopisk MQTT test

Før vi tilføjer nogle egentlige sensorer til vores netværk, skal vi lære om emneniveauer, som gør det muligt for os at strukturere og filtrere MQTT-netværket. Emne navne er store bogstaver, bør ikke starte med $, eller medtage et mellemrum eller ikke-ASCII tegn - standard programmeringspraksis for variable navne, virkelig.

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

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / temperature myHome / livingRoom / fugtighed myHome / køkken / temperatur myHome / køkken / luftfugtighed 

Allerede bør du se, hvordan denne træstruktur er perfekt til et smart hjem fyldt med sensorer og enheder. Den bedste praksis til brug med flere sensorer i et enkelt rum er at offentliggøre hver sensorvariabel som eget emneniveau - forgrening til mere specificitet (som i eksemplerne ovenfor) - i stedet for at forsøge at udgive flere typer sensorer til samme kanal .

Kunder kan derefter offentliggøre eller abonnere på et hvilket som helst antal individuelle emneliveauer eller bruge nogle specielle wildcard-tegn til at filtrere fra højere op i træet.

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

 MyHome / + / temperatur 

ville abonnere klienten til begge

 myHome / livingroom / temperatur myHome / køkken / temperatur 

... men ikke fugtighedsniveauet.

# Er et wildcard-kort på flere niveauer, så du kan hente alt fra livingroom sensor arrayet med:

 myhome / stue / # 

Teknisk kan du også abonnere på rodniveauet # som du får dig til alt, hvad der går igennem mægleren, men det kan være som at holde 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 meddelelser om et par sekunder, før min klient lige styrtede ned.

MQTT Begynder Tip: " / myHome /" er et andet emne for " myHome /" - herunder et skråstreg ved starten skaber et tomt emne niveau, som ikke teknisk anbefales, fordi det kan være forvirrende.

Nu da vi kender teorien, lad os gå med et Arduino, Ethernet Shield og en DHT11 temperatur- og fugtighedsføler - du har sikkert fået en i din startpakke, men hvis ikke, skift bare miljøsensoren til en bevægelse sensor (eller endda en knap).

Udgivelse MQTT fra en Arduino med Ethernet-forbindelse

Hvis du har en hybrid Arduino-kompatibel enhed med Wi-Fi eller Ethernet indbygget, bør det også fungere. Til sidst vil vi have en bedre / billigere måde at kommunikere med at skulle bruge en netværksforbindelse i hvert rum, men det tjener til at lære det grundlæggende.

Start med at downloade pubsubclient bibliotek fra Github. Hvis du har brugt knappen "Download as ZIP", er strukturen lidt forkert. Unzip, omdøb mappen til bare pubsubclient, tag derefter de to filer ud af src- mappen og flyt dem op på et niveau til roden af ​​den downloadede mappe. Flyt derefter hele mappen til din Arduino / bibliotek directory.

Her er min sample kode, 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 det venlige navn (OpenHAB.local i mit tilfælde), da TCP / IP-stakken på Arduino er meget forenklet, og at tilføje koden til Bonjour-navngivning ville være meget hukommelse, vi ikke vil spilde . For at ændre emnerne, som sensordata udsendes på, rul ned til disse linjer:

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

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

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

Undersøg koden derovre, og du vil se, at du nemt kan styre en LED eller et relæ, f.eks. Ved at sende kommandoer til bestemte kanaler. I eksemplet kode sender det simpelthen en besked tilbage, der anerkender kvittering for kommandoen.

Upload din kode, sæt din Arduino i netværket, og brug MQTT.fx til at abonnere på enten # eller openhab / himitsu / # (eller hvad end du har ændret rumnavnet til, men glem ikke at inkludere # i slutningen). Du skal snart se, at meddelelser kommer ind; og hvis du sender ON eller OFF til kommandoemnet, vil du se, at også anerkendelser kommer tilbage.

mqtt arduino meddelelser kommer tilbage

MQTT-binding til OpenHAB

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

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

Og rediger config filen for at aktivere bindingen.

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

Genstart OpenHAB

 sudo service openhab genstart 

Lad os derefter tilføje et element eller to:

 / * MQTT Sensorer * / Nummer Himitsu_Temp "Himitsu Temperatur [% .1f ° C]" (Himitsu, Temperatur) {mqtt = "<[mægler: openhab / himitsu / temperatur: tilstand: standard]"} Antal Himitsu_Humidity "Himitsu Fugtighed [ % .1f %%] "(Himitsu, luftfugtighed) {mqtt =" <[mægler: openhab / himitsu / luftfugtighed: tilstand: standard] "} 

Nu skal du forstå formatet; det får et nummer fra MQTT-bindingen på et bestemt emne. Dette et simpelt eksempel, kan du ønske at henvise til wiki siden, hvor det kan blive meget mere komplekst.

Tillykke med, du har nu grundlaget for et billigt Arduino-baseret sensor array. Vi vil gennemgå dette i fremtiden og placere Arduino's på deres eget helt separate RF-netværk. Jeg har også lavet en identisk version til Wizwiki 7500 boards, hvis du tilfældigvis har en af ​​dem.

Persistens og Grafikdata

I øjeblikket er der sikkert en masse sensorer oprettet, uanset om det er Z-Wave eller brugerdefinerede Arduinos, der kører MQTT - så du kan se den aktuelle tilstand af disse sensorer til enhver tid, og du bør også være at reagere på deres værdi i regler. Men det interessante ved sensorværdier er generelt, at de ændrer sig over tid. Det er her, hvor persistens og grafing kommer ind. Persistens i OpenHAB betyder at gemme data over tid. Lad os gå videre og konfigurere RRD4J (Round Robin Database for Java), såkaldt fordi data gemmes i en round robin mode - ældre data kasseres for at 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 

Derefter opret en ny fil kaldet rrd4j.persist i mappen konfigurations / persistence . Indsæt i følgende:

 Strategier {everyMinute: "0 * * * *?" every hour: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange} Elementer {// vedbliver alt, når værdien er opdateret, bare en standard og gendanner dem fra database ved opstart *: strategy = everyChange, restoreOnStartup // næste definerer vi specifikke strategier for everyHour for noget i Temperaturgruppen, og hvert minut for luftfugtighedstemperaturen *: strategi = hver luftfuktighed *: strategy = everyMinute // alternativt kan du tilføje specifikke elementer her, f.eks. // Bedroom_Humidity, JamesInOffice: strategy = everyMinute} 

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

I anden halvdel af filen fortæller vi rr4dj hvilke dataværdier, der skal gemmes. Som standard vil vi gemme alt, hver gang det opdateres, men jeg har også angivet nogle tidsbaserede strategier for specifikke sensorer. Temperaturer Jeg er ikke foruroliget, så jeg har sat det for at redde hver eneste gang, men fugtighed er en stor bekymring for mig, så jeg vil se, hvordan det skifter hvert minut. Hvis der er andre data, du specifikt vil gemme på bestemte tidspunkter, skal du tilføje dem her nu eller justere efter behov.

Bemærk: Hvis du også vil grave dataene, skal du gemme den mindst en gang om minuttet. Det er ligegyldigt, om dine sensordata opdateres lige hurtigt, du skal blot fortælle rr4dj at gemme det en gang i minuttet.

Med det definerede, skal du begynde at se nogle fejlfejl output, der fortæller dig, at værdierne bliver gemt.

rrd4j lagring af data

Næste op, lad os lave nogle smukke grafer over alle disse data. Det er virkelig nemt. For at lave en graf over en enkelt sensor, tilføj følgende til dit webstedskort:

 Diagram element = Soveværelse_Humiditetsperiode = h 

Det er bogstaveligt talt alt hvad du behøver. Gyldige værdier for perioden er h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; Det bør være indlysende, hvad det betyder. Den er standard til D for en hel dag med data, hvis den ikke er angivet.

Hvis du vil oprette en graf med flere elementer, skal du simpelthen forpege gruppenavnet i stedet:

 Figurelement = Fugtighedsperiode = h 

diagram

Du kan også være 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 / chart? groups = Fugtighed og periode = h

Hvordan kommer dit OpenHAB-system?

Det er det for denne del af guiden, men forvent ikke, at det er sidste, du hører fra os om OpenHAB. Forhåbentlig har denne og begyndervejledningen givet dig en solid grund til at udvikle dit eget komplette OpenHAB-system - men det er en proces, der aldrig er helt færdig.

Heldigvis kan OpenHAB skala meget fra et par enheder til hundreder, fra enkel regelkompleksitet til ultimativ indenfor hjemmeautomatisering - så hvordan kommer dit system sammen? Hvilke enheder har du valgt? Hvad er det næste store projekt, du skal tackle?

Lad os tale i kommentarerne - og hvis du fandt denne vejledning nyttige, skal du klikke på disse deleknapper for at fortælle dine venner, hvordan de også kan opsætte deres eget OpenHAB-system.

In this article