OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning

OpenHAB, open source-hemautomatiseringsprogrammet, överträffar kapaciteten hos andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande.

OpenHAB, open source-hemautomatiseringsprogrammet, överträffar kapaciteten hos andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång.  Faktum är att det kan vara rättvist frustrerande.
Annons

Gratis betyder inte alltid "inte lika bra som betalt", och OpenHAB är inget undantag. Open source-hemautomatiseringsprogrammet överträffar överlägsen möjligheterna hos alla andra hemautomatiseringssystem på marknaden - men det är inte lätt att få igång. Faktum är att det kan vara rättvist frustrerande.

Den här guiden är tillgänglig för nedladdning som en gratis PDF. Ladda ner OpenHAB Beginners Guide Del 2: ZWave, MQTT, Regler och kartläggning nu . Känn dig fri att kopiera och dela med dig av dina vänner och familj.

I del 1 av guiden gick jag igenom installationen av OpenHAB på en Raspberry Pi Komma igång med OpenHAB Hemautomation på Raspberry Pi Komma igång med OpenHAB Hemautomation på Raspberry Pi OpenHAB är en mogen, öppen källkodsautomatiseringsplattform som körs på olika sätt av hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan vilken hemautomatiseringsutrustning som helst på marknaden idag. Läs mer, introducerade OpenHABs grundläggande begrepp och visade hur du lägger till dina första objekt i systemet. Idag går vi vidare:

  • Lägger till ZWave-enheter
  • Lägga till en Harmony Ultimate-kontroller
  • Introducerande regler
  • Introducerar MQTT och installerar en MQTT-mäklare på din Pi, med sensorer på en Arduino
  • Inspelning av data och grafing av det

Introduktion till Z-Wave

Z-Wave har varit det dominerande hemautomatiseringsprotokollet i flera år. Det är pålitligt, har utvecklats mycket och fungerar över ett mycket längre område än alla andra smarta hemprodukter. Det finns hundratals Z-Wave-sensorer tillgängliga för dig som utför ett brett utbud av uppgifter. OpenHAB kan arbeta med Z-Wave, men det är svårt att installera, och tillförlitlighet garanteras inte.

Om du funderar på att köpa ett hus fullt av Z-Wave-sensorer specifikt för användning med OpenHAB, uppmanar jag dig att ompröva. Det kan fungera bra för dig, eller det kan vara plågat av små men långvariga problem. Åtminstone, köp inte ett hus fullt av sensorer tills du har haft en chans att prova några. Den enda anledningen till att välja Z-Wave är om du inte är 100% bosatt på OpenHAB, och skulle vilja lämna dina alternativ öppet i framtiden: Z-Wave arbetar till exempel med Samsung SmartThings Vilken smart nav för hemautomation är bäst för dig ? Vilken smart nav för hemautomation är bäst för dig? En stund tänkte folk på idén som ingenting annat än en gimmick, men senaste produktutgåvor har visat att smart hemautomatisering börjar leva upp till sina löften. Läs mer hub, liksom Z-Wave-specifika nav som Homeseer, och en rad andra programalternativ som Domoticz.

Även om OpenHAB innehåller en Z-Wave-bindning, behöver du fortfarande konfigurera Z-Wave-nätverket innan OpenHAB kan börja söka det för data. Om du har ett Rasberry-styrkort har du lite programvara som levereras för att konfigurera nätverket, så vi kommer inte att täcka det här. Om du köpte en Aeotec USB Z-Stick-controller eller liknande har du förmodligen ingen programvara, så läs vidare.

Aeotec Z-Stick Gen5, Z-Wave Plus USB för att skapa gateway Aeotec Z-Stick Gen5, Z-Wave Plus USB för att skapa gateway Köp nu hos Amazon $ 44, 95

Om du redan har en Z-Wave-nätverksinställning, kan du bara koppla din controller till Pi och börja konfigurera bindningen och objekten. Om detta är din första fördämning i Z-Wave, är det lite mer komplex.

Först på hårdvarusidan: varje kontroller har sitt eget sätt att para ihop med enheter (tekniskt känt som "inkluderingsläge" där ett nod-ID är tilldelat). När det gäller Aotec Z-Stick innebär det att du kopplar ur den från USB-porten och trycker på knappen en gång för att placera den i inkluderingsläget. Ta sedan det nära till den enhet du parar, och tryck även på inkluderingsknappen på det där (det kommer också att variera: mitt Everspring-uttag kräver att knappen trycks 3 gånger i snabb följd, så läxan här är att läsa bruksanvisningen för din enhet) .

