Doe-het-zelf domotica – Raspberry Pi als domotica-controller
- March 1, 2014
- 0
Domotica is niet goedkoop: een basismodule met controller en enkele schakelaars kost al gauw € 500. Maar wist je dat je gewoon zélf je domotica-controller kan maken met een Raspberry Pi en open source software? Dat scheelt al gauw enkele honderden euro’s én is gewoon veel leuker!
Het aanbod aan domotica-oplossingen is behoorlijk gevarieerd. In nieuwbouw kiest men meestal voor volledig bekabelde systemen, al zijn er ondertussen verschillende draadloze alternatieven ontwikkeld. Die hebben twee voordelen: de installatie in bestaande woningen is veel eenvoudiger én je kunt de systemen gaandeweg uitbreiden. Je begint dan met een beperkt aantal modules en bouwt die later verder uit tot een volwaardig domotica-systeem. Let wel dat niet alle domotica-systemen onderling compatibel zijn. Je kunt dus het best kiezen voor een standaard die door meerdere fabrikanten wordt ondersteund. Zo heb je een groter aanbod aan domotica-modules en hang je ook niet af van één fabrikant.
Z-Wave
In dit artikel gebruiken we Z-Wave-compatibele domotica-modules. Z-Wave wordt vrij goed ondersteund door open source domotica software, ook al is het geen open standaard. Binnen het Z-Wave gamma heb je momenteel de keuze uit een duizendtal producten van 150 verschillende fabrikanten. Elke Z-Wave-module behoort tot één of meerdere categorieën, zoals een sensor voor beweging of temperatuur, een meter – bijvoorbeeld voor elektriciteitswaterverbruik, een schakelaar, motorsturing (voor rolgordijnen), enzovoorts. Uiteraard heeft elke categorie zijn eigen mogelijkheden. Zo kan een sensor zelfstandig een signaal uitsturen als hij geactiveerd wordt, terwijl een schakelaar enkel door een ander apparaat kan in- of uitgeschakeld worden.
Centraal in het domotica-systeem staat de zogenaamde controller. Die bevat zowel de hardware om met Z-Wave-apparaten te communiceren als de software om het geheel aan te sturen. Strikt gezien kun je ook zonder controller werken, al zijn de mogelijkheden dan vrij beperk. Sensoren kunnen bijvoorbeeld zelfstandig signalen sturen naar schakelaars. Prijzen voor Z-Wave-controllers variëren tussen €150 en €500, afhankelijk van de gewenste features. Een zelfbouw-controller met een Raspberry Pi kost slechts €85 en heeft nog andere voordelen, namelijk:
– het stroomverbruik is érg laag (1 à 2 watt tegen 5 à 10 watt voor commerciële controllers), dus op termijn bespaar je nog meer
– je kiest zelf de software voor de controller. Ben je ontevreden over een bepaald programma, dan zijn er tenminste nog tien alternatieven
– de meeste software ondersteunt verschillende domotica-protocols, zoals Z-Wave, X10 en KNX
– je kunt de controller vrijwel onbeperkt uitbreiden met eigen scripts in je favoriete programmeertaal
Benodigdheden
Maar wat heb je nu precies nodig om je eigen Z-Wave-controller te bouwen? Een Raspberry Pi Model B met behuizing kost je maximaal €50, en ze zijn voor minder op internet te vinden. Een micro-usb stroomadapter, netwerkkabel en sd-kaartje heb je wellicht nog op voorraad. Je moet dan enkel nog een Z-Wave usb-stick aanschaffen om te communiceren met je Z-Wave-apparaten. Zo’n stick wordt door verschillende fabrikanten aangeboden: de goedkoopste heb je voor ongeveer €35. In onze setup gebruiken we een Z-Wave.me-stick (zie afbeelding 1). We raden je ook aan om nog een kleine Z-Wave-afstandsbediening aan te schaffen. Zo kan je de meest gebruikte devices handmatig in- of uitschakelen, zonder dat je de webinterface van je controller hoeft te gebruiken. Met een afstandsbediening zoals de Aeon Labs Minimote (te koop voor rond €60) kun je zelfs apparaten toevoegen, verwijderen of aan elkaar koppelen. De Minimote is dus een soort minimale Z-Wave-controller.
Tot zover de hardware. Qua software heb je de keuze uit verschillende distributies zoals Raspbian en Pidora en verschillende domotica-pakketten (Agocontrol, HomeGenie, LightsControl, Domotica en OpenRemote, om maar enkele voorbeelden te noemen). We raden je aan om eerst een domotica-pakket te kiezen op basis van de functionaliteiten-set en daarna te kiezen voor een distributie waarvan de installatie het eenvoudigst is. Wij kiezen voor Agocontrol en Raspbian, aangezien we Agocontrol dan gewoon via een package repository kunnen installeren. De eenvoudigste manier om je Pi te voorzien van een besturingssysteem is met NOOBS, een installer voor zowel Raspbian als Pidora. Het gewenste image met de opdracht dd naar een SD-kaart schrijven werkt natuurlijk even goed (zie referenties).
Een usb-stick van €35 volstaat om de Raspberry Pi als domotica-controller in te zetten
In dit artikel gebruiken we Agocontrol als Z-Wave-controller. Een korte zoektocht op Google levert heel wat alternatieven op, maar niet allemaal zijn ze even geschikt voor een Raspberry Pi (geen ARM-packages beschikbaar, te zwaar, et cetera). Vergeet overigens niet dat een Raspberry over vrij weinig rekenkracht beschikt. Zo hebben we Agocontrol een tijdje op dezelfde Pi als XMBC gedraaid. Dat resulteerde soms in haperingen tijdens het bekijken van video’s of in Agocontrol-events die niet werden uitgevoerd. Je kunt je Raspberry Pi dus het best alleen gebruiken met één pakket als je hem voor domotica wilt gebruiken.
Setup
Na het booten van Raspbian kun je beter het wachtwoord van de pi-gebruiker in raspi-config wijzigen. Koppel vervolgens de Z-Wave usb-stick aan en controleer of die herkend wordt. Standaard kan de stick benaderd worden via de device file /dev/ttyUSB0, maar Agocontrol gebruikt hier /dev/usbzwave. Die symlink maken we aan met een extra udev-rule (zie listing 1: de waardes voor idVendor en idProduct haal je uit lsusb’s output als je een ander type usb-stick gebruikt dan wij). Nu kun je Agocontrol installeren met apt-get. Gedetailleerde instructies vind je online (zie referenties). Je hebt alleen de pakketten “agocontrol” en “agocontrol-zwave” nodig. Helaas voorzien de ontwikkelaars enkel een systemd-configuratiebestand voor Agocontrol en geen init-script. De gemakkelijkste manier om Agocontrol te starten bij het booten, is dus door over te stappen op systemd. Ook dat wordt uitgelegd in de installatiegids. Een reboot is wel vereist om systemd te activeren. Na de reboot kan je Agocontrol inschakelen en starten (zie listing 2).
Listing 1
$ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
$ ls -l /dev/ttyUSB*
crw-rw—T 1 root dialout 188, 0 Jan 1 1970 /dev/ttyUSB0
$ echo ‘SUBSYSTEMS==”usb”, ATTRS{idVendor}==”067b”, ATTRS{idProduct} ==”2303″, SYMLINK+=”usbzwave”, RUN+=”/bin/systemctl restart agozwave.service”‘> /etc/udev/rules.d/99-agocontrol.rules
Listing 2
$ /opt/agocontrol/bin/agoctrl.sh enable
$ /opt/agocontrol/bin/agoctrl.sh start
Een eerste test
Nu zijn we klaar voor een eerste test. Agocontrol bedien je via de webinterface op http://<ip-adres-van-je-Raspberry>:8008. De welkomstpagina van die webinterface (het Dashoard) is voorlopig leeg. We moeten immers al onze Z-Wave-devices nog kenbaar maken aan Agocontrol! De ontwikkelaars raden aan om daarvoor een externe controller zoals de Minimote te gebruiken. Eerst voeg je de Minimote als extra controller toe aan Agocontrol. Daarvoor klik je op ‘Configuration’ en navigeer je naar het onderdeel ‘Devices’. Standaard zijn er al vijf (virtuele) devices geconfigureerd die door Agocontrol zelf gebruikt worden. Klik nu op het ‘Details’-icoontje van het ‘zwavecontroller’-device en je krijgt een uitklapmenu met beschikbare commando’s te zien. Selecteer daaruit ‘add a controller’ en klik op ‘Run’ nadat je op de Minimote op de ‘Learn’-knop hebt gedrukt.
Extra devices voeg je nu toe door de ‘Include’-knop in te drukken op de Minimote en het inclusion process te starten op het nieuwe device. Voor een tussenschakelaar is dat meestal drie keer na elkaar op de aan/uit-knop klikken, terwijl bewegingssensors bijvoorbeeld een verborgen knopje hebben in het batterijcompartiment. Raadpleeg in elk geval de documentatie van jouw afstandsbediening en jouw Z-Wave-device voor de correcte instructies. Sommige Z-Wave-devices -voornamelijk sensors- kan je nog verder configureren. Hoe je dat precies doet, lees je op Agocontrol’s wiki.
Devices ordenen
In Agocontrols webinterface verschijnen nu een hele resem devices met nietszeggende namen. Voor sommige Z-Wave devices maakt Agocontrol meerdere (virtuele) devices aan. Dat is het geval voor tussenschakelaars die ook het energieverbruik meten, bijvoorbeeld device 4. Onder ‘Details’ van device 4/1 vind je dus commando’s om die schakelaar in- of uitschakelen, onder 4/1-Energy vind je het totale energieverbruik terug (in kWh) en 4/1-Power toont het huidige stroomverbruik (in watt). Erg gebruiksvriendelijk is dit allemaal nog niet. Om te beginnen geven we elk device een duidelijke omschrijving door op het veld ‘device name’ te klikken. Heb je veel devices tegelijk toegevoegd, dan moet je ze waarschijnlijk eens in- en uitschakelen om ze correct te identificeren.
Daarna kun je de devices verder groeperen in kamers – rooms genaamd – en in verdiepingen (floorplans, dit zijn groepen van kamers). Voeg eerst alle kamers van je huis met Z-Wave-devices toe in het onderdeel ‘Rooms’. Vervolgens definieer je de verschillende verdiepingen onder ‘Floorplans’. Keer nu terug naar het overzicht van devices en selecteer voor elk device de juiste kamer (zie afbeelding 2). Ga daarna maar eens terug naar het Dashboard: dat bevat nu icoontjes voor alle devices die je een naam gegeven hebt. Links verschijnen er extra knoppen voor de verschillende floorplans. Klik op één van die floorplans om dit in te vullen. Linksonder verschijnt nu een lijst van devices, geordend per room. Je kan devices verslepen naar één van de 9 vakken rechts om het floorplan in te vullen. In afbeelding 3 zie je een voorbeeld. Met floorplans deel je het dashboard dus naar wens op in overzichtelijke schermen. Dat kan per verdieping, maar als je veel devices hebt kan het bijvoorbeeld ook per kamer of per type device.
We hebben alle Z-Wave devices toegevoegd, een naam gegeven en in de juiste kamer geplaatst
Met floorplans kan je Agocontrols Dashboard naar wens aanpassen
Scenario’s en events
Momenteel kunnen we onze devices afzonderlijk in- of uitschakelen via het Dashboard. Tijd voor de volgende stap! Met scenario’s groepeer je meerdere acties van verschillende devices onder één naam. Denk bijvoorbeeld aan een scenario “Bedtijd” dat de verlichting in de nachthal en slaapkamer inschakelt en na enkele minuten alle elektrische apparaten en lichtpunten in de woonkamer uitschakelt. Of een scenario “Filmavond” dat de tv, receiver en sfeerverlichting inschakelt en rolgordijnen naar beneden laat. Scenario’s moet je nog steeds handmatig oproepen, maar ook dat is te automatiseren. Daarvoor ga je naar het onderdeel ‘Events’. Een event of gebeurtenis wordt bepaald door één of meerdere criteria zoals een tijdsstip of een waarde van een sensor. Via de AND- en OR-operatoren en nesting kun je redelijk complexe events definiëren. Is je even klaar, dan koppel je er een actie aan. Meestal zal je daarvoor een scenario kiezen, al mag het evengoed een eenvoudige actie van één device zijn.
Andere interfaces
Agocontrols webinterface is niet de enige manier om je domotica-systeem aan te sturen. Probeer vooral eens de Android-app, zo hoef je tenminste niet achter je pc te zitten om apparaten in- of uit te schakelen. Er bestaan ook twee manieren om Agocontrol via de commandline te bedienen. Dat is vooral interessant als je tegen beperkingen aanloopt in Agocontrol en via eigen scripts je apparaten wilt aansturen. Op je Raspberry zelf gebruik je Agocontrol’s messagesend-commando, gevolgd door het UUID van een device en een commando. Het UUID en de beschikbare commando’s vind je onder de ‘Details’ in het device-overzicht. Je zult trouwens merken dat er voor elk scenario een virtueel device met eigen UUID is aangemaakt. Op die manier kan je ook scenario’s uitvoeren met messagesend. Vergeet ook niet dat scenario’s enkel een ‘on’-commando kennen. Om het tegenovergestelde te doen van een bepaald scenario moet je een tweede scenario definiëren. In listing 3 vind je een voorbeeld van de messagesend-syntax. Daarnaast is er nog een JSON-RPC-interface die je via HTTP POST-requests benadert, bijvoorbeeld met curl (zie listing 4, meer informatie vind je op de Agocontrol wiki). Het voordeel van DE JSON-RPC-interface is dat je die vanaf alle machines in je netwerk kan gebruiken én dat elke programmeertaal er wel mee overweg kan.
Listing 3
$ /opt/agocontrol/bin/messagesend uuid=c8073c32-e3bd-4b8f-b2c2-476c10308617 command=on
Sending message: {command:on, uuid:c8073c32-e3bd-4b8f-b2c2-476c10308617}
Reply: {result:0}
Listing 4
$ curl -X POST -d ‘{“jsonrpc” : “2.0”, “method” : “message”, “params” : {“content”:{“command”:”on”, “uuid”:”c8073c32-e3bd-4b8f-b2c2-476c10308617″}}, “id”:1 }’ http://192.168.0.3:8008/jsonrpc
Maatwerk
De in dit artikel uitgewerkte oplossing is geen kant-en-klaar domotica-pakket. Het kost dan ook aardig wat tijd om het systeem volledig naar wens in te richten. En misschien ontdek je na uren experimenteerwerk wel dat de gekozen controller-software toch niet voldoet aan je verwachtingen. Maar dat is niet erg, want er zijn genoeg alternatieven beschikbaar. En je eigen domotica-controller maken is gewoon veel leerrijker, goedkoper én flexibeler dan er een in de winkel te halen.
Links
Raspberry PI NOOBS: http://www.raspberrypi.org/downloads
Agocontrol installatie op Debian: http://wiki.agocontrol.com/index.php/Ago_control_install_debian_wheezy
Z-Wave devices configureren: http://wiki.agocontrol.com/index.php/Zwave_basics
Messagesend: http://wiki.agocontrol.com/index.php/Message_Reference
RPC interface: http://wiki.agocontrol.com/index.php/RPC