bijmij-grafana: OpenTherm Gateway

Door nickyb2 op zaterdag 30 april 2016 14:51 - Reacties (14)
CategorieŽn: grafana, influxdb, otgw, Views: 9.094

Een korte tijd geleden ben ik begonnen met een project dat ik 'bijmij' gedoopt heb. Bijmij is een verzameling ideeŽn, scripts, blogs en aanverwante zaken over hoe ik 'bijmij' monitoring doe, hoe mijn domotica werkt of hoe ik bijvoorbeeld mijn CV ketel in de gaten hou.

Deze post gaat over hoe we met een OpenTherm Gateway en wat software het volgende Dashboard kunnen maken.
bijmij-grafana-otgw


Het dashboard geeft je een redelijk inzicht in hoe je CV ketel zijn werk aan het doen is en is onderverdeeld in vier blokken:
  • De huidige en gewenste temperatuur zoals door je thermostaat wordt gemeten.
  • De aanvoer en retour temperatuur van en naar de CV ketel toe en tonen we de maximum retour van 55 graden.
  • Het modulatie niveau van je CV ketel
  • Welke modus aanstaan, Vlam, CV-modus of Warm Water Modus
Het dashboard is gemaakt in Grafana, een software pakket waarmee je aan de hand van tijdseries data dashboards en grafieken kunt maken. De tijdseries data zit opgeslagen in een InfluxDB.

Wat heb je allemaal nodig:
Om van CV ketel tot aan het dashboard te komen hebben we een aantal onderdelen nodig:Hieronder een schema van waar welk onderdeel zich bevindt.

bijmij-grafana-otgw-components


Er zijn meerdere manieren om de OTGW uit te lezen. Ik heb gekozen om dit via de otmonitor software te doen en wel om de volgende redenen:
  • otmonitor biedt een json api waarin alle laatst gemeten waarden in staan. Dit wordt gebruikt voor het periodiek (elke x aantal seconden) uitlezen van alle meetwaarden
  • otmonitor biedt een WebSocket waarin alle wijzigingen op doorkomen. Dit wordt gebruikt om bij bepaalde wijzigingen, zoals warm water open/dicht een meting op te slaan in de InfluxDB. Doen we dit niet, dan kunnen we interessante metingen missen. Stel de warm water kraan gaat open en dicht binnen de periodieke uitlezing, dan missen we die waardes en dan zien we dat niet terug in het Dashboard
  • los van het uitlezen van meetwaarden wil ik ook mijn setpoint kunnen beÔnvloeden via een domotica oplossing, otmonitor ondersteund dit via de command pagina

Voorbereidingen:
Ik zal nu uitleggen hoe ik de installatie bij mij gedaan heb en het is aan jou om dit aan te passen aan jou gekozen platform en naam keuzes.

Als eerste zul je Grafana en InfluxDB moeten installeren en de websites van zowel Grafana als InfluxDB bieden voldoende houvast om dit te doen en zal ik hier niet nogmaals gaan herhalen. Kies voor Grafana voor versie 3 (nu nog beta).

Zowel Grafana als InfluxDB draaien bij mij in dezelfde VM op Ubuntu 16.04 LTS. Als je beide geÔnstalleerd hebt zal je een database moeten aanmaken op de InfluxDB en ik raad je aan om een retention policy aan te maken.

Je kunt de CLI van InfluxDB opstarten doormiddel van:

code:
1
$ influx


Ik heb gekozen om mijn database 'bijmij' te noemen.

code:
1
influx$ CREATE DATABASE bijmij;


Een retention policy zorgt ervoor dat je niet oneindig data in je database gaat pompen. Mijn retention policy houdt maximaal 30 dagen vast, daarna worden de oudste records automatisch verwijderd. De retention policy noem ik 'raw' als hierin zit de ruwe data en moeten we misschien nog wat mee doen. Langer dan 30 dagen wil ik het in ieder geval niet bewaren.

code:
1
influx$ CREATE RETENTION POLICY raw ON bijmij DURATION 30d REPLICATION 1;


Vervolgens kun je in Grafana een InfluxDB koppelen via een DataSource:

http://static.tweakers.net/ext/f/9DPWRM7yHvCUWuTYKyiDGT1U/full.png



De OTGW hangt via USB aan een Raspberry PI Model 2 welke ook de otmonitor software draait. De otmonitor moet in daemon mode gezet worden en beschikbaar zijn via http.

Ik gebruik supervisor om de otmonitor op de juiste manier te starten. Je kunt onderstaand supervisor config gebruiken, uiteraard zul je de paden en dergelijk moeten aanpassen aan jou eigen situatie.

code:
1
2
3
4
5
6
7
[program:otmonitor-ahf]
command = <PATH TO OTMONITOR>/otmonitor-ahf --daemon -w 8080 /dev/ttyUSB0
user = pi
autostart = true
autorestart = true
stdout_logfile = NONE
stderr_logfile = NONE