Z-Stick blinkar kort för att indikera framgång. Detta ger problem när du kopplar den tillbaka till Pi, som en ny port är tilldelad. Starta om din Pi för att få den återställd till standardporten om du tycker att den har dynamiskt omfördelats en annan. Bättre fortfarande: Anslut inte det till Pi tills du har gjort alla hårdvaruparrangemang först.

Installera HABmin och Z-Wave Bindings

Eftersom OpenHAB faktiskt inte är ett konfigurationsverktyg för Z-Wave, kommer vi att installera ett annat webbhanteringsverktyg som gör - något som heter HABmin. Gå vidare till HABmin Github-arkivet ladda ner den aktuella versionen. När du har släppt ut den, hittar du 2 .jar- filer i tilläggskatalogen - dessa ska placeras i motsvarande tilläggskatalog i din OpenHAB Home-delning (om du använder Aotec gen5 Z-Stick, se till att du Jag har åtminstone version 1.8 av Z-Wave-bindningen) .

Skapa sedan en ny mapp i webapps-katalogen och kallade den "habmin" (små bokstäver är viktiga). Kopiera resten av de nedladdade filerna till det.

Obs! Det finns också en HABmin 2 under aktiv utveckling. Installationen är mycket densamma men med ytterligare ett tillägg. Det kan vara värt att försöka både bara för att se vilken du föredrar.

Om du inte redan har det, anslut din controller till din Pi. Skriv följande för att hitta rätt port.

 ls / dev / tty * 

Du letar efter någonting med USB i namnet, eller i mitt speciella fall presenterade Z-stick sig som / dev / ttyACM0 (ett modem). Det kan vara lättare att göra kommandot en gång innan du kopplar in det och en gång efter så att du kan se vad som ändras om du är osäker.

devtty

Öppna OpenHAB-konfigurationsfilen och ändra sektionen på Z-Wave, utan att kommentera båda raderna och sätta din faktiska enhetadress. Ett sista steg för mig var att tillåta OpenHAB-användaren att komma åt modemet.

 sudo usermod -a -G dialout openhab 

Nu, för att sparka allt till handling, starta om OpenHAB

 sudo service openhab starta om 

Förhoppningsvis, om du kontrollerar debug-loggen ser du något som detta. Grattis, du pratar nu med Z-Wave. Du kan också hitta debug-loggen översvämmade med meddelanden från olika Z-Wave-noder. Låt oss börja med att kolla HABMIN för att se vad den hittades: http: //openhab.local: 8080 / habmin / index.html (ersätter openhab.local med ditt Raspberry Pi värdnamn eller IP-adress).

zwave startar upp i openhab logg

Det finns mycket att se i HABMIN, men vi är bara riktigt bekymrade över fliken Konfiguration -> Bindningar -> Z-Wave -> Enheter, som du kan se nedan. Expand noden för att redigera plats- och namnetiketten för enkel hänvisning.

redigera enhetens namn

Konfigurera Z-Wave-objekt

Varje Z-Wave-enhet har en specifik konfiguration för OpenHAB. Tack och lov, de flesta enheter har redan utforskats och det kommer att finnas exempel där ute för din redan. Konfigurering av anpassade enheter som inte känns igen är långt bortom omfattningen av den här guiden, men låt oss anta att det stöds för nu.

Först har jag en grundläggande Everspring AN158 strömbrytare och mätare på Node 3. En snabb Googling ledde mig till ett blogginlägg på Wetwa.re, med en exempeltyps konfiguration. Jag anpassade detta enligt följande:

 Switch Dehumidifier_Switch "Avfuktare" {zwave = "3: command = switch_binary"} Antal Dehumidifier_Wattts "Avfuktare effektförbrukning [% .1f W]" {zwave = "3: command = meter"} 

Perfekt.

Nästa upp är 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öp nu På Amazon

För detta hittade jag en sample config på iwasdot.com, och min multisensor är på Node 2.

 Nummer Hallway_Temperature "Hall Temperatur [% .1f ° C]" (Hall, Temperatur) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Nummer Hallway_Humidity "Hall Fuktighet [% .0f %% ] "(Hallway, Fuktighet) {zwave =" 2: 0: command = 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: command = sensor_binary, respond_to_basic = true "} Nummer sensor_1_battery" Batteri [% s %%] " Motion) {zwave = "2: 0: command = battery"} 

