Tegenwoordig zie je dat je steeds meer zaken met de computer en/of smartphone in je huis kan aansturen. Denk hierbij bijvoorbeeld aan de Philips HUE en Nefit Easy Thermostaat. Maar je kunt echter nog veel meer regelen. Dit alles valt onder de definitie van Domotica. Letterlijk betekent domotica het aansturen van elektrische toestellen in een huis door informatica en elektronica. In de praktijk gaat het echter veel verder. Het geïntegreerde systeem zorgt namelijk voor een verhoging van gemak, comfort, veiligheid en energiebewustzijn door waarneming, communicatie en flexibiliteit.
Zo kun je nog veel meer in je huis automatiseren. Denk hierbij bijvoorbeeld aan:
- je deurbel automatiseren zodat je notificatie op je telefoon krijg als hierop wordt gedrukt
- rolluiken en/of garagedeuren open/dicht doen
- temperatuur/luchtvochtigheid meten
- lampen/apparaten aan/uit zetten
- IP camera’s besturen
Het wordt nog leuker als je acties kunt combineren. Een voorbeeld is dat als er op de deurbel wordt gedrukt je een notificatie krijg, er een lamp aan gaat en de IP camera automatisch een foto naar je telefoon stuurt. Nu zijn er veel kant-en-klare oplossingen zoals Homewizard maar het leek mij leuk om dit helemaal zelf uit te zoeken met een goedkopere oplossing. Je komt dan al snel bij een Raspberry Pi uit die je al voor Euro 25,= hebt. Je hebt verder nog een USB poweradapter en een SD kaartje nodig.
Als je de Raspberry PI hebt moet je hierop eerst een Operating System zetten. Een aanrader is het gratis Raspbian dat is gebasseerd op Linux Debian. Download hiervoor een Raspbian image vanaf deze lokatie. Vervolgens schrijf je met Win32DiskImage dit image op een SDCard.
Stop het SD kaartje in je Raspberry PI en sluit de USB power aan. Hierna kun je met Putty inloggen op je Raspberry PI met user-naam ‘pi’ en wachtwoord ‘raspberry’. Voer nu de volgende zaken eenmalig uit:
#sudo raspi-config #sudo apt-get install rpi-update #sudo rpi-update #sudo reboot
Update nu naar de laatste software:
#sudo apt-get update #sudo apt-get upgrade #sudo reboot
installeer vi support zodat je files kunt editten:
#sudo apt-get install vim-nox
Stel een fixed IP-address in door de volgende file ‘/etc/network/interfaces’ aan te passen. Zet hierin de volgende inhoud
# The loopback network interface auto lo iface lo inet loopback # The primary network interface #iface eth0 inet dhcp auto eth0 iface eth0 inet static address 192.168.1.70 netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1
Reboot je raspberry pi en log weer in:
#sudo reboot
Vervolgens kun je nog wat handige software installeren. Om er voor te zorgen dat je tijd altijd actueel is moet je de volgende commando’s uitvoeren:
#sudo dpkg-reconfigure tzdata #sudo apt-get install ntp ntpdate
Ook is het handig dat je Samba installeert zodat je eventueel altijd met een browser je files op je Raspberry Pi kunt benaderen:
#sudo apt-get install samba samba-client samba-common-bin #sudo useradd some_user_name #sudo smbpasswd -a some_user_name
Voeg nu de volgende regels toe aan de file ‘/etc/samba/smb.conf’
[Root] browseable = yes writeable = yes path = / force group = root revalidate = yes force user = root comment = Share to Root valid users = some_user_name public = yes available = yes
Verder moet je samba opnieuw opstarten met het volgende commando:
#sudo /etc/init.d/samba restart
We hebben nu dus een werkend OS op de Raspberry PI staan. Nu moeten we nog wat extra hardware nodig om je diverse devices in je huis aan te sturen. Het populairst (en dus goedkoopst) zijn de zogenaamde KlikAanKlikUit (KAKU) modules. Deze werken op 433 MHz. Hiervoor moeten we nog een 433 HHz RF Transmitter en Receiver aanschaffen. Deze zijn op EBay voor ongeveer Euro 2,= te koop.
Update 29 maart 2015:
Voor een betere ontvangst en verzending van je 433 MHz signalen kun je beter gebruik maken van zogenaamde Superheterodyne RF Links. Deze kosten bij eBay ongeveer Euro 6,75 en kun je hier vinden.
[See image gallery at eye-vision.homeip.net] Voor bovengenoemde 433 MHz RF Transmitter en Receiver doe je dit op de volgende pinnen:
[See image gallery at eye-vision.homeip.net] Uiteindelijk ziet het er dan als volgt uit:
[See image gallery at eye-vision.homeip.net] Nu we dit allemaal in orde hebben moet je nog software hebben om de 433 MHz RF Transmitter/Receiver aan te sturen. Erg mooie software hiervoor is Pimatic. Op het forum van Gathering of Tweakers kun je een mooi topic hierover vinden. Met Pimatic kun je op een simpele manier allerlei zaken aansturen en op een simpele manier gecompliceerde regels instellen. Het mooie van Pimatic is dat er ontzettend veel plugins aanwezig zijn waardoor je allerlei leuke combinaties kunt maken:
- Cron (voor het kunnen sturen op basis van tijd)
- GPIO (voor het rechtstreeks aansturen van een GPIO, of kijken of deze wel of niet verbonden zijn)
- pilight (Vrijwel alle devices van pilight kunnen geïmporteerd en bestuurd worden)
- ping (is een device wel of niet bereikbaar?)
- pushover (Stuur berichtjes middels de pushover API naar je telefoon)
- Mail (Verstuur mail)
- shell-execute (uitvoeren van CMD opdrachten)
- sunrise (Een skala aan zonsop- en ondergang momenten op basis van locatie
- sysinfo (monitor CPU temp, CPU load, memory load, disksize en pimatic DB size)
- weather (Weersinformatie en voorspelling).
Vanuit Pimatic kun je automatisch controleren op updates en deze uitvoeren. Verder kun je per gebruiker instellen wat deze allemaal kunne doen. Zie de site van Pimatic voor meer informatie.
Het installeren van Pimatic is erg eenvoudig. Ten eerste moet je ‘nodes.js’ installeren zoals beschreven op de volgende link.
#wget http://nodejs.org/dist/v0.10.24/node-v0.10.24-linux-arm-pi.tar.gz -P /tmp #cd /usr/local #sudo tar xzvf /tmp/node-v0.10.24-linux-arm-pi.tar.gz --strip=1
Om te controleren of dit goed is gegaan type je het volgende commando:
#/usr/bin/env node --version
Nu moet je Pimatic zelf nog installeren met de volgende commando’s:
#sudo apt-get install build-essential #cd /home/pi #mkdir pimatic-app #npm install pimatic --prefix pimatic-app --production (let op: dit kan lang duren)
Copieer nu de default configuratie file:
#cd pimatic-app #cp ./node_modules/pimatic/config_default.json ./config.json
Maak pimatic globaal beschikbaar met de volgende commando’s:
#cd ./node_modules/pimatic #sudo npm link (let op: dit kan lang duren)
Om Pimatic voortaan automatisch te laten opstarten met je Raspberry Pi moet je de volgende commando’s uitvoeren:
#wget https://raw.github.com/pimatic/pimatic/master/install/pimatic-init-d #sudo cp pimatic-init-d /etc/init.d/pimatic #sudo chmod +x /etc/init.d/pimatic #sudo chown root:root /etc/init.d/pimatic #sudo update-rc.d pimatic defaults
Zoals gezegd maken de plugin Pimatic zo krachtig. Ik heb de volgende plugins geïnstalleerd:
#sudo npm install pimatic-cron #sudo npm install pimatic-mobile-frontend #sudo npm install pimatic-gpio #sudo npm install pimatic-homeduino #sudo npm install pimatic-log-reader #sudo npm install pimatic-mail #sudo npm install pimatic-pushover #sudo npm install pimatic-shell-execute #sudo npm install pimatic-sysinfo #sudo npm install pimatic-weather
Soms is er de eerste keer een probleem met de sqlite3 database. Om er zeker van te zijn dat het goed gaat doe je het volgende:
#sudo cd /home/pi/pimatic-app #sudo rm -rf node_modules/sqlite3 #sudo npm install sqlite3
Je kunt nu handmatig de configuratie-file ‘/home/pi/pi-matic/config.json’ aanpassen naar jouw behoeften (denk hierbij aan poort-nummer, wachtwoord, devices, etc.). Zie vooral de site van Pimatic voor meer informatie hierover. Bij mij ziet de configuratie-file er ongeveer als volgt uit:
{ "//": "Please only change this file when pimatic is NOT running else pimatic will overwrite your changes.", "settings": { "httpServer": { "enabled": true, "port": 8501 }, "database": { "deviceAttributeLogging": [ { "deviceId": "*", "attributeName": "*", "expire": "7d", "type": "*" }, { "deviceId": "*", "attributeName": "temperature", "expire": "1y", "type": "*" }, { "deviceId": "*", "attributeName": "humidity", "expire": "1y", "type": "*" } ], "messageLogging": [ { "level": "*", "tags": [], "expire": "7d" } ] }, "authentication": { "secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }, "httpsServer": {}, "gui": {} }, "plugins": [ { "plugin": "cron" }, { "plugin": "mobile-frontend", "theme": "graphite/water", "flat": false, "debug": false, "mode": "production" }, { "plugin": "log-reader" }, { "plugin": "shell-execute" }, { "plugin": "pushover", "user": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy", "token": "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz" }, { "plugin": "mail" }, { "plugin": "sysinfo" }, { "plugin": "weather" }, { "plugin": "homeduino", "driver": "gpio", "driverOptions": {}, "receiverPin": 1, "transmitterPin": 0 }, { "plugin": "gpio" }, { "plugin": "sunrise" } ], "devices": [ { "class": "SystemSensor", "id": "syssensor", "name": "Systeem", "attributes": [ { "name": "cpu" }, { "name": "memory" }, { "name": "temperature", "interval": 5000 } ] }, { "id": "weather", "class": "WeatherDevice", "name": "Huidig Weer Rijsbergen", "location": "Rijsbergen, Netherlands", "degreeType": "C", "timeout": 300000 }, { "id": "forecast", "class": "WeatherForecastDevice", "name": "Voorspelling Weer Rijsbergen", "location": "Rijsbergen, Netherlands", "degreeType": "C", "timeout": 300000, "day": 3 }, { "id": "rfswitch1", "name": "Stekker 1", "class": "HomeduinoRFSwitch", "protocols": [ { "name": "switch1", "options": { "id": 42, "unit": 0 } } ] }, { "id": "rfswitch2", "name": "Stekker 2", "class": "HomeduinoRFSwitch", "protocols": [ { "name": "switch1", "options": { "id": 43, "unit": 0 } } ] }, { "id": "rfswitch3", "name": "Slaapkamer Denise", "class": "HomeduinoRFSwitch", "protocols": [ { "name": "switch1", "options": { "id": 44, "unit": 0 } } ] }, { "id": "rfswitch4", "name": "Garagedeur", "class": "HomeduinoRFShutter", "protocols": [ { "name": "switch1", "options": { "id": 45, "unit": 0 } } ] }, { "id": "dimmer", "name": "Dimmer", "class": "HomeduinoRFDimmer", "protocols": [ { "name": "dimmer1", "options": { "id": 7654321, "unit": 0 }, "send": true, "receive": true } ] } ], "rules": [ { "id": "pushover-stekker-1", "name": "Pushover Slaapkamer Denise on", "rule": "if Slaapkamer Denise is turned on then push title:\"Slaapkamer Denise\" message:\"Licht slaapkamer Denise is aan\" priority:1", "active": false, "logging": false }, { "id": "pushover-stekker2", "name": "Pushover Slaapkamer Denise off", "rule": "if Slaapkamer Denise is turned off then push title:\"Slaapkamer Denise\" message:\"Licht slaapkamer Denise is uit\" priority:1", "active": false, "logging": false }, { "id": "garagedeur", "name": "Garagedeur", "rule": "if $rfswitch4.position changes then push title:\"Garagedeur\" message:\"Garagedeur Trigger\" priority:1", "active": true, "logging": true } ], "pages": [ { "id": "favourite", "name": "Favourites", "devices": [ { "deviceId": "syssensor" }, { "deviceId": "rfswitch4" }, { "deviceId": "rfswitch1" }, { "deviceId": "rfswitch2" }, { "deviceId": "rfswitch3" }, { "deviceId": "weather" }, { "deviceId": "forecast" } ] } ], "groups": [ { "id": "klikaanklikuit", "name": "KlikAanKlikUit", "devices": [ "rfswitch1", "rfswitch2", "rfswitch3" ], "rules": [], "variables": [] }, { "id": "garage", "name": "Garage", "devices": [ "rfswitch4" ], "rules": [], "variables": [] }, { "id": "weer", "name": "Weer", "devices": [ "weather", "forecast" ], "rules": [], "variables": [] }, { "id": "systeem", "name": "Systeem", "devices": [ "syssensor" ], "rules": [], "variables": [] } ], "users": [ { "username": "admin", "password": "xxxxxxx", "role": "admin" }, { "username": "henri", "password": "xxxxxxx", "role": "user" } ], "roles": [ { "name": "admin", "permissions": { "pages": "write", "rules": "write", "variables": "write", "messages": "write", "events": "write", "devices": "write", "groups": "write", "plugins": "write", "updates": "write", "controlDevices": true, "restart": true } }, { "name": "user", "permissions": { "pages": "read", "rules": "none", "variables": "read", "messages": "none", "events": "none", "devices": "none", "groups": "none", "plugins": "none", "updates": "none", "controlDevices": true, "restart": false } } ], "variables": [] }
Nu kun je tenslotte pimatic opstarten.
#sudo service pimatic start (let op: dit kan bij eerste keer lang duren)
Je kunt controleren hoe ver het opstarten is door de logfile te bekijken:
#tail -f /home/pi/pimatic-app/pimatic-daemon.log
Pimatic is pas klaar met opstarten als je het volgende in je logfile ziet:
[pimatic] listening for http-request on port xxxx...
Je kunt nu eindelijk Pimatic met een browser benaderen op je computer of smartphone. Bij mij ziet dit er nu als volgt uit:
[See image gallery at eye-vision.homeip.net] Om je device aan te melden op het systeem stop je een stekker van de starterkit in het stopcontact en de eerste 5 seconden staat deze dan in ‘leer-modus’. Als je nu een ‘aan’ code stuurt met Pimatic dan zal deze geleerd worden door de stekker. Zo simpel is het. Dit werkte dan ook meteen de eerste keer goed. Je kunt nu dus met je smartphone apparaten en/of lampen aan en uit zetten.
In een volgende blog-post ga ik uitleggen hoe ik mijn garagedeur met Pimatic wil gaan aansturen.