Ich bin totaler Fan von irgendwelchen Graphen (sinnvoll oder nicht), die mir z.B. den Verlauf der Helligkeit in meinem Garten anzeigen (welcher mit der Homematic Wetterstation ermittelt und in CCU-Historian gespeichert wird). Daher musste ich mir Grafana zulegen, welches mir für einige meiner Sensoren ansehnliche Diagramme erstellt.

So behalte ich z.B. immer den Überblick, ob ich meinem Nachwuchs mal wieder erklären muss, wie man richtig lüftet – wenn die Netatmo Raumsensoren mal wieder eine CO2 Konzentration über 2000ppm gemessen haben sollte man mal lüften.

Beispiel eine CO2 Wert Übersicht

Da ich nicht alles manuell installieren will, greife ich gerne auf Docker Container zurück, welche sich meist einfacher einrichten lassen. Als Umgebung nutze ich dazu ein Synology NAS.

Für diesen Anwendungsfall nutze ich zwei Container:

Einrichtung CCU-Historian

In DSM des Synology NAS öffnet man Docker und sucht unter Registrierung nach CCU-Historian, ich habe mich hier für das Docker Image von xjokay entschieden. Image in der Liste auswählen und mit Download herunterladen

Wurde das Image heruntergeladen, findet man dies unter Abbild. Den xjokay/ccu-historian:latest Eintrag in der Liste auswählen und auf Starten klicken. Man kann dem Container einen eigenen Namen geben, kann aber auch einfach den Namen stehen lassen. Ich habe weder den Container mit hoher Priorität ausgeführt, noch irgendwelche Ressourcenbeschränkungen eingestellt.

Die wichtigen Einstellungen erfolgen unter Erweiterte Einstellungen. Hier muss bei Volume, Port-Einstellungen und Umgebung etwas eingetragen werden.

Unter Volume verknüpft man lokale Verzeichnisse auf dem NAS mit dem Container. Dazu habe ich auf meinem NAS ein Docker Verzeichnis für alle möglichen Container angelegt, und dann je Container ein Unterverzeichnis, aber dies ist jedem selbst überlassen.

Meine Beispiel Pfade Container Pfad
docker/ccu_hist/data/database/database
docker/ccu_hist/data/config/opt/ccu-historian/config
Volume Einträge
So sollte das Ergebnis aussehen

Im nächsten Schritt die Port Einstellungen. Sollte man hier eigene Anpassungen vornehmen, bitte in der nachfolgenden Beschreibung berücksichtigen (z.B. den Port für die PostgreSQL).

Lokaler
Port
Container
Port
ProtocolDescription
802080TCPWeb-GUI Port
20982098TCPXml RPC Port
20992099TCPBin RPC Port
80828082TCPDatabase Web-GUI Port
90929092TCPDatabase TCP Port
54355435TCPDatabase PostgreSQL Port
Verwendete Port-Einstellung mit meinen Ports

Als letzte Einstellung erfolgt das Setzen von drei notwendigen Umgebungsvariablen im Tab Umgebung. Ich habe eine CCU3 im Einsatz, mit der IP 192.168.1.43. Zusätzlich läuft mein NAS unter der IP 192.168.1.10, daher ergeben sich für mich folgende Einträge

ENV fieldValuesDescription
CONFIG_CCU_TYPECCU3Type of the CCU hardware
CONFIG_CCU_IP192.168.1.43IP of the CCU
CONFIG_HOST_IP192.168.1.10IP of the Docker host
Benötigte Umgebungsvariablen

Daraufhin kann man den Container speichern und starten. Nach kurzer Zeit sollte unter der Adresse http://192.168.1.10:8020 (IP für eigenes NAS anpassen) das CCU Historien WEB-UI aufrufbar sein.

CCU-Historian Web-UI
CCU-Historian Web-UI Ausschnitt

Im CCU-Historian Web-UI kann man sich schon ein paar Kurven anzeigen lassen, aber mit Grafana sieht es irgendwie schicker aus.

Für Grafana brauchen wir den Zugriff auf die Datenbank, hinter CCU-Historian. Um das Datenbank UI aufzurufen und in den Daten stöbern zu können, müssen wir die URL http://192.168.2.10:8082 verwenden (IP anpassen) und sollten folgendes sehen

CCU-Historian Database Web-UI
CCU-Historian Datenbank UI

Einfach anmelden und dann kann man sich die nackten Daten anschauen. Das Passwort lautet „ccu-historian„.

Damit ist aber der Zugriff via Grafana noch nicht ganz möglich. Erst muss die Konfiguration noch entsprechend angepasst werden. Nach dem Start des Container, sollte im Config (im Beispiel docker/ccu_hist/data/config) Verzeichnis eine Datei ccu-historian.config zu finden sein. Diese muss an zwei Stellen angepasst werden database.pgEnable=true und database.pgAllowOthers=true, danach sollte der Inhalt in etwa so aussehen:

database.dir='/database'
database.webAllowOthers=true
database.pgEnable=true
database.pgAllowOthers=true
devices.device1.address='192.168.1.43'
devices.device1.type=CCU3
devices.historianAddress='192.168.1.10'
webServer.historianAddress='192.168.1.10'

Den Container nach der Änderung der Konfiguration einmal über die Docker Oberfläche durchstarten.

Einrichtung von Grafana

Als erstes muss der Grafana Container von Dockerhub geladen werden, dies erfolgt wie bei CCU-Historian in der Docker Oberfläche von DSM im Unterbereich Registrierung. Diesmal sucht man nach Grafana und wählt den Docker Container von Grafana selbst aus (sollte der erste Eintrag sein).

