Menü

28.02.2024: Heizungsdaten im Browser anzeigen

Unsere Heizungsanlage vom Typ Viessmann kann mittels passendem Zubehör eine Onlineverbindung zum Server von Viessmann aufbauen und die aktuellen Betriebsdaten übertragen.

Nach Registrierung im Portal von Viessmann unter der URL https://developer.viessmann.com/start.html können Sie sich im Developer-Portal ​https://app.developer.viessmann.com/​​​ einloggen und dort einen Zugriff zum Abruf der Daten über die Viessmann-API einrichten.

Abruf der Daten in Handarbeit mittels PHP

Man kann sich die Mühe machen und mittels selbst programmierter PHP-Skripte die Daten abrufen. Das ist aber der mühsamere Weg und ich werde weiter unten  eine Alternative hierzu beschreiben.

Trotzdem ist das selbstgeschriebene Skript ganz praktisch. Mit der darin enthaltenen Methode $viessmann->api_listfeatures() kann man sich alle verfügbaren Features-Abrufe anzeigen lassen. Der Umfang der verfügbaren Features ist abhänig von der verbauten Heizung und der von Ihnen genutzten VicareApp. Wobei auch in der kostenlosen Variante bereits viele Datenpunkte zur Verfügung stehen und innerhalb von 24 Stunden zur Zeit 1.450 Abrufe erlaubt sind. Es können also pro Minute ein Abruf von Daten bei Viessmann durchgeführt werden.

Mit folgenden drei PHP-Dateien können Sie sich die Liste der verfügbaren Feature-Abrufe anzeigen lassen:

viessmann.php stellt das Ergebnis dar
viessmann_include.php wird von viessmann.php aufgerufen und importiert Klassenmodule (hier nur eines)
cls_viessmann.php enthält die Definition einer Klasse für den Viessmann-API-Zugriff

In der Datei cls_viessmann.php müssen Sie folgende Variablen anpassen:

Im Viessmann-Dashbord können Sie nach der Generierung eines Gerätes folgende benötigten Werte finden:
$client_id = GeräteID des generierten Gerätes
$user = Ihre Zugangsdaten zum Portal
$pwd = Password für denZugamg zum Portal

Auf der Seite https://developer.pingidentity.com/en/tools/pkce-code-generator.html können Sie die Werte für einen Code-Veryfier und den dazu passenden Challeng-Code generieren und damti die beiden Variablen
$code_verif
$code_challenge
befüllen.

(Durch Klick auf das Bild können Sie sich eine vergrößerte Version anzeigen lassen)



Der elegantere Weg

Zum Glück existieren für unser Vorhaben bereits OpenSource-Projekte, die auch als kostenlose Community-Version erhältlich sind. (Selbstverständlich wäre es schön, wenn die User der Community-Version auch eine kleine Unterstützung durch Spenden an die Projekte leisten würden.)

Das Projekt ioBroker stellt die notwendigen Resourcen zum Einsammeln der Daten zur Verfügung und das Grafana-Projekt stellt mit der selfhostet-OSS-Variante die kostenlosen Tools zur Anzeige der Grafiken zur Verfügung. Wobei auch im ioBroker-System mittel des VIS2-Plugins grafische Ansichten ohne Verwendung eines anderen Systems erzeugt werden können. Ich habe das Grafana-System gewählt, weil mir die Ergebnisse zusagten und praktisch ohne Einarbeitung gleich losgelegt werden kann. Zur Speicherung der angefallenen Messwerte habe ich mich für das Datenbanksystem InfluxDB entschieden -  es ist speziell für den Anwendungsfall Speicherung von Zeitreihen gedacht..

Es gibt für die drei Projekte von den Herausgebern selbst gepflegte Images für Docker-Container und somit können wir auf dem Rasperry Pi das bereits eingerichtete Traefik-System einfach mittels der angebotenen Container-Images erweitern.

Ergänzung der Dockerumgebung

Als erstes melden wir uns mittels SSH am Rasperry Pi an und begeben uns in das Verzeichnis /srv/web/.

Dann halten wir die laufenden Container durch die Eingabe docker compose down an.

Die Docker-Compose-Datei /srv/web/docker-compose.yml erweitern wir den Bereich service um die Angaben für folgende  Dienste:

  •  einen Webserver zur Anzeige der Daten
  • einen Datenbankserver für die InfluxDB
  • den Server für ioBroker und
  • den Server für Grafana

Ich habe die von mir verwendeten Angaben habe ich in der Datei Erweiterung_service_docker-compose.yaml zusammengefasst. Die darin verwendeten Variablen müssen wir unserer bereits vorhandenen Datei /srv/web/.env noch ergänzen. In der Datei Erweiterung.env habe ich die Ergänzungen aufgeführt.

Nun legen wir noch die für die Container-Daten benötigten Unterverzeichnisse an:

sudo mkdir -p /srv/web/{iobrokerdata,html/viessmann,grafana/{etc/grafana,data},influxdb/var}

Zugriff für User pi erlauben wir mittels:

sudo chmod pi:root /srv/web/ -R

touch 765 /srv/web/grafana -R


Erstellung der iobroker-Datenbank auf dem influxdb-Server

Als erstes müssen wir uns um die Erstellung der Datenbank kümmern. Hierzu muß der Influx-Datenbankcontainer gestartet werden und unter Verwendung der Influx-Kommandozeile die Datenbank angelegt werden.

Starten des Containers mit:
docker exec -it influxdb /bin/bash 

Nun können Sie im Container die Befehle zur Erzeugung der Datenbank eingeben:

Kommandozeilentool für die Influxdatenbank öffnen:
influx

Neue Datenbank anlegen:
create database iobroker

Damit steht uns eine leere Datenbank mit der Bezeichnung "iobroker" zur Verfügung. Sie können selbstverständlich auch einen andere Datenbankbezeichnung vergeben.


Einbindung auf einer Webseite als IFrame erlauben

Damit die Einbindung der Graifken auf einer Webseite funktioniert, müssen in der Ini-Datei von Grafana folgende Einträge enthalten sein:
[security]
allow_embedding = true
[auth.anonymus]
enabled = true
org_name = wie in Grafana eingetragen
org_role = Viewer

Ich habe diesen Block einfach an das Ende der Datei /srv/web/grafana/etc/grafana/grafana.ini gesetzt.

In der Verwaltungsoberfläche von Grafana können Sie hierzu einen Benutzer erstellen, der durch Zuordnung zur Benutzergruppe Viewers nur lesenden Zugriff auf das angezeigte Panel erhält.

Pflege der Daten

Nun können bei mir unter der Adresse https://iobroker.lang-dieter.de/ die Daten zur Erfassung der Messwerte eingerichtet werden.
Ich habe hierzu das Plugin Viessmannapi und Alias-Manager eingebunden. Die Anbindung der ViessmannAPI ist in den Konfigurationseinstellungen innerhalb des Plugins einfach durchzuführen.

 Unter der Adresse https://grafana.lang-dieter.de/ erreicht man die Verwaltungsoberfläche von Grafana. Sie müssen natürlich die Angabe lang-dieter.de durch Ihren Domainnamen ersetzen !

Im IoBroker können mittels dem Plugin Backitup sowohl die Einstellungen von IoBroker inklusive der angefallenen Daten als auch die Diagrammeinstellungen von Grafana gesichert werden.
Auch die Java-Scripte werden dabei gesichert. Ich habe zwei Javascripte erstellt, um Daten aus den letzten 8 Tagen der Solarerzeugung zu einer Wochensumme aufzuaddieren und die Anzeige der genutzen Heizungsmodi mit den dabei hinterlegten Temperaturen darstellen zu können.

Hier meine Backup-Dateien mit den Einstellungen. Die Zugangsdaten für die Viessmann-API  darin müssen Sie auf Ihre Verhältnisse nach Import aus dem Backup anpassen.

Die im Backup enthaltene Adminkennung für den ioBroker-Zugang lautet:
Login:  admin
Kennwort: Admin!123456

​Hardcopy meiner Auswertungsseite

Script um bestimmte Datensätze in einem Measurement zu löschen

Das Löschen einzelner Datensätze aus einem Measurement ist etwas umständlich zu formulieren. Ich habe im Netz folgendes Script delete-wrong-influxdb-measurements.sh gefunden.
Damit lässt sich das einigermaßen zügig im InfluxDB-Container erledigen. Ich habe es z. B. verwendete, um aus dem Measurement iob_Solar_Temperatur_Kollektor alle Messwerte mit einem Wert größer 90 Grad Celsius zu löschen. Der Grund war, dass ich versehentlich in der Tabelle auch die Messwerte für die Gesamtleistung der Solaraufbereitung gespeichert hatte.