Viessmann vcontrold: 4 Jahre falsche Adressen und zu viel Taktung
Beim Aufräumen meiner Grafana-Dashboards ist mir aufgefallen dass meine Viessmann Vitoladens 300-C viel zu oft taktet: 17-52 Brennerstarts pro Tag, durchschnittlich nur 9 Minuten pro Lauf. Das ist viel zu kurz für einen Öl-Brennwertkessel. Also bin ich tiefer eingestiegen und hab dabei einen massiven Bug in meiner vcontrold-Config gefunden. Seit 2022 las und schrieb ich Heizkreis 1 statt Heizkreis 2. Alle Kennlinien-Änderungen gingen ins Leere, alle geloggten Werte waren Phantomdaten.
Seit 2019 logge ich die Heizung über vcontrold, seitdem laufen die Daten in InfluxDB und ich kann im Grafana sehen was die Anlage macht. Hat immer funktioniert, dachte ich.
Wie ich den Bug fand
Ich hab am Heizungs-Display testweise die Kennlinien-Neigung von 1.4 auf 1.6 geändert. vcontrold las weiterhin 1.2. Das kann nicht sein, entweder liest vcontrold falsch oder das Display zeigt Müll. Also hab ich die vito.xml gecheckt: Alle Heizkreis-Commands verwendeten 2xxx-Adressen (Heizkreis 1). Meine Anlage hat aber nur Heizkreis 2 mit Mischer M2. Der läuft auf 3xxx-Adressen.
Meine Tests mit einer temporären Config bestätigten dass die HK2-Adressen exakt die Display-Werte liefern. HK1-Adressen zeigten frozen defaults. Seit 2022 hab ich Ghost-Daten geloggt.
Viessmann Optolink Adress-Schema
Heizkreise haben unterschiedliche Adressbereiche:
| Heizkreis | Adressbereich | Kennlinie | Betrieb | Timer |
|---|---|---|---|---|
| HK1 (ohne Mischer) | 2xxx | 27D3/27D4 | 2323 | 2000-2030 |
| HK2 (mit Mischer) | 3xxx | 37D3/37D4 | 3323 | 3000-3030 |
| HK3 (Mischer M3) | 4xxx | analog | analog | analog |
Globale Adressen (Kessel, Warmwasser, Solar, Brenner) bleiben bei 0xxx, 5xxx, 6xxx, 7xxx, 8xxx.
Die große Adress-Korrektur
Alle Heizkreis-Commands von HK1 auf HK2 umgezogen:
| Command | Alt (HK1) | Neu (HK2) |
|---|---|---|
| KennlinieNeigung | 27D3 | 37D3 |
| KennlinieNiveau | 27D4 | 37D4 |
| Betriebsart | 2323 | 3323 |
| RaumNorSoll | 2306 | 3306 |
| RaumRedSoll | 2307 | 3307 |
| VLSoll | 2544 | 3544 |
| Timer Mo-So | 2000-2030 | 3000-3030 |
Zusätzlich hab ich die OpenV Referenz-XML gecheckt und noch mehr kaputte Adressen gefunden:
| Sensor | Alt | Neu | Problem |
|---|---|---|---|
| Speicherladepumpe | 6513 | 0845 | Falsche Device-Gruppe |
| Zirkulationspumpe | 6515 | 0846 | Falsche Device-Gruppe |
| Brennerstatus | 55DE | 0842 | Zeigte nie AN |
| DrehzahlPumpeIntern | 7663 (CO) | 7663 (PC) | Unit-Korrektur |
Sensoren die konstant 20°C oder ? zurückgaben hab ich entfernt (WWAuslauf, RaumHK, Umschaltventil, BrennerStufe). Die Anlage hat diese Fühler nicht.
Das Taktungs-Problem
Mit den korrekten Adressen konnte ich jetzt echte Daten sehen. Analyse der letzten Monate:
| Außentemperatur | Ø Starts/Tag | Ø Laufzeit/Tag | Ø min/Start |
|---|---|---|---|
| -5° bis 0° | 52 | 9.9h | 11.5 min |
| 0° bis 5° | 45 | 7.7h | 10.2 min |
| 5° bis 10° | 34 | 5.1h | 9.1 min |
| 10° bis 15° | 17 | 2.5h | 9.2 min |
9 Minuten pro Start ist zu kurz. Ziel für Brennwertbetrieb: 20+ Minuten. Die Live-Logs zeigten dass in der Übergangszeit das Takten hauptsächlich von Warmwasser-Ladung kommt, nicht vom Heizkreis. Der Brenner heizt den Kessel (55L Inhalt) von ~48°C auf 65-70°C für WW, erreicht schnell die Abschalthysterese, schaltet ab. Dann startet der nächste Zyklus.
Codieradresse 9F: Der Game Changer
Recherche in Viessmann Community-Threads ergab: Codieradresse 9F steuert die Differenztemperatur zwischen Kessel und Heizkreis mit Mischer. Werkswert ist 8K, also heizt der Kessel 8°C über VL-Soll. Bei 9F=8 steht der Mischer nie ganz offen. Die Wärme bleibt im 55L-Kessel statt in die Heizkörper zu fließen.
Also hab ich 9F auf 0 gesetzt. Dadurch steht der Mischer beim Brennerstart ganz offen, voller Volumenstrom fließt durch die Heizkörper. Die gesamte Heizkörper- und Wandmasse dient als Wärmesenke und der Brenner läuft länger.
Erfahrungen aus dem Forum zeigten dass dadurch die Starts um 22% sinken (31->24/Tag) und die Laufzeit um 21% steigt (5.7->6.9 min).
Zugang Codierebene 2
Codierebene 2 am Vitotronic 200 Display:
- Menü + OK gleichzeitig ~2 Sek. -> Codierebene 1
- Nochmal Menü + OK gleichzeitig -> Codierebene 2 (Service)
- Mit Hoch/Runter Codieradresse wählen -> OK -> Wert ändern -> OK
Gruppen: 00=Schema, 02-33=Kessel, 55-75=WW, 7F-95=Allgemein, A0-FF=Heizkreis (9F sitzt hier).
Alle Änderungen vom 16. April 2026
| Einstellung | Vorher | Nachher | Effekt |
|---|---|---|---|
| 9F (Cod.2) | 8 | 0 | ~20% weniger Starts |
| Kennlinie Neigung | 1.4 | 1.0 | Niedrigere VL-Temp |
| vcontrold Adressen | HK1 (2xxx) | HK2 (3xxx) | Echte Werte |
| Flamme-Adresse | 55DE | 0842 | Brennerstatus sichtbar |
| Sampling | 3 min | 1 min | Takte besser erfassen |
Zusätzlich hab ich die Kennlinien-Neigung von 1.4 auf 1.0 gesenkt. Niedrigere Vorlauftemperaturen bedeuten weniger Öl und weniger aggressive Taktung.
Ausblick
Jetzt sammle ich 2-3 Tage Daten mit 9F=0 und Neigung 1.0. Wenn die Brennerstarts unter 25/Tag fallen und die Laufzeiten über 12 Minuten steigen, war's erfolgreich. Im Winter teste ich dann noch Codieradressen C5, C6 und 06 um VL und Kesseltemp weiter zu begrenzen.
Die große Lehre: Immer die Display-Werte mit den geloggten Werten abgleichen. Sonst optimierst du 4 Jahre lang Ghost-Daten.
