OpenHAB Nybörjarguide Del 2: ZWave, MQTT, regler och kartläggning

OpenHAB Nybörjarguide Del 2: ZWave, MQTT, regler och kartläggning

Gratis betyder inte alltid 'inte lika bra som betalt', och OpenHAB är inget undantag. Öppen källkod hemautomatiseringsprogram överstiger långt möjligheterna för något annat hemautomatiseringssystem på marknaden - men det är inte lätt att installera. Det kan faktiskt vara riktigt frustrerande.





I del 1 av guiden gick jag igenom dig installera OpenHAB på en Raspberry Pi , introducerade kärnkoncepten för OpenHAB och visade dig hur du lägger till dina första objekt i systemet. Idag går vi längre:





  • Lägger till ZWave -enheter
  • Lägger till en Harmony Ultimate controller
  • Presentation av regler
  • Vi introducerar MQTT och installerar en MQTT -mäklare på din Pi, med sensorer på en Arduino
  • Spela in data och grafa det

Introduktion till Z-Wave

Z-Wave har varit det dominerande hemautomatiseringsprotokollet i flera år: det är pålitligt, har utvecklats i stor omfattning och fungerar över ett mycket längre intervall än andra smarta hemprodukter. Det finns hundratals Z-Wave-sensorer tillgängliga för dig som utför ett brett spektrum av uppgifter. OpenHAB burk arbeta med Z-Wave, men är ett krångel att installera, och tillförlitligheten 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 med små men ihållande problem. Köp åtminstone inte ett hus fullt av sensorer förrän du har fått chansen att testa några. Den enda anledningen till att välja Z-Wave är om du inte är 100% bosatt på OpenHAB och vill lämna dina alternativ öppna i framtiden: Z-Wave fungerar till exempel med Samsung SmartThings-hubb samt Z-Wave-specifika nav som Homeseer och en rad andra programvarualternativ som t.ex. domoticz .

Även om OpenHAB innehåller en Z-Wave-bindning, måste du fortfarande konfigurera först Z-Wave-nätverket , innan OpenHAB kan börja fråga om data. Om du har ett Rasberry -styrkort har du medföljande programvara 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-kontroller eller liknande har du förmodligen ingen programvara, så läs vidare.



Aeotec Z-Stick Gen5 Z-Wave Hub Z-Wave Plus USB för att skapa gateway (vanlig vit) KÖP NU PÅ AMAZON

Om du redan har en Z-Wave-nätverksinställning , du kan bara ansluta din handkontroll till Pi och börja konfigurera bindningen och objekt. Om detta är ditt första steg mot Z-Wave är det lite mer komplext.

