Home automation met Pimatic

Door Koffie op woensdag 15 oktober 2014 20:39 - Reacties (42)
Categorie: -, Views: 21.192

Al enkele keren heb ik wat posts gemaakt over home automation met een Raspberry Pi. In het begin gebruikte ik hiervoor Pilight, maar inmiddels ben ik bijna helemaal overgestapt op Pimatic.
Het bijna gedeelte zal ik straks uitleggen ;)

Zoals gezegd: voorheen gebruikte ik pilight als service voor het aansturen van diverse RF devices. Aansturing van dit alles gebeurde met pimatic.
Er waren al wat experimenten om RF rechtstreeks aan te sturen vanuit pimatic, maar sinds begin deze week kan dat ook rechtstreeks via een RF 433 sender en receiver op de GPIO pinnen.

De eerste test zijn veelbelovend te noemen, op wat kleine problemen met KaKu na werkt zenden en ontvangen vlekkeloos. Zonder arduino of filter.
Wanneer mijn KaKu deurcontact goed functioneert, kan ik pilight volledig loslaten en alles via pimatic laten lopen, wel zo makkelijk :Y)

Wat kan pimatic dan wel niet allemaal ?
De allergrootste kracht (en de reden van mijn overstap) is het zogenoemde rules systeem. Door middel van rules kun je pimatic van alles laten uitvoeren - of juist niet :)
Een simpel voorbeeld

code:
1
IF it is after 08:00 THEN turn lamp1 on



Cool he?! Je kunt nu niet alleen je lampen via je browser aan of uit zetten, je kun het nu ook schedulen. Nog leuker word het om allerlei randvoorwaarden aan je rules te koppelen:

code:
1
IF lamp1 is turned off THEN turn lamp2 off


Oftewel : wanneer ik de ene lamp uitzet, ze dan de andere ook uit.

Plugins
Het tweede ijzersterke punt van pimatic is het plugin systeem.
Pimatic beschikt inmiddels over een aardig groeiende lijst met plugins die allemaal ook weer in de rules gebruikt kunnen worden.
Een greep van de plugins die ik gebruik:
• 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).

User en role systeem
Sinds enige tijd beschikt pimatic over een user en role systeem. Je kunt een oneindig aantal users defineren, samen met een oneinding aantal roles.
Vervolgens koppel je een user aan een role:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
      "name": "resident",
      "permissions": {
        "pages": "read",
        "rules": "read",
        "variables": "read",
        "messages": "read",
        "events": "read",
        "devices": "none",
        "groups": "none",
        "plugins": "none",
        "updates": "none",
        "controlDevices": true,
        "restart": false
      }


Zoals je ziet kun je dus door middel van een role een gebruiker behoorlijk afschermen van allerlei functies.

Cool, hoe ziet dat er nu uit?
Op dit moment ziet mijn pimatic er zo uit:

http://zooi.oostindie.com/images/396pimatic01_tn.jpg

Door het aanmaken van diverse pages (tabbladen) en groups (verdelingen over de pages) kun je alles naar eigen inzicht rangschikken.
Het mooie is ook dat een device niet zichtbaar op een pagina hoeft te staan om aangesproken te kunnen worden.
Een device is bekend (en aanspreekbaar) binnen het pimatic systeem, maar is dan nog standaard nog niet zichtbaar. Een device kan ook op meerdere pages geplaatst worden. Zo zou je dus voor elk vertrek een pagina kunnen maken, voorzien van de locatiegebonden devices. En vervolgens een page genaamd 'Favorieten' waar je de meest gebruikte devices bij elkaar zet :)

Vertel nog eens meer over die rules?
Het mooie van de rules is, dat je diverse plugins en devices kunt gebruiken. Zo heb ik een rule om mijn kachel naar 18 graden te zetten na 10 uur 's avonds, echter niet zolang de verlichting nog in gebruik is:

code:
1
IF it is after 22:00 and beneden-thermostaat-runprogram is on and pilight-Beneden-dressoir is off THEN $BenedenTemperatuurInstelling = 18


Dit vanuit de gedachtegang dat als de verlichting nog aan is, ik waarschijnlijk nog niet naar bed ben (en dus niet in de kou wilt zitten)

Het wil soms wel eens voorkomen dat per ongeluk de voeding van mijn draadloze temperatuur sensor losgetrokken word. Om nu te voorkomen dat pimatic ten onrechte denkt dat het heel lang te koud of te warm is, heb ik een rule gemaakt die mij hiervoor waarschuwt :

code:
1
IF temperature of pilight-thermostaat-woonkamerwireless was not updated for 1 hour THEN push title:"Temperature sensor error" message:"Woonkamer wireless is not update since 1 hour" and $BenedenStopWarmte = $BenedenStopWarmte + 1


Als extra veiligheid word de variabele $BenedenStopWarmte opgehoogd met 1. Er zit namelijk een beveiliging in het aansturen van de kachel, Zodra deze variabele hoger is dan 0 word er onherroepelijk gestopt met verwarmen en zal deze ook niet langer verwarmen, totdat deze variabele minstens 5 minuten 0 is.

Een andere rule die zorgt voor het ophogen van deze variabele:

code:
1
IF contact of pilight-Beneden-tuindeur = opened THEN $BenedenStopWarmte = $BenedenStopWarmte + 1



Met dus de volgende rule om te zorgen dat de kachel per direct gestopt word:

code:
1
IF $BenedenStopWarmte > 0 and warmte is on THEN turn warmte off



Waar gebruik jij zelf pimatic nu allemaal voor?
Zelf heb ik 2 onafhankelijke Raspberry Pi's draaien. Eentje in de meterkast voor het aansturen van alle verlichting en de kachel.
Deze leunt nu nog op pilight, maar zal deze week waarschijnlijk volledig op pimatic gaan draaien.

Een tweede Raspberry Pi hangt in de schuur om alles wat maar met het zwembad te maken heeft aan te sturen.
Voor het dagelijks laten draaien van de filterpomp en zoutelectrolyse hoef ik niets meer te doen, dit gaat volledig automatisch. Ook aansturing van verwarming gebeurt via deze installatie, op basis van 2 temperatuursensoren in de waterleidingen.

Hoe installeer ik pimatic?
Installatie is relatief eenvoudig en word hier besproken

Na installatie kun je de homeduino plugin installeren met het commando sudo npm install pimatic-homeduino
Onder de sectie plugins in je config.json plaats je dan de volgende config:

code:
1
2
3
4
5
6
7
{
      "plugin": "homeduino",
      "driver": "gpio",
      "driverOptions": {},
      "receiverPin": 16,
      "transmitterPin": 15
    }



Waarbij de pin nummering op basis van WiringPi nummering is.

Het gaat te ver om nu alles voor te kauwen in deze blog. Kijk eens rond op de site van pimatic of de issues pagina op github: https://github.com/pimatic/pimatic/issues

Mocht je ergens vragen over hebben, stel ze dan daar of hier in de comments op deze blog maar gelieve geen PM's te sturen met vragen ;)

Update: nog wat coole shizzle die je pimatic kan doen

Mijn zwembad heeft een LED RGB lamp met iets van 15 verschillende standen. Wanneer je de lamp uit zet en binnen x seconden weer aan, is dat een teken voor de lamp om naar het volgende programma te schieten. Zou je langer dan x seconden wachten, blijft hij gewoon bij het huidige programma.
Van begon af aan had ik dus al een knop 'volgend programma' die er voor zorgde dat de lamp uitging en na 1 seconde weer aan.
Later heb ik dit uitgebreid door er een variabele aan te koppelen. Elke keer als er op die knop gedrukt word, word de variabele met +1 opgehoogd.
Een andere rule zorgt er voor dat deze variabele nooit meer dan 15 kan worden, en dus na 15 weer naar 1 schiet.

Van de 15 mogelijke standen heb ik 2 favorieten : volledig wit en een stand waar de lamp heel rustig van kleur naar kleur verloopt.
Vervolgens 2 knoppen gemaakt "wit" en "kleuren programma". Wanneer 1 van die knoppen word ingedrukt, zal een rule net zo lang de lamp aan en weer uit zetten tot het gewenste programma is bereikt (lees: de variabele de juiste inhoud heeft).




Dit is nog een ouder filmpje waar het aansturen van een LCD met python ging, inmiddels kan pimatic rechtstreeks een LCD aansturen: op basis van rules kun je dus verschillende tekst laten zien.



Wanneer pimatic ziet dat er op de knop gedrukt word, stuur ik een python (pi-blaster) script aan die met soft PWM de LED ring van die kop aan of uit zet. Vervolgens word er nog een status info op het LCD gezet.