Annons

Gratis betyder inte alltid "inte så bra som betalt", och OpenHAB är inget undantag. Programvaran för hemmeautomation med öppen källkod överstiger mycket kapaciteten hos något annat hemmeautomationssystem på marknaden - men det är inte lätt att konfigurera. I själva verket kan det vara rent frustrerande.

Den här guiden kan laddas ner som en gratis PDF. Ladda ner OpenHAB nybörjarhandbok del 2: ZWave, MQTT, regler och kartläggning nu. Kopiera och dela detta med dina vänner och familj.

I del 1 av guiden gick jag igenom dig installera OpenHAB på en Raspberry Pi Komma igång med OpenHAB Home Automation på Raspberry PiOpenHAB är en mogen, öppen källkodshemsautomationsplattform som körs på en mängd olika hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan alla hemmautomationshårdvara på marknaden i dag. Läs mer , introducerade kärnbegreppen i OpenHAB och visade hur du lägger till dina första artiklar i systemet. Idag kommer vi att gå vidare:

  • Lägga till ZWave-enheter
  • instagram viewer
  • Lägga till en Harmony Ultimate-controller
  • Introduktion av regler
  • Presenterar MQTT och installerar en MQTT-mäklare på din Pi, med sensorer på en Arduino
  • Spela in data och grafera dem

Introduktion till Z-Wave

Z-Wave har varit det dominerande hemmeautomatiseringsprotokollet i flera år: det är pålitligt, har utvecklats omfattande och fungerar över ett mycket längre sortiment än några andra smarta hemprodukter. Det finns hundratals Z-Wave-sensorer tillgängliga för dig som utför ett brett spektrum av uppgifter. OpenHAB kan arbetar med Z-Wave, men är ett problem att installera, och tillförlitlighet är inte garanterad.

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 om. Det kan fungera bra för dig, eller det kan vara plågas med små men ihållande problem. Köp inte åtminstone ett hus fullt av sensorer förrän du har haft en chans att prova några. Det enda skälet att välja Z-Wave är om du inte är 100% nöjd med OpenHAB och vill lämna dina alternativ öppna i framtiden: Z-Wave fungerar till exempel med Samsung SmartThings Vilken smart hubb för hemmeautomation är bäst för dig?Under ett tag tyckte folk på idén som inget annat än en gimmick, men nyligen publicerade produkter har visat att smarta hemmeautomation börjar uppfylla sina löften. Läs mer nav, såväl som Z-Wave-specifika nav som Homeseer, och en rad andra programvarealternativ som Domoticz.

Även om OpenHAB innehåller en Z-Wave-bindning, måste du fortfarande göra det konfigurera Z-Wave-nätverket först, innan OpenHAB kan börja fråga efter data. Om du har ett Rasberry-styrkort har du någon mjukvara som levereras för att konfigurera nätverket, så vi täcker inte det här. Om du köpte en Aeotec USB Z-Stick-kontroller eller liknande har du troligtvis ingen programvara inkluderad, så läs vidare.

Aeotec Z-Stick Gen5, Z-Wave Plus USB för att skapa gatewayAeotec Z-Stick Gen5, Z-Wave Plus USB för att skapa gateway Köp nu på Amazon $44.95

Om du redan har en Z-Wave-nätverksinställning, kan du bara ansluta din controller till Pi och börja konfigurera bindningen och artiklarna. Om det här är ditt första inlägg i Z-Wave, är det lite mer komplex.

Först på hårdvarusidan: varje styrenhet har sitt eget sätt att para ihop med enheter (tekniskt känt som ”inkluderingsläge” där ett nod-ID tilldelas). När det gäller Aotec Z-Stick betyder detta att koppla bort den från USB-porten och trycka på knappen en gång för att placera den i inkluderingsläge. Ta sedan den nära till den enhet du parar ihop och tryck på inkluderingsknappen på den också (detta kommer också att variera: mitt Everspring-uttag kräver att knappen trycks in tre gånger i följd, så lektionen här är att läsa manualen för din enhet).

