Viessmann ohne API – Optolink Splitter (2)

Hat man erst einmal die ganze Infrastruktur zum Laufen gebracht, geht es ans Eingemachte.

Identifikation des Geräts

Es gibt einen einfachen und einen deutlich aufwändigeren Weg, die Identifikation vorzunehmen:

Der einfachere erfordert einen Account bei Viessmann – das ist aber derselbe, den du schon hast, wenn du das Vitoconnect Kästchen mit der ViCare App nutzt.

Der zweite Weg geht direkt über die Heizungsanlage: Hierzu hat Phil, der Entwickler des Optolink Splitters eine Anleitung zur Identifikation geschrieben, die für Laien nicht ganz einfach zu verstehen ist. Ich versuche einen alternativen Erklärungsansatz – eventuell hilft auch eine Kombination aus beidem. Bei meinen sonstigen Artikeln in diesem Blog versuche ich möglicht präzise Hinweise zu geben. Leider muß  ich bei dieser Art der  Geräte-Identifikation und, weiter unten, den Datenpunkten ziemlich vage bleiben. Das liegt auch daran, dass ich lediglich Nutzer einer Vitodens Therme von Viessmann bin, kein Heizungsbauer und auch kein Programmierer. Ich bitte um Nachsicht, wenn nicht alles sofort 100%ig klar wird. Zum Glück gibt es auch noch den Diskussionsbereich in Github, in dem Fragen in der Regel sehr freundlich und hilfsbereit beantwortet werden.

Easy: Identifikation – Abkürzung über API

Für alle diejenigen, die sich bisher mit der API in Verbindung mit oder ohne Node Red herumschlagen oder geschlagen haben, gibt es eine simple Abkürzung. Die Abfrage der Device ID gibt freundlicherweise auch den Gerätetyp im Klartext aus.

Die ganze Geschichte, wie man die Viessmann API mit Node-Red anspricht und nutzt habe ich hier beschrieben.

Hat man bisher nicht mit der API in Verbindung mit Node Red gearbeitet, ist dieser Weg aber vielleicht zu aufwendig, weshalb ich eine kleine Python Routine weiter unten zur Verfügung stelle. Da beschränkt sich der Aufwand auf die Anmeldung bei Viessmann – hat sowieso jeder, der die ViCare Appp nutzt – sowie die Online Erzeugung eines Access Tokens im Viessmann Developer Portal.  Dort findet man eine Kachel, mit der das Token erzeugt werden kann.

Erweiterung der bestehenden Node-Red App

Hat hast du für Node-Red ein gültiges Access Token – es muss als flow Variable oder Global Variable vorliegen – erfolgt der bekannte dreischrittige Prozess, in dem erst die Installation ID, dann die Gateway Serial und darauf aufbauend die Device ID abgefragt wird.

Im Grunde wird der Abschnitt, in dem die statischen Parameter erzeugt werden um zwei Nodes erweitert (Nodes mit blauen Punkten)

Der Output sieht dann z.B. so aus:

Der neue Funktionsnode sieht so aus:

Beschrieben ist das bei statische Parameter in der Viessmann API Anleitung Kapitel 2. Obiger Flow sucht nach dem Device Type "heating", hat man eine PV Anlage oder etwas derart, muss wahrscheinlich ein anderer Suchparameter angegeben werden.

Access Token from Scratch

Hast du dein Node-Red für die API nicht mehr oder noch nicht,  kannst du das Access Token ganz einfach über das Viessmann Dashboard bei developer.viessmann.com generieren – vorausgesetzt, du hast einen Developer Account generiert.

Dort gibt es eine Kachel "Generate Access Token". Hier den  Scope "IoT" auswählen. Das Access Token herauskopieren (Button) und in folgenden Flow (Inject Node) einsetzen:

Die Model ID steht dann im Debug Node.

Und hier das JSON File dazu

Und dasselbe in Python…

…für den Fall, dass du dich nicht mit Node-Red beschäftigen willst – eigentlich schade, aber die Geschmäcker sind verschieden.

Hast du dein Gerät identifiziert, geht es weiter bei Datenpunktliste

The hard way: Identifikation – zu Fuß

Das nachfolgende Kapitel hat eigentlich nur noch dokumentarischen Charakter.

Es sei denn, die oben beschriebene einfache Methode der Identifikation über die API funktioniert nicht. Dann musst du diesen hier beschriebenen, etwas beschwerlichen Weg gehen, um dein Gerät zu identifizieren.

Dazu brauchen wir den Wert von einer oder zwei Adressen in unserem Gerät:

Die Gerätekennung steht bei 0xF8. Die Kennung hat folgende Struktur:

Quelle: https://github.com/philippoo66/ViessData21/blob/master/README.md

Mit dem MQTT Explorer ist die Gerätekennung ganz einfach auszulesen:

Die Vitodens Topics im Screenshot sind die von meiner eigenen Anlage und sehen bei der Original settings_ini.py anders aus.

Hierzu das Topic Vitodens/cmnd  eintragen (es sei denn, ihr habt es in settings_ini.py geändert), Format raw auswählen, dann read;0xF8;8  und Publish anklicken. Das Ergebnis steht dann links unten.

Gegebenenfalls brauchen wir noch den Wert bei F0

Zusätzlich brauchen wir noch die Tabelle, anhand derer wir den Anlagentyp (hoffentlich) identifizieren: Die Tabelle steht hier: https://github.com/philippoo66/ViessData21/blob/master/DataPoints.txt

Beispiel 1

Im ersten Schritt benötigen wir die ersten 2 Byte der Kennung bei F8.Zum Beispiel: 204b01430000050c

Mit 204b schauen wir in der Datapoints Tabelle nach und haben Glück:

Gerätetyp 0x204B zeigt auf ein einzig möglliches Gerät (Zeilennummer 11). Mit der Angabe CU401B_G können wir jetzt die passende Datenpunktliste heranziehen – siehe weiter unten.

Leider ist die Identifikation nicht immer so einfach.

Beispiel 2

Phils Gerät hat die Kennung

20 CB 1F C9 00 00 01 14, an F0 steht: 01

Mit den ersten 2 Byte (20CB) gehen wir in die Datapoints Tabelle und finden eine Reihe verschiedene Geräte mit dieser Nummer (roter Rahmen).
Das nächste Byte (1F) können wir in der Regel ignorieren bzw. nehmen dafür den Wert 01 an. Das nächste Byte (Software Index Ident) ist C9.
Mit 01C9 schauen wir wieder in der Tabelle bei den gefundenen Geräten nach.

Uns interessiert die Spalte nach softwareIndexIdent: 01C9 liegt im Bereich zwischen 01C8 und 01FF. Damit haben wir die Auswahl (orangener Rahmen) weiter verkleinert.

Da nun wieder mehrere Geräte zur Auswahl stehen brauchen wir noch den Wert des Bytes an F0 (ecnsysDeviceIdentF0). Dort steht bei Phil "01". Eine Spalte weiter nach rechts schauen wir, wo 01 passt. Es passt zwischen 1 und 9 (Blauer Rahmen). Damit haben wir das Gerät identifiziert – es ist ein VScotHO1_200_01.

Identifikation des Geräts VScotHO1_200_01

Beispiel 3

hier klappt es nicht so gut: Meine Vitodens 200 Baujahr 2019 zum Beispiel hat die Kennung 20cb28cb0000010a. Mit 0x20CB schauen wir jetzt in datapoints.txt nach und entdecken wie gerade eben  ca. 15 Geräte dieses Typs.

Die 28 wird ignoriert bzw. als 01 gelesen. Zusammen mit dem nächsten Byte ergibt sich 01CB, das liegt wieder zwischen 01C8 und 01FF. Auch hier brauchen wir noch den Wert von F0. Dort steht bei mir "0b". Dummerweise passt das nirgendswo hin. Ende Gelände!

Hier hilft nur fragen. Ohne Hintergrundwissen ist diese Aufgabe nicht zu lösen. Es hat sich dann herausgestellt, dass es sich bei meinem Gerät um eine VScotHO1_200_11 handelt. Mit etwas Mut zum Risiko kann man auch eine der anderen halbwegs stimmigen GeräteIDs heranziehen. Die Datenpunktlisten innerhalb einer Familie unterscheiden sich zum Glück nur wenig.

Datenpunktliste

Jeder Gerätetyp hat seine eigene Datenpunktliste. Die Sammlung aller Datenpunktlisten findet ihr hier zum downloaden. (Auf der Seite rechts das Downloadsymbol anklicken.)

Wenn ihr das ZipFile aufmacht, findet ihr die zu eurem Gerät passende Datenpunktliste.

So eine Datenpunktliste hat locker über 700 Zeilen. Ganz oben stehen die Datenpunkte, die eher trivial sind – Außentemperatur, Kesseltemperatur etc.

Ein Wert, der in praktisch allen Gerätefamilien vorkommt ist die Außentemperatur:

- Aussentemperatur (5373) [TiefpassTemperaturwert_ATS~0x5525 (SInt)]

Der Wert, auf den es ankommt ist der hex Wert 0x5525 (SInt). Diesen könnten wir im Abschnitt Polling Datapoints der Datei settings_ini.py eintragen – tatsächlich gibt's den aber schon…

Das geschieht nach folgendem Schema:

Weitere Infos in Github.

Soweit, so gut. Jetzt beginnt das große Such- und Ratespiel. Die Datenpunkt Datei ist alles andere als übersichtlich. Zudem ist sie generisch aufgebaut. Das heißt, dein Gerät kann ja auf vielerlei Weise konfiguriert und gebaut werden. Mal hat es drei Heizkreise, mal einen, mal ist Solarthermie dabei, mal nicht und so weiter.

Diese Spezifikationen sind mit HIDDEN gekennzeichnet. Zum Beispiel so: HIDDEN:(00_WWS="7 M2 + M3" OR 00_WWS="8 M2 + M3 + WW" OR 00_WWS="3 M2" OR 00_WWS="4 M2 + WW")

Dieser spezielle HIDDEN Eintrag  zieht sich bei meiner Datapoint Datei durch die ganze Liste. Für Laien absolut unlösbar, wenn man nicht weiß, dass WWS für "Warmwasserschema" steht. Das Warmwasserschema steht an Adresse 0x7700 im Kapitel Inbetriebnahme. Je nachdem, welchen Wert das Byte an dieser Stelle hat, greift HIDDEN oder nicht. Bei mir steht an dieser Stelle eine "8". Das heißt, die Werte von Heizkreis A1 (und M1) kann ich ignorieren. Da soll mal einer draufkommen. Bei Wärmepumpen dürfte das noch komplexer werden. Ein Glossar wäre nett, damit man sich nicht immer im Wald verirrt…

Also: Nicht verzagen, Trial und Error. Parameter mit dem MQTT Explorer ausprobieren und schauen, ob etwas Vernünftiges dabei herauskommt. Hilfreich sind auch die Beispielwerte, in Phil's Original settings_ini.py. Ich habe da eine Menge draus gelernt.

Übrigens: Nach jeder Änderung an der Datenpunkt Liste in settings_ini.py muss der Splitter mit sudo service optolink-splitter restart neu gestartet werden, damit neue Datenpunkte gepollt werden.

Und noch etwas: Habt ihr einen Fehler in der Pollingliste – zum Beispiel ein Semikolon als Trenner anstatt eines Kommas, versagt der Splitter komplett seinen Dienst. Auch Vicare funktioniert dann nicht.

Nachfolgend noch Phil's Tabelle, die ich um meine eigenen Datenpunkte (für die Vitodens 200) angereichert habe.

Bei Schwierigkeiten im Diskussionsforum nachfragen.

Das Viessmann Forum zu durchforsten ist ebenfalls hilfreich.

Weitere Datenquellen

für Datenpunkte von verschiedene Gerätetypen gibt es noch ein paar. Basiswerte wie Temeraturen etc. scheinen bei allen Gerätefamilien gleich zu sein, ebenso bei den neueren OneBase (3E) Geräten.

  • Ggf. könnt ihr in der Viessmann Community den User FransOv auf englisch bitten, euch die Datenpunkte als Excel zu generieren. Diese Liste ist übersichtlicher und vollständiger. Der aktuelle Stand findet sich unter diesem Link.
  • "openv" ist generell ein interessantes Projekt. Unter anderem auch eine Tabelle, die Datenpunkte für eine Vielzahl von Gerätetypen enthält – auch Wärmepumpen. Zusätzlich eine Linksammlung zu einer großen Anzahl von Viessmann Projekten.
  • Achtung: Es gibt ein Viessmann Programm namens Vitosoft, in dessen SQL Datenbank und XML Tabellen die Werte drinstehen, die FransOv ins Excel überführt. Aber Vorsicht: Phil rät stark davon ab, dieses "Programmmonster" auf dem eigenen, produktiven PC zu installieren. Es handelt sich dabei um sehr alte SW Technologie (Windows 3.1) und es besteht die Gefahr, dass man sich seinen PC zerschießt.

Wie man die MQTT Daten in Node-Red verwurschtelt habe ich im nächsten Kapitel beschrieben.

 

Schreibe einen Kommentar

Ich freue mich über Lob und Kritik.
Falls du Probleme mit der hier vorgestellten Anleitung hast und nicht weiter kommst:
Bitte das Problem oder die Fehlermeldung(en) möglichst genau beschreiben, auch an welcher Stelle (z.B. in welchem Node oder Befehl) und unter welchen Umständen der Fehler auftritt.
Gerne kannst du mir auch ein Mail schreiben. Die Adresse findest du im Impressum.
Ich gebe mir viel Mühe, meinen Lesern weiterzuhelfen. Je konkreter du bist, desto einfacher und schneller kann ich versuchen zu helfen.
Deine E-Mail-Adresse wird nicht veröffentlicht.
Erforderliche Felder sind mit * markiert