Doe-het-zelf-Domotica
- February 13, 2015
- 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 erg gevarieerd. In nieuwbouw verkiest men meestal volledig bekabelde systemen, al zijn er intussen verschillende draadloze alternatieven ontwikkeld. Die hebben twee voordelen: de installatie in bestaande woningen is veel eenvoudiger én je kan 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 op dat niet alle domotica-systemen onderling compatibel zijn. Je kiest dus best voor een standaard die door meerdere fabrikanten ondersteund wordt. 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 (bijvoorbeeld voor beweging of temperatuur), een meter (bijvoorbeeld voor elektriciteitswaterverbruik), een schakelaar, motorsturing (bijvoorbeeld 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 domoticasysteem 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 kan je ook zonder controller werken, al zijn de mogelijkheden dan vrij beperkt (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:
– 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 kan je er minstens tien andere uitproberen
– de meeste software ondersteunt verschillende domotica-protocols, zoals Z-Wave, X10 en KNX
– je kan de controller vrijwel onbeperkt uitbreiden met eigen scripts in je favoriete programmeertaal
Benodigdheden
Wat heb je nu precies nodig om je eigen Z-Wave-controller te bouwen? Een Raspberry Pi Model B met behuizing kost je maximum €50. Een micro-USB stroomadapter, netwerkkabel en SD-kaart heb je allicht nog op overschot. Je moet dan enkel nog een Z-Wave usb-stick kopen om te communiceren met je Z-Wave-devices. 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 manueel in- of uitschakelen zonder dat je de webinterface van je controller moet openen. Met een afstandsbediening zoals de Aeon Labs Minimote (€60) kan je zelfs devices toevoegen, verwijderen en 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 (Raspbian, 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 feature set en dan de distributie te nemen waarop de installatie het eenvoudigst is. In ons geval is dat 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 dd naar een SD-kaart schrijven werkt natuurlijk even goed (zie referenties).
afb1.png: Afbeelding 1 – 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, al zijn die niet altijd even geschikt voor een Raspberry Pi (geen ARM-packages beschikbaar, te zwaar, …). Vergeet 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 draait dus best geen extra software op je domotica-controller.
Setup
Na het booten van Raspbian verander je best even het wachtwoord van de pi-gebruiker in raspi-config. 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 verkiest /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 kan 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).
$ 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 gedruk hebt.
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 kan je de devices verder groeperen in kamers (rooms) 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
Afbeelding 3 – 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 manueel oproepen, maar ook dat kan je 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 kan 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 domoticasysteem aan te sturen. Probeer zeker de Android-app eens uit. Zo hoef je tenminste niet aan 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 devices 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 zal 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.
$ /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 domoticapakket. Het kan je heel wat tijd kosten 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!
Referenties:
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