Z-Stick blinkar kort för att indikera framgång. Detta ger problem när du kopplar tillbaka den till Pi, eftersom en ny port tilldelas. Starta om din Pi så att den återställs till standardporten om du tycker att den dynamiskt har tilldelats en annan. Ännu bättre: anslut det inte till Pi-enheten förrän du har gjort alla hårdvaruparingar först.

Installera HABmin- och Z-Wave-bindningar

Eftersom OpenHAB faktiskt inte är ett konfigurationsverktyg för Z-Wave, kommer vi att installera ett annat webbhanteringsverktyg som gör det - något som kallas HABmin. Gå vidare till HABmin Github-förvar ladda ner den aktuella utgåvan. När du har packat upp den hittar du 2 .burk filer i tilläggskatalogen - dessa bör placeras i motsvarande tilläggskatalog i din OpenHAB Home-delning (om du också använder Aotec gen5 Z-Stick, se till att du har åtminstone version 1.8 av Z-Wave-bindningen).

Skapa sedan en ny mapp i webbappskatalogen och kallade den "habmin" (små bokstäver är viktiga). Kopiera resten av de nedladdade filerna där.

Obs: Det finns också en HABmin 2 under aktiv utveckling. Installation är ungefär densamma men med ytterligare ett .jar-tillägg. Det kan vara värt att försöka båda bara för att se vilka du föredrar.

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

ls / dev / tty *

Du letar efter något med USB i namnet, eller i mitt speciella fall, Z-stick presenterade sig som /dev/ttyACM0 (ett modem). Det kan vara lättare att göra kommandot en gång innan du ansluter 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 avsnittet om Z-Wave, okommentera båda linjerna och placera din faktiska enhetsadress. Ett sista steg för mig var att låta OpenHAB-användaren komma åt modemet.

sudo usermod -a -G dialout openhab

Starta OpenHAB nu för att starta allt

sudo service openhab omstart

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

zwave startar upp i öppen logg

Det finns mycket att se i HABMIN, men vi är bara riktigt bekymrade över Konfiguration -> Bindningar -> Z-Wave -> Enheter som du kan se nedan. Expandera noden för att redigera plats- och namnetiketten för att göra det lättare att referera.

redigera enhetsnamnet

Konfigurera Z-Wave-objekt

Varje Z-Wave-enhet har en specifik konfiguration för OpenHAB. Tack och lov har de flesta enheter redan utforskats och det kommer att finnas exempel där ute redan för er. Konfigurering av anpassade enheter som inte känner igen omfattar inte omfattningen av denna guide, men låt oss anta att den stöds för tillfället.

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 exempelförklaring. Jag anpassade detta enligt följande:

Växla avfuktare_Switch "Avfuktare" {zwave = "3: kommando = switch_binary"} Nummer Avfuktare_Watt "Avfuktare strömförbrukning [% .1f W]" {zwave = "3: kommando = meter"}

Perfekt.

Nästa är en Aeotec Gen5 Multi-Sensor.

Aeon Labs Aeotec Z-Wave Gen5 Multisensor (Z-Wave Plus)Aeon Labs Aeotec Z-Wave Gen5 Multisensor (Z-Wave Plus) Köp nu på Amazon $69.27

För den här hittade jag ett provkonfigur på iwasdot.com, och min multisensor är på Node 2.

Antal Hall_Temperature "Hall temperatur [% .1f ° C]" (Hall, temperatur) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 1, sensor_scale = 0"} Number Hallway_Humidity "Hallway Humidity [% .0f %%]" (Hall, Humidity) {zwave = "2: 0: command = sensor_multilevel, sensor_type = 5"} Number Hallway_Luminance "Hallway Luminance [% .0f Lux]" (Hallway) {zwave = "2: 0: kommando = sensor_multilevel, sensor_type = 3"} Kontakta Hallway_Motion "Hallway Motion [% s]" (Hall, Motion) {zwave = "2: 0: command = sensor_binary, respond_to_basic = true"} Nummergivare_1_batteri "Batteri [% s%%]" (Rörelse) {zwave = "2: 0: kommando = batteri"}