Grafana Suchergebnis

Wieder erst den Container herunterladen und dann im Bereich Abbild den Container grafana/grafana:latest auswählen und auf Starten klicken. Im Unterschied zu CCU-Historian, kann man in diesem Fall die Einstellungen alle direkt übernehmen und direkt im erscheinenden Dialog auf Weiter klicken.

Name vergeben und direkt weiter

In der darauffolgenden Übersicht, sieht man nochmal alle Einstellungen, unter anderem, den Port unter dem man das Web-UI von Grafana findet (hier Automatisch, was bedeutet, dass der Port bei Start des Container vergeben wird und in der DSM Container Ansicht angezeigt wird). Sollte der Default-Port 3000 schon belegt sein, oder man möchte einen eigenen festlegen, kann man zurückgehen und den Port unter Erweiterte Einstellungen noch festlegen.

Default Einstellungen mit automatischer Port-Zuteilung

Wenn man den Haken bei „Diesen Container nach Abschluss des Assistenten ausführen“ gesetzt hat, kann man nach kurzer Zeit direkt das Grafana UI aufrufen http://192.168.1.10:3000

Grafana Login Screen

Die erste Anmeldung erfolgt mit User admin und Passwort admin. Nach Bestätigung wird man direkt aufgefordert, dass Passwort zu ändern, was man tun sollte. Ist dies erledigt, kommt man auf den Homescreen, welcher einem direkt die Dinge anzeigt, die man zu erledigen hat, eine Datenquelle einfügen und ein Dashboard anlegen (den Rest ignoriere wir jetzt erstmal).

Grafana Setup Workflow

Mit dem Klick auf Add data source kommt man zu einer Liste von möglichen Quellen. Wir interessieren und für eine SQL Quelle, um genau zu sein, für eine PostgreSQL. Diese in der Liste suchen und mit einem Klick auf Select die Konfiguration starten.

Wir geben der Verbindung einen Namen, z.B. CCU, tragen den CCU-Historian Host mit Port ein 192.168.1.10:5435 und geben den Pfad an, unter dem die Datenbank liegt. Unter einem Synology Docker Container sollte dieser Pfad immer ../../database/history sein. User und Passwort sind wie bei CCU-Historian Database Web-UI sa und ccu-historian. Da wir kein SSL installiert haben, muss dies hier deaktiviert werden (es befindet sich alles in einem privaten und geschütztem Netzwerk, daher sollte dies kein Problem sein)

PostgreSQL Konfiguration für CCU-Historian

Als letzten Schritt die Konfiguration mit einem klick auf Save & Test speichern und überprüfen. Ist die Konfiguration korrekt, wird dies durch die Meldung Database Connection OK bestätigt.

Jetzt brauchen wir noch ein Dashboard, um die Daten anzuzeigen. Dazu müssen wir auf dem Homescreen ein neues Dashboard anlegen. Zum Homescreen kommt man am schnellsten mit einem Klick auf das Grafana Logo links oben. Dort sieht man im Workflow als nächsten Eintrag New dashboard, worauf wir klicken.

Ein neues leeres Dashboard

Wir fügen nun eine neue Abfrage auf dem vorhanden Panel ein, dazu auf Add Query klicken und das Panel wird angezeigt. In der Ansicht wählen wir in der Auswahlliste Query den Eintrag CCU aus und wechseln im Query Bereich mittels dem Stift Symbol in die SQL Ansicht der Abfrage.

So sollte das Bild aussehen

Als Beispiel wollen wir die Temperatur der Wetterstation visualisieren. Die Tabelle dazu finden wir mittels dem CCU-Historian Web UI, dort sucht man z.B. nach „temperature“, bekommt dann die Liste aller Homematic Komponenten, die einen Parameter mit dem Namensbestandteil „temperature“ haben, in meinem Fall nur die Wetterstation.

Ergebnis der Suche nach Temperature

Man wählt den gewünschten Eintrag aus, in dem Fall ACTUAL_TEMPERATURE, und klickt auf Details. In dieser Ansicht findet man in der Tabelle den Eintrag Tabellenname mit dem gesuchten Wert, hier: D_HMIP_RF_00185BE73E40A0_1_ACTUAL_TEMPERATURE

Die daraus resultierende Abfrage lautet:

SELECT 
  TS_TO_UNIX(TS) AS time, 
  "VALUE" as Aussentemperatur
FROM 
  D_HMIP_RF_00185BE73E40A0_1_ACTUAL_TEMPERATURE 
WHERE 
  $__timeFilter(ts)
ORDER BY ts

Diese Abfrage kann man theoretisch für alle Parameter 1:1 übernehmen, man muss nur die Tabelle anpassen und dem Value einen passenden Namen.

Mit Version > 3.0.1 von CCU-Historian beachten

Von Version 3.0.1 verwendet CCU-Historian scheinbar eine neue H2 Datenbank Version, die Schlüsselwörter berücksichtigt, welche damit nicht mehr verwendet werden dürfen.
Für CCU-Historian hat dies zur Folge, dass der Spaltenname VALUE eigentlich nicht mehr verwendet werden darf. Damit man diesen aber dennoch in einer Grafana Abfrage verwenden kann, muss man das Wort in Doppelhochkomma setzen und genau so schreiben wie in der Datenbank definiert, also in Großbuchstaben ("VALUE").

Ergebnis des SQL

Wenn man möchte kann man im Bereich „General“ dem Panel noch einen sprechenderen Namen geben und dann das ganze speichern.

Jetzt kann man beliebig mit Grafana rumspielen und auf die CCU-Historian Daten zugreifen.