Je kachel aansturen met pimatic, een echte thermostaat

Door Koffie op maandag 6 april 2015 18:55 - Reacties (16)
Categorie: -, Views: 6.528

In het eerste deel heb je gezien hoe je de CV of stadsverwarming kunt schakelen en de temperatuur in de woonkamer kunt meten.
De basis is eigenlijk simpel : vind je het te koud zet je de CV aan, vind je het te warm ze je deze weer uit :) Tijd om hier slimmer mee om te gaan.

Het maken van een thermostaat
Om te beginnen gaan we een thermostaat device toevoegen aan pimatic. Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
7
{
      "id": "thermostaat",
      "class": "DummyHeatingThermostat",
      "name": "Thermostaat",
      "comfyTemp": 20,
      "ecoTemp": 17
    },



Sla de wijzigingen op en reboot pimatic. Je hebt nu een thermostaat device in je installatie. Voeg de thermostaat toe aan je GUI en test de knoppen uit. Je zult zien dat alles werkt, maar pimatic heeft nog niets om op te reageren. Dit moet je allemaal zelf doen met extra rules
De thermostaat heeft 7 knoppen, verdeeld over 3 blokken.
De eerste 3 zijn : auto, manu en boost.
Dit zijn de standen waarin je je thermostaat kunt zetten. Omdat je zelf de rules schrijft, kun je zelf bepalen wat je er mee doet. In deze blog zullen ze het volgende betekenen :

auto : het systeem zal volgens alle rules gewoon automatisch werken aanpassingen zullen alleen tijdelijk van kracht zijn
manu : overrulled volledig alle programma's en zal voor onbepaalde tijd de huidige temperatuur handhaven
boost : verhoogd de huidige temperatuur met 2 graden voor 1 uur lang

De knoppen eco en comfy zijn hardcoded waardes, in dit geval 17 voor eco en 20 voor comfy.
Met de + en - knoppen kun je de temperatuur instelling veranderen.

http://zooi.oostindie.com/images/2282015_04_06_16_tn.35_tn.52_tn.jpg

Pimatic laten reageren op wijzigingen aan de thermostaat
Zoals gezegd : de thermostaat is een dom device wat niets uit zichzelf kan doen. Dat is mooi, want dat kunnen wij alles precies doen zoals we zelf willen ;)
De 3 standen van de thermostaat zijn op te vragen en veranderen door middel van rules :

code:
1
IF mode of thermostaat = boost THEN set mode of thermostaat to "auto"


Ook de temperatuurinstelling is uit te lezen en te wijzigen:

code:
1
IF mode of thermostaat = "boost" THEN set temp of thermostaat to 25



Een simpele AAN/UIT thermostaat'
We hebben nu een sensor die de temperatuur meet, en een thermostaat device waarmee we het e.e.a aan kunnen sturen. We kunnen nu relatie makkelijk een simpele thermostaat maken.
Dit kun je doen door de volgende rules aan te maken:


code:
1
2
IF temperature of woonkamer < $thermostaat.temperatureSetpoint THEN turn on warmte
IF temperature of woonkamer > $thermostaat.temperatureSetpoint THEN turn off warmte



Is het kouder dan de gewenste temperatuur, dan zal de CV (relais) aan gaan, is het warmer dan gaat hij vanzelf weer uit.
Je thermostaat is vanaf nu niet meer nodig:)

De thermostaat moet 'slimmer' worden
Ik ben al langere tijd bezig met het aansturen van de verwarming dmv een Raspberry Pi python scripts / pilight / pimatic, en ben uiteindelijk op de volgende aanpak uitgekomen: zorg dat er 1 variabele waarnaar gekeken word (in dit geval: de setting van de thermostaat) laat allerlei rules die setting beÔnvloeden op basis van dag/tijdstip/externe factoren. Laat vervolgens je thermostaat simpelweg naar die setting kijken tov woonkamer temperatuur.

Op mijn eigen installatie heb ik dus enorm veel regels die (mogelijkerwijs) de gewenste temperatuur beÔnvloeden. Of vervolgens de kachel aan of uit moet gebeurt slechts op basis van 2 rules.
Zo heb ik bijvoorbeeld een rule die er zo uitziet:

code:
1
[it is monday or tuesday or thursday or friday] and it is after 07:30 and before 13:30 and beneden-thermostaat-sunday is off and mode of thermostaat = auto THEN set temp of thermostaat to 18


Op maandag, dinsdag en vrijdag is er van half 8 tot 3 (de rule is tot half 2 ivm opwarm tijden) niemand thuis. Tussen die periode mag het dus afkoelen tot 18 graden.

Elke dag om 10 uur 's avonds mag de kachl terug van 20 naar 18 graden, tenzij de woonkamer verlichting nog aan is - als de hoofdverlichting nog brand is de kans namelijk reŽel dat ik nog beneden ben):

code:
1
IF it is after 22:00 and mode of thermostaat = auto and dressoir is off THEN set temp of thermostaat to 18


Wanner de verlichting om 22:00 nog brand zal de thermostaat op 20 blijven staan. Ga ik uiteindelijk om 23:50 naar bed, dan zal de thermostaat automatisch terugvallen naar 18 graden.

Deze rules kun je net zo moeilijk of makkelijk maken als je wil, ik ken situaties waar men gewoon een AAN/UIT thermostaat heeft gemaakt, aangevuld met aanwezigheid van personen op basis van een ping plugin voor de smartphones.

Voor de boost knop heb ik de volgende rule aangemaakt:


code:
1
IF mode of thermostaat = "boost" THEN $BeforeBoostTemp = $thermostaat.temperatureSetpoint and set temp of thermostaat to ($thermostaat.temperatureSetpoint + 2) and after 1 hour set mode of thermostaat to "auto" and after 3601 seconds set temp of thermostaat to $BeforeBoostTemp



Deze rule schrijft de huidige temperatuur weg in de $BeforeBoostTemp en verhoogt deze temperatuur met 2 graden. Na 1 uur word de mode naar auto gezet, en de vorige temperatuur uit BeforeBoostTemp weer gebruitk.

Andere slimme manieren om om te gaan met de temperatuurinstelling en je thermostaat:
- Bijhouden of de temperatuur van je woonkamer stijgt. Waarom zou je verwarmen wanneer de woonkamer op een natuurlijke manier opwarmt?
- Stoppen met verwarmen als er een deur of raam geopend word
- Heb je behoefte aan een warme kamer in de ochtend, voor je naar werk gaat? Warm dan slechts op tot 19,5 graden. Dit scheelt behoorlijk in tijd
- Stuur bij op basis van aanwezigheid van smartphones. Waarom verwarmen als de smartphones niet aanwezig zijn?

Het lukt niet, ik snap het niet, ik heb hulp nodig! :?
Als je vragen hebt, kun je deze beter in het pimatic topic stellen : het grote pimatic topic - home domotica met je Raspberry Pi
Dat is makkelijker dan her te behandelen (je bereikt ook een groter publiek dan alleen Koffie :P ).

Inhoudelijk reacties op specifiek dit artikel kunnen uiteraard gewoon in de comments.

Ik ben zeker benieuwd naar de handigheidjes die jullie gebruiken om slim om te gaan met het verwarmen van de woonkamer, post vooraal je tips en tricks!

Je kachel aansturen met pimatic, de basics

Door Koffie op maandag 6 april 2015 09:52 - Reacties (19)
Categorie: -, Views: 8.370

Na de vele artikelen over homeautomation, is het weer eens een tijd voor een stukje van mijn kant :)

In deze blog wil ik beginnen met het behandelen van aansturing van je kachel door middel van pimatic. Ik ga er vanuit dat je stadsverwarming of een normale CV met thermostaat hebt. Dus geen opentherm toestanden oid. Twijfel je ? Trek je thermostaat van de muur en kijk hoeveel draden er van je thermostaat naar je ketel gaan. Indien dit er 2 zijn, zit je goed :Y)

Wat heb ik allemaal nodig :?
- Raspberry Pi met pimatic geÔnstalleerd
- 1 relay (bijvoorbeeld : http://r.ebay.com/1RNzF8 )
- 1 temperatuursensor (DS18B20 + 4.7K weerstand of zelfbouw)
- Diverse kabeltjes (handjevol jumperwires en bijvoorbeeld UTP)

Stap 1 : De CV aansluiten aansluiten
Als allereerste haal je de huidige thermostaat van de muur af, die gaan we niet meer nodig hebben. Straks kun je daar een prachtige tablet hangen om je hele huis aan te sturen.
Laat de kabel zitten, deze hebben we wellicht nog nodig. Sowieso : liever bekabeling nutteloos laten zitten dan dat je een jaar later een probleem hebt omdat er geen kabel meer in de leiding te krijgen is.
De kabel die aan je thermostaat zat, loopt helemaal door naar je CV of stadsverwarmingsklep. De vraag is : waar gaat de Raspberry Pi komen?
Er is geen noodzaak om de Pi in de woonkamer te hangen, dus waarom niet gewoon lekker bij je CV plaatsen?
En nu komt die kabel die er al lag mooi van pas. We kunnen (indien je dat wilt) deze kabel hergebruiken voor de temperatuursensor. Controleer eerst hoeveel aders er van de muur naar je CV gaan. Indien dit er echt maar 2 zijn, zul je de kabel moeten vervangen. Voor de DS18B20 sensor hebben we minimaal 3 aders nodig.
Haal eerst de 2 aders van je CV af, en vervang deze voor 2 nieuwe aders (bijvoorbeeld een stukje UTP).
Verbind de andere kant van de 2 aders aan je relay.
Afhankelijk van je relay heb je verschillende aansluitmogelijkheden. Indien je 3 terminalschroeven hebt, zorg er dan voor dat 1 ader in de COM zit en de andere in de NO. Op deze manier zal je relay zonder tussenkomst van pimatic in een verbroken toestand staan.
Aan de andere kant van je relay zul je hoogstwaarschijnlijk 3 terrminalschroeven hebben : DC+ , DC- en CH1 (of VCC en GND ipv DC).
Verbind de VCC of DC+ met de 5v pin van je Raspberry Pi, en verbind de DC- of GND met de GND van je Raspberry Pi.
Verbind CH1 met GPIO0 van je Raspberry Pi (dat is BCM GPIO nummer 17).
De eerste stap is nu gezet, je ketel is verbonden met je Raspberry Pi :Y)

Voordat we verder gaan, testen we eerst of alles goed werkt. Zorg dat je pimatic goed hebt werken en installeer indien nodig de GPIO plugin.
Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
{
      "id": "warmte",
      "class": "GpioSwitch",
      "name": "warmte",
      "gpio": 17
    },



Sla de wijzigingen op en reboot pimatic. Je hebt nu een ON/OFF device met de naam warmte in je installatie. Voeg de knop toe aan je GUI en test de knop uit. Wanneer je deze op ON zet, zal de klep van je stadsverwarming open moeten gaan. Indien je een ketel hebt, zal deze moeten gaan branden.
Gebeurt er niets? Controleer dan je bedrading tussen de Raspberry Pi, relay en CV nogmaals goed.

Stap 2 : Temperatuur in de woonkamer meten
We kunnen nu de CV aan en uit zetten wanneer we maar willen. Victory! Tijd om een stap verder te gaan, we willen namelijk ook weten hoeveel graden het in de woonkamer is.
De makkelijkste manier om de sensor op te hangen op de plek van je oude thermostaat. Er zit al een gaatje in de muur, en er loopt al een kabel naar de CV (waar je Raspberry Pi hangt).
Verbind de 3 pootjes van de sensor aan de 3 aders van je kabel. Onthoud welke kleur aan welk pootje.
Kijk naar het plaatje voor de juiste layout :

http://zooi.oostindie.com/images/247ds18b20_pinout.gif

Aan de andere kant van de kabel hebben we nog 1 onderdeel nodig : een weerstand van 4.7K. Plaats de weerstand tussen de VCC en de data (middeslte poot):

http://zooi.oostindie.com/images/736sensor_connection.png

Verbind vervolgens de VCC aan de 3.3V van de Raspberry Pi, de GND aan de GDN en de data aan GPIO 4 (BCM GPIO 23).
Zorg dat je de DS18B20 plugin geÔnstalleerd hebt op Pimatic en pas je modules bestand aan:

sudo nano /etc/modules


Voeg de volgende regels toe:

code:
1
2
w1-gpio
w1-therm


Reboot je Raspberry Pi en kijk of de sensor gevonden word:

cd /sys/bus/w1/devices
ls -l

Je ziet nu 2 directorys, 1 daarvan ziet er zo uit 28-xxxxxxxxxxxx
Indien je geen directory met 28-xxxxxxxxxxxx ziet , klopt je bedrading niet. Controleer deze. Is je sensor gloeiend heet? Dan heb je de VCC en GND omgedraaid of zit je weerstand niet goed. De sensor kun je dan weggooien :(
Onthoud het volledige 28-xxxxxxxxxxxx nummer.

Mocht je meerdere DS18B20 sensors willen toevoegen, dan kan dat. Onthoud goed : alle sensors moeten op 1 kabel met slechts 1 weerstand. Je mag er meerder op 1 lange kabel plaatsen, of vanuit de Raspberry Pi als een soort ster netwerk.
Elke keer als je een nieuwe sensor toevoegt, zul ju op bovenstaande manier het ID moeten achterhalen.

Zet het volgende stuk code in je config, onder de devices sectie.


code:
1
2
3
4
5
6
7
{
  "id": "woonkamer-sensor",
  "name": "Woonkamer",
  "class": "DS18B20Sensor",
  "hardwareId": "28-xxxxxxxxxxxx ",
  "interval": 60000
}



Waarbij 28-xxxxxxxxxxxx dus het eerder onthouden ID van je sensor is.
Sla de wijzigingen op en reboot pimatic. Je hebt nu een temperatuur device met de naam Woonkamer in je installatie. Voeg de sensor toe aan je GUI. Je moet nu de temperatuur van de woonkamer zien.

Stap 3 : Warmte schakelen op basis van omgeving
Nu begint het leuk te worden. We kunnen nu de CV aan of uit zetten wanneer we dat willen, en we kunnen ook nog eens de temperatuur in de woonkamer meten. De Raspberry Pi is ineens een slimme thermostaat geworden :Y)
Door middel van rules kun je nu de CV aan of uit zetten. Je kunt hier zo creatief in zijn als je zelf wil. In een volgende blog ga ik dieper in op de aansturing van je CV om dit zo slim mogelijk en gebruikersvriendelijk mogelijk te doen.

Het lukt niet, ik snap het niet, ik heb hulp nodig! :?
Als je vragen hebt, kun je deze beter in het pimatic topic stellen : het grote pimatic topic - home domotica met je Raspberry Pi
Dat is makkelijker dan her te behandelen (je bereikt ook een groter publiek dan alleen Koffie :P ).

Inhoudelijk reacties op specifiek dit artikel kunnen uiteraard gewoon in de comments.

=[UPDATE]=
Deel 2 is nu ook online: Koffie's tweakblog: Je kachel aansturen met pimatic, een echte thermostaat

(stads)verwarming draadloos schakelen

Door Koffie op woensdag 12 november 2014 21:31 - Reacties (17)
Categorie: -, Views: 5.950

Zoals nu toch wel bekend zou moeten zijn, stuur ik mijn verlichting en verwarming aan met een Raspberry Pi en pimatic. Nog niet mee bekend? Kijk dan vlug bij mijn andere blogs.

Mijn manier van verwarming aansturen verschilt iets van die van de meeste: wij zitten namelijk opgezadeld met stadsverwarming.
Dat betekend dat er simpelweg een gesloten circuit voor mijn radiators in huis aanwezig is, met een aan- en afvoer van heet water van de nuon.
Toen wij dit huis kochten was er niets geregeld om dit te sturen. Geen thermostaat en ook geen afsluiter.
Wij hebben toen direct een honeywell klep op de aanvoer laten zetten, zodat we deze met een normale thermostaat konden bedienen.

Een van de allereerste dingen die ik automatiseerde in huis was dan ook deze afsluiter.
In plaats van een thermostaat, was het nu een relay die de afsluiter open of dicht zette.
Dit heeft tot nu toe altijd prima gewerkt, maar had toch wel 2 nadelen:
- De Raspberry Pi moest in de buurt van het relay geplaatst worden om zo de GPIO rechtstreeks aan het relay te hangen
- Bij een major storing op de Raspberry Pi kan ik de verwarming niet handmatig aanzetten.

Om dit op te lossen heb ik een attiny samen met een RF zender en ontvanger op een klein breadboardje geplaatst. Vervolgens het relay op dezelfde attiny aangesloten en vervolgens afgemaakt met een stukje software.

De attiny reageert op een normaal klik aan klik uit adres van mijn afstandsbediening. Wanneer er een ON signaal ontvangen word, gaat het relay aan. Word er een OFF signaal ontvangen gaat hij weer uit.
Als extra zekerheid word er 5 seconden na het ontvangen van het signaal een antwoord teruggestuurd. Dit antwoord is wederom KaKu, maar nu een ander adres met dezelfdestate als ontvangen is.
Doordat er nu een bevestiging teruggestuurd word, kan ik in pimatic rules maken die een nieuwe poging doen wanneer er na het versturen geen antwoord is ontvangen. Bij een 2e milsukte poging word er dan een alert via push-over verstuurd.

Door bewust een adres van mijn bestaande KaKu afstandsbediening te gebruiken, weet ik zeker dat ik altijd makkelijk met de hand de kachel kan overrulen als er een probleem met de Raspberry Pi is.

Attiny sketch, inclusief pin bezetting, en libraries staan op github: https://github.com/koffienl/attiny-kaku

Foto's en video (let niet op de bende in de meterkast :+ ) :

http://zooi.oostindie.com/images/6042014_11_12_20_tn.55_tn.38_tn.jpg http://zooi.oostindie.com/images/7592014_11_12_20_tn.56_tn.13_tn.jpg

Native RF zenden en ontvangen met pimatic

Door Koffie op vrijdag 7 november 2014 21:46 - Reacties (43)
Categorie: -, Views: 19.473

Na mijn vorige blog over pimatic is er al weer een hoop gebeurt.
Inmiddels is er een eigen topic op het forum: het grote pimatic topic - home domotica met je Raspberry Pi en beik volledig overgestapt van zenden en ontvangen via pilight naar pimatic.

Het is misschien iets moeilijker dan gewoon een zender en ontvanger aan je pi knopen, maar het levert een hoop voordelen op. Zo is mijn CPU verbruik gezakt van gemiddeld 50% naar gemiddeld 5% :Y)

Wat heb ik allemaal nodig :?
Eigenlijk niet veel. Om te beginnen een goed setje RF zender en ontvanger (liefst type "433MHz Superheterodyne") en een Arduino Nano clone. That's it.
Een nano clone is al voor een dollar of 4 te koop op ebay, dus dat zijn de kosten niet.

Hoe sluit ik het allemaal aan :?
Het makkelijkste is om de zender, ontvanger en arduino op een breadboard te plaatsen, en deze vervolgens met jumperwires met elkaar te verbinden.
Hoewel je verschillende pinnen van je arduino kunt gebruiken, is het 't makkelijkst om de standaard te volgen:

http://zooi.oostindie.com/images/862pins_nano.png

Je ontvanger heeft als het goed is 4 pinnen: GND, DATA, DER, VCC
Wij hebben alleen de GND, DATA en VCC nodig. Sluit de GND aan op pin 29 GND, sluit DATA aan op pin 5 D2 en de VCC op pin 27 +5V

Je zender heeft er ook 4 : VCC, DATA, GND, ANT
Sluit de VCC aan op pin 27 +5V, de DATA op pin 7 D4 en de GND op png 29 GND.
Eventueel kun je een jumperwire op de ANT plaatsen.

Sluit vervolgens de nano aan op de USB port van je Raspberry Pi, dubbelcheck dat deze ttyUSB0 toegewezen heeft gekregen:
pi@raspberrypi ~ $ cd /dev
pi@raspberrypi /dev $ ls -l ttyUSB?
crw-rw---T 1 root dialout 188, 0 Nov  7 20:26 ttyUSB0
pi@raspberrypi /dev $


Indien je geen andere gekke dingen aan je Pi hebt hangen zal deze gewoon ttyUSB0 zijn.

Software compileren en naar je Arduino Nano uploaded
Voordat we verder kunnen, hebben we arduino-mk nodig: sudo apt-get install arduino-core avr-libc avrdude binutils-avr gcc-avr libconfig-yaml-perl libftdi1 libyaml-perl screen python-serial.
Na installatie kun je de sketch file downloden: git clone --recursive https://github.com/pimatic/homeduino.git

Bewerk nu met nano het Makefile bestand in de homeduino folder. Er van uitgaande dat je een Arduino Nano Clone op basis van een ATmega328 hebt, kun je de BOARD_TAG gewoon op nano328 laten staan.
Let even goed op de setting MONIOR_PORT deze staat default op /dev/ttyUSB1 terwijl de kans dus groot is dat deze op /dev/ttyUSB0 moet staan.
Sla je wijzigingen op en run het command make upload.

Pimatic configuratie aanpassen
Je hebt nu nog de volgende aanpassingen nodig in je config.json :

code:
1
2
3
4
5
6
7
8
9
10
{
  "plugin": "homeduino",
  "driver": "serialport",
  "driverOptions": {
    "serialDevice": "/dev/ttyUSB0",
    "baudrate": 115200
  },
  "receiverPin": 0,
  "transmitterPin": 4
}



Let hier weer op de ttyUSB0 ;)
De receiverpin en transmitterpin zijn gelijk aan de pinnen van deze handleiding.
Als je nu ook nog debug aan zet in je config, zul je in de logfile alle receives voorbij zien komen:

code:
1
2
3
"settings": {
    "debug": true,
    "logLevel": "debug",



Sla je wijzigingen op en start pimatic. Bekijk nu je logstream door middel van tail -f pimatic-daemon.log als je nu bijvoorbeeld een KaKu commando verstuurd zul je deze voorbij zien komen:
20:42:47.990 [pimatic-homeduino] debug: switch1:  { id: 9565958, all: false, state: true, unit: 1 }
20:42:48.022 [pimatic-homeduino] debug: contact1:  { id: 9565958, all: false, state: true, unit: 1 }
20:42:48.603 [pimatic-homeduino] debug: data: "RF receive 270 2716 1363 10620 0 0 0 0 010002000202000002000202000002000200020200020002000200020000020200020002000002000200020002000202000200000200020200000200020002020003"


Als je nu een KaKu switch aan je config wil toevoegen, gebruik je het volgende voorbeeld:


code:
1
2
3
4
5
6
7
8
9
10
11
12
{
  "id": "rfswitch",
  "name": "RFSwitch",
  "class": "HomeduinoRFSwitch",
  "protocols": [{
    "name": "switch1",
    "options": {
      "id": 42,
      "unit": 0
    }
  }]
}



Voor een complete lijst van ondersteunde protocollen kun je hier even kijken: https://github.com/pimati.../blob/master/protocols.md

Een van de protocollen die direct mijn aandacht trok is het zogenoemde generic protocol. Met dit ptocol kun je een ID, sensornummer en value versturen.
Oftewel : een volledig build-in protocol voor mijn draadloze tempereatuur sensor :Y)
Geen gedoe meer met een protocol in pilight welke weer omgecat moet worden tot een generic_weather welke weer door pimatic-pilight plugin opgepikt word, maar gewoon rechtstreeks een temperatuur naar pimatig sturen.
Inmiddels draait mijn bestaande sensor op de aangepaste code, maar meer daarover in een andere blogpost.


Resources:
https://github.com/Yves911/generic_433_sender
https://github.com/pimatic/homeduino
https://github.com/pimatic/pimatic-homeduino
https://github.com/pimati.../blob/master/protocols.md
http://r.ebay.com/WucSA6 (Arduino Nano)
http://r.ebay.com/Abfrlq (433 Mhz Superheterodyne)
https://github.com/pimatic/pimatic/issues
het grote pimatic topic - home domotica met je Raspberry Pi

Prototype pimatic-homeduino zender/ontvanger met antenne:
http://zooi.oostindie.com/images/3092014_10_30_19_tn.25_tn.34_tn.jpg http://zooi.oostindie.com/images/2302014_11_05_09_tn.14_tn.08_tn.jpg

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.