Moin liebe Community!
Ich habe das ViessData überarbeitet und für euch hochgeladen, mit bestem Dank an alle Entwickler der Versionen 1.0, 2.0, die Ergründer der Protokolle usw etc!
Ausserdem ist die Identifikation der Geräte mit Optolink anhand der sysIdent Daten (mir) jetzt klar und die so ziemlich vollständigen Datenpunktlisten können für jedes Gerät erstellt werden. Für die Vitodens 300-W HO2B/C sind das z.B. mehr als 850 Datenpunkte - alles, was das Herz begehrt! 😃
Hierfür möchte ich ganz dicke und herzlich Herrn Markus 'sarnau' Fritze danken, der die Geschichte schon vor Jahren geklärt hatte und auf https://github.com/sarnau/InsideViessmannVitosoft veröffentlicht. Mit etwas Nacharbeit des Python Skripts und den entsprechenden Daten ist es mir jetzt auch gelungen, seine hervorragende Arbeit zu 'nutzen'. Dabei mitgeholfen haben Michael und Markus hier aus dem Forum (die wissen schon Bescheid), die mir (auch) die notwendigen sql und xml Daten zur Verfügung gestellt haben.
ViessData
die Version 2.1 ist eigentlich nur ein Zwischenschritt auf dem Weg zu ViessData 3.0, welches dann die flexible Nutzung der vollständigen geräte-individuellen Datenpunktsätze erlauben wird.
Äusserlich hat sich nur wenig geändert, und die Version ist was die csv und xml Dateien anbetrifft kompatibel zur 2.06. Die ganze Hard-Programmierung der Adressen und Wertekonvertierung etc habe ich auch erstmal so gelassen.
Aber ich habe ein wenig 'aufgeräumt':
- Werte schreiben funktioniert jetzt explizit per Enter Taste, es gibt eine Rückmeldung bezüglich der erfolgreichen Durchführung.
- Das ganze 'lese_alles_zweimal' ist Vergangenheit. Es wird alles gelesen a) am Anfang und b) wenn man den entsprechenden Knopf oben links drückt (dazu muss VD verbunden sein) - dann aber auch definitiv und unmittelbar (ist aber gegen das zyklische Lesen verriegelt und andersrum).
- Die Kommunikation / der COM Port wird geöffnet durch den Startknopf und beendet durch den Stopknopf (gleicher Knopf wie gehabt).
- In der Liste können Werte jetzt auch einzeln gelesen und neuerdings auch geschrieben werden. Hierbei ist Bedacht angesagt, man muss den zu schreibenden Raw Wert angeben, und es wird nicht geprüft, ob der Wert überhaupt geschrieben werden darf u.s.w. (wie gesagt, V2.1 ist nur eine Zwischenlösung).
- ViessData 2.1 funktioniert auch mit den alten Geräten mit KW Protokoll (ich meine, das ging in der 2.06 nicht). Datenpunkte müssen natürlich ggf angepasst werden und die hard-programmierten Sachen funktionieren ggf nicht, aber die Liste auf alle Fälle.
- csv Dateien werden bei Konfigurationsänderungen nicht mehr überschrieben, sondern die zu Ersetzende unbenannt. Aufgezeichnete Daten gehen so nicht mehr verloren.
- noch so Kleinigkeiten wie Behandlung der Dezimaltrennzeichenproblematik, Betriebssystem(un)abhängige Bildung der Datei-Pfade, ...
- sauberes, stabiles Beenden/Schliessen des Programms
- Durch die 'Entflechtung' der Kommunikation von der Oberflächenbehandlung sind Anpassungen und 'Tweaks' jetzt viel einfacher.
OptoLinkCommAsyncLib
Die wichtigste Neuerung ist aber wohl die komplett neu geschriebene gekapselte OptoLinkCommAsyncLib. Hier gibt es so schöne Methoden wie 'Read1ByteValue(adr)', 'Read2ByteValue(adr, singed, precision)', 'ReadData(adr, len)', und das auch zum Schreiben. Nebenbei noch nützliche Sachen wie 'Init300Protocol' usw.
Die Library ist wie gesagt gekapselt, d.h. man/frau kann sie nehmen und in die eigene Anwendung einbauen -> nix mehr mit Gedanken um Bits und Bytes und Timing etc machen, sondern einfach Werte lesen und schreiben! 😃 Damit kann man auch ohne grossen Aufwand Verbindung mit anderen Systemen - Hausautomatisierung, tado, ... realisieren. 😎
Sie ist in C# geschrieben, ich kann aber bestimmt auch ne dll draus machen, wenn jemand das lieber möchte.
- Sie kann das VS2/300 Protokoll und das VS1/KW Protokoll. Das Protokoll kann einfach umgeschaltet werden, ohne dass sich irgendwas an den Read/Write Methoden ändert.
- Sie ist stabil und unabhängig von COM Events, was auch den unkompliztierten Betrieb auf anderen Systemen zulässt.
- Sie ist asynchron, dh. die Kommunikation läuft in eigenen 'Tasks' und behindert nicht die Applikation.
- Es ist Queueing eingebaut, dh. es können neue R/W Requests erfogen, während noch welche abgearbeitet werden (was ja wegen async gut passieren kann), und alles wird ordentlich der Reihe nach ausgeführt. Dabei werden Pausen zwischen den Kommunikationszyklen eingehalten, damit die Heizungssteuerung nicht überlastet wird (die hat ja auch noch was andres zu tun, als nur zu kommunizieren).
Wegen dem Asynchronen musste ich die ViessData auf den .NET Framwork 4.5 portieren (vorher 2.0), was gewöhnlich auf jedem nur einigermassen zeitgemäßen Windoofs Rechner drauf ist, ansonsten kann es unkompliziert nachinstalliert werden. Damit ist es prinzpiell auch kompatibel zu mono, könnte also eigentlich auch auf einem Raspi laufen, was aber derweil noch an der xml Verarbeitung hakt - da müsste ich noch mal schauen...
Ausblick
- Die Optolink Komm-Bibliothek werde ich noch auf TCP/IP umschaltbar machen. Das ermöglicht dann die Kommunikation mit der Heizung im W/LAN, also lokal, ohne Internet/Cloud/Viessmann Server. 😁
Entweder mit dem Vitoconnect im Hotspot Mode oder mittels eines kleine Adapters, den man entweder fertig kaufen kann, oder in Form eines Kleinstrechners wie einem Raspi mit einem Python Skript oder so, der einfach den COM Port bidirektional mit einem TCPort verbindet. Dann kann man ViessData oder seine Applikationen auf jedem beliebigen Rechner im Haus-W/LAN benutzen und ist nicht auf das private Netzwerk des Vitoconnects angewiesen.
- Dann die ViessData 3.0. Hier werden die zum Gerät erzeugten Datenpunktlisten eingelesen werden. Es wird eine konfigurierbare Favoriteniste geben statt dem starr programmierten ersten Tab in 2.06. Alles, also Wertekonvertierung, Dropdownlisten, Limits, ... wird dynamisch aus der zugrundeliegenden DP Liste erstellt werden. Jeder beliebige DP wird tracebar, d.h. grafisch darstellbar. Und so weiter...
- Die ganze Geschichte werden wir dann versuchen auch für die E3 Plattform zu realisieren, also für die neuen Geräte ohne Optolink. Wenn uns das gelingt, kämen wir hoffentlich dem nahe, was ich in meinem Offenen Brief erbeten habe und wogegen Viessmann sich sträubt...
Download
https://github.com/philippoo66/ViessData21/wiki/ViessData-2.1
https://c.web.de/@334962020166146628/qUYhOYlLRAO_Wwfgbg3iLg
ich habe erstmal hochgeladen:
- die Viessdata 2.1 mit den notwendigen xmls aus 2.06, die vito_DP.xml habe ich noch minimal erweitert.
- die DP Listen für die
- "Vitodens 300 mit HO2B/C, ab 08/2016 mit Lüftungsbedienung / VScot HO2B (2016)" (VScotHO1_200_01),
- "Vitodens 200 mit HO1B ab 04/2016 / VScot HO1B (Vitodens 200 2016)" (VScotHO1_200_11) und
- "Vitocrossal 100, F0: 30 - 39 / Vitocrossal 100 mit VT200 GW7B" (VScotHO1_200_30).
- Die Liste der Kennungen der Heizgeräte mit Optolink.
Wer andere DP Listen braucht, oder das 'gefixte' Python Skript oder die Quelldaten oder die Info wie das genau funktioniert mit der Geräteidentifikation oder sonstwas, z.B. auch die Optolink Kommunikationsbibliothek oder irgendwelchen Quellcode, sage bitte Bescheid!
Bug Reports oder andre Rückmeldungen sind gern gesehen!
beste Grüsse!
Phil
Hallo Phil,
bis jetzt hatte ich den Windowsprogramm genutzt.
Ich muss erst einmal auf Raspi umstellen, damit ich länger aufzeichnen kann. Ich dachte einfach in ein Logfile zu schreiben, der Raspi wäre dann ja nicht bei mir am Netz (sondern Nachbargebäude).
Umrechnung UTC wäre nett. Schön wäre auch wenn man bei Unit eine Dekodierlogik hätte, also z.B. in <unit> 0=Aus#1=WW#2=WW+Heizung, wenn 1 kommt wird in der Ausgabe WW eingetragen.
Kennst du VitoIdent (siehe Link zuvor)? philh schrieb ja:
I used a small software called VitoIdent which talks to the Viessmann devide and tells you the system type it reports.
As an example, I extracted the following addresses for my device
Wäre ja ideal, wenn das Gerät selbst seine Adressen preisgäbe. Dies habe ich teilweise in Codierebene 1 schon gesehen, dort waren es aber wenig interessante Addressen. Codierebene 2 rühre ich erst einmal nicht an.
Moin Wolfgang,
VitoIdent ist glaubich voIdent.exe und das macht nix andres als Adr. 00F0 auszulesen und da draus den Gerätetyp abzuleiten und das (höchste) unterstützte Protokoll (macht ViessData auch mehr oder weniger als erstes nach dem Start). Dabei beherrscht es neben dem 300 und dem KW Protokoll (spricht Viessdata auch) auch noch das uralte GWG Protokoll.
Dass das Gerät selber seine Adressen preisgibt ware schön, aber das wird's bei Viessmann wohl nicht geben 😉 Sowas wäre auch hochgradig ungewöhnlich, nochmalerweise gibt es irgendwelche Dateien, die die Datenpunkte beschreiben (EDS oder sowas), aber auch das wird man von Viessmann nicht bekommen.
Bei open3e (die One Base Geräte) machen wir ja einen Scan, d.h. wir versuchen einfach jede mögliche Adresse zu lesen und schauen ob Antwort kommt und bilden dadraus dann selber eine 'Gerätebeschreibungsdatei'. Bei Optolink ist nichtmal das so einfach möglich, weil wir ja gesehen haben, dass sich hinter einundderselben Adresse unterschiedliche 'Sachen' verbergen, abhängig davon, mit welcher Länge sie ausgelesen werden.
Es gibt auch noch ganz spezielle Datenpunkte, z.B. (bei den Thermen) den 2500h, der mit einer Länge von 22 Bytes ausgelesen wird, und in dem sich diverse Informationen wie unterschiedliche Status Bits und die Raumsolltemperatur verbergen. Die Informationen / zugeh. Bytes können auch nicht einzeln ausgelesen werden, nur in Form des 22 Byte Rattenschwanzes.
Raspi:
Ich habe ja die Kommunikation in eine Bibliothek gekapselt, womit du ganz einfach realisieren könntest, bsw. eine Liste von Datenpunkten auszuselen und die in eine Datei zu speichern. Aber das ist ein Windows Lib und du müsstest mono installieren. Das ist keine grosse Tat, aber ich weiss nicht, ob du Bock auf den 'Overhead' hast.
Ich würde aber auch nicht vcontrold oder so benutzen, weil das auch ne Menge C Overhead hat und du für jeden Datenpunkt erstmal 'einen Befehl schreiben musst' (soweit ich das blicke). Ich finde das vcontrold viel zu umständlich und undurchsichtig.
Markus 'sarnau' Fritze hat aber ein Python Skript gemacht, mit dem man eine Liste Datenpunkte liest und sogar per MQTT postet. Das finde ich recht sauber gemacht und man könnte sich da rausziehen, was man haben möchte.
https://github.com/sarnau/InsideViessmannVitosoft/blob/main/Viessmann2MQTT.py
Ich werde das wahrscheinlich demnächst auch für meine Zwecke 'utilisieren'/anpassen...
Wie weit programmierst du selber?
>> Adressen ... Dies habe ich teilweise in Codierebene 1 schon gesehen,
Was meinst du damit? Stehen da wirklich echte Optolink Adressen oder Parameternummern?
ps. nochmal zur 'Erinnerung'...
Die Listen, die aus der Vitosoft SQL DB / xml stammen, sind übrigens nicht unbedingt vollständig. Bei meiner 'VScotHO1_200_01' tauchen die Wandlerwerte an 0800h ff nicht auf, aber sie existieren. Wenn ich die DPs mit denen aus einer KW3 kombiniere, sind die ADC DPs dabei. Aber es fehlen bsw. noch eine Menge Einstellungen an 0x77yz (Betriebsweise/Regelung der internen Umwälzpumpe, LON Parameter, Anlagentyp, Haustyp, allgem. Einstellungen, ...), wobei yz die Parameternummer aus der Serviceanleitung sind. Es scheint Sinn zu machen, anhand der Parameternummern im Serv.HB und der DP Adressen/Adressbereiche mal weiter zu schauen, wo man noch was findet.
Bei dir ist das wahrscheinlich nicht 0x77.. sondern was andres, aber das Prinzip könnte funktionieren.
Raspi:
Markus 'sarnau' Fritze hat aber ein Python Skript gemacht, mit dem man eine Liste Datenpunkte liest und sogar per MQTT postet. Das finde ich recht sauber gemacht und man könnte sich da rausziehen, was man haben möchte.
https://github.com/sarnau/InsideViessmannVitosoft/blob/main/Viessmann2MQTT.py
Ich werde das wahrscheinlich demnächst auch für meine Zwecke 'utilisieren'/anpassen...
Wie weit programmierst du selber?
>> Adressen ... Dies habe ich teilweise in Codierebene 1 schon gesehen,
Was meinst du damit? Stehen da wirklich echte Optolink Adressen oder Parameternummern?
Programmieren: ich habe einen Raspi der mit Python über USB einen Stromzähler per Optokopf ausliest, allerdings muss der nicht senden. Ich würde probieren, Teile des den Code davon auf einem anderen Raspi zur Abfrage der Wärmepumpe wiederzuverwenden, oder schaue bei sarnau rein.
Adressen: ja, in Codierebene 1 werden dir einige Adressen im Display angezeigt, z.B. "Neigung Heizkennlinie 3007: 3" bedeutet das die Neigung der Linie bei 0.3Grad pro Grad Aussentemperatur ist (der Faktor 0.1 wird im Display nicht angezeigt, auch nicht wieviele Bytes es sind).
Dank der Daten habe ich jetzt ein Problem meiner Heizung erkannt: obwohl die FBH mit rund 35 Grad bei negativen Aussentemperaturen vernünftig niedrig ist, und auch der Heizwasserspeicher nur bis etwa 35 Grad aufgeheizt wird, passiert die Aufheizung mit viel zu hohen Temperaturen, bis zu 55 Grad. Ich habe dann die Werte von Raumsoll (23Grad), Heizkennlinie (+3Grad, Steigung 0.3Grad) und Aussentemperatur (-4Grad) geprüft, das sah alles normal aus. Ich hätte also erwartet, dass 23+3-(-4)*0.3=27.2 Grad angestrebt werden. Die Heizung ist auch auf Normalbetrieb (nicht Festwert Speicher). Mir wäre viel lieber, die Wärmepumpe würde den Speicher mit vielleicht 40 Grad aufheizen, da wäre sie effizienter.
Hallo,
wenn @WolfT Datenpunkte vermisst.
Würde ich mit Vitosoft installieren.
Damit ein Abnahmeprotokoll erstellen.
Darin siehst du alle Werte die du aus der Regelung abfragen kannst.
im Vitosoft kann man eine Protokollierung aktivieren. dort sieh man auch die Adressen der DP
VG
da wir ja die Datenpunkte aus der Vitosoft haben, habe ich Zweifel, dass Vitosoft andre Datenpunkte 'finden' wird. Wenn, dann nur wenn sie ein aktuelleres Update der ecnEventType.xml erhält (da wäre ich dann sehr dran interessiert) oder gar ein Update der SQL Datenbank (das hätte ich dann auch gern)
@WolfT beim WW Speicher Heizen ist bei den Thermen ein delta von 20°C default. 35+20=55 Bei den aktuellen Wärmepumpen ist das delta wohl kleiner. Weisst du, wie das bei deiner eingestellt ist? (Ebene 2...)
Die Heizkennlinie ist nicht linear und Eingangswert ist nicht die aktuelle, sondern die gemischte Aussentemperatur (gemischt aus 70% gedämpft und 30% aktuell). Die genaue Beschreibung der HKL und auch ein Excel Tool wo du alles eingeben kannst gibt es hier:
Klasse, die WP wird mit W10W35 angegeben, und dann mit W10W55 betrieben obwohl die FBH 35° hat. Und dann wundern sich alle über die JAZ. Dann muss ich wohl an Codierebene 2 - hoffentlich findet man das dort.
Hast du den Wert von 00F8 für die Anlage? ich würde das gern mit der DP Liste vergleichen...
hast du das Protokoll erstellt? mit der ecnEventType.xml und der SQL DB die wir haben?
nein. vielleicht ist der 00f8 einer der Werte wo die Adresse nicht im PDF dabei steht.
das Pdf erstellt Vitosoft.
ich bin mir nicht sicher ob in der ecnEventType.xml das alles enthalten ist.
Mir ist der Editor beim öffnen der Datei immer hängen geblieben.
ich (und das sarnau Skript) bekommen die xml ja geöffnet. die Frage ist einfach nur, ob es eine neuere Version gibt...
seltsam ist ja, dass z.B. 1001, was ja lt. der Tabelle mit den ausgelesenen Werten von @WolfT ziemlich eindeutig die Aussentemperatur ist, in der xml, der SQL DB und auch in der csv von philverh (wahrscheinlich aus der xml 'gewonnen') mit "WPR_GueltSolltemp_HK2" beschrieben ist...
Hallo, bin zufällig über diesen Fred gestolpert, ist grad mein aktuelles Thema 😅
Hab eine Vitola 200 mit Vitotronic KW200 und einen selbstgebauten Optolink der über einen ESP8266 mit HomeAssistant kommuniziert.
Wert von 00F8 ist 100.702.240 da bin ich mir aber nicht sicher ob das stimmt. Ich lese 4 bytes der Adresse.
Funktioniert soweit zum Lesen wenn ich die richtigen Adressen hab, beim Schreiben werden die Daten nicht immer in der Heizung übernommen.
Was mir fehlt ist eine Liste der Adressen und Datenpunkte für die KW200 könnt ihr mir da etwas verlinken?
Ich kann auch gerne im Bereich Homeassistant, esphome und MQTT unterstützen.
Freu mich auf Rückmeldung und evtl. Zusammenarbeit.
VG ausm Schwarzwald
moin @1wire !
ich vermute deine 100.702.240 sind dezimal gemeint? rechnen wir das mal nach 8 bytes -> 06 00 98 20. das gibt es so nicht, aber 20 98 00 06 könnte Sinn ergeben, das wäre eine V200KW2_6 "Vitotronic 200 KW2 oder KW5 Witterungsgeführte, digitale Kessel- und Heizkreisregelung, für 1 Heizkreis ohne Mischer und 1 Heizkreis mit Mischer Vitotronic 200 KW2 oder KW5 Softwarestand 6 (mit Anbindung Anschlußerweiterung 0-10V über KM-Bus)"
unter
https://github.com/philippoo66/ViessData21/blob/master/DP_Listen_2.zip
findest du die ganzen zusammengetragenen Listen entsprechend dem py Skript von Markus Fritze. Such dir die von oben raus. und 'bedenke' auch das ReadMe:
Die Listen, die aus der Vitosoft SQL DB / xml stammen, sind übrigens nicht unbedingt vollständig. Bei meiner 'VScotHO1_200_01' tauchen die Wandlerwerte an 0800h ff nicht auf, aber sie existieren. Wenn ich die DPs mit denen aus einer KW3 kombiniere, sind die ADC DPs dabei. Aber es fehlen bsw. noch eine Menge Einstellungen an 0x77yz (Betriebsweise/Regelung der internen Umwälzpumpe, LON Parameter, Anlagentyp, Haustyp, allgem. Einstellungen, ...), wobei yz die Parameternummer aus der Serviceanleitung sind. Es scheint Sinn zu machen, anhand der Parameternummern im Serv.HB und der DP Adressen/Adressbereiche mal weiter zu schauen, wo man noch was findet.
Ich vermute, die ganzen Links auf https://github.com/openv/openv/wiki (rechts) kennst du. Da steht auch der InsideVitosoft drin und mein Kram. Sorry, der Link oben ist falsch, aber die Adresse ist richtig. Unter https://github.com/philippoo66/py-optolink ist ein Python Skript mit read/write DP auf dem 300 Protokoll, ich meine das kann deine Steuerung auch.
Falls du noch was brauchst, Enums oder so, sag Bescheid.
beste Grüsse aus dem grad etwas regnerischen aber sonst sehr schönen Rinteln an der Weser! (Schwarzwald ist natürlich noch mal ne andre Nummer... 😉 )
Phil
Prima, danke für die schnelle Antwort. Also ja die Bezeichnung stimmt, das ist meine Anlage.
So wie ich das verstehe sind meine DP in der Vitosoft in de SQL versteckt. Hab das installiert und versuche nun ein Abnahmeprotkoll zu erstellen, da sollen ja die DP drin sein.
brauch ich eine Optollink USB Verbindung?
Aktuell hab ich die Optolink an einem esp8266 der dann mittels esphome Firmware betreibe und https://deploy-preview-2737--esphome.netlify.app/components/optolink.html
@1wire oh, jetzt hast du mich falsch verstanden... Ich meinte nicht, das Vitosoft Monster zu installieren! (ja, dafür brauchst du einen Optolink mit USB oder zumindest einen, der als COM Port UART funktioniert - kannst du mit so einem Adapter machen, der originale Optolink Adapter hat einen CP2102 Chip drin (oder CP2104? egal, gleicher Treiber), der funktioniert dann auch am Vitoconnect).
In dem Abnahmeprotikoll stehen nur sehr begrenzt Adressen und auch nur eine eingeschränkte 'Auswahl' an Datenpunkten... Das mit dem insideVitosoft war nur als Informationsquelle gedacht.
Ich habe die Datenpunktinformationen schon rausgezogen, und die stehen in der DP_V200KW2_6.txt in dem oben verlinkten zip.
577 Zeilen (wobei da einiges doppelt ist...)
Grüsse!
Wow super. vielen Dank🍺
moin @1wire !
hast du schon mein neues Projekt gesehen?
https://github.com/philippoo66/optolink-splitter
Grüsse!
moin @nachbelichtet !
ich bin grad hier drüber gestolpert... wahrscheinlich hast du inzwischen was, aber trotzdem möchte ich es nicht versäumen, dich auf meine (inzwischen nicht mehr ganz so) neue allround Lösung hinweisen, den Optolink Splitter https://community.viessmann.de/t5/Konnektivitaet/Optolink-Switch-Splitter-Vitoconnect-MQTT-amp-TCP-I...
Der kann auch MQTT 😉
Grüsse!
Phil
Hallo, kann mir jemand die dp Adressen für eine Vitodens 300 nennen, um die manuelle Kalibrierung über den Optolink auszulösen? Dazu bräuchte ich die dp Adressen für die Codieradressen 11 und 85 unter Allgemein.
da die beiden Pumpeneinstellungen 86 und 87 (bei einer B3HB) die Adressen 7786h und 7787h haben, würde ich 85 unter 7785h vermuten. Wie heisst der eingentilich? Bei mir steht der nicht im Handbuch...
Viele der 'Allgemein' Parameter finden sich alle mit ihrer Nummer und vorangestellter 0x77 wieder, bis runter zum Anlagenschama 00 (7700h). Deswegen würde ich vermuten, dass sich auch der 11 unter 7711h befindet (siehe ein paar Beiträge zurück sogar extra in blau geschrieben)
Meine Aussagen beziehen sich auf die VScot Regelung (Vitotronic 200, B2/B3HB). Wenn du was völlig anderes hast, musst du mal genauere Infos geben.
ps. 'Zugriff auf die Parameter der Verbrennungsregelung' und Kalibrierung klingt nach einer 'sensiblen' Angelegenheit - bist du sicher, dass es weise ist, sowas aus der Ferne zu machen? wahrscheinlich nicht umsonst muss die Verbrennungsregelung extra freigegeben werden...
@vd fündig geworden?