Bouw een slim huis met openHAB 2

Redactie
0

Inhoudsopgave

Met openHAB 2 kun je echt heel veel slimme hardware automatisch aansturen. Variërend van je smart-tv en router tot slimme stopcontacten  en lampen als de Philips Hue. Wij laten zien hoe.

Hoewel je bijna geen apparaat meer kunt kopen zonder internetaansluiting, is van samenwerken geen sprake. In de praktijk zijn het allemaal losse eilandjes, die niet eenvoudig aan elkaar te knopen zijn, laat staan dat je ze allemaal met één app kunt bedienen. Mede daarom breidt het aantal apps op je smartphone zich langzaam maar zeker steeds verder uit. Met de ene app schakel je de lampen draadloos in en uit, met de andere regel je de kamertemperatuur via de slimme thermostaat en met weer een andere bedien je je smart-tv. Enige vorm van samenhang tussen de afzonderlijke componenten en slimme schakelsystemen kun je vergeten. Kant-en-klare smarthomesystemen beloven je daarbij te helpen, maar zijn meestal extreem duur en werken alleen met componenten van dezelfde fabrikant.

Alles in één

De makers van de opensourcesoftware openHAB 2 willen hier een eind aan maken. Ze hebben zich ten doel gesteld zo veel mogelijk apparaten onder één dak te verenigen en op die manier van het hele huis een smarthome te maken. Het mooie hieraan is: openHAB 2 is opensource en wordt ontwikkeld door een aanzienlijke community. Bovendien draait het als Java-applicatie op bijna elke hardware. Een soortgelijke oplossing als Home Assistant draait alleen op een Linux-server of Raspberry Pi. Voor het configureren en het besturen van je smarthome zijn er meteen meerdere webinterfaces beschikbaar. Voor de eerste kennismaking volstaat het om openHAB 2 op een pc in een willekeurige map uit te pakken. Voor langdurig gebruik kun je beter een Raspberry Pi van de tweede of derde generatie gebruiken. Voor minder dan 150 euro kun je op een regenachtige middag je eigen huis duidelijk smarter maken.

Meer uitgebreide workshops vind je in c't Magazine jan-feb/2019

Eerste stappen met openHAB

Een paar maanden geleden heeft openHAB een flinke make-over naar versie 2 gehad. Nieuw is onder meer de webinterface Paper UI, waarmee je het grootste deel van de basisconfiguratie maar een paar muisklikken weg zijn. Voor veeleisender taken bestaat bij openHAB 2 de mogelijkheid in de configuratiebestanden van alles met een gewone teksteditor aan te passen aan je eigen wensen.

We hebben openHAB 2 op een Raspberry Pi 3 geïnstalleerd om Hue-lampen van Philips en elektrische rolluiken buiten te automatiseren. Het voorbeeldproject laat zien hoe je eigen projecten kunt implementeren.

Op welke hardware je openHAB 2 laat draaien maakt voor dit artikel verder niet uit. Het installeren ervan slaan we dan ook over, we nemen aan dat dit zonder al te veel problemen lukt. Op de website van het project staat voor alle gangbare besturingssystemen beschreven hoe je openHAB 2 moet installeren.

Na het installeren ga je om te beginnen naar de configuratie-interface Paper UI, die je in je browser opent via http://localhost:8080/start of bij een Pi op http://openhabianpi:8080/start. Daar zijn bijna alle smarthome-objecten in te stellen.

Daarbij volgt openHAB 2 een logische hiërarchie om interfaces, componenten, protocollen en de afzonderlijke apparaten overzichtelijk te houden.

In drieën

Alles is ingedeeld in drie categorieën: bindings, things en items. Voor elk apparaat, elk protocol en elke webdienst heeft openHAB 2 een eigen add-on, zogeheten bindings. Die zorgen ervoor dat de software met de afzonderlijke apparaten kan communiceren. Dit is goed te vergelijken met de stuurprogramma’s oftewel device drivers onder Windows. De Hue-binding verbindt bijvoorbeeld alle Philips Hue-lampen. In de praktijk hoef je je maar af en toe met die bindings bezig te houden, namelijk bij het installeren van nieuwe smarthomehardware.

