Vitotronic 200 (Viessmann Heizungssteuerung)

Aus FHEMWiki
Zur Navigation springen Zur Suche springen
Todo: Ich bin gerade dabei, die Informationen von dieser Seite zu konsolidieren und modulspezifische Information auf die entsprechenden Modulseiten (VCONTROL, VCONTROL300, VCLIENT) zu verschieben. Das werde ich in den nächsten Tagen machen, bitte also vorerst keine Änderungen an dieser Seite durch andere Benutzer; bei dringendem Kommentarbedürfnis bitte auf die Diskussionsseite dieser Seite ausweichen).
Danke, --Peter (Diskussion) 12:03, 3. Dez. 2019 (CET)


X mark.svg Die Verwendung von VCONTROL oder VCLIENT zur direkten Ansteuerung eines Heizungssystems kann dieses bei unsachgemäßer Anwendung beschädigen. Für unmittelbare oder mittelbare Folgen, die sich aus dem Nachbau des Interfaces oder der Verwendung der hier zur Verfügung gestellten Information ergeben, übernehmen die Autoren keine Haftung.

Vitotronic 200

Das Viessmann Regelungssystem / Regelungsprogramm Vitotronic 200 (witterungsgeführte Einkesselregelung) wird von FHEM über die folgenden Module unterstützt:

Die VCONTROL-Module senden direkt an die Viessmann-Anlage, Modul VCLIENT (hier das Forenthema), das auf dem Daemon vcontrold (siehe diesen Link) aufbaut und mit dem sich, wenn vcontrold läuft, ebenfalls die Anlage auslesen und steuern lässt. VCONTROL und VCONTROL300 benötigen den Daemon nicht.

Das Modul vitoconnect geht über das Viessmann-API, setzt also voraus, dass die Heizungssteuerung mit dem Viessmann Server kommuniziert, zusätzliche Hardware ist dafür nicht erforderlich.

Mit Hilfe verschiedener Zusatzgeräte ist es möglich, bei einer Viessmann-Heizung die Temperaturen, Timer, Verbrauch usw. auszulesen und verschiedene Heizungszustände (Heizen, Warm Wasser, Spar Modus, Party Modus) zu steuern.

Hardware

Bevor die Heizung an FHEM angebunden werden kann, muss eine entsprechende Hardware vorliegen. Die Vitotronic weist zwei LEDs sowie ein eingefrästes Viessmann-V auf, das Bestandteil der Steuerung ist. Eine der beiden Dioden dient der Steuerung als Empfangsgerät, während die andere Diode Signale sendet. Durch das eingefräste V kann ein entsprechend konstruiertes Gerät passgenau an die Heizung angeschlossen werden. Derzeit sind folgende Geräte bekannt, die mit der Vitotronic kommunzieren können:

  • Optolink-Kabel (Viessmann Originalbauteil Nr. 7856059, relativ teuer: Listenpreis ca. 100€, bei einigen Händlern ab ca. 70€ erhältlich)
  • selbstgebaute Geräte (zum Teil kommerziell angeboten, Eigenbau ist sehr preiswert - erfordert aber Lötmaterialien)
Der Eigenbau wird auf der eigens dazu eingerichteten Webseite openv[1] genauer beschrieben.
Man muss sich beim Eigenbau insbesondere mit der Frage befassen, über welche Schnittstelle die Hardware dann mit FHEM kommuniziert. Derzeit sind folgende Schnittstellen realisiert, deren Einbindung nach Aussage verschiedener Forenteilnehmer auch geglückt ist:
  • USB
  • seriell (Anschluss an RPi, dort RxTx)
  • WLAN
  • LAN
Die serielle Schnittstelle kann mit Hilfe des Programms ser2net auch auf eine LAN-Schnittstelle gemappt werden. Derzeit (Herbst 2017) entwickelt der Forumsteilnehmer PeMue ein allgemeines Modul, das sowohl per WLAN, USB als auch seriell an die Heizung angeschlossen werden kann: Optolink Adapterplatine.

Bevor die Software angeschlossen wird, sollte man sich Informationen bezüglich der verwendeten Heizung sowie der entsprechenden Steuerung besorgen. Diese Angaben müssen bei der Definition des Gerätes sowie in der Konfiguration in FHEM angegeben werden.

Einbindung in FHEM

VCONTROL*

VCONTROL und VCONTROL300 basieren auf dem gleichen Ansatz und benutzen eine Textdatei (*.cfg) zur Anpassung an die Details der verwendeten Heizungssteuerung. Details zu beiden Modulen finden sich auf der jeweiligen Beschreibungsseite. Da VCONTROL ursprüngliche Modul ist, sollte dessen Beschreibung als allgemeine Basis der Dokumentation angesehen, spezifische Unterschiede dann jeweils in der Beschreibung von VCONTROL300 erwähnt werden.

VCLIENT

Das Modul VCLIENT setzt einen laufenden vcontrold-Daemon voraus, der die Kommunikation mit Viessmann übernimmt (siehe dazu dieses Forenthema).

Alle weiteren Details sind der Beschreibungsseite des Moduls zu entnehmen.

Noch zu bearbeitender Bereich

Die Definition des Gerätes erfolgt bei den beiden ersten Modulen typischerweise wie folgt.

Info green.png Weiterentwicklung

In diesem Forenthread wird über Korrekturen und Bereinigungen im Modul berichtet.

defmod <name> VCONTROL300 <IP-Adresse>:3002 /opt/fhem/FHEM/VScotHO1_300.cfg 300 kw

In dem hier vorliegenden Fall wird das Modul 89_VCONTROL300.pm verwendet. Dieses kommuniziert mit einer LAN-Schnittstelle auf Port 3002 an der angegebenen IP-Adresse mit der Hardware. Im Fall eines USB-Anschluss muss der entsprechende Pfad auf die USB-Schnittstelle angegeben werden. Es wird alle 300 Sekunden abgefragt, das verwendete Protokoll lautet kw (eine andere Option besteht darin, das neuere Protokoll 300 zu verwenden).

Konfiguration VCONTROL und VCONTROL300

Zur Konfiguration wird die Datei /opt/fhem/FHEM/VScotHO1_300.cfg verwendet. Details zu dieser Datei und ihrer Funktion werden im nächsten Abschnitt erläutert.

Um die Heizung mit FHEM zu verbinden, müssen die Daten zwischen der Heizungssteuerung und dem Perl-Server ausgetauscht werden. Die Werte in der Heizungssteuerung werden an speziellen Speicheradressen (die durch vierstellige Hexadezimalzahlen beschrieben werden) gesichert, im Viessmann-device befinden sich die entsprechenden Werte dagegen in Readings. Beide Werte müssen nun eindeutig einander zugeordnet werden. Diese Zuordnung gelingt durch die im define genannte Konfigurationsdatei *.cfg, die sowohl die Speicheradressen als auch die Readingsnamen enthält. Die Datei ist zeilenweise aufgebaut (je Zeile eine Zuordnung). Dabei wird noch zwischen Lesezugriff und Schreibzugriff unterschieden, da möglicherweise verschiedene Speicheradressen involviert sind.

Informationen zu den Speicheradressen findet man ebenfalls im Forum https://github.com/openv/openv/issues, in diesem Forum sind die Adressen teilweise als XML-Datei hinterlegt und müssen entsprechend übertragen werden. In der im Forum geposteten Datei Viessmann-Software-Config.zip sind XML Dateien der original Viessmann-Software enthalten. Diese können nützlich sein, um Adressen für den eigenen Heizungstyp zu finden.

Daten lesen

Die Konfiguration geschieht mit Hilfe einer cfg-Datei, die von FHEM eingelesen wird. Die Einträge in dieser Datei sind von folgendem Format (wir beschränken uns hier auf das Modul VCONTROL300, für das Modul VCONTROL sind die Einträge analog aufgebaut - dort ist allerdings ein etwas erweitertes Adressformat zu verwenden):

POLL, <adresse>, <parse-methode>, <divisor>, <reading>, <kumulationsmethode>

Dies ist wie folgt zu verstehen. POLL zeigt an, dass Daten geholt werden. <adresse> ist die interne Viessmann-Adresse, die die zu holende Variable beherbergt. Dies ist typischerweise eine Hexadezimalzahl mit vier Stellen; beispielsweise findet man unter der Adresse 00F8 die Gerätekennung. Zum Teil können diese Adressen aus Dokumentation bezogen werden, ein Teil der Adressen ist auf der Webseite von openv dokumentiert. Nicht alle Adressen sind dabei korrekt, hier muss viel probiert werden.

<divisor> beschreibt, ob die Größe durch eben diesen Divisor dividiert werden soll (Temperaturangaben sind etwa in Zehntelgrad), <reading> nennt den Namen des FHEM-Readings. <kumulationsmethode> kennt die Einträge - (nicht kumulieren) und "day" (über den Tag hinweg addieren). Im letzten Fall werden dann jeweils nach Mitternacht die Werte des letzten Tages ebenfalls als Readings in das Device eingetragen; bei den Readingnamen wird dann jeweils DayStart,Today und LastDay angehangen. Diese Bezeichnungen können mit Readings des Devices angepasst werden.

<parse-methode> hat die folgenden Auswahlmöglichkeiten

  • "1ByteS": Größe 1 Byte mit Vorzeichen,
  • "2ByteS": Größe 2 Byte mit Vorzeichen
  • "2ByteU": Größe 2 Byte ohne Vorzeichen
  • "2ByteU_1stByte": Größe 2 Byte ohne Vorzeichen, 1.tes Byte (allerdings im Thread nicht angegeben)
  • "2ByteU_2ndByte": Größe 2 Byte ohne Vorzeichen, 1.tes Byte
  • "1ByteH": Größe 1 Byte, vermutlich (im Thread nicht angegeben) hexadezimalkodiert
  • "2ByteH": Größe 2 Byte, vermutlich (im Thread nicht angegeben) hexadezimalkodiert
  • "2BytePercent": nicht implementiert
  • "4Byte": Größe 4 Byte
  • "mode": einer der beiden Werte on, off
  • "date": 8 Byte Datumswert (Beispiel: Do,28.09.2017 17:01:12)
  • "timer": 8 Byte Timer Wert

Alle Größen, die mit timer kodiert sind, müssen mit einem expliziten Get-Befehl geholt werden und werden nicht automatisch gepollt. Ein User berichtet, dass diese Timerzeiten nur geholt werden konnten, nachdem das automatische Ausfüllen ("Mo-Fr automatic") in der Steuerung ausgeschaltet und jedem Tag ein individueller Wert zugewiesen wurde.

Ein Beispiel soll einen Eintrag in der cfg-Datei beschreiben:

POLL, 2306, 1ByteU, 1, Temperatur_Haus  , -

Die Viessmann-Steuerung enthält an der Speicheradresse 0x2306 den Wert für die Solltemperatur des Hauptheizkreises (oft als M1 bezeichnet). Dieser Wert hat die Größe eines unsignierten Bytes (deshalb 1ByteU). Der Wert soll in FHEM im Reading Temperatur_Haus gespeichert werden. Es soll nur der aktuelle Wert gespeichert werden, die Werte werden über den Tag hinweg nicht addiert/kumuliert (deshalb der Strich am Ende).

Daten schreiben

Will man Daten senden, so ist folgendes Kommando zu verwenden

SET, <adresse>, <adresstyp>, <multiplikator>, <setname>, <nextset oder day>

Dies ist wie folgt zu verstehen. SET zeigt an, dass Daten gesendet werden. <adresse> ist die interne Viessmann-Adresse (oft, aber nicht immer, sind die Adressen der SET-Kommandos read/write; hier muss man in den Dokumentationen nachschauen). Wieder ist dies eine Hexadezimalzahl mit vier Stellen. Adresstyp entspricht der <parse-methode> oben und gibt an, ob es sich um eine 2Byte-, eine 1Byte- oder was auch immer -Adresse handelt. Als <multiplikator> wird oft 1 verwendet; setzt man hier eine Zahl ein, so wird der zu sendende Wert mit eben diesem Multiplikator multipliziert. Beim Kennwort "mode" und "state" für <multiplikator> können auch Zustände gesendet werden (unklar, wie genau). <setname> ist der Name, mit dem in FHEMWEB auf den Wert zugegriffen wird.

Dazu ein Beispiel. Im Reading "Temperatur_Haus" wird die Soll-Temperatur des Hauses gespeichert, die dazugehörige Kodierung sei 2306. Der entsprechende POLL-Eintrag in der *.cfg würde dann lauten

POLL, 2306, 1ByteU, 1, Temperatur_Haus  , -

(sowohl die Adresse als auch die Übergabeform der Daten, hier 1ByteU, muss natürlich korrekt sein). Nun soll innerhalb von FHEM durch ein Befehl der Form

set <Viessmanndevice> Temperatur_Haus 25   

versucht werden, die Temperatur auf 25 Grad einzustellen. Damit dies möglich ist, muss in der *.cfg folgende Zeile stehen (auch hier gilt: die Adresse muss korrekt sein und es muss möglich sein, in die Steuerung zu schreiben)

SET, 2306, 1ByteU, 1, Temperatur_Haus, <nextset oder day>

Nextset bedeutet, dass nach diesem SET-Befehl unmittelbar ein weiterer Setbefehl ausgelöst wird (und zwar genau der, der an dieser Stelle zu finden ist). Day wird nur dann verwendet, wenn der Adresstyp "time" war. In diesem Fall gibt day an, um welchen Wochentag, der einzustellen ist, es sich handelt. Hier sind nur Einträge der Form MO, DI bis SO möglich. Beispielsweise bedeutet

SET,  2028  ,  timer,      1, TIMER_Haus_SA         , SA

dass das Reading TIMER_Haus_SA die Zeiten für die Heizung Samstags enthält, es sich um den Adresstyp timer handelt, die Daten in der Adresse 2028 kodiert sind und die von FHEM gesendeten Daten für Samstag festgeschrieben werden. Der FHEM-Befehl sähe dann so aus

set Heizung TIMER_Haus_SA 08:00,23:00,--,--,--,--,--,--,

Auslesen kann man die Daten dann mit

POLL, 2028, timer,  1     , TIMER_Haus_SA            , -

Etwas umständlicher wird es, wenn eine Auswahlmöglichkeit mit vordefinierten Werten angegeben werden soll. Der Betriebszustand einer Vitotronic 100 HO1A beispielsweise kann nur die Werte 0 (nur_Warmwasser), 3 (Normalbetrieb) und 5 (Frostschutz) annehmen. Die entsprechende Adresse sei 3301. Ziel ist eine Dropdown-Liste in FHEM. Dies muss dann wie folgt in der cfg beschrieben werden

SET,  3301,   mode, Betriebsart_Fussb , -  
SET,  330100, 1ByteU, 1, nur_Warmwasser , -
SET,  330103, 1ByteU, 1, Normalbetrieb ,  -
SET,  330105, 1ByteU, 1, Frostschutz , - 

Ende von Noch zu bearbeitender Bereich

Links

Quellen