För det första 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 det att du kopplar ur den från USB-porten och trycker på knappen en gång för att placera den i inkluderingsläge. Ta den sedan nära enheten du parkopplar och tryck på inkluderingsknappen på den också (detta kommer också att variera: mitt Everspring -uttag kräver att knappen trycks 3 gånger i snabb 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 har tilldelats. Starta om din Pi för att återställa den till standardporten om du upptäcker att den dynamiskt har tilldelats en annan. Ännu bättre: anslut inte den till Pi förrän du har gjort alla hårdvaruparningar 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 nuvarande versionen. 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 -resurs (om du också använder Aotec gen5 Z-Stick, se till att du har minst version 1.8 av Z-Wave-bindningen) .





Skapa sedan en ny mapp i webapps -katalogen och kallade den 'habmin' (gemener är viktigt). Kopiera resten av de nedladdade filerna dit.

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

Om du inte redan har gjort det, anslut din controller till din Pi. Skriv 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 presenterade Z-stickan 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.

Öppna OpenHAB-konfigurationsfilen och ändra avsnittet om Z-Wave, utan att kommentera båda raderna och sätta 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

Nu, för att sätta igång allt, starta om OpenHAB

sudo service openhab starta om

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 kontrollera HABMIN för att se vad den har hittat: http: //openhab.local: 8080/habmin/index.html (ersätt openhab.local med ditt Raspberry Pi -värdnamn eller din IP -adress).

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

Konfigurera Z-Wave-objekt

Varje Z-Wave-enhet kommer att ha en specifik konfiguration för OpenHAB. Tack och lov har de flesta enheter redan undersökts och det kommer redan att finnas exempel på dina. Att konfigurera anpassade enheter som inte känns igen ligger långt utanför räckvidden för den här guiden, men låt oss anta att det 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 ett exempel på objektkonfiguration. Jag anpassade detta enligt följande:

Byt avfuktare_Switch 'Avfuktare' {zwave = '3: command = switch_binary'}

Antal avfuktare_Watt 'Avfuktarens strömfö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) KÖP NU PÅ AMAZON

För den här hittade jag ett exempelkonfiguration på iwasdot.com , och min multisensor finns på nod 2.

Antal Hall_Temperature 'Hallway Temperature [%.1f ° C]' (Hall, Temperature) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 1, sensor_scale = 0'}

Antal Hall_Humidity 'Hallway Humidity [%.0f %%]' (Hall, Humidity) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 5'}

Antal Hall_Luminance 'Hallway Luminance [%.0f Lux]' (Hall) {zwave = '2: 0: command = sensor_multilevel, sensor_type = 3'}

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

Nummer sensor_1_battery 'Batteri [%s %%]' (rörelse) {zwave = '2: 0: command = battery'}

Om formatet på detta ser konstigt ut för dig, vänligen gå tillbaka till det första nybörjarguide , specifikt Hue -bindningsavsnittet, där jag förklarar hur objekt läggs till. Du kommer förmodligen bara att behöva kopiera klistra in exempel som detta, men om du har en ny enhet innehåller den bindande dokumentationen alla kommandon .

Logitech Harmony Binding

Innan vi hoppar in i reglerna ville jag lägga till en snabb anteckning om att arbeta med Harmony -bindningen. Jag är ett stort fan av Harmony -serien med ultimata fjärrkontroller för att förenkla upplevelsen för hemmamedia, men de står ofta som ett separat system inom det smarta hemmet. Med OpenHAB kan Logitech Harmony -aktiviteter och full enhetsstyrning nu vara en del av ditt centraliserade system och till och med inkluderat i automatiseringsregler.

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

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, öppna filen openhab.cfg och lägg till ett nytt avsnitt enligt följande:

########### HARMONY FJÄRRKONTROLLER ###########

harmonyhub: host = 192.168.1.181 eller din ip

harmonyhub: användarnamn = din-harmoni-e-post-inloggning

harmonyhub: lösenord = ditt lösenord

IP -adressen är din Harmony -hubb. Använd en nätverksskanner för att ta reda på det. Du måste också ange dina inloggningsuppgifter, de du anger när du startar standard Harmony -konfigurationsverktyget. Det är allt. När du startar om din Hue bör din felsökningslogg ha en plötslig utbrott av utdata 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 .

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

/ * Harmony Hub */

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

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

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

gratis filmer jag kan se på min telefon

I hakparenteset ser du varje aktivitet tillsammans med etiketten. Generellt kan du hänvisa direkt till aktiviteter som du har namngett dem på din fjärrkontroll, men undantaget från detta hittade jag var allt med ett mellanslag i aktivitetsnamnet, till exempel 'Titta på TV'. I det här fallet måste du använda aktivitets -ID. Återigen kan du hitta ID: t i JSON -felsökningsutmatningen. Spara och uppdatera ditt gränssnitt, du borde se något liknande det här:

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

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 hävda att ett riktigt smart hem inte är ett 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 reglerskriptspråk som du kan programmera, vilket överstiger komplexiteten hos de flesta smarta hemhubbar eller IFTTT -recept.

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

regel 'Kontorsljus tänds när James är närvarande'

när

Artikel JamesInOffice ändras från OFF till ON

sedan

sendCommand (Office_Hue, ON)

slutet

regel 'Kontorsljus släcks när James lämnar'

när

Artikel JamesInOffice ändras från ON till OFF

sedan

sendCommand (Office_Hue, OFF)

slutet

Först döper vi regeln - var beskrivande, så du vet vilken händelse som skjuts. Därefter definierar vi vår enkla regel genom att säga när x är sant, gör sedan y . Slut betyder att den här regeln stängs. Det finns ett antal specialord du kan använda i regler, men för närvarande har vi att göra med två enkla bitar av syntax - Artikel , som låter dig fråga något om tillstånd; och sendCommand , som gör precis vad du tror att det kommer att göra. 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 å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 tänder lampor.

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 *? *'

sedan

harmonyStartActivity ('Motion')

slutet

Återigen nämner vi regeln, anger villkor när den ska skjutas och åtgärder som ska vidtas. Men i det här fallet definierar vi ett tidsmönster. Den roliga koden du ser i citaten ä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.

CronMaker.com används 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 som jag vill visa er är något jag använder för att hantera luftfuktigheten i mitt hem. Jag har en enda avfuktare som jag behöver flytta runt där det behövs, så jag bestämde mig för att titta på alla mina fuktsensorer, 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 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 'fuktighetsövervakare'

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

sedan

var prevHigh = 0

var highHum = ''

Luftfuktighet? .Medlemmar.för VARJE [brum |

logDebug ('fuktighet.regler', hum.namn);

if (hum.state som DecimalType> prevHigh) {

prevHigh = hum.state

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

}

hur man loggar in på icloud på android

]

logDebug ('fuktighet.regler', highHum);

postUpdate (Dehumidifier_Needed, highHum);

slutet

Kärnan i regeln är i Luftfuktighet? .Medlemmar.förfråga linje. Luftfuktighet är ett gruppnamn för mina fuktsensorer; .medlemmar tar tag i alla föremål i den gruppen; för varje iterates över dem (med ett märkligt hakparentesformat som du förmodligen inte känner till). Syntaxen för regler är ett derivat av Xtend, så att du kan läsa Xtend -dokumentation om du inte hittar ett exempel att anpassa.

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

MQTT för OpenHAB och Internet of Things

MQTT är ett lättmeddelandesystem för maskin-till-maskin-kommunikation-ett slags Twitter för dina Arduinos eller Raspberry Pis att prata med varandra (även om det naturligtvis fungerar med mycket mer än bara dem). Det ökar snabbt i popularitet och hittar sig ett hem med Internet of Things-enheter, som vanligtvis är mikrostyrenheter med låg resurs som behöver ett pålitligt sätt att överföra sensordata tillbaka till ditt nav eller ta emot fjärrkommandon. Det är precis vad vi ska göra med det.

Men varför uppfinna hjulet igen?

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 de levererar tillförlitlig dataöverföring. Under årens lopp har designprinciperna förblivit desamma, men användningsfallet har skiftat från specialiserade inbyggda system till allmänna Internet of Things -enheter. År 2010 släpptes protokollet royaltyfritt, öppet för alla att använda och implementera. Vi gillar gratis.

Du kanske undrar varför vi ens bry oss om ännu ett protokoll - vi har ju redan 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 ). Och du skulle ha rätt. Bearbetningsomkostnaderna för en HTTP -server är dock ganska stora - 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 kvar för något annat ). MQTT är å andra sidan lätt, så att skicka meddelanden runt ditt nätverk kommer inte att täppa till 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 'mäklare') och en eller flera klienter. Servern fungerar som en mellanhand, tar emot meddelanden och sänder dem om till alla intresserade kunder.