Omdat veel bindings meerdere fysieke apparaten aansturen, noemt openHAB 2 alle apparaten van een binding things. Die hebben op hun beurt vaak meerdere functies en verschillende toestanden. Veel bewegingsmelders meten bijvoorbeeld ook de temperatuur of de helderheid. Om die eigenschappen overzichtelijk te houden, kent openHAB 2 aan elk thing een of meerdere items toe. Items kunnen bijvoorbeeld schakelaars, dimmers, getallen, toestanden of groepen zijn.

Onderklassen

Als je via de Z-Wave-binding een bewegingssensor van Fibaro koopt, komt die in openHAB 2 tevoorschijn als thing Fibaro-Sensor-1. Als onderklasse heeft hij de items FibaroSensor1_SensorTemperature(nummer), FibaroSensor1_SensorLuminance(nummer) en FibaroSensor1_MotionAlarm(toestand). Vervolgens biedt openHAB 2 aan om een of meerdere van die items over te nemen. Je kunt ze in het vervolg dan uitlezen, als schakelaar gebruiken of de geleverde waarde toepassen als trigger voor geautomatiseerde regels.

De clou van het concept: items kunnen ook virtueel zijn. Als in een kamerlamp bijvoorbeeld twee slimme gloeilampen zitten die je gezamenlijk wilt schakelen, maak je in openHAB 2 gewoon een nieuw item aan met de gewenste naam en ken je daar de beide gloeilampen aan toe. De op die manier gemaakte virtuele schakelaar zet beide lichtbronnen daarna aan of uit.

openhab_2

De interface van openHAB 2 toont elk smarthome-apparaat als Thing.

Bindings

De bindings die je nodig hebt voor jouw smarthome-componenten zijn met de Paper UI bij Add-ons met een muisklik te installeren. In ons voorbeeld hebben we eerst de Hue Binding en de Z-Wave Binding geactiveerd.

Als een binding actief is, meldt de web interface van openHAB 2 meteen dat er nieuwe apparaten gevonden zijn. In ons voorbeeld duiken daar na het toevoegen van de Hue-binding ook de bijbehorende lampen op. Die kun je met een muisklik dan als things laten opslaan. Bij ‘Configuration / Things’ kun je op dezelfde manier als bij de (Fibaro-)bewegingsmelder selecteren voor welk thing een of meerdere items aangemaakt moeten worden, bijvoorbeeld een gekleurde lamp of een dimbare lamp. Dan maak je via de blauwe knop met het plusteken meteen ook een groepsschakelaar voor de woonkamer, overloop of badkamer aan en ken je daar de betreffende verlichting aan toe. De bewegingsmelder wordt op dezelfde manier ingesteld.

Daarna zijn de lampen via Paper UI in en uit te schakelen en is de temperatuur van de sensor uit te lezen. Paper UI is maar beperkt geschikt voor het feitelijk bedienen van de smarthome-apparaten, maar openHAB 2 heeft wel een interface die geschikt is voor smartphones en tablets en apps voor iOS en Android. Die kunnen willekeurige schakelaars en informatie in een zelf gekozen lay-out tonen.

Sitemap

Een tekstbestand bepaalt de inhoud en de lay-out van de interface. Die zogeheten sitemap staat onder de installatiemap in /conf/sitemaps en heeft in ons voorbeeld de volgende opbouw:

java
sitemap my label=”Main Menu” {
Frame label=”Lampen” {

Text label=”Lampen” icon=”light” {

Switch item=Lights

mappings=[OFF=”All Off”]

Switch item=Livingroom_Lights

Switch item=Bathroom_Lights

Switch item=Corridor_Lights

}

}

Frame label=”Temperatuur” {

Text item=FibaroSensor1_SensorTemperature

valuecolor=[

>35=”red”,

>25=”orange”,

>15=”green”,

>5=”blue”,

<=5=”navy”]

}

}

Frames verdelen de interface in delen. Een frame kan een titel en pictogram krijgen en schakelaars en waarden laten zien. De letterkleur wordt door openHAB 2 dynamisch gekozen afhankelijk van de waarde: hoge temperaturen worden in rood aangegeven, lage in blauw.

OpenHAB2_c

Een smarthome-component kan bij openHAB 2 meerdere items bevatten – bijvoorbeeld als gekleurde lamp of als dimbare lamp.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Bijna vanzelf