Om formatet på detta ser konstigt ut för dig, vänligen gå tillbaka till det första nybörjarguide Komma igång med OpenHAB Home Automation på Raspberry PiOpenHAB är en mogen, öppen källkodshemsautomationsplattform som körs på en mängd olika hårdvara och är protokoll agnostic, vilket innebär att den kan ansluta till nästan alla hemmautomationshårdvara på marknaden i dag. Läs mer , särskilt Hue-bindande avsnitt, där jag förklarar hur artiklar läggs till. Du kommer antagligen bara någonsin att behöva kopiera klistra exempel som detta, men om du har en ny enhet, den bindande dokumentationen detaljerar alla kommandon.

Logitech Harmony Binding

Innan vi hoppade på regler, ville jag lägga till en snabb anteckning om att arbeta med Harmony-bindningen. Jag är ett stort fan av Harmony-serie av ultimata fjärrkontroller Logitech Harmony Ultimate Review och GiveawayDitt vardagsrum är kaos - erkänn det. Du förlåts för att undra vilken fjärrkontroll som vilken enhet. Vad med TV: n, förstärkaren, TiVO, BluRay-spelaren, kanske till och med belysning - växlingsaktiviteter blir en lång ... Läs mer för att förenkla upplevelsen av hemmediacenter, men de står ofta som ett separat system inom det smarta hemmet. Med OpenHAB kan Logitech Harmony-aktiviteter och full enhetskontroll nu vara en del av ditt centraliserade system, och till och med ingå i automatiseringsregler.

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

openhab apt-cache sök efter harmonibindning

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

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

För att konfigurera bindningen öppnar du filen openhab.cfg och lägger till ett nytt avsnitt enligt följande:

########## HARMONY REMOTE CONTROLS ########## harmonyhub: host = 192.168.1.181eller din ip
harmonyhub: användarnamn =your-harmoni-e-inloggning
harmonyhub: lösenord =ditt 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 standardverktyget för Harmony-konfigurering. Det är allt. När du startar om din nyans bör din felsökningslogga ha en plötslig skur av utmatning från bindningen.

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

json formaterad openhab-utgång

Förutom PowerOffs standardaktivitet som är standard, hittar du dina egna definierade aktiviteter som anges här med namn. Låt oss nu skapa en enkel kontroll med en knapp för att starta aktiviteter. Lägg till följande rad i dina artikelfiler. Ändra grupp och ikon om du vill.

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

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

Byt objekt = Harmony_Activity mappings = [PowerOff = 'Off', Motion = 'Exercise', 13858434 = 'TV', Karaoke = 'Karaoke']

I den fyrkantiga konsolen ser du varje aktivitet tillsammans med etiketten. Generellt kan du hänvisa direkt till aktiviteter som du har namngivit dem på din fjärrkontroll, men undantaget från det här hittade jag var allt med ett utrymme i aktivitetsnamnet, till exempel "Titta på TV". I det här fallet måste du använda aktivitets-ID. Återigen kan du hitta ID i JSON-felsökning. Spara och uppdatera gränssnittet, du bör se något liknande det här:

öppenhabsharmoni i webbplatskartan

Du kan också hänvisa till aktiviteter i dina regler, som vi kommer att se nästa. Läs wikisidan för mer information om Harmony bindande.

En allmän introduktion till regler

