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.

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 |

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 | Protocol | Description |
---|---|---|---|
8020 | 80 | TCP | Web-GUI Port |
2098 | 2098 | TCP | Xml RPC Port |
2099 | 2099 | TCP | Bin RPC Port |
8082 | 8082 | TCP | Database Web-GUI Port |
9092 | 9092 | TCP | Database TCP Port |
5435 | 5435 | TCP | Database PostgreSQL Port |
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 field | Values | Description |
---|---|---|
CONFIG_CCU_TYPE | CCU3 | Type of the CCU hardware |
CONFIG_CCU_IP | 192.168.1.43 | IP of the CCU |
CONFIG_HOST_IP | 192.168.1.10 | IP of the Docker host |
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.

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

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).

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.

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.

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

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).

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)

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.

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.

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.

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.

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.
19/01/2021 um 13:03
Hallo,
erstmal vielen Dank für die gute Anleitung. Ich habe leider ein kleines Problem. Ich bekomme bei den exakt gleichen Einstellungen (außer die Ordnerpfade auf der Synology) immer wieder folgende Fehlermeldung:
“read tcp 172.17.0.3:55952->192.168.2.98:5435: read: connection reset by peer”
19/01/2021 um 17:25
Hallo,
du bekommst die Fehlermeldung beim Anlegen des CCU-Historian Container? Oder wann genau bekommst du die Meldung?
Den Port 55952 versteh ich nämlich nicht, woher der kommen soll.
Michael
19/01/2021 um 20:00
Ich bekommen den Fehler in grafana. Wenn ich eine neue Datenquelle erzeugen möchte (Datasource). Ich wähle Postgre an, gebe die Daten ein, beim Klicken auf Test&Save kommt die Fehlermeldung. Ergänzende Infos: Sowohl der CCU-Historian als auch Grafana laufen auf einer Synology im Docker.
Der CCU-Historian läuft bereits seit Anfang Dezember 2020 einwandfrei. Jetzt wollte ich die Daten in Grafana visualisieren. Den Historian habe ich auch nach Ihrer/deiner Anleitung eingerichtet. Hat alles wunderbar geklappt.
20/01/2021 um 12:24
Die ccu-historian.config scheint nicht korrekt zu sein, wenn ich dort die beiden genannten Änderungen zurücknehme, bekomme ich auch die Fehlermeldung.
Also prüfe nochmal, ob diese beiden Werte so gesetzt sind:
database.pgEnable=true
database.pgAllowOthers=true
Michael
21/01/2021 um 12:59
Hallo Michael,
vielen Dank für deine Hilfe. Der Fehler lag auf jeden Fall an der config-Datei. Obwohl ich sie angepasst habe! Das ist aber das spannende an dem Fehler. Ich hatte die Mount-Pfade nicht genauso wie du. Host/Volume habe ich ja selbst festgelegt /volume1/docker/ccu_hist/data/config. In den “Path in container” (rechte Spalte) habe ich /config eingetragen…. Das war der Fehler. So habe ich zwar die Config-Datei verändert, aber der Dockercontainer hat immer die ursprüngliche Config-Datei beim Neustarten “genutzt”.
Ich habe wirklich alles probiert bei der Fehlersuche, am Ende habe ich alles gelöscht und genau nach deiner Anleitung alles nochmal neu installiert. Auch die Pfade auf meinem Host(Synology) habe ich genauso wie du eingerichtet. Jetzt funktioniert es! Vielen Dank nochmal!
Da ich von Docker keine Ahnung habe, muss ich mich hier nochmal schlau machen.
Viele Grüße
Hasan
19/01/2021 um 14:51
Hallo Michael,
Klasse Anleitung, hat auf Anhieb funktioniert. 🙂
Vielen Dank dafür
Torsten
19/01/2021 um 17:26
Hallo Torsten,
freut mich zu hören, dass die Anleitung geholfen hat!
Danke für das Feedback.
Michael