Een webinterface maakt je huis nog niet smart. In het ideale geval neemt een smarthome de dagelijkse routinetaken over van zijn bewoners en reageert automatisch op bepaalde situaties. Daar biedt openHAB 2 zogenaamde rules voor, die bij bepaalde toestanden actief worden en dan bijvoorbeeld schakelaars omzetten. Eenvoudige regels kun je bij Paper UI met een muisklik aanmaken.

Bij complexere situaties loopt de interface echter al snel tegen zijn grenzen aan. Daarom hebben we gekozen voor tekstgebaseerde regels. Net als bij de sitemap gaat het daarbij om simpele tekstbestanden. Die staan in /conf/rules met de extensie .rules. Om ze te bewerken volstaat een editor als Notepad++ met syntax highlighting. Een betere keus is echter Eclipse, dat ook een syntaxiscontrole heeft. Alle regels volgen een simpele if-then-logica. Meerdere triggers zijn met een logische OR te koppelen. De operatoren AND en AND/OR worden door open- HAB 2 bij die triggers op dit moment niet ondersteund. Er zijn maar een paar regels code nodig om het licht in de badkamer met behulp van een bewegingssensor in te schakelen:

java
rule “Licht aan bij beweging op badkamer”
when

Item FibaroSensor1_MotionAlarm

changed from OFF to ON

then

sendCommand(Lamp6, 100)

end

Op het moment dat je de badkamer binnengaat, wordt de bewegingssensor getriggerd. De toestand van het item FibaroSensor1_MotionAlarm gaat daarbij van OFF naar ON. Als openHAB 2 die trigger herkent, stuurt de regel het commando 100 (de gewenste helderheid) naar de lamp met nummer 6. Die simpele regel heeft de schoonheidsfout dat het licht ook overdag aangaat als er iemand binnenkomt. Omdat de gebruikte sensor ook de helderheid meet, is het mogelijk de regel zo uit te breiden dat de lamp alleen aangaat als het donker is. Daar is een eenvoudige if-then genoeg voor die eerst de helderheid van de sensor controleert. Is die boven de 24 lux, dan blijft de lamp uit.

java
rule “Licht aan bij beweging op badkamer”
when

Item FibaroSensor1_MotionAlarm

changed from OFF to ON

then

if (FibaroSensor1_SensorLuminance.state < 24) {

sendCommand(Lamp6, 100)

}

end
OpenHAB2_d

Het uiterlijk en de getoonde bedieningselementen van de app- en webinterface kun je met weinig moeite zelf bepalen.

Variabele helderheid

Vaak is de volledige helderheid van de badkamerlamp helemaal niet nodig – bijvoorbeeld als je ’s nachts even naar het toilet moet. Daar kun je dan weer meer if-theninstructies voor toevoegen. Die testen in ons voorbeeld of het uur groter of gelijk is aan 0 en kleiner dan 7. In de tijd van middernacht tot zeven uur ’s morgens wordt de lamp dan wel aangedaan, maar met een helderheid van maar vijf procent. Dat ziet er als volgt uit:

java
rule “Licht aan bij beweging op badkamer”
when

Item FibaroSensor1_MotionAlarm

changed from OFF to ON

then

if (FibaroSensor1_SensorLuminance.state < 24) {

if (now.getHourOfDay() > 0 &&

now.getHourOfDay() < 7) {

sendCommand(Lamp6, 5)

}

else

sendCommand(Lamp6, 100)

}

end

Automatisch weer uit

Dan ontbreekt natuurlijk nog wel een regel om het licht weer automatisch uit te doen. De gangbare bewegingssensoren hebben een instelbare time-out en zetten hun status dan weer op off als ze binnen die periode geen beweging meer waarnemen. Het programmeren van een uitschakelregel werkt echter net zo makkelijk:

java
rule “Licht na beweging op badkamer weer uit”
when

Item FibaroSensor1_MotionAlarm

changed from ON to OFF

then

sendCommand(Lamp6, OFF)

end

Beide regels zijn in een gemeenschappelijk tekstbestand met bijvoorbeeld de naam badkamerlamp.rules te zetten. Om het overzicht te behouden adviseren we om alle bij elkaar horende regels in een eigen tekstbestand te zetten.

Voor een spiegellamp op de badkamer kunnen die regels wel werken, maar bij de plafondlamp in de woonkamer betekent dit dat het licht de hele tijd uitgaat als je een paar minuten stil een boek op de bank zit te lezen. Dat probleem is met variabelen op te lossen. Je kunt de inschakelregel met

java
if (Livingroom_Lights.state == OFF)

eerst laten controleren of de lamp voorheen ook echt uitgeschakeld was. Zo ja, zet dan de variabele geactiveerd op 1.

De uitschakelregel wordt dan uitgebreid met if (geactiveerd == 1) om ervoor te zorgen dat het licht niet uitgaat als het van tevoren handmatig ingeschakeld werd.

Meer mogelijkheden

Ook wat meer uitgebreide en complexe projecten als een automatische rolluikbesturing zijn met openHAB 2 snel te maken. Als hardware hebben we een Roller Shutter-module van Fibaro gebruikt. Die wordt in de bedrading van de aanwezige rolluik- of jaloezie-schakelaar aangebracht en kun je vervolgens achter de schakelaar wegwerken. Omdat daar 230 volt op staat, moet je wel uitkijken bij het inbouwen. De module ondersteunt het Z-Waveprotocol en is net zo makkelijk als thing toe te voegen als hiervoor beschreven. De Shutter-module ondersteunt de commando’s UP, DOWN en STOP. Met een geschikte rolluikmotor kun je ze ook procentueel naar beneden laten zakken. Om het rolluik met een smartphone of tablet te kunnen bedienen, moet je aan de sitemap het volgende nog toevoegen:

java
Frame label=”Rolluiken” {
Text label=”Woonkamer”

icon=”rollershutter” {

Switch

item=BlindsControl_Livingroom

label=”Woonkamer-rolluik[(%d)]”

mappings=[UP=”Omhoog”, STOP=”X”,

DOWN=”Omlaag”]

}

}

In het vervolg kun je met een tik op je mobiele apparaat de ruimte verduisteren.

Routinetaken

Dat is ten opzichte van een wandschakelaar maar een kleine winst natuurlijk. Maar openHAB 2 heeft het sterke punt dat het kan helpen bij de routinetaken als het dagelijks open en dicht maken van de rolluiken. Om ervoor te zorgen dat de rolluiken ’s avonds automatisch omlaag gaan en ’s morgens weer omhoog, hebben we eerst de Astro Binding geïnstalleerd. Aan de hand daarvan haalt openHAB 2 dagelijks de tijden van zonsopkomst en zonsondergang op van internet. Die dienen dan als trigger. ’s Avonds start openHAB 2 eerst een timer van 30 minuten om het resterende daglicht nog te kunnen benutten:

java
var Timer timer1 = null
rule “'s Morgens omhoog”

when

Channel

‘astro:sun:home:daylight#event’

triggered START

then

sendCommand(BlindsControl_Livingroom, UP)

end

rule “'s Avonds omlaag”

when

Channel

‘astro:sun:home:daylight#event’

triggered END

then

timer1=createTimer(now.plusMinutes(30))

sendCommand(BlindsControl_Livingroom,DOWN)

end
OpenHAB2_e

Een eenvoudige regel zorgt ervoor dat openHAB 2 in de zomer de rolluiken aanstuurt afhankelijk van de temperatuur en de bewolking.

Zonneschijn

Het is ook mogelijk om de rolluiken in de middag omlaag te laten als de zon aan het schijnen is. Maar dat vergt even wat handwerk: de rolluiken moeten alleen omlaag als de zon ook echt schijnt. Daar heeft openHAB 2 een Weather Binding voor nodig die de actuele gegevens van de verschillende weerproviders opvraagt. Die Weather Binding is een van de oudere bindings die nog voor openHAB 1 ontwikkeld zijn. Daarom moet je in het tekstbestand nog wat aanpassen. Gelukkig hebben legacy-add-ons een uitgebreide documentatie, zodat ze toch makkelijk te gebruiken zijn. Zet in het bestand weather .cfg in de map conf/services de geocoördinaten van de plaats, de plaatsnaam, de aanbieder van de weerdata en zijn APIkey. We hebben met OpenweatherMaps gewerkt: na een anonieme registratie krijg je dan gratis API-toegang tot de weerdata.

Weerdata

De items met de weerdata moeten eveneens handmatig in een tekstbestand opgeslagen worden. Daar hebben we een bestand met de naam weer.items voor aangemaakt en naar de map conf/items verplaatst. Daar worden items aangemaakt volgens het schema type, benaming, label, pictogram (optioneel) en apparaat dan wel databron.

Voor een rolluik- of jaloeziebesturing zijn met name de bewolkingsdichtheid en de windsnelheid relevant. Het zelf gemaakte bestand met de weeritems krijgt daardoor de volgende twee regels:

java
Number Windsnelheid
“Windsnelheid [%.2f m/s]”

{

weather=”locationId=nijmegen,

type=wind, property=speed”

}

Number Wolken “Bewolking [%.0f %%]”

{

weather=”locationId=nijmegen,

type=clouds, property=percent”

}

Als de app- of de webinterface extra weerdata moeten weergeven, moet je nog meer items aanmaken, bijvoorbeeld voor de temperatuur of de weersverwachting, en die vervolgens in het sitemap-bestand zetten.

Bij de regels voor het buiten houden van de zon ’s middags hebben we de tijd als trigger gebruikt. Daar gebruikt open- HAB 2 dezelfde syntaxis voor als cron-jobs bij Linux.

In het voorbeeld wordt het verduisteren toegepast in de maanden juni tot en met september, vanaf 11:30 ’s morgens. Er wordt eerst gekeken of de windsnelheid onder de 15 m/s (ongeveer 50 km/u) is. Bij sterkere wind blijven de rolluiken open. De drie daarop volgende if-statements laten de rolluiken afhankelijk van de bewolking en de kamertemperatuur voor 80, 60 of 40 procent naar beneden. Het ’s avonds weer omhoog laten wordt eveneens door een door de tijd gestuurde regel gedaan.

Experimenteren

Afhankelijk van de positie van het raam loont het om wat te experimenteren met de verschillende rolluikpercentages en de bewolkingsdichtheid. Als je voor alle muren van je huis de juiste parameters gevonden hebt, gebruik je de mechanische jaloezieschakelaar in de praktijk eigenlijk niet meer.

Voordat openHAB 2 de controle helemaal overneemt, moet je er zeker van zijn dat bij een storm met windsnelheden van meer dan 15 m/s alle rolluiken en jaloezieën automatisch omhoog gaan (zie de listing hieronder).

OpenHAB2_f

Een andere regel doet bij sterke wind de rolluiken omhoog.

Om ervoor te zorgen dat de regels bij toenemende windsnelheid meteen actie ondernemen, gebruiken we de verandering daarvan als trigger. Het probleem daarbij is wel dat de windsnelheid dagelijks meerdere malen verandert – en op stormachtige dagen dan telkens boven de drempelwaarde blijft. De regel zou dan telkens weer actief worden, zelfs als de rolluiken allang weer omhoog zijn. Om de motoren en de modules niet continu te belasten, vragen we eerst naar de positie van de rolluiken en sturen we het signaal alleen naar de motoren als ze nog niet omhoog gegaan zijn.

En nog meer

Door de overgang naar openHAB 2 zijn de ontwikkelaars een heel stuk dichter gekomen bij het doel van een makkelijk te bedienen smarthome-centrale – ook al werken sommige bindings en complexe regels alleen maar als je de configuratie handmatig in tekstbestanden aanpast.

Toch is het experimenteren met open- HAB 2 leuk: door de ontelbare bindings worden er amper grenzen aan de fantasie van de gebruiker gesteld bij het maken van eigen automatiseringen. Je kunt bijvoorbeeld vrij makkelijk regelen dat de videoweergave pauzeert en de tv op mute gaat als de telefoon rinkelt.

Als je een tekort aan ideeën hebt of hulp bij het programmeren van de regels kunt gebruiken, staat er in de fora van de levendige community genoeg input. In tegenstelling tot commerciële oplossingen stimuleert openHAB 2 het experimenteren, zijn er veel flexibele oplossingen mogelijk en is het beduidend minder duur.

Meer over

Smart homes

Deel dit artikel

Lees ook

Devolo Home Control krijgt uitbreiding

Devolo heeft zijn smart-home-systeem 'Home Control' uitgebreid met drie modules. Je kunt nu ook ip-gestuurde apparaten in het systeem integreren. Het...

Ikea Trådfri-lampen nu compatibel met Apples HomeKit en Amazon Alexa

Zoals in mei al aangekondigd heeft Ikea de iOS- Android-apps van zijn slimme ledverlichting geüpdated zodat die nu ondersteuning biedt voor Apples Hom...

Interessant voor jou

0 Praat mee

avatar
  Abonneer  
Laat het mij weten wanneer er