Om formatet på detta ser konstigt ut, vänligen gå tillbaka till den första nybörjarhandboken Komma igång med OpenHAB Hemautomatisering på Raspberry Pi Komma igång med OpenHAB Hemautomation på Raspberry Pi OpenHAB är en mogen, öppen källkodsautomatiseringsplattform som körs på en mängd olika hårdvara och protokoll agnostic, vilket innebär att den kan anslutas till nästan vilken hemautomatiseringsutrustning som helst på marknaden idag. Läs mer, specifikt Hue-bindningssektionen, där jag förklarar hur artiklar läggs till. Du behöver nog bara kopiera klistra in exemplen så här, men om du har en ny enhet, anger den bindande dokumentationen alla kommandon.

Logitech Harmony Binding

Innan vi hoppar in i regler, ville jag lägga till en snabb anteckning om att arbeta med Harmony-bindningen. Jag är en stor fan av Harmony-serien av ultimata fjärrkontroller Logitech Harmony Ultimate Review och Giveaway Logitech Harmony Ultimate Review och Giveaway Ditt vardagsrum är kaos - erkänna det. Du är förlåtad för att undra vilken fjärrkontroll som vilken enhet. Vad med TV: n, förstärkaren, TiVO, BluRay-spelaren, kanske till och med belysningsverksamheten blir en lång ... Läs mer för att förenkla erfarenheten av mediecentrum i hemmet, men de står ofta som ett separat system inom det smarta hemmet. Med OpenHAB kan Logitech Harmony-aktiviteter och fullständig enhetskontroll nu vara en del av ditt centraliserade system och inkluderas även i automatiseringsregler.

Börja med att installera de tre bindande filerna som du hittar med hjälp av apt-cache för att söka efter "harmoni":

openhab apt-cache söka efter harmoni bindande

Glöm inte att krossa bindningskatalogen igen när du är klar:

 sudo apt-get install openhab-addon-action-harmonyhub sudo apt-get install openhab-addon-bindande-harmonyhub sudo apt-get install openhab-addon-io-harmonyhub sudo chown -hR öppenhet: openhab / usr / share / openhab 

För att konfigurera bindningen öppnar du openhab.cfg-filen och lägger till en ny sektion enligt följande:

 ###########################################################################################irval: NAH = Lösenord 

IP-adressen är den för ditt Harmony-nav. Använd en nätverksskanner för att ta reda på det. Du måste också ange dina inloggningsuppgifter, de som du anger när du startar standard Harmony-konfigurationsverktyget. Det är allt. När du startar om din nyans, bör din debug-logg ha en plötslig utbrott av utgången från bindningen.

Det här är en JSON-formaterad lista över alla dina aktiviteter, enheter och kommandon som kan skickas. Det är en bra idé att kopiera det här för framtida referens. du kan göra det ännu enklare att läsa med hopfällbara noder genom att klistra in i en JSON-formaterare online som den här.

json formaterad openhab-utgång

Förutom den vanliga PowerOff-aktiviteten som är standard, hittar du dina egna definierade aktiviteter listade här efter namn. Låt oss nu skapa en enkel knapp för att starta aktiviteter. Först lägg till följande rad i din objektfil. Ändra grupp och ikon om du vill.

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

Detta är en tvåvägs-strängbindning, som både kan hämta den aktuella aktiviteten och beordra den aktuella aktiviteten för att vara något annat. Nu kan vi skapa en knapp för den, i webbplatskartan.

 Byt objekt = Harmony_Aktivitet mappings = [PowerOff = 'Av', Motion = 'Motion', 13858434 = 'TV', Karaoke = 'Karaoke'] 

I torgfästet ser du varje aktivitet tillsammans med etiketten. Generellt kan du hänvisa direkt till aktiviteter som du har namngivit dem på fjärrkontrollen, men undantaget till det här jag hittade var något med ett mellanslag i aktivitetsnamnet, till exempel "Watch TV". I det här fallet måste du använda aktivitets-id. Återigen kan du hitta ID i JSON-felsökningsprodukten. Spara och uppdatera ditt gränssnitt, du borde se något liknande det här:

openhab harmoni i sitemap

Du kan också referera till aktiviteter i dina regler, som vi ser nästa. Läs wikisidan för mer information om Harmony-bindningen.

En Allmän Introduktion till Regler

De flesta smarta hemhubbar innehåller någon form av reglerskapande så att du automatiskt kan reagera på sensordata och händelser i hemmet. Faktum är att jag skulle argumentera för att ett verkligt smart hem inte är en du behöver spendera tid att interagera med mobilappar - det är en som är osynlig för slutanvändaren och helt automatiserad. För detta ändamål innehåller OpenHAB också ett kraftfullt regelspråkspråk som du kan programmera, vilket överträffar komplexiteten hos de flesta smarta hubben. Slaget vid Smart Home Hubs: Vad är ute och vad kommer det? Slaget vid Smart Home Hubs: Vad är ute och vad kommer det? Läs mer eller IFTTT-recept IFTTT kopplar nu till något: Introduktion till Maker Channel IFTTT kopplas nu till något: Introduktion till Maker Channel De potentiella användningarna för IFTTT är oändliga. Men tills nu har det varit svårt att koppla in det med dina egna hårdvaruprojekt. Idag är det allt förändrat. Läs mer .

Programmeringsreglerna låter sämre än det är. Låt oss börja enkelt med ett par regler som slår på eller av ljuset beroende på närvarosensorn:

 reglera "Kontorslampa när James presenterar" när objektet JamesInOffice ändrats från OFF till ON, sedan sendCommand (Office_Hue, ON) slutregeln "Kontorslampa när James lämnar" när objektet JamesInOffice ändras från ON till OFF och sedan sendCommand (Office_Hue, OFF) avsluta 

Först namnges vi regeln - var beskrivande, så du vet vilken händelse som skjuter. Därefter definierar vi vår enkla regel genom att säga när x är sant, gör sedan y . Slutet innebär stängning av den särskilda regeln. Det finns ett antal speciella ord som du kan använda i regler, men för närvarande hanterar vi två enkla bitar av syntax - Item, som låter dig fråga om någonting. och sendCommand, vilket gör exakt vad du tycker det kommer att göra. Jag sa att det var enkelt.

Det är förmodligen onödigt att använda ett par regler, men eftersom min logik blir mer komplex kommer det att vara fördelaktigt att få dem åtskilda för om jag kommer in eller lämnar området - och det kan vara en bra idé att lägga till en ljussensor någonstans in i ekvationen så att vi inte onödigt slår på ljus.

Låt oss titta på ett annat exempel för att skapa en schemalagd regel.

 regel "Träna varje morgon" när Time cron "0 0 8 1/1 *? *" då slutar harmonionStartActivity ("Exercise") 

Återigen heter vi regeln, tillståndsvillkoren när den ska elda och de åtgärder som ska vidtas. Men i det här fallet definierar vi ett tidsmönster. Den roliga koden du ser i citat är ett CRON-uttryck för Quartz Scheduler (formatet är något annorlunda än en vanlig CRONtab). Jag använde cronmaker.com för att hjälpa till att skapa uttrycket, men du kan också läsa formatguiden för en detaljerad förklaring och fler exempel.

cron generator
CronMaker.com brukade skapa det korrekt formaterade Cron-uttrycket

Mina regler säger helt enkelt "08:00 varje morgon, varje dag i veckan, berätta för Harmony Ultimate-systemet för att starta träningsaktiviteten", som i sin tur aktiverar TV: n, Xbox, förstärkaren och trycker på A-knappen efter en minut att starta skivan i enheten.

Tyvärr kan OpenHAB ännu inte göra övningen för mig.

En regel som jag vill visa dig är något jag använder för att hantera luftfuktighetsnivåerna i mitt hem. Jag har en avfuktare som jag behöver flytta runt där det behövs, så jag bestämde mig för att titta på alla mina fuktighetssensorer, hitta vilken som är högst och lagra den i en variabel. Det utlöses för närvarande varje minut, men det kan enkelt sänkas. Ta en titt först:

 importera org.openhab.core.library.types. * Importera org.openhab.model.script.actions. * Importera java.lang.String regel "Fuktighetsmonitor" när Time cron "0 * * * *?" då var föreHigh = 0 var highHum = "" Fuktighet? .members.forEach [hum | logDebug ("humidity.rules", hum.name); om (hum.state som DecimalType> prevHigh) {prevHigh = hum.state highHum = hum.name + ":" + hum.state + "%"}] logDebug ("humidity.rules", highHum); postUpdate (Dehumidifier_Needed, highHum); slutet 