Låt oss fortsätta med Twitter-för-maskiner liknelse dock. Precis som Twitter -användare kan twittra sina egna meningslösa 140 tecken, och användare kan 'följa' andra användare för att se en kurator av inlägg, kan MQTT -klienter prenumerera på en viss kanal för att ta emot alla meddelanden därifrån, samt publicera sina egna meddelanden till den kanalen. 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 maskinen 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 klienten som publicerar inte veta vilka klienter som prenumererar: det pumpar bara ut meddelandena och mäklaren omfördelar 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 agnostiker, så du kan skicka små siffror 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 ska ha massor av sensorer runt om i huset, som ständigt rapporterar in.

Det är också viktigt att veta att OpenHAB inte kommer att fungera som din MQTT -mäklare - vi tar upp den biten senare. Men OpenHAB kommer att fungera som en klient: den kan både publicera din OpenHAB -aktivitetslogg, samt binda särskilda 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 den inte som servern. För det måste du antingen använda en webbaserad MQTT -mäklare (betald eller gratis) eller installera gratis programvara på din Pi. Jag skulle vilja behålla allt internt, så jag har installerat Mosquitto på Pi.

Tyvärr är versionen 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 på port 1883 som standard.

Kontrollera att din MQTT-server fungerar med gratis MQTT.fx, som är plattformsoberoende. Klicka på inställningsikonen för att skapa en ny profil och ange din Raspberry Pi: s IP -adress eller namn. Spara och tryck på anslut. Om det lilla trafikljuset högst upp till höger blir grönt, är du klar.