De flesta smarta hemknutor har någon typ av regler som skapas så att du automatiskt kan reagera på sensordata och händelser i hemmet. I själva verket skulle jag hävda att ett riktigt smart hem inte är det du behöver spendera tid på att interagera med mobilappar - det är ett som är osynligt för slutanvändaren och helt automatiserat. För detta ändamål innehåller OpenHAB också ett kraftfullt skriptspråk för regler som du kan programmera, vilket överträffar de flesta komplexitet smarta hem nav Battle of the Smart Home Hubs: Vad är det där och vad som kommer? Läs mer eller IFTTT-recept IFTTT Ansluter nu till någonting: presenterar Maker ChannelDe potentiella användningarna för IFTTT är oändliga. Men fram till nu har det varit svårt att gränssnitta det med dina egna hårdvaruprojekt. I dag har allt ändrats. Läs mer .

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

regel "Kontorsljus när James är närvarande" när artikel JamesInOffice ändrades från OFF till ON. skicka sedan kommando (Office_Hue, ON) slutregel "Office light off när James lämnar" när artikel JamesInOffice ändrades från ON till OFF. skicka sedan kommando (Office_Hue, OFF) slutet

Först namnger 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 då y. Slut betyder att den specifika regeln avslutas. Det finns ett antal specialord du kan använda i regler, men för tillfället har vi att göra med två enkla syntaxbitar - Artikel, som gör att du kan fråga om något; och sendcommand, vilket gör exakt vad du tror att det kommer. Jag sa att det här var lätt.

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 ha dem separata för huruvida jag är kommer in eller lämnar området - och det kan vara en bra idé att lägga till en ljusgivare någonstans i ekvationen så att vi inte onödigt slår på tänds.

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

regel "Träning varje morgon" när Time cron "0 0 8 1/1 *? *" sedan harmoniStartActivity ("träning") slutet.

Återigen, vi namnger regeln, anger villkor när den ska avfyras och de åtgärder som ska vidtas. Men i det här fallet definierar vi ett tidsmönster. Den roliga koden du ser i offerten ä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 skapa uttrycket, men du kan också läsa formatguiden [No Longer Available] för en detaljerad förklaring och fler exempel.

cron generator
CronMaker.com användes för att generera det korrekt formaterade Cron-uttrycket

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

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

En regel till som jag vill visa er något jag använder för att hantera fuktighetsnivåerna i mitt hem. Jag har en enda avfuktare som jag behöver flytta runt var det behövs, så jag bestämde mig för att titta på alla mina fuktighetssensorer, hitta vilken som är den högsta och lagra den i en variabel. Det utlöses för närvarande varje minut, men det kan lätt sänkas. Titta först:

import org.openhab.core.library.types. * importera org.openhab.model.script.action. * importera java.lang. Strängregel "Fuktighetsmonitor" när Time cron "0 * * * *?" sedan var prevHigh = 0 var highHum = "" Fuktighet? .medlemmar.för Varje [brum | logDebug ("humidity.rules", hum.name); if (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 är i Luftfuktighet? .Members.foreach linje. Fuktighet är ett gruppnamn för mina fuktighetssensorer; .members tar tag i alla artiklarna i den gruppen; för varje iterates över dem (med ett nyfiken fyrkantigt fästeformat som du förmodligen inte känner till). Reglets syntax är ett derivat av Xtend, så du kan läsa Xtend-dokumentation om du inte hittar ett exempel att anpassa.

Du behöver förmodligen inte göra det - det finns hundratals exempelregler ute:

  • Detaljerad förklaring av reglerna på den officiella wiki
  • De officiella regler prover wikisida
  • Ta regler till nya höjder
  • Avancerade prover på IngeniousFool.net

MQTT för OpenHAB och Internet of Things

MQTT är ett lättmeddelandesystem för kommunikation från maskin till maskin - ett slags Twitter för dig Arduinos eller Raspberry Pis för att prata med varandra (även om det naturligtvis fungerar med mycket mer än bara de där). Det växer snabbt i popularitet och finner sig ett hem med Internet of Things-enheter, som vanligtvis är låga resursmikrokontroller som behöver ett pålitligt sätt att överföra sensordata tillbaka till ditt nav eller ta emot fjärrkontrollen kommandon. Det är exakt vad vi ska göra med det.

Men varför uppfinna hjulet på nytt?

MQ Telemetry Transport uppfanns redan 1999 för att ansluta oljeledningar via långsam satellit anslutningar, speciellt utformade för att minimera batteriförbrukning och bandbredd, samtidigt som de tillhandahåller pålitliga leverans av data. Under åren har designprinciperna förblivit desamma, men användningsfallet har flyttats från specialiserade inbäddade system till allmän Internet of Things-enheter. 2010 släpptes protokollet royaltyfritt, öppet för alla att använda och implementera. Vi gillar gratis.

Du kanske undrar varför vi ens bryr oss med ännu ett protokoll - vi har ju HTTP trots allt - vilket kan användas för att skicka snabbmeddelanden mellan alla slags webbanslutna system (som OpenHAB och IFTTT, särskilt med det nya tillverkare kanal IFTTT Ansluter nu till någonting: presenterar Maker ChannelDe potentiella användningarna för IFTTT är oändliga. Men fram till nu har det varit svårt att gränssnitta det med dina egna hårdvaruprojekt. I dag har allt ändrats. Läs mer ). Och du hade rätt. Emellertid är behandlingsomkostnaderna för en HTTP-server ganska stor - så mycket att du inte enkelt kan köra en på en inbäddad mikrokontroller som Arduino (åtminstone kan du, men du har inte mycket minne åt något annan). MQTT är å andra sidan lätt, så att skicka meddelanden runt ditt nätverk kommer inte att täppa upp rören och det kan lätt passa in i vårt lilla Arduino-minne.

Hur fungerar MQTT?

MQTT kräver både en server (kallas en "mäklare") och en eller flera klienter. Servern fungerar som mellanhand, tar emot meddelanden och sänder ut dem till alla intresserade klienter.

Låt oss fortsätta med Twitter-for-maskiner analogi dock. 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 kuratad ström av inlägg, MQTT-klienter kan prenumerera på en viss kanal för att ta emot alla meddelanden därifrån, samt publicera sina egna meddelanden till det kanal. Detta publicerings- och prenumerationsmönster kallas pub / sub, i motsats till traditionen klient-server modell av HTTP.

HTTP kräver att du når ut till den maskin du kommunicerar med, säger hej, sedan har du fram och tillbaka för att ständigt erkänna varandra medan du får eller lägger data. Med pub / sub behöver inte klienten som publicerar veta vilka klienter som prenumererar: den pumpar bara ut meddelandena, och mäklaren distribuerar dem till alla prenumererade klienter. Varje klient kan både publicera och prenumerera på ämnen, precis som en Twitter-användare.

Till skillnad från Twitter är MQTT dock inte begränsat till 140 tecken. Det är data-agnostiskt, så att 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 - utan det är mer lämplig om vi kommer att ha massor av sensorer runt om i huset, hela tiden rapporterar in.

Det är också viktigt att veta att OpenHAB inte kommer att fungera som din MQTT-mäklare - vi kommer att adressera den lite senare. OpenHAB kommer emellertid att fungera som en klient: den kan både publicera din OpenHAB-aktivitetslogg, såväl som binda speciellt kanaler till enheter, så att du till exempel kan 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 måste du antingen använda en webbaserad MQTT-mäklare (betalad eller gratis) eller installera gratisprogramvaran på din Pi. Jag skulle vilja hålla allt internt, så jag har installerat Mosquitto på Pi.

Tyvärr är den version som är tillgänglig via den vanliga apt-get helt inaktuell. 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 install mygg.

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

Kontrollera att din MQTT-server fungerar med hjälp av den kostnadsfria MQTT.fx, som är plattform. Klicka på inställningsikonen för att skapa en ny profil och ange din Raspberry Pis IP-adress eller namn. Spara och tryck på Connect. Om det lilla trafikljuset uppe till höger blir grönt är du bra att gå.

mqttfx exempelprofil

För ett snabbtest, klicka på fliken "prenumerera" och skriv inTopic / i textrutan, tryck sedan på Prenumerera knapp. Du har nu prenumererat på att få meddelanden om ämnet som heter inTopic, men det kommer att visa 0 meddelanden. Gå tillbaka till publiceringsfliken, skriv inTopic i den lilla rutan och ett kort meddelande i den stora textrutan nedan. Träffa Publicera några gånger och titta tillbaka på prenumerationsfliken. Du bör se några meddelanden som har dykt upp i det ämnet.

inTopic MQTT-test

Innan vi lägger till några faktiska sensorer i vårt nätverk, måste vi lära oss om ämnesnivåer, som gör att vi kan strukturera och filtrera MQTT-nätverket. Ämnesnamn är skiftlägeskänsliga, bör inte börja med $ eller innehålla ett mellanslag eller icke-ASCII-tecken - vanligtvis vanliga programmeringsmetoder för variabla namn.

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

inTopic / smallSubdivision / evenSmallerSubdivision. myhome / Living / temperatur. myhome / Living / fuktighet. myhome / kök / temperatur. myhome / kök / fuktighet

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

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

+ Jokertecken ersätter varje ämnesnivå. Till exempel:

myhome / + / temperatur

skulle prenumerera klienten på båda

myhome / Living / temperatur. myhome / kök / temperatur

... men inte luftfuktigheten.

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

myhome / allrum / #

Tekniskt kan du också prenumerera på rotnivån # som du får dig att allting går passerar genom mäklaren, men det kan vara som att sätta en brandslang i ansiktet: lite överväldigande. Försök ansluta till den offentliga MQTT-mäklaren från HiveMQ och prenumerera på #. Jag fick cirka 300 meddelanden på några sekunder innan min klient just kraschade.

MQTT nybörjartips: “/myHome/” är ett annat ämne än "mitt hem/" - inklusive en snedstreck i början skapar en tom ämnesnivå, som även om den är tekniskt giltig, inte rekommenderas eftersom den 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 fuktighetssensor - du har antagligen en i ditt startpaket, men om inte, bara byt ut miljögivaren för en rörelsessensor (eller till och med en knapp).

Publicera MQTT från en Arduino med Ethernet-anslutning

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

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

Här är min provkod som du kan anpassa: DHT11-signalutgången är på stift 7. Byt server-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 väldigt enkel och att lägga till koden för Bonjour-namngivning skulle vara mycket minne som vi inte vill slösa. Om du vill ändra ämnen som sensordata sänds på bläddrar du ned till dessa rader:

char buffert [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 också prenumeration på en kommandokanal. Hitta och justera följande rad:

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

Undersök koden där och du ser att du enkelt kan kontrollera en lysdiod eller relä till exempel genom att skicka kommandon till specifika kanaler. I exempelkoden skickar det helt enkelt ett meddelande som bekräftar mottagandet av kommandot.

Ladda upp din kod, anslut din Arduino till nätverket och använd MQTT.fx prenumerera på endera # eller openhab / himitsu / # (eller vad du än ändrade rumsnamnet till, men glöm inte att inkludera # i slutet). Ganska snart bör du se meddelanden som kommer in; och om du skickar ON eller OFF till kommandot ämnet ser du bekräftelser också.

mqtt arduino meddelanden kommer tillbaka

MQTT-bindning för OpenHAB

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

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

Och redigera konfigurationsfilen för att aktivera bindningen.

mqtt: mäklare.url = tcp: // localhost: 1883. mqtt: mäklare.clientId = öppenhet

Starta om OpenHAB

sudo service openhab omstart

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

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

Nu bör du förstå formatet; det blir en Antal objekt från MQTT-bindningen, om ett specifikt ämne. Detta är ett enkelt exempel, du kanske vill hänvisa till wikisidan där den finns kan bli mycket mer komplex.

Grattis, du har nu basen för en billig Arduino-baserad sensormängd. Vi kommer att se över detta i framtiden och placera Arduino på deras eget helt separata RF-nätverk. Jag har också skapat en identisk version för Wizwiki 7500 styrelser om du råkar ha en av dem.

Persistens och grafiska data

Nu har du antagligen ett gäng sensorer som ställts in, oavsett om Z-Wave eller anpassade Arduinos kör MQTT - så du kan se det aktuella tillståndet för dessa sensorer när som helst, och du borde också vara att reagera på deras värde i regler. Men det intressanta med sensorvärden är i allmänhet att de förändras över tid: det är där uthållighet och grafering kommer in. Uthållighet i OpenHAB betyder att du sparar data över tid. Låt oss gå vidare och konfigurera RRD4J (Round Robin Database for Java), så kallad eftersom data sparas på ett runda robin-sätt - äldre data kastas 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 konfigurationer / persistens mapp. Klistra in följande:

Strategier {everyMinute: "0 * * * *?" varje timme: "0 0 * * *?" varje dag: "0 0 0 * *?" standard = everyChange. } Objekt {// kvarstår allt när värdet uppdateras, bara ett standard, och återställer dem från databasen vid uppstart *: strategi = varje Ändra, återställa OnStartup // nästa definierar vi specifika strategier för varje timme för allt i temperaturgruppen, och varje minut för fuktighetstemperatur *: strategi = everyHour Fuktighet *: strategi = everyMinute // alternativt kan du lägga till specifika objekt här, till exempel // Bedroom_Humidity, JamesInOffice: strategy = everyMinute. }

I den första delen av den här filen definierar vi strategier, som bara betyder att 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 timme och varje minut. Jag har inte använt dem alla ännu, men jag kanske är i framtiden.

Under den andra halvan av filen berättar vi rr4dj vilka datavärden som ska sparas. Som standard kommer vi att spara allt varje gång det uppdateras, men jag har också specificerat några tidsbaserade strategier för specifika sensorer. Temperaturer jag inte bryr mig så mycket om, så jag har ställt in det för att bara spara varje timme, men luftfuktighet är ett stort problem för mig, så jag vill se hur det förä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 också vill grafera data måste du lagra dem minst en gång per minut. Det spelar ingen roll om dina sensordata till och med uppdateras snabbt, du behöver helt enkelt berätta för rr4dj att lagra dem en gång per minut.

Med det definierade bör du börja se en viss felsökning som säger att värden lagras.

rrd4j lagrar data

Därefter gör vi några vackra grafer över all denna information. Det är riktigt enkelt. För att skapa en graf över en enskild sensor lägger du till följande på din webbplatskarta:

Diagramobjekt = sovrum_fuktighetsperiod = h

Det är bokstavligen allt du behöver. Giltiga värden för period är h, 4h, 8h, 12h, D, 3D, W, 2W, M, 2M, 4M, Y; det borde vara uppenbart vad dessa betyder. Det är standardvärde för D för en hel dag med data om det inte anges.

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

Diagramobjekt = Fuktighetsperiod = h
Diagram

Du kanske också är intresserad av att veta att du kan använda den här grafen någon annanstans; det genererar en bild med följande URL: http://YOUROPENHABURL: 8080 / diagram? grupper = Luftfuktighet & period = h

hur är Din OpenHAB-system kommer?

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

Tack och lov kan OpenHAB skala bra från några enheter till hundratals, från enkel regelkomplexitet till det ultimata inom hemmeautomation - så hur kommer ditt system att följa med? Vilka enheter valde du? Vad är det nästa stora projektet du ska ta itu med?

Låt oss prata i kommentarerna - och om du tyckte att den här guiden var användbar klickar du på de delningsknapparna för att berätta för dina vänner hur de också kan konfigurera sitt eget OpenHAB-system.

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.