Uitlezen OTGW -> InfluxDB:
De volgende stap is het uitlezen van de OTGW en de meetgevens plaatsen in de InfluxDB. Ik heb hiervoor een script geschreven in Python en gebruik ook een aantal dependencies. Laten we eerst de dependencies gaan installeren via pip:

code:
1
2
3
$ wget https://bootstrap.pypa.io/get-pip.py
$ sudo python get-pip.py
$ sudo -H pip install "influxdb>=2.12.0" "requests>=2.9.1" "websocket-client>=0.37.0"



Vervolgens kunnen we het script gaan downloaden en aanroepen:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
usage: bijmij-otmonitor-influxdb.py [-h] [--hostname hostname] [-p port]
                                    [-s secs] [--rml-min min] [--rml-max max]
                                    [--influx-hostname hostname]
                                    [--influx-port port]
                                    [--influx-username username]
                                    [--influx-password password]
                                    [--influx-database dbname]
                                    [--influx-retention-policy policy]
                                    [--influx-measurement measurement]
                                    [-v | -q]
                                    [tag ...]

Send otmonitor updates to an InfluxDB API

optional arguments:
  -h, --help            show this help message and exit
  --hostname hostname   hostname to connect to otmonitor, defaults to
                        'localhost'
  -p port, --port port  port to connect to otmonitor, defaults to 8080
  -s secs, --sleep secs
                        number of seconds to sleep between updates, defaults
                        to 60
  --rml-min min         minimum modulation, defaults to 30
  --rml-max max         maximum modulation, defaults to 100
  -v, --verbose         Be verbose
  -q, --quiet           Be very quiet

  --influx-hostname hostname
                        hostname to connect to InfluxDB, defaults to
                        'localhost'
  --influx-port port    port to connect to InfluxDB, defaults to 8086
  --influx-username username
                        user to connect, defaults to 'root'
  --influx-password password
                        password of the user, defaults to 'root'
  --influx-database dbname
                        database name to connect to, defaults to 'bijmij'
  --influx-retention-policy policy
                        retention policy to use
  --influx-measurement measurement
                        measurement name to store points, defaults to
                        otmonitor
  tag ...               any tag to the measurement


Het ziet er ingewikkelder uit dan het is. De gekozen default zijn vrijwel altijd de juiste maar er is voldoende flexibiliteit om aan te passen aan jouw eigen situatie. Waar je goed op moet letten is welke retention policy je neemt, je wilt hier waarschijnlijk net als ik de 'raw' nemen en als je hem niet invult komt hij standaard op default te staan. Dit script start ik weer met supervisor en dan kun je gelijk mijn eigen aanroep zien:

code:
1
2
3
4
5
6
7
8
9
10
[program:bijmij-otmonitor-influxdb]
command = python <PATH TO>bijmij-otmonitor-influxdb.py -q --hostname <otmonitor IP> -s 15 --influx-retention-policy raw
user = bijmij
autostart = true
autorestart = true

redirect_stderr = true
stdout_logfile = /var/log/bijmij/bijmij-otmonitor-influxdb.log
stdout_logfile_maxbytes = 1MB
stdout_logfile_backups = 3



Bovenstaand schrijft mijn OTGW gegevens elke 15 seconden weg in de bijmij database onder retention policy raw in de measurement otmonitor. De otmonitor draait op <otmonitor IP>:8080 en de InfluxDB op de localhost:8086.

Grafana Dashboard
Het laatste stukje van deze puzzel is het Dashboard in Grafana maken. Laat Grafana nu een 'export' en 'import' functie hebben ingebouwd, ik kan dus eenvoudig mijn Dashboard met jullie delen.

Grafana draait op poort 3000, dus: http://<ip grafana>:3000

Het Dashboard kun je importeren bij Dashboard en dan Import, vervolgens een bestand kiezen. Als je nu dezelfde naamgeving hebt gebruikt als die van mij dan zou je een werkend Dashboard moeten krijgen. Heb je een andere naamgeving gekozen dan zul je de queries die onder de grafieken zitten aan moeten passen. Je kiest hier dan de juiste retention policy en dan de juiste measurement.


Nawoord
Als het goed is zou je nu een redelijk inzicht moeten krijgen in het gedrag van je OpenTherm CV ketel. Wees vrij om verbeteringen door te voeren, graag zie ik die dan terug zodat ik deze post kan updaten.

De installatie heb ik uit mijn hoofd gedaan, bij mij draait het al een tijdje, mocht er dus iets niet duidelijk zijn of iets niet werken zoals ik me herinneren laat me het dan weten dan ga ik dat uitzoeken en zal dan de post aanpassen.

Volgende: Home Assistant: Philips Hue Motion Sensor 10-'16 Home Assistant: Philips Hue Motion Sensor

Reacties


Door Tweakers user ThinkPad, zaterdag 30 april 2016 15:08

Het werkt toppie hier! Het grote wachten op nieuwe data die binnenkomt is nu begonnen :P Over een dag maar weer eens kijken. Zou haast de verwarming aanzetten om actie in de grafiek te toveren :P

Klein tipje nog voor mensen die supervisor niet gelijk aan de praat krijgen:
Bij mij in m'n Ubuntu Server 16.04 VM werd supervisor na het installeren (sudo apt-get install supervisor) niet automatisch gestart na een (re)boot van het systeem. Als ik dan 'sudo supervisorctl' invoerde kreeg ik de melding: 'unix:///var/run/supervisor.sock no such file'. Oftewel: supervisor was niet actief.

Om dit op te lossen voer je 'sudo systemctl enable supervisor.service' uit en daarna start je supervisor met de hand op: 'sudo service supervisor start'. Nu zal na een (re)boot supervisor starten en het script van nickyb2 netjes in de lucht houden, zoals het hoort.

Vergeet ook niet om in /var/log/ even de map 'bijmij' (of je eigen benaming als je het hebt aangepast) aan te maken, anders gaat supervisor zeuren.

[Reactie gewijzigd op zaterdag 30 april 2016 15:16]


Door Tweakers user Sepio, zaterdag 30 april 2016 15:39

Hoi Nicky,

Geweldige blog. Ik heb ook al een tijdje een OTGW. De otmonitor is leuk maar de grafieken kun je maar kort terug kijken. Daarom ben ik nu overgestapt naar Domoticz. Maar ook dit was het gewoon niet. Daar heb je wel historie van meer dagen, maar mis je toch de relatie tussen de verschillende sensoren.

De Graphana en InfluxDb manier sprak me erg aan. Maar ik kon niet vinden naar de manier waarop je de data van de OTGW kon verwerken.

Jouw blog is precies de informatie die ik nodig heb. Heel erg bedankt hiervoor. Ik ga dit binnenkort ook proberen.

En wat een mooie nuttige userinterface heb je gemaakt. Precies de info die nodig is.

Bedankt _/-\o_

Update
Je geeft aan dat InfluxDB onder een virtuele Ubuntu draait en dat de OTGW aan de Raspberry PI hangt. De communicatie gaat via webservices. Betekend dit ook dat je Ubuntu 24 uur per dag aan staat? Of spaart de OTMONITOR software de data op als er geen verbinding is?

[Reactie gewijzigd op zaterdag 30 april 2016 15:58]


Door Tweakers user nickyb2, zaterdag 30 april 2016 16:02

Sepio schreef op zaterdag 30 april 2016 @ 15:39:

Update
Je geeft aan dat InfluxDB onder een virtuele Ubuntu draait en dat de OTGW aan de Raspberry PI hangt. De communicatie gaat via webservices. Betekend dit ook dat je Ubuntu 24 uur per dag aan staat? Of spaart de OTMONITOR software de data op als er geen verbinding is?
Hij staat inderdaad 24/7 aan, maar ik lees niet enkel alleen de OTGW uit. Er komen nog van veel meer systemen data binnen. Voor mij is uitzetten geen optie meer dan verlies ik gewoon een hoop data.

Door Tweakers user Thedr, zaterdag 30 april 2016 16:07

Wow, ziet er erg gelikt en inzichtelijk uit allemaal! Ik heb zelf nog geen OTGW, maar die staat wel op mijn verlanglijstje om voor komende winter te installeren. Zal dan zeker nog eens hier terugkijken om ook een fijne interface als dit te maken :)

Door Tweakers user timoline, zaterdag 30 april 2016 16:53

Enorm bedankt voor deze duidelijke uitleg en downloads. Ik ben zeker van plan om dit op te gaan zetten. Het enige wat mij een beetje terughoudend maak is een VM met ubuntu, ik heb al een synology 24 uur per dag draaien en ik wil het dus liever daar op hebben. Tot nu toe nog geen packages voor de synology gevonden....

Voor de P1/smartmeter zou natuurlijk hetzelfde truckje gedaan kunnen worden, mijn omgebouwde python script spuugt al json uit.

Ik zoek ook nog een oplossing voor mijn RFLink gateway, daar ben ik nog niet helemaal uit, dus als je daar ook nog iets slimsvoor weet, hoor ik het graag

Andere oplossing zou ook kunnen zijn:
OTGW->MQTT->Influxdb->Grafana
https://github.com/shirou/mqforward

[Reactie gewijzigd op zaterdag 30 april 2016 17:15]


Door Tweakers user iMars, zondag 1 mei 2016 05:26

Dit is eigenlijk precies wat ik zoek! Ik heb nu op mijn RPi Domoticz draaien ťn otmonitor. Echter zorgt de Domoticz ervoor dat de otmonitor niet meer logt (door de PS=1).
Gaat dit werken, of is het een no-go doordat Domoticz ervoor zorgt dat de logging aangepast wordt?

Edit:
Ik heb het op mijn NAS (linux server) geÔnstalleerd en ziet er werkelijk subliem mooi uit. Maar zoals verwacht, door Domoticz logt de otmonitor niet, en dat zie je terug in Grafana.

Kijken of we daar een oplossing voor kunnen vinden...

[Reactie gewijzigd op zondag 1 mei 2016 07:26]


Door Tweakers user nickyb2, zondag 1 mei 2016 08:11

iMars schreef op zondag 01 mei 2016 @ 05:26:
Kijken of we daar een oplossing voor kunnen vinden...
Domoticz gooit inderdaad roet in het eten door de PS=1. Volgens mij is de enige oplossing om hem niet meer in Domoticz te zetten.

Door Tweakers user ThinkPad, zondag 1 mei 2016 13:58

iMars schreef op zondag 01 mei 2016 @ 05:26:
[...]

Kijken of we daar een oplossing voor kunnen vinden...
Waarom zou je de OTGW nog in Domoticz uit willen lezen als je bovenstaande logging hebt?
Logging kun je doen met InfluxDB + Grafana. En als je de thermostaat wil aansturen kan dat gewoon via de webpagina van otmonitor

http://192.168.4.11:8080/command?TT=19 om de tijdelijke override op 19 graden te zetten bijv. In Domoticz kun je dat wel via een event aan een virtuele switch knopen bijv.

Door Tweakers user iMars, zondag 1 mei 2016 15:29

ThinkPad schreef op zondag 01 mei 2016 @ 13:58:
[...]

Waarom zou je de OTGW nog in Domoticz uit willen lezen als je bovenstaande logging hebt?
Logging kun je doen met InfluxDB + Grafana. En als je de thermostaat wil aansturen kan dat gewoon via de webpagina van otmonitor

http://192.168.4.11:8080/command?TT=19 om de tijdelijke override op 19 graden te zetten bijv. In Domoticz kun je dat wel via een event aan een virtuele switch knopen bijv.
Omdat ik controle over mijn temperatuur wil hebben via Domoticz, zodat ik via Domoticz mijn thermostaat kan regelen. Ik wil alles op 1 plek hebben, niet alles los.

Handmatig een PS=0 sturen nadat er een PS=1 gestuurd, blijkt te werken. Heb een issue bij Domoticz ingediend.

[Reactie gewijzigd op zondag 1 mei 2016 17:28]


Door Tweakers user oehoe, maandag 2 mei 2016 16:09

Dit ziet er heel gaaf uit, zoiets wil ik ook al een tijdje doen. Heb de topic op GoT ook maar meteen in de bookmarks gezet.

Door Tweakers user balk, dinsdag 3 mei 2016 20:34

Super! Dankjewel voor het delen. Ik heb dit aan mijn otgw + domoticz setup hangen. Gaat goed :)

Door Bart, zondag 8 mei 2016 12:44

iMars schreef op zondag 01 mei 2016 @ 15:29:
[...]

Omdat ik controle over mijn temperatuur wil hebben via Domoticz, zodat ik via Domoticz mijn thermostaat kan regelen. Ik wil alles op 1 plek hebben, niet alles los.

Handmatig een PS=0 sturen nadat er een PS=1 gestuurd, blijkt te werken. Heb een issue bij Domoticz ingediend.
Ik zie dat het issue gesloten is met als hint MQTT te gebruiken. Heb je hier stappen in gemaakt?

Ook ik wil graag beter loggen, maar blijven sturen via Domoticz. Zou gaaf zijn als beide te combineren zijn..

Door Tweakers user timoline, zondag 15 mei 2016 10:22

ik begrijp een dingetje niet:...

"
De aanvoer en retour temperatuur van en naar de CV ketel toe en tonen we de maximum retour van 55 graden.
"

is dit dezelfde waarde als chsetpoint in otmonitor?
(Max. central heating water setpoint)

[Reactie gewijzigd op zondag 15 mei 2016 10:24]


Door Tweakers user nickyb2, zondag 15 mei 2016 12:07

timoline schreef op zondag 15 mei 2016 @ 10:22:
ik begrijp een dingetje niet:...

"
De aanvoer en retour temperatuur van en naar de CV ketel toe en tonen we de maximum retour van 55 graden.
"

is dit dezelfde waarde als chsetpoint in otmonitor?
(Max. central heating water setpoint)
Zeker niet. Je wilt dat je retour waarde maximaal 55 graden wordt. Om dit duidelijk te maken wordt er een lijn getekend op de 55 graden.

Reageren is niet meer mogelijk