Kärnan i regeln ligger i luftfuktigheten? .members.foreach line. Fuktighet är ett gruppnamn för mina fuktighetssensorer; .Members tar alla objekt i den gruppen foreach iterates över dem (med ett nyfiken kvadratfästeformat du är förmodligen inte bekant med). Regleringssyntaxen är ett derivat av Xtend, så du kan läsa Xtend-dokumentationen om du inte kan hitta ett exempel för att anpassa.

Du behöver förmodligen inte - det finns hundratals exempelregler där ute:

  • Detaljerad förklaring av reglerna på den officiella wikien
  • De officiella reglerna visar wikisidan
  • Regler till nya höjder
  • Avancerade prover på IngeniousFool.net

MQTT för OpenHAB och Internet av saker

MQTT är ett lättmeddelandesystem för maskin-till-maskin-kommunikation - en typ av Twitter för din Arduinos eller Raspberry Pis att prata med varandra (även om det fungerar med mycket mer än bara dem). Det går snabbt och blir ett hem med Internet of Things-enheter, som typiskt är små resursmikrokontrollatorer som behöver ett tillförlitligt sätt att överföra sensordata tillbaka till navet eller ta emot fjärrkommandon. Det är precis vad vi ska göra med det.

Men varför återuppfinna hjulet?

MQ Telemetry Transport uppfanns långt tillbaka 1999 för att ansluta oljeledningar via långsamma satellitanslutningar, speciellt utformade för att minimera batterianvändning och bandbredd, samtidigt som det ger pålitlig dataöverföring. Under årens lopp har konstruktionsprinciperna varit desamma, men användningsfallet har skiftats från specialiserade inbyggda system till Allmänna Internet av Things-enheter. Under 2010 släpptes protokollet gratis, öppet för alla att använda och implementera. Vi gillar gratis.

Du kanske undrar varför vi ens bryr oss om ännu ett protokoll - vi har trots allt HTTP - som kan användas för att skicka snabba meddelanden mellan alla typer av webbanslutna system (som OpenHAB och IFTTT, särskilt med den nya tillverkarkanalen IFTTT kopplas nu till något: Introduktion till Maker Channel IFTTT kopplas nu till något: Introduktion till Maker Channel De potentiella användningarna för IFTTT är oändliga. Men tills nu har det varit svårt att koppla in det med dina egna hårdvaruprojekt. Idag är allt ändrat. Läs mer ). Och du hade rätt. Behandlingskostnaden för en HTTP-server är dock ganska stor - så mycket att du inte enkelt kan köra en på en inbyggd mikrokontroller som Arduino (åtminstone kan du, men du kommer inte ha mycket minne kvar för något annat ). MQTT är å andra sidan är lätt, så att skicka meddelanden runt ditt nätverk kommer inte att täppa upp rören och det kan enkelt passa in i vårt lilla Arduino-minnesutrymme.

Hur fungerar MQTT?

MQTT kräver både en server (kallad en "mäklare") och en eller flera klienter. Servern fungerar som mellanhand, mottar meddelanden och vidarebefordrar dem till alla intresserade kunder.

Låt oss fortsätta med Twitter-for-machines- analogi. Precis som Twitter-användare kan tweeta sina egna meningslösa 140 tecken och användare kan "följa" andra användare för att se en kurerad ström av inlägg kan MQTT-klienter prenumerera på en viss kanal för att få alla meddelanden därifrån, samt publicera sina egna meddelanden till den kanalen. Detta publicera och prenumerera mönster kallas pub / sub, i motsats till traditionell klient / servermodell av HTTP.

HTTP kräver att du når ut till den maskin du kommunicerar med, säg Hej, sedan fram och tillbaka av att ständigt erkänna varandra medan du får eller sätter data. Med pub / sub, behöver klienten som gör publiceringen inte veta vilka kunder som prenumereras: det pumpar bara ut meddelandena och mäklaren omfördelar dem till några prenumeranter. Vilken klient kan både publicera och prenumerera på ämnen, precis som en Twitter-användare.

Till skillnad från Twitter är MQTT inte begränsat till 140 tecken. Det är data agnostic, så du kan skicka små nummer eller stora textblock, JSON-formaterade datagram, eller till och med bilder och binära filer.