För ett snabbt test, klicka på fliken 'prenumerera' och skriv inTopic / i textrutan och tryck sedan på Prenumerera knapp. Du prenumererar nu på att få ett meddelande 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å fliken prenumerera. Du bör se några meddelanden som har dykt upp i det ämnet.

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, borde inte börja med $, eller innehålla ett mellanslag eller icke-ASCII-tecken-standardprogrammeringsmetoder för variabelnamn, egentligen.

Avgränsaren / indikerar en ämnesnivå, som är hierarkisk, till exempel följande är alla giltiga ämnesnivåer.

inTopic / smallSubdivision / evenSmallerSubdivision

myHome/livingRoom/temperatur

myHome/livingRoom/fuktighet

myHome/kök/temperatur

myHome/kök/luftfuktighet

Redan borde du se hur denna trädstruktur är perfekt för ett smart hem fullt med 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 .

Kunder kan sedan publicera eller prenumerera på valfritt 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 en ämnesnivå. Till exempel:

myHome/+/temperatur

skulle prenumerera klienten på båda

myHome/livingRoom/temperatur

myHome/kök/temperatur

... men inte luftfuktigheten.

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

myHome/livingRoom/#

Tekniskt sett kan du också prenumerera på rotnivå # som du får dig att gå allting genom mäklaren, men det kan vara som att sticka en brandslang i ansiktet: lite överväldigande. Prova att 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 kraschade.

MQTT Nybörjartips: ' /mitt hem/' är ett annat ämne än ' mitt hem/' - att inkludera ett snedstreck i början skapar en tom ämnesnivå, som även om den är tekniskt giltig inte rekommenderas eftersom det kan vara förvirrande.

