Vitotronic 200 (Viessmann Heizungssteuerung)
Eine angebundene Vitotronic 200 (Viessmann Heizungssteuerung) wird von FHEM über das Modul 89_VCONTROL.pm sowie das Modul 89_VCONTROL300.pm unterstützt. Beide Module senden direkt an die Viessmann-Anlage. Es gibt ein drittes Modul 89_VCLIENT.pm (hier der Forenthread), 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. 89_VCONTROL.pm und 89_VCONTROL300.pm benötigen den Daemon nicht.
Einleitung
VCONTROL und VCONTROL300 | |
---|---|
Zweck / Funktion | |
Anbindung einer Viessmann Heizung | |
Allgemein | |
Typ | Gerätemodul |
Details | |
Dokumentation | und VCONTROL300 EN / und VCONTROL300 DE Thema |
Support (Forum) | Heizungssteuerung/Raumklima |
Modulname | 89_VCONTROL.pm |
Ersteller | adamwit (Forum /Wiki) |
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref! |
Mit Hilfe verschiedener Zusatzgeräte ist es möglich, bei einer Viessmann-Heizung die Temperaturen, Timern, 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 Diode 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 (Originalbauteil Nr. 7856059, relativ teuer: um 100 €[1] bzw. ca. 60 €[2])
- selbstgebaute Geräte (zum Teil kommerziell angeboten, Eigenbau ist sehr preiswert - erfordert aber Lötmaterialien)
Der Eigenbau wird auf der eigens dazu errichteten Webseite openv 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 Konfigurationsdatei in FHEM angegeben werden.
Software: Einbindung in FHEM
Es existieren momentan (2017) zwei verschiedene Module, die beide eine Einbindung der Heizung in FHEM sicherstellen: 89_VCONTROL.pm sowie 89_VCONTROL300.pm. Das zweite Modul scheint eine schnellere Kommunikation zu ermöglichen und wird derzeit (Herbst 2017) aktiv weiterentwickelt. Die Definition des Gerätes erfolgt typischerweise wie folgt.
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).
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.
Konfiguration
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 http://openv.wikispaces.com/, 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 , -
Einige User haben bereits Ihre Heizungen mit der Hilfe diese Moduls angebunden:
- V200KW1.cfg
- VPlusHO1.cfg
- VScotHO1.cfg
- V200WO1B.cfg
- V300KW3_V0002.cfg
- Vitotronic 100 HO1A
- besonders umfangreiche Materialien befinden sich in diesem Thread
Links
- Forenthema zur Weiterentwicklung des Moduls
- neueste Version: hier
- Forenthema/-umfrage Optolink Adapterplatine
- Heizkennlinie erläutert