Det är inte så att MQTT är bättre än HTTP för allt - men det är mer lämpligt om vi kommer att få massor av sensorer runt huset, ständigt rapportera in.

Det är också viktigt att veta att OpenHAB inte kommer att fungera som din MQTT-mäklare - vi tar itu med det här senare. OpenHAB kommer dock att fungera som en klient: den kan både publicera din OpenHAB-aktivitetslogg och bibehålla särskilda kanaler till enheter, så du kan till exempel ha en switch som styrs av MQTT-meddelanden på en viss kanal. Detta är idealiskt för att skapa ett hus fullt av sensorer.

Installera Mosquitto på din Pi

Även om OpenHAB innehåller en MQTT-klient så att du kan prenumerera på ett ämne och även publicera meddelanden fungerar det inte som servern. För det behöver du antingen använda en webbaserad MQTT-mäklare (betald eller gratis), eller installera den fria programvaran på din Pi. Jag skulle vilja hålla allt hemma, så jag har installerat Mosquitto på Pi.

Tyvärr är versionen som är tillgänglig via den vanliga apt-get helt föråldrad. Låt oss istället lägga till de senaste källorna.

 wget http://repo.mosquitto.org/debian/mosquitto-repo.gpg.key sudo apt-key lägg till mosquitto-repo.gpg.key cd /etc/apt/sources.list.d/ sudo wget http: // repo.mosquitto.org/debian/mosquitto-wheezy.list sudo apt-get installera mygg 

Det är allt vi behöver göra för att få en MQTT-server igång på det lokala nätverket. Din mäklare går som standard på port 1883.

Kontrollera att din MQTT-server arbetar med den fria MQTT.fx, som är plattformen. Klicka på inställningsikonen för att skapa en ny profil och ange din Raspberry Pis IP-adress eller namn. Spara och klicka på ansluta. Om det lilla trafikljuset till höger blir grönt, är det bra att gå.

mqttfx exempelprofil

För ett snabbtest, klicka på fliken "prenumerera" och skriv inTopic / i textrutan och tryck sedan på knappen Prenumerera . Du prenumererar nu på att få meddelande om ämnet heter inTopic, även om det kommer att visas 0 meddelanden. Gå tillbaka till fliken Publicera, skriv inTopic i den lilla rutan och ett kortmeddelande i den stora textrutan nedan. Hit Publicera några gånger och titta tillbaka på fliken prenumerera. Du borde se några meddelanden som har dykt upp i det ämnet.

inopiskt MQTT-test

Innan vi lägger till några aktuella sensorer i vårt nätverk behöver vi lära oss om ämnesnivåer, vilket gör att vi kan strukturera och filtrera MQTT-nätverket. Ämnesnamn är skiftlägeskänsliga, bör inte börja med $, eller inkludera ett mellanslag eller icke-ASCII-tecken - standardprogrammeringsmetoder för variabla namn, verkligen.

/ Separatorn anger en ämnesnivå, som är hierarkisk, till exempel följande är alla giltiga ämnesnivåer.

 inTopic / smallSubdivision / evenSmallerSubdivision myHome / livingRoom / temperatur myHome / livingRoom / fuktighet myHome / kitchen / temperature myHome / kitchen / moisture 

Redan bör du se hur denna trädstruktur är perfekt för ett smart hem fullt av sensorer och enheter. Den bästa praxis för användning med flera sensorer i ett enkelrum är att publicera varje sensorvariabel som sin egen ämnesnivå - förgrena sig till mer specificitet (som i exemplen ovan) - istället för att försöka publicera flera typer av sensorer till samma kanal .

Klienter kan sedan publicera eller prenumerera på ett antal enskilda ämnesnivåer eller använda några speciella jokertecken för att filtrera från högre upp i trädet.

+ Jokertecken ersätter någon ämnesnivå. Till exempel:

 myhome / + / temperatur 

skulle prenumerera klienten på båda

 myHome / livingroom / temperatur myHome / kök / temperatur 

... men inte fuktighetsnivåerna.

# Är ett jokertecken på flera nivåer, så att du kan hämta allt från LivingRoom-sensoruppsättningen med:

 myhome / vardagsrum / # 