Nu när vi känner till teorin, låt oss testa en Arduino, Ethernet Shield och en DHT11 temperatur- och fuktighetssensor - du har förmodligen en i startpaketet, men om inte, byt ut miljösensorn för en rörelse sensor (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 inbyggt bör det också fungera. Så småningom vill vi ha ett bättre/billigare sätt att kommunicera att behöva använda en nätverksanslutning i varje rum, men detta 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 'Ladda ner som ZIP' är strukturen lite fel. Packa upp, byt namn på mappen till just pubsubclient , ta sedan de två filerna ur src mapp och flytta dem upp en nivå till roten i 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. Om du vill ändra ämnen som sensordata sänds på rullar du ner till dessa rader:

rödingbuffert [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 styra en lysdiod eller ett relä genom att skicka kommandon till specifika kanaler. I exempelkoden skickar den helt enkelt tillbaka ett meddelande som bekräftar mottagandet av kommandot.

Ladda upp din kod, anslut din Arduino till nätverket och prenumerera på antingen med MQTT.fx # eller openhab / himitsu / # (eller vad du än ändrade rumsnamnet till, men glöm inte att inkludera # i slutet). Ganska snart borde du se meddelanden komma in; och om du skickar PÅ eller AV till kommandoämnet kommer du att se kvitteringar som kommer tillbaka också.

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-binding-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 sedan lägga till ett eller två objekt:

/ * MQTT -sensorer */

Antal Himitsu_Temp 'Himitsu temperatur [%.1f ° C]' (Himitsu, temperatur) {mqtt = '<[broker:openhab/himitsu/temperature:state:default]'}

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

Vid det här laget bör du förstå formatet; det får en Nummer 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 grunden för en billig Arduino-baserad sensoruppsättning. Vi kommer att återkomma till 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 grafiska data

Vid det här laget har du förmodligen ett gäng sensorer, antingen från Z-Wave eller anpassade Arduinos som kör MQTT-så att du kan se det aktuella tillståndet för dessa sensorer när som helst, och du bör också reagera på deras värde i regler. Men det intressanta med sensorvärden är i allmänhet att de förändras med tiden: det är där uthållighet och diagram kommer in. Uthållighet i OpenHAB betyder att spara 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 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 konfigurationer/uthållighet mapp. Klistra in följande:

Strategier {

everyMinute: '0 * * * *?'

varje timme: '0 0 * * *?'

varje dag: '0 0 0 * *?'

default = everyChange

}

Artiklar {

// fortsätter allt när värdet uppdateras, bara en standard och återställ dem från databasen vid start

*: strategy = everyChange, restoreOnStartup

// nästa definierar vi specifika strategier för varje timme för allt i temperaturgruppen och varje minut för luftfuktighet

hitta en klänning från en bild

Temperatur*: strategi = varje timme

Luftfuktighet*: strategi = varje minut

// alternativt kan du lägga till specifika objekt här, t.ex.

// Bedroom_Humidity, JamesInOffice: strategy = everyMinute

}

I den första delen av den här filen definierar vi strategier, vilket 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 kommer att vara det 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 som jag inte stör mig så mycket på, så jag har ställt in det för att bara spara varje timme, men luftfuktigheten är ett stort bekymmer för mig, så jag vill se hur det förändras varje minut. Om det finns andra data du specifikt vill spara vid bestämda tider, lägg till dem här nu eller justera efter behov.

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

Med det definierade bör du börja se en del felsökningsutdata som talar om att värden lagras.

Låt oss sedan göra några vackra diagram över all denna data. Det är verkligen lätt. För att göra en graf över en individuell sensor, lägg till följande på din webbplatskarta:

Diagramobjekt = Sovrum_Fuktperiod = 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 dessa betyder. Standardvärdet är D för en hel dag med data om det inte anges.

Om du vill skapa en graf med flera objekt, grafiserar du bara gruppnamnet istället:

Kartobjekt = Luftfuktighetstid = h

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

Hur är det Din Kommer OpenHAB -systemet?

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

Tack och lov kan OpenHAB skala bra från några få enheter till hundratals, från enkel regelkomplexitet till det ultimata inom hemautomation - så hur går ditt system? Vilka enheter valde du? Vad är nästa stora projekt du ska ta dig an?

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

Vi hoppas att du gillar de saker vi rekommenderar och diskuterar! MUO har samarbetspartners och sponsrade partnerskap, så vi får en del av intäkterna från några av dina köp. Detta påverkar inte priset du betalar och hjälper oss att erbjuda de bästa produktrekommendationerna.

Dela med sig Dela med sig Tweet E-post En nybörjarguide för att animera tal

Att animera tal kan vara en utmaning. Om du är redo att börja lägga till dialog i ditt projekt bryter vi ner processen åt dig.

Läs Nästa
Relaterade ämnen
  • DIY
  • Smart hem
  • Arduino
  • Hemautomation
  • Lång form
  • Longform Guide
Om författaren James Bruce(707 artiklar publicerade)

James har en kandidatexamen i artificiell intelligens och är CompTIA A+ och Network+ -certifierad. När han inte är upptagen som Hardware Reviews Editor, gillar han LEGO, VR och brädspel. Innan han började på MakeUseOf var han belysningstekniker, engelsklärare och datacenteringenjör.

Mer från James Bruce

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera