OpenHAB Begynderguide Del 2: ZWave, MQTT, regler og kortlægning

OpenHAB Begynderguide Del 2: ZWave, MQTT, regler og kortlægning

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





I del 1 af guiden gik jeg dig igennem installation af OpenHAB på en Raspberry Pi , introducerede kernekoncepterne i OpenHAB og viste dig, hvordan du tilføjer dine første varer i systemet. I dag går vi videre:





  • Tilføjelse af ZWave -enheder
  • Tilføjelse af 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
  • Optagelse af data og grafisering 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 andre smarte hjemmeprodukter. 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 er et besvær at oprette, og pålidelighed er ikke garanteret.





Hvis du overvejer at købe et hus fuld af Z-Wave-sensorer specielt til brug med OpenHAB, vil jeg opfordre dig til at genoverveje. Det kan fungere godt for dig, eller det kan være plaget med små, men vedvarende problemer. Køb i det mindste ikke et hus fuld af sensorer, før du har haft mulighed for at prøve et par stykker. Den eneste grund til at vælge Z-Wave er, hvis du ikke er 100% afgjort på OpenHAB, og gerne vil lade dine muligheder stå åbne fremover: Z-Wave fungerer f.eks. Med Samsung SmartThings-hub samt Z-Wave-specifikke hubs såsom Homeseer og en række andre softwaremuligheder som f.eks domoticz .

Selvom OpenHAB indeholder en Z-Wave-binding, skal du stadig konfigurer Z-Wave-netværket først , før OpenHAB kan begynde at forespørge efter data. Hvis du har et Rasberry -controllerkort, har du noget software leveret til konfiguration af netværket, så det dækker vi ikke 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 Hub Z-Wave Plus USB til oprettelse af gateway (almindelig hvid) KØB NU PÅ AMAZON

Hvis du allerede har en Z-Wave-netværksopsætning , kan du bare tilslutte din controller til Pi og begynde at konfigurere bindingen og emnerne. Hvis dette er dit første angreb på Z-Wave, er det lidt mere komplekst.

For det første på hardwaresiden: hver controller har sin egen måde at parre med enheder (teknisk kendt som 'inklusionstilstand', hvor et knude -id er tildelt). I tilfælde af Aotec Z-Stick betyder det, at den skal tages ud af USB-porten, og der skal trykkes på knappen én gang for at sætte den i inklusionstilstand. Tag det derefter tæt på den enhed, du parrer, og tryk også på inklusionsknappen på det (dette vil også variere: min Everspring -stikkontakt kræver, at knappen trykkes 3 gange hurtigt 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 det igen til Pi, da en ny port er tildelt. Genstart din Pi for at få den nulstillet tilbage til standardporten, hvis du finder, at den dynamisk er blevet tildelt en anden. Endnu bedre: Slut det ikke til Pi'en, før du først har udført alle hardware -parringerne.

Installation af HABmin- og Z-Wave-bindinger

Da OpenHAB faktisk ikke er et konfigurationsværktøj til Z-Wave, vil vi installere et andet webstyringsværktøj, der gør-noget der hedder HABmin. Gå videre til HABmin Github -depot download den aktuelle version. Når du har pakket den 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 kalder det 'habmin' (små bogstaver er vigtigt). Kopier resten af ​​de downloadede filer derind.

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 begge bare for at se, hvilken du foretrækker.

Hvis du ikke allerede har gjort det, skal du slutte 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-sticken 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 ændres, hvis du er usikker.

Åbn OpenHAB-konfigurationsfilen, og rediger afsnittet om Z-Wave, uden at kommentere begge linjer og sætte din faktiske enhedsadresse. Et sidste trin for mig var at give OpenHAB -brugeren adgang til modemet.

sudo usermod -a -G dialout openhab

For at sparke alt i gang, genstart OpenHAB

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 meddelelser fra forskellige Z-Wave-noder. Lad os starte med at kontrollere HABMIN for at se, hvad den har fundet: http: //openhab.local: 8080/habmin/index.html (udskiftning af openhab.local med dit Raspberry Pi -værtsnavn eller din IP -adresse).

Der er meget at se i HABMIN, men vi er kun virkelig bekymrede over Konfiguration -> Bindinger -> Z -Wave -> Enheder fane, som du kan se herunder. Udvid noden for at redigere placeringen og navneetiketten for din lette reference.

Konfiguration af Z-Wave-emner

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

For det første 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øveemne konfiguration. Jeg tilpassede dette som følger:

Switch Dehumidifier_Switch 'Dehumidifier' {zwave = '3: command = switch_binary'}

Antal Dehumidifier_Watts 'Affugterens strømforbrug [%.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) KØB NU PÅ AMAZON

For denne fandt jeg en prøvekonfiguration på iwasdot.com , og min multisensor er på Node 2.

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

Nummer Hallway_Humidity 'Gangfugtighed [%.0f %%]' (Gang, luftfugtighed) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

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

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

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

Hvis formatet på dette ser mærkeligt ud for dig, skal du gå tilbage til det første begynderguide , specifikt Hue -bindingsafsnittet, hvor jeg forklarer, hvordan varer tilføjes. Du skal sandsynligvis kun kopiere indsætte eksempler som dette, men hvis du har en ny enhed, indeholder bindingsdokumentationen alle kommandoer .

Logitech Harmony Binding

Inden vi hopper ind i reglerne, ville jeg tilføje en hurtig note om arbejdet med Harmony -bindingen. Jeg er en stor fan af Harmony -serien af ​​ultimative fjernbetjeninger for at forenkle oplevelsen af ​​hjemme -mediecenter, men de står ofte som et separat system i det smarte hjem. Med OpenHAB kan Logitech Harmony -aktiviteter og fuld enhedsstyring nu være en del af dit centraliserede system og endda inkluderet i automatiseringsregler.

Begynd med at installere de tre bindingsfiler, du finder, ved at bruge apt-cache til at søge efter 'harmoni':

Glem ikke at chown bindingsmappen 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:

########## HARMONI FJERNBETJENINGER ###########

harmonyhub: host = 192.168.1.181 eller din ip

harmonyhub: brugernavn = din-harmoni-email-login

harmonyhub: password = dit kodeord

IP -adressen er din Harmony -hubs. 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 Hue, skal din fejlfindingslog have et pludseligt udbrud af output fra bindingen.

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

Ud over den standard PowerOff -aktivitet, der er en standard, finder du dine egne definerede aktiviteter, der er angivet her ved 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 varefil. Skift gruppe og ikon, hvis du vil.

/ * Harmony Hub */

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

Dette er en tovejs 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 sitemapfilen.

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

hvor varmt er for varmt cpu

I firkantet parentes ser du hver aktivitet sammen med etiketten. Generelt kan du referere direkte til aktiviteter, som du har navngivet dem på din fjernbetjening, men undtagelsen til dette fandt jeg, var alt med et mellemrum i aktivitetsnavnet, f.eks. 'Se tv'. I dette tilfælde skal du bruge aktivitets -id'et. Igen kan du finde id'et i JSON -fejlfindingsoutput. Gem og opdater din grænseflade, du skulle se noget, der ligner dette:

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

En generel introduktion til regler

De fleste smart home hubs indeholder en form 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 et, du skal bruge tid på at interagere med mobilapps - det er et, der er usynligt for slutbrugeren og fuldstændigt automatiseret. Til dette formål inkluderer OpenHAB også et kraftfuldt regelscript -sprog, som du kan programmere, hvilket langt overstiger kompleksiteten i de fleste smarte hjemmeknudepunkter eller IFTTT -opskrifter.

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

regel 'Kontor lyser, når James er til stede'

hvornår

Vare JamesInOffice ændret fra OFF til ON

derefter

sendCommand (Office_Hue, ON)

ende

regel 'Kontorlys slukkes, når James forlader'

hvornår

Vare JamesInOffice ændret fra ON til OFF

derefter

sendCommand (Office_Hue, OFF)

ende

Først navngiver vi reglen - vær beskrivende, så du ved, hvilken begivenhed der udløses. Dernæst definerer vi vores enkle regel ved at sige når x er sandt, så gør y . Slut betyder lukning af den pågældende regel. Der er en række særlige ord, du kan bruge i regler, men for nu har vi at gøre med to enkle bits af syntaks - Vare , som giver dig mulighed for at spørge om tilstanden til noget; og sendCommand , som gør præcis, hvad du tror, ​​det vil. Jeg fortalte dig, at det var let.

Det er nok unødvendigt at bruge et par regler, men efterhånden som min logik bliver mere kompleks, vil det være en fordel at have dem adskilt for, om jeg kommer ind eller forlader området - og det kan være en god idé 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'

hvornår

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

derefter

harmonyStartActivity ('Motion')

ende

Igen navngiver vi reglen, angiver betingelser, når den skal affyre, 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 for at hjælpe med at skabe udtrykket, men du kan også læse formatguiden [No Longer Available] for en detaljeret forklaring og flere eksempler.

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', hvilket 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 lave øvelsen for mig.

En anden regel, jeg vil vise dig, er noget, jeg bruger til at styre fugtighedsniveauerne i mit hjem. Jeg har en enkelt affugter, som jeg skal flytte rundt, hvor det er nødvendigt, så jeg besluttede at se 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. Tag et kig først:

import org.openhab.core.library.types.*

import org.openhab.model.script.actions.*

import java.lang.String

regel 'Fugtighedsovervågning'

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

derefter

var prevHigh = 0

var highHum = ''

Fugtighed? .Medlemmer.for hver [nynnen |

logDebug ('fugtighedsregler', hum.navn);

hvis (hum.state som DecimalType> prevHigh) {

prevHigh = hum.state

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

}

hvordan man rydder intern opbevaring på tændte ild

]

logDebug ('fugtighedsregler', highHum);

postUpdate (Dehumidifier_Needed, highHum);

ende

Kernen i reglen er i Fugtighed? .Medlemmer.forræder linje. Fugtighed er et gruppenavn for mine fugtighedsfølere; .medlemmer tager fat i alle elementerne i den gruppe; for hver iterates over dem (med et underligt format i firkantet parentes, du sandsynligvis ikke er bekendt med). Syntaksen for regler er et derivat af Xtend, så du kan læse Xtend dokumentation hvis du ikke kan finde et eksempel at tilpasse.

Det behøver du sandsynligvis ikke - der er hundredvis af eksempler på regler derude:

MQTT til OpenHAB og Internet of Things

MQTT er et letvægts messaging-system til maskine-til-maskinkommunikation-en slags Twitter, hvor dine Arduinos eller Raspberry Pis kan tale med hinanden (selvom det selvfølgelig fungerer med meget mere end bare dem). Det vinder hurtigt i popularitet og finder sig et hjem med Internet of Things-enheder, som typisk er mikro-controllere med lav ressource, der har brug for en pålidelig måde at overføre sensordata tilbage til din hub eller modtage fjernkommandoer. Det er præcis, hvad vi vil gøre med det.

Men hvorfor genopfinde hjulet?

MQ Telemetry Transport blev opfundet helt tilbage i 1999 for at forbinde olierørledninger via langsomme satellitforbindelser, specielt designet til at minimere batteriforbrug og båndbredde, mens den stadig leverer pålidelig datalevering. I årenes løb er designprincipperne forblevet de samme, men use case har skiftet fra specialiserede integrerede systemer til generelle Internet of Things -enheder. I 2010 blev protokollen frigivet royaltyfrit, åben for alle at bruge og implementere. Vi kan godt lide gratis.

Du undrer dig måske over, hvorfor vi overhovedet generer endnu en protokol - vi har jo allerede HTTP - som kan bruges til at sende hurtige beskeder mellem alle slags web -tilsluttede systemer (som OpenHAB og IFTTT, især med den nye maker -kanal ). Og du ville have ret. Imidlertid er behandlingsomkostningerne for en HTTP -server ret store - så meget, at du ikke let kan køre en på en integreret mikrokontroller som Arduino (i hvert fald kan du, men du har ikke meget hukommelse tilbage til noget andet ). MQTT er på den anden side let, så at sende beskeder rundt om 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 sender dem videre til alle interesserede kunder.

Lad os fortsætte med Twitter-til-maskiner dog analogi. 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, kan MQTT -klienter abonnere på en bestemt kanal for at modtage alle beskeder derfra samt udgive deres egne meddelelser til den kanal. Dette udgivelses- og abonnementsmønster omtales som pub / sub , i modsætning til traditionen klient/server model af HTTP.

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

I modsætning til Twitter er MQTT dog ikke begrænset til 140 tegn. Det er datagnostisk, 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 til alt - men det er mere egnet, hvis vi skal 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 - det vil vi tage fat på senere. Imidlertid fungerer OpenHAB som en klient: den kan både udgive din OpenHAB -aktivitetslog og binde bestemte kanaler til enheder, så du f.eks. Kan få en switch, der styres af MQTT -meddelelser på en bestemt kanal. Dette er ideelt til at skabe et hus fuld af sensorer.

Installer Mosquitto på din Pi

Selvom OpenHAB indeholder en MQTT -klient, så du kan abonnere på et emne og også udgive meddelelser, fungerer den ikke som server. 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 beholde det hele internt, 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 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ærgående. Klik på ikonet for indstillinger for at oprette en ny profil, og indtast din Raspberry Pi's IP -adresse eller navn. Gem, og tryk på Opret forbindelse. Hvis det lille lyskryds øverst til højre bliver grønt, er du klar til at gå.

For en hurtig test skal du klikke på fanen 'Abonner' og skrive inTopic / i tekstfeltet, og tryk derefter på Abonner knap. Du abonnerer nu på at modtage besked om emnet med navnet inTopic, selvom det viser 0 beskeder. Gå tilbage til fanen Publicer, skriv inTopic i den lille boks og en kort besked i den store tekstboks nedenfor. Hit Offentliggøre et par gange og se tilbage på fanen Abonner. Du skulle se et par meddelelser have vist sig i dette emne.

Inden 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 og små bogstaver, bør ikke starte med $ eller indeholde et mellemrum eller ikke-ASCII-tegn-standard programmeringspraksis for variable navne.

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

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/livingRoom/temperatur

myHome/livingRoom/luftfugtighed

mit hjem/køkken/temperatur

mit hjem/køkken/luftfugtighed

Du burde allerede 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 udgive hver sensorvariabel som sit eget emneniveau - forgrening til mere specificitet (som i eksemplerne ovenfor) - frem for at forsøge at udgive flere sensortyper til den samme kanal .

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

Jokertegnet + erstatter et emne -niveau. For eksempel:

myHome/+/temperatur

ville abonnere klienten på begge

myHome/livingRoom/temperatur

mit hjem/køkken/temperatur

... men ikke fugtighedsniveauerne.

# Er et wildcard på flere niveauer, så du kan hente alt fra livingRoom-sensorarrayet med:

myHome/livingRoom/#

Teknisk set kan du også abonnere på rodniveau #, som får dig til at gå alt, hvad der går igennem 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 Nybegyndertip: ' /mit hjem/' er et andet emne end ' mit hjem/' - inklusiv et skråstreg i starten skaber et tomt emniveau, som selv om det er teknisk gyldigt, ikke anbefales, fordi det kan være forvirrende.

Nu hvor vi kender teorien, lad os prøve med en Arduino, Ethernet Shield og en DHT11 temperatur- og fugtighedsføler - du har sandsynligvis en i dit startsæt, men hvis ikke, skal du bare skifte miljøsensoren ud for en bevægelse sensor (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, bør det også fungere. Til sidst vil vi have en bedre/billigere måde at kommunikere, 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 lidt forkert. Unzip, omdøb mappen til bare pubber , tag derefter de to filer ud af src mappe, og flyt dem et niveau op til roden af ​​den downloadede mappe. Flyt derefter hele mappen til din Arduino/biblioteker vejviser.

Her er min prøvekode, du kan tilpasse : DHT11 signaloutput er på pin 7. Skift serverens 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 tilføjelse af koden til Bonjour -navngivning ville være meget hukommelse, vi ikke ønsker at spilde. Hvis du vil ændre de emner, sensordata udsendes på, skal du rulle ned til disse linjer:

forkulningsbuffer [10];

dtostrf (t, 0, 0, buffer);

client.publish ('openhab/himitsu/temperatur', buffer);

dtostrf (h, 0, 0, buffer);

client.publish ('openhab/himitsu/luftfugtighed', buffer);

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

client.subscribe ('openhab/himitsu/command');

Undersøg koden der omkring, og du vil se, at du nemt kunne styre en LED eller et relæ f.eks. Ved at sende kommandoer til bestemte kanaler. I eksempelkoden sender den ganske enkelt en besked tilbage, der bekræfter modtagelsen 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 endrede værelsesnavnet til, men glem ikke at inkludere # i slutningen). Ret snart skulle du se beskeder komme ind; og hvis du sender ON eller OFF til kommandoemnet, ser du også kvitteringer, der kommer tilbage.

MQTT -binding til OpenHAB

Det sidste trin i ligningen er at tilslutte dette til OpenHAB. Til det 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 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 = '<[broker:openhab/himitsu/temperature:state:default]'}

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

Nu skulle du forstå formatet; det får en Nummer element fra MQTT -bindingen om et bestemt emne. Dette er et enkelt eksempel, du vil måske henvise til wiki -siden, hvor det er kan blive meget mere kompleks .

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

Persistens og grafiske data

På nuværende tidspunkt har du sandsynligvis oprettet en flok sensorer, hvad enten det er fra Z-Wave eller brugerdefinerede Arduinos, der kører MQTT-så du kan se den aktuelle tilstand for disse sensorer når som helst, og du bør 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 vedholdenhed og graftegning kommer ind. Udholdenhed i OpenHAB betyder at gemme dataene over tid. Lad os gå videre og konfigurere RRD4J (Round Robin Database for Java), såkaldt, fordi data gemmes på en round 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/vedholdenhed folder. Indsæt følgende:

Strategier {

everyMinute: '0 * * * *?'

hver time: '0 0 * * *?'

hver dag: '0 0 0 * *?'

standard = hver ændring

}

Varer {

// vedvarer alt, når værdien er opdateret, bare en standard, og gendan dem fra databasen ved opstart

*: strategy = everyChange, restoreOnStartup

// derefter definerer vi specifikke strategier for hver time for noget i temperaturgruppen og hvert minut for fugtighed

skal jeg downloade 64 eller 32 bit

Temperatur*: strategi = hver time

Fugtighed*: strategi = hver minut

// alternativt kan du tilføje specifikke varer her, f.eks

// Soveværelse_Humidity, JamesInOffice: strategy = everyMinute

}

I den første del af denne fil definerer vi strategier, hvilket bare betyder at give et navn til et CRON -udtryk. Dette er det samme, som vi allerede gjorde med My.OpenHAB, men denne gang laver vi nogle nye strategier, som vi kan bruge hver dag, hver time og hver minut. Jeg har ikke brugt dem alle endnu, men jeg kan være det 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å angivet nogle tidsbaserede strategier for specifikke sensorer. Temperaturer er jeg ikke for generet over, 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, du specifikt vil gemme på bestemte tidspunkter, skal du tilføje dem her nu eller justere efter behov.

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

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

Lad os derefter lave 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 webstedskort:

Diagramartikel = Soveværelse_Fugtighedsperiode = h

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

Hvis du vil oprette en graf med flere elementer, skal du blot tegne gruppenavnet i stedet:

Diagramartikel = Fugtighedsperiode = h

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

Hvordan er det Din OpenHAB -system på vej?

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

Heldigvis kan OpenHAB skalere godt fra et par enheder til hundredvis, fra enkel regelkompleksitet til det ultimative inden for hjemmeautomatisering - så hvordan går dit system? Hvilke enheder valgte du? Hvad er det næste store projekt, du skal klare?

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

Vi håber, at du kan lide de ting, vi anbefaler og diskuterer! MUO har tilknyttede og sponsorerede partnerskaber, så vi modtager en andel af omsætningen fra nogle af dine køb. Dette påvirker ikke den pris, du betaler, og hjælper os med at tilbyde de bedste produktanbefalinger.

Del Del Tweet E -mail En begyndervejledning til animering af tale

Animering af tale kan være en udfordring. Hvis du er klar til at begynde at tilføje dialog til dit projekt, nedbryder vi processen for dig.

Læs Næste
Relaterede emner
  • gør det selv
  • Smart hjem
  • Arduino
  • Hjemmeautomatisering
  • Lang form
  • Longform Guide
Om forfatteren James Bruce(707 artikler udgivet)

James har en bachelor i kunstig intelligens og er CompTIA A+ og Network+ certificeret. Når han ikke har travlt som Hardware Reviews Editor, nyder han LEGO, VR og brætspil. Inden han kom til MakeUseOf, var han belysningstekniker, engelsklærer og datacenteringeniør.

Mere fra James Bruce

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere