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
Moin!
inzwischen hab ich die Version 2.1.0.5 hochgeladen...
zip003 --------------------------------
V2.1.0.5
- Verriegelung gegen single read bei Bulk beseitigt
zip002 --------------------------------
V2.1.0.4
- Anchor von lblHint fixed
zip001 --------------------------------
V2.1.0.3 09.01.2023
Version hochgeladen
- Schreiben jetzt auch mit neuer Lib
- ...
- ....
V2.1.0.2
- COptoLinkComm geschaffen
- asynchrones Lesen in App eingebaut etc
V2.1.0.1
- portiert auf .NET Framework 4.5 wegen async Task
V2.1.0.0 21.10.2022
- erstmal nur Kosmetisches
- Pfade etc. betriebssystemunabhängig
- DecimalSeparator Bug bei ZZahl und Brennwert beseitigt
wobei wohl kaum Interesse an der Optolink Geschichte zu bestehen scheint. 🤔
ABER ich kann euch sagen - auch mit der E3 Geschichte deutet sich eine interessante Entwicklung an... 😊
beste Grüsse!
Phil
An der E3-Geschichte wäre ich schon interessiert (300-W B3HG Betreiber) 😉. Da es da ja kein Optolink mehr gibt: würde das dann nicht einen Eingriff in die Hardware notwendig machen?
Hi Phil,
wäre eine MQTT-Integration denk- (und machbar) 🙂 ?
Damit wäre die Anbindung von Home Assistant, OpenHAB etc. natürlich supereinfach.
Vielen Dank für deine tolle Arbeit!
Markus
Moin Markus!
Danke für die Rückmeldung erstmal! Ich kenne MQTT bisher nicht und hab nur mal kurz reingeguckt. Wenn ich das richtig verstanden hab, würden dazu in der einen Richtung 'Status'-Daten (wahrscheinlich am enfachsten auf zyklischer Basis?) an den Broker gesendet? - liesse sich natürlich machen.
Wie geht das in die andere Richtung ('Steuerungsdaten')? Wohl einen/mehrere Topic/s abonnieren - d.h. auf einem Port 'lauschen'?
Bist du im Thema MQTT? Vielleicht macht es dann den meisten Sinn, das zusammen zu machen.
- Kannst du abschätzen, wie groß der 'Nutzen' wäre? Wieviele Leute würden das benutzen?
- Und kannst du abschätzen, wie groß der Aufwand wäre? Also zyklisch n bischen was aus der Therme auslesen und wegschicken is ja nahe null Aufwand, genauso wie zu Lauchen und an die Therme weiterreichen.
- wie groß ist der Overhead für das Topics Anmelden und so?
- wer entscheidet das Message Format (wie ich verstanden hab gibt's unterschiedliche)?
- was wäre noch zu tun?
beste Grüsse!
Phil
Moin @Dreman
>> E3 - würde das dann nicht einen Eingriff in die Hardware notwendig machen?
Unser erster Attempt ist den Access Point Modus der WLAN Karte zu benutzen. Mal gucken, ob das klappt / möglich ist. Aber wie gesagt, wir sind gerade in den Vorbereitungen, mit dem Projekt anzufangen... Mit dem OptoLink Kram kann man bei der Plattform wohl nix mehr anfangen, das ist da alles ganz neu gemacht.
Grüsse!
Ich habe eine recht große Home Assistant Installation und auch einige selbst gebaute Sensoren/Aktoren (z. B. https://nachbelichtet.com/diy-bewaesserungssteuerung-mit-home-assistant-und-esphome) im Einsatz. MQTT ist hier schon sehr verbreitet und wird auch von Herstellern von Wallboxen, Wetterstation etc. genutzt. Für Philips Hue gibt es eine alternative Bridge auf MQTT-Basis (ZigBee2MQTT), die sehr beliebt ist. Die Einbindung ist in praktisch allen Smarthome-Plattformen sehr einfach. Ein Broker ist meist schon an Bord und lauscht standardmäßig auf dem Port 1883. Sobald ein neues Gerät Messages published (entschuldigt das Denglisch, aber es heißt halt so), stehen die Topics in der Smarthome-Software zu Weiterverarbeitung zur Verfügung
Man kann per MQTT sowohl auslesen als auch steuern. Üblicherweise sendet man ein Topic bei einer Änderung des Wertes (z. B. Vorlauftemperatur HK1). Man muss also nicht unbedingt zyklisch publishen. Auf eine Steuerungs-Message müsste dann eben der entsprechende Trigger erfolgen, z. B. HK1 ausschalten.
Da die Broker ohnehin im internen Netz laufen, kann man auf eine Verschlüsselung verzichten und es genügt ein User/PW, das man am Broker vorgibt.
Das Message-Format dürfte rel. einfach zu definieren sein, da man eigentlich nur Topic und Payload hat. QoS kann man für alle Messages mit 0 senden und Retain mit TRUE.
Die Messages könnten so aussehen (sensor für Lesen, switch für schreiben/steuern). Mit dem "device" könnte man dann sogar mehrere Anlagen ansprechen. Den Device-Namen, auf den diese Instanz reagieren soll, müsste man im MQTT-Setup in der jeweiligen Viessdata Installation hinterlegen.
viessdata/device1/sensor/supplytemp1 (Payload: 24) -> Vorlauf HK1 24 °C
viessdata/device1/sensor/supplytemp2 (Payload: 45) -> Vorlauf HK2 45°C
viessdata/device1/switch/status1 (Payload: off) (den Heizkreis 1 ausschalten)
viessdata/device1/sensor/heater/modulation (25)
viessdata/device1/sensor/heater/status (off)
usw. usw. Im Prinzip müsste man nur den Topics sinnvolle Bezeichnungen geben. Das ist eine ziemlich gute Seite mit den Grundlagen: https://www.hivemq.com/tags/mqtt-essentials/
Der Vorteil an der Lösung wäre, dass man es auf einem Raspi etc. laufen lassen könnte (du hattest ja Mono schon angesprochen) und man sofort, ohne spezielle Integration im jeweiligen Smarthome System, damit arbeiten und sogar mehrere Anlagen steuern könnte.
Ich helfe gerne dabei, allerdings habe ich nur rudimentäre C# / .NET Kenntnisse und bin nur noch hobbymäßig im Python, PHP, C und JS-Bereich angesiedelt und entwickle gerne Hardware/Elektronik. Ich kann aber gerne mit planen, testen, dokumentieren und Feedback geben. Raspis und entsprechende Kenntnisse sind vorhanden.
Markus
@nachbelichtet hast du schon mal das probiert? man muss ja das Rad nicht neu machen, wenn es schon rollt...
https://github.com/cruwaller/viessmann_optolink2mqtt
neue Version - Viessdata V2.1.0.6 hochgeladen. Ausserdem fürchterlich viele Datenpunktlisten.
V2.1.0.6
- einstellbare Grenzen für RaumTemp Sollwerte geändert zu 3..37 [°C]
- in den tb_leave/_KeyUp procs .Parse durch if(!.TryParse ...) return; ersetzt
- PollInterval (eigentlich Delay) auch manuell eingebbar per Enter (jetzt bis runter auf 1 Sek. möglich)
- sysIdent lesen und Geräte-Info in Titelleiste, Btn Info added; erfordert Devices.csv
- COptoLinkCommAsync zu IDisposable gemacht
- ein wenig weiter aufgeräumt
viel Spass & Grüsse!
Phil
warum sagt denn keiner was?! z.B. dass das Programm wegen des fehlenden Icon Files nicht richtig startete... 🤐 naja, das ist jetzt auch dabei, und es gibt auch eine Version 2.2, wo die hart-programmierte Wertekonvertierung fast komplett raus ist. Damit kann das vito_DP.xml flexibler angepasst werden (DP Listen...), und signed Werte werden auch als solche dargestellt. Mehr dazu auf GitHub. Aber der Optolink Kram interessiert ja eh kaum noch wen...
Glücklicherweise hat es für das 'E3 Projekt' Leute, wo ich nur den Hut ziehen kann!! Nur Viessmanns Lieferzeiten bedingen, dass das Spielzeug noch teilweise auf sich warten lässt... 😉
beste Grüsse!
Phil
Hallo @nachbelichtet ,
für die Integration meiner Viessmann-Therme in Home-Assistant verwende ich ESPHome. Damit kann sich ein an der Optolink angeschlossener ESP als Vermittler zwischen die Therme und Home Assistant "klemmen" (über WLAN).
Da die Kommunikation zwischen dem ESP (bzw. ESPHome) und Home Assistant über eine eigene API abläuft, habe ich das Thema MQTT erst mal links liegen lassen. Prinzipiell unterstützt ESPHome aber auch MQTT. Doku zu ESPHome unter https://esphome.io/index.html.
Die Optolink-Komponente ist aktuell noch nicht Teil des offizielen ESPHome Releases, aber als sogenannter Pull Request bereits testbar.
Doku zur Optolink-Komponente für ESP-Home findest Du unter https://github.com/openv/openv/wiki/ESPHome-Optolink und https://deploy-preview-2737--esphome.netlify.app/components/optolink.html.
Hallo Phil,
klasse Arbeit.👍 Ich habe vor längerem diese Version genutzt https://github.com/openv/openv/wiki/Viess-Data, da die V2.06 meine Heizung nicht erkannte. Werde nun deine Version probieren. Ich nutze das PGM primär um eigentlich nur den Heizungsverlauf zu beobachten.
Gruß
Moin Klaus @klausc !
'scheint als läuft deine Heizung noch mit dem KW Protokoll... ich würde mich freuen, wenn du noch mal Bescheid gibst, ob die Version 2.1 mit deinem Gerät läuft, weil sich bisher noch nicht die Möglichkeit ergab, das zu testen!
Die Datenpunktliste (xml) wird natürlich mit deinem Gerät wenn nur ansatzweise harmonieren, aber wenn du mir sagst, was oben in der Titelleiste angezeigt wird (so was angezeigt wird), können wir das auch richten.
danke & beste Grüsse!
Phil
Hallo Phil,
@HerrP ich weiß nicht was du brauchst. Oben wird im Moment gar nichts angezeigt, da sich die Software erst gar nicht verbindet. Habe auch auf Github etwas dazu gepostet. Also wie schon geschrieben, hatte schon die Vorgängerversion 2.06 nicht funktioniert. Jedoch im Zuge dieser Beiträge, habe ich auf Win10 nochmals die ganze alte Urversion (1.xx) Da waren glaube ich auch die Parameter einer V200 vorbelegt. Und was soll ich sagen, die läuft nun seit meinem obersten Eintrag hier.👍 Natürlich würde ich gerne deine Version einsetzen bzw. wenn du jemand zum Testen brauchst, ich mich dir zur Verfügung zu stellen.
Gruß Klaus
Edit:
Bitte nicht verzweifeln. Brauche am Anfang ein wenig um zu verstehen, wo und wie ich an welchen Stellschrauben drehen muß. Bitte verzeih 😊
danke für die schnelle Rückmeldung und dein Angebot zur Hilfe!!
ich bin heute erst von einem 'Arbeitseinsatz' aus Spanien zurückgekommen und ziemlich platt, aber ich melde mich zügigig wieder. Über deinen Post auf github hab ich eine Mitteilung bekommen, aber den Post finde ich nicht - hast du den evtl wieder gelöscht?
Mein Plan ist dir erstmal ein kleines Tool zu schicken, was mittels der Kommunikations-dll per KW Protokoll die Gerätekennung ausliest. Dann sehen wir weiter...
beste Grüsse!
Phil
Hier der Link
https://github.com/philippoo66/ViessData21/discussions
Die Frage ist, ob wir hier das alles weiter ausdiskutieren sollen (ist ja die Gas-Sparte vom Forum) oder wir switchen sollen zu Github. Anbei einmal ein paar Bilder.
Ähm. Nicht DU hast zu danken, sondern ich. Also bitte nicht die Welt verdrehen. 😁
Und jetzt trinke erst einmal ein gemütliches gute Nacht Bier. Die Heizung steht auch noch die nächste Zeit im Keller.
Gruß
super! sieht aus, als hätte meine Komm-dll noch Probleme mit dem KW Protokoll. Wie gesagt - ich mach ein kleines Tool fertig, was auch den Datenverkehr ähnlich wie in deinem dritten Bild mitschreibt und ausgibt. Das machen wir dann wahrscheinlich besser auf github.
ich hab aktuell glaubich schon das 3. 'Return-home-and-calm-down Bier' auf und mach folglich jetz besser Schluss hier... 😁 ich meld mich auf github
Grüsse!
Moin Klaus @klausc !
ich hab mich auf https://github.com/philippoo66/ViessData21/discussions/3 gemeldet...
Grüsse!
Hi Phil,
großartig, ich konnte deine Software innerhalb eines Tages zum Laufen bringen und einige Werte meiner Wärmepumpe loggen.
In den DP-Listen sind ja viele Werte als "Hidden" bezeichnet, und da klappt es nicht - kann man dagegen etwas machen (Codierebene?) oder muss man das so hinnehmen?
Wolfgang
Moin Wolfgang!
Grundsätzlich kannst du jede Adresse auslesen, indem du sie in der Liste in das Adressfeld einer Zeile einträgst und dann auf 'Lesen' klickst. Ob und was dann zurück kommt wirst du dann sehen. Kaputt machen kannst du damit nix.
Hast du denn schon die passende Datenpunktliste anhand der Werte von 00F8 (und ggf. 00F0) beziehungsweise einfach mittels 'Info' Button rausgesucht?
Das Programm (ist ja von mir nur etwas überarbeitet, ursprünglich stammt es von anderen) ist ja für ne Gastherme geschrieben. Viele Sachen auf dem ersten Tab werden für eine Wärmepumpe wahrscheinlich nicht passen, aber die Liste habe ich ja inzwischen ziemlich 'universell' gemacht, und die Grafen kannst du dann auch entsprechend konfigurieren.
Ja, 00F8 wird ja unter "Daten" als erstes angezeigt, bei mir 0x20 0x4B.
ecnsysDeviceIdent:204B : CU401B_G,
also habe ich DP_CU401B_G angesehen, dort steht VT200 WO1C
Ich nehme an, das passt (ich habe eine Vitocal 200-G Typ BWC 201.B10, Vitocell 120-E für WW und Heizung, und eine Vitotrans 353 Frischwasserstation).
Da ich den Strom bereits erfasse, war mein wichtigstes Anliegen, zu wissen, wann WW und wann Heizung bereitet wird. Ferner konnte ich die Zahl der Einschaltungen und der Betriebsstunden auslesen und Precision und Einheit richtig setzen.
Bei den Temperaturen klappt es bisher nur mit einigen Sollwerten, z.B. Raumtemp Soll HK2: 0xE6 0x00 bedeutet 230/10=23Grad. Natürlich interessieren mich auch die Istwerte, aber hier muss ich noch Fortschritte machen.
Vielleicht liegt es am Hidden, z.B. "Aussentemperatur (7692) [WPR3_Aussentemperatur~0x01C1 (SInt)] HIDDEN:("Aussentemperatur"="Sensor nicht vorhanden")" - kann ich das lesen?
...
drück mal den Info Knopf
da steht eigentlich welche DP_... da passt.
was liefert 01C1 denn? Bei mir kommt bei den nicht vorhandenen Sensoren pauschal 20.0, das sollte aktuell bei der Aussentemperatur deutllich anders sein. 'Hidden' heisst nur, dass der Wert in Vitosoft nicht angezeigt würde wenn kein Aussentemp Sensor da ist.
Wie gesagt - schreib mal in eine von den 'Test' Zeilen in der Tabelle bei Adr. 01C1 rein, bei len 2 (int sind 2 Bytes) und bei precision -0.1 (minus wegen Sint und 0.1 weil das meist zehntel Grad sind) und dann drück [Read DP] (während deine grad editierte Zeile den Fokus hat).
edit: Kommas müssen als Punkt eingegeben werden!
mach ich gern, leider habe ich im Hiezungsraum kein Internet, wird also nicht gerade "interaktiv".
bei mir (Gastherme) ist der Wert nicht lesbar, unten bei den beiden Wandlerwerten ist kein Sensor dran