Tekniskt kan du också prenumerera på rotnivå # som du får dig absolut allt som går igenom mäklaren, men det kan vara som att sticka en brandslang i ditt ansikte: lite överväldigande. Prova att ansluta till den offentliga MQTT-mäklaren från HiveMQ och prenumerera på #. Jag fick cirka 300 meddelanden om några sekunder innan min klient bara kraschade.

MQTT Nybörjare Tips: " / myHome /" är ett annat ämne än " myHome /" - inklusive ett snedstreck i början skapar en tom ämnesnivå, som inte är tekniskt giltig eftersom det kan vara förvirrande.

Nu när vi känner till teorin, låt oss gå med en Arduino, Ethernet Shield och en DHT11 temperatur- och fuktighetsgivare - du har nog en i startpaketet, men om inte, byt bara ut miljösensorn för en rörelse sensor (eller till och med en knapp).

Publicering MQTT från en Arduino med Ethernet-anslutning

Om du har en hybrid Arduino-kompatibel enhet med Wi-Fi eller Ethernet inbyggd, bör det också fungera. Så småningom vill vi ha ett bättre / billigare sätt att kommunicera med att behöva använda en nätverksanslutning i alla rum, men det här tjänar till att lära sig grunderna.

Börja med att ladda ner pubsubclient bibliotek från Github. Om du har använt knappen "Download as ZIP", är strukturen lite fel. Unzip, byt namn på mappen till bara pubsubclient, ta sedan de två filerna ur src- mappen och flytta dem upp en nivå till roten till den nedladdade mappen. Flytta sedan hela mappen till din Arduino / bibliotek katalog.

Här är min provkod du kan anpassa: DHT11-signalutgången är på stift 7. Ändra serverns IP för din Pi på följande rad:

 client.setServer ("192.168.1.99", 1883); 

Tyvärr kan vi inte använda det vänliga namnet (OpenHAB.local i mitt fall) eftersom TCP / IP-stacken på Arduino är mycket enkel och att lägga till koden för Bonjour-namngivning skulle vara mycket minne vi inte vill slösa . För att ändra de ämnen som sensordata sänds på, bläddra ner till dessa rader:

 karbonbuffert [10]; dtostrf (t, 0, 0, buffert); client.publish ( "openhab / himitsu / temperatur", buffert); dtostrf (h, 0, 0, buffert); client.publish ( "openhab / himitsu / fuktighet", buffert); 

Koden inkluderar även prenumeration på en kommandokanal. Hitta och justera följande rad:

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

Undersök koden runt där och du ser att du enkelt kan styra en LED eller ett relä, till exempel genom att skicka kommandon till specifika kanaler. I exemplet kod skickar det helt enkelt ett meddelande tillbaka som bekräftar kvittot på kommandot.

Ladda upp din kod, anslut din Arduino till nätverket och använd MQTT.fx prenumerera på antingen # eller openhab / himitsu / # (eller vad du än har ändrat rumsnamnet till, men glöm inte att inkludera # i slutet). Ganska snart bör du se meddelanden som kommer in; och om du skickar PÅ eller AV till kommandotemnet ser du även bekräftelser som kommer tillbaka.

mqtt arduino meddelanden kommer tillbaka

MQTT-bindning för OpenHAB

Det sista steget i ekvationen är att koppla detta till OpenHAB. För det behöver vi naturligtvis en bindning.

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

Och redigera konfigurationsfilen för att aktivera bindningen.

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

Starta om OpenHAB

 sudo service openhab starta om 

Låt oss lägga till ett objekt eller två:

 / * MQTT Sensorer * / Nummer Himitsu_Temp "Himitsu Temperatur [% .1f ° C]" (Himitsu, Temperatur) {mqtt = "<[mäklare: openhab / himitsu / temperatur: tillstånd: standard]"} Antal Himitsu_Humidity "Himitsu Fuktighet [ % .1f %%] "(Himitsu, Fuktighet) {mqtt =" <[mäklare: openhab / himitsu / luftfuktighet: tillstånd: standard] "} 

Nu borde du förstå formatet; det får ett nummer från MQTT-bindningen, på ett visst ämne. Detta är ett enkelt exempel, du kanske vill hänvisa till wikisidan där det kan bli mycket mer komplext.

Grattis, du har nu grunden till en billig Arduino-baserad sensor array. Vi kommer att se om detta i framtiden och placera Arduino på sitt eget helt separata RF-nätverk. Jag har också skapat en identisk version för Wizwiki 7500-kort om du råkar ha en av dem.

Persistens och Grafikdata

Nu är det förmodligen en massa sensorer som ställs in, oavsett om det är Z-Wave eller custom Arduinos som kör MQTT - så att du kan när som helst se aktuella tillstånd hos dessa sensorer, och du bör också vara att reagera på deras värde i regler. Men det intressanta med sensorvärden är i allmänhet att de ändras över tid: det är där persistens och grafer kommer in. Persistens i OpenHAB innebär att data sparas över tiden. Låt oss fortsätta och konfigurera RRD4J (Round Robin Database for Java), så kallad eftersom data sparas på ett round robin-sätt - äldre data kasseras för att komprimera databasens storlek.

Installera rrd4j-paket med följande kommandon.

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

Skapa sedan en ny fil som heter rrd4j.persist i mappen konfigurations / uthållighet . Klistra in följande:

 Strategier {everyMinute: "0 * * * *?" varje gång: "0 0 * * *?" everyDay: "0 0 0 * *?" default = everyChange} Objekt {// fortsätter allt när värdet är uppdaterat, bara en standard och återställ dem från databasen vid start *: strategy = everyChange, restoreOnStartup // nästa definierar vi specifika strategier för varje gång för något i Temperaturgruppen, och varje minut för luftfuktighetstemperatur *: strategi = alla luftfuktigheter *: strategy = everyMinute // alternativt kan du lägga till specifika föremål här, som // Bedroom_Humidity, JamesInOffice: strategy = everyMinute} 

I den första delen av den här filen definierar vi strategier, vilket bara betyder att man ska ge ett namn till ett CRON-uttryck. Detta är detsamma som vi redan gjorde med My.OpenHAB, men den här gången skapar vi några nya strategier som vi kan använda varje dag, varje gång och varje gång. Jag har inte använt dem alla än, men jag kan vara i framtiden.

I den andra halvan av filen, berättar vi för rr4dj vilka datavärden som ska sparas. Som standard kommer vi att spara allt varje gång det uppdateras, men jag har också angett några tidsbaserade strategier för specifika sensorer. Temperaturer Jag är inte alltför besvärad, så jag har satt det för att bara spara varje gång, men luftfuktighet är en stor angelägenhet för mig, så jag vill se hur det ändras varje minut. Om det finns andra data som du specifikt vill spara vid inställda tider, lägg till dem här nu eller justera efter behov.

Obs! Om du vill även gradera data måste du lagra den minst en gång i minuten. Det spelar ingen roll om din sensordata uppdateras så snabbt, du behöver helt enkelt berätta för rr4dj att spara den en gång i minuten.

Med det definierade bör du börja se några felsökningsutdata som säger att värden lagras.

rrd4j lagrar data

Nästa upp, låt oss göra några fina grafer av alla dessa data. Det är väldigt enkelt. För att göra en graf för en enskild sensor, lägg till följande på din sajtkarta:

 Diagramobjekt = Sovrum_Humiditetsperiod = h 

Det är bokstavligen allt du behöver. Giltiga värden för perioden är h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y ; Det borde vara uppenbart vad det här betyder. Den är normalt D för en fullständig dag med data om det inte anges.

För att skapa en graf med flera objekt, grafiskt bara gruppnamnet istället:

 Diagrampost = Luftfuktighetsperiod = h 

Diagram

Du kanske också är intresserad att veta att du kan använda denna graf på annat håll; det genererar en bild med följande URL: http: // YOUROPENHABURL: 8080 / chart? groups = Fuktighet och period = h

Hur kommer ditt OpenHAB-system?

Det är det för den här delen av guiden, men förvänta dig inte att det här kommer vara sist hörs från oss om OpenHAB. Förhoppningsvis har denna och nybörjarhandledningen gett dig en solid grund för att utveckla ditt eget kompletta OpenHAB-system - men det är en process som aldrig är helt färdig.

Lyckligtvis kan OpenHAB skala bra från några enheter till hundratals, från enkel regelkomplexitet till ultimat inom hemautomatisering - så hur går ditt system med? Vilka enheter valde du? Vad är nästa stora projekt du ska ta itu med?

Låt oss prata i kommentarerna - och snälla, om du hittade den här handboken användbar, klicka på delningsknapparna för att berätta för dina vänner hur de också kan konfigurera sitt eget OpenHAB-system.

In this article