hier noch mal mein Beitrag aus 'Internet der Dinge', dem Offenen Brief an Max Viessmann, als neuer Thread - Diskussionen, Fragen etc. bitte hier 🙂
Moin Freunde!
Da Viessmann zwar ein wunderschöne Schnittstelle (UDS, ISO-TP oder DoIP) eingebaut hat, das aber nur eingeschränkt und für eine 4-stellige Summe (per WAGO Gateway) zur Verfügung stellt, haben wir uns bekanntlich dran gemacht, das selber offen zu legen. 🙂
Stand der Dinge ist:
- Wir haben eine MQTT fähige Lösung zum Anschluss an den externen CAN Bus ("Stecker 91"), die es erlaubt, E3 Geräte (Wärmepumpen, Gasgeräte, (PV Speicher gerade in der Testphase, BSZ brauchen wir noch Kandidaten)) in Home Automation Systeme einzubinden. ioBroker, mosquitto, Home Assistant, Node-RED und so weiter also alles einfach machbar und bei uns schon im dauerhaften Einsatz.
- Das Ganze läuft lokal, also ohne irgendeine Hersteller oder sonstwelche Cloud, ohne Internet! Bei der CAN Bus Kopplung kann die gleichzeitige Verbindung mit dem Viessmann Server zwecks Wahrung der Gewährleistungs- und Garantieansprüche aufrechterhalten bleiben.
Eine Anbindung über den WLAN Access Point ist auch möglich, damit aber keine parallele Viesmann-Server-Verbindung mehr.
- Aktuell ist nur das Auslesen von Daten weitergehend erprobt. Bei den wichtigen Daten haben wir auch schon die Formate zur Interpretation geklärt, wir arbeiten an einer vollständigen Klärung.
Das Schreiben ist bei vielen Daten auch schon erprobt.
und last not least: das Ganze ist natürlich kostenfrei und open source! im Sinne eins besseren Miteinanders 😉
Der laufend aktualisiert werdende Stand der Linux Lösung ist auf
https://github.com/open3e/open3e
verfügbar. Einen guten 'Leitfaden' für den Einstieg hat @Hotzen-Plotz hier zur Verfügung gestellt:
https://github.com/open3e/open3e/discussions/5
Eine Sammlung von nützlichen Informationen hat @TSG initiert:
https://github.com/TheSmartGerman/open3e/wiki
(werden wir bald auch unter das open3e Projekt migrieren)
beste Grüße!
Phil
zur Beachtung: Der Zugriff auf das Zielgerät mittels dieser durch Viessmann nicht vorgesehenen Lösung zieht möglicherweise den Verlust von Gewährleistungs-/Garantieansprüchen nach sich und kann unter Umständen zu GEFAHREN FÜR LEIBLICHE UNVERSEHRTHEIT ODER SACHWERTE führen! Die Autoren schliessen jegliche Haftung aus.
Beispiele aktueller Home Assistant Integrationen von Wärmepumpen:
Vitocal 250 Kältekreisübersicht: View und Installationsanleitung gibt's hier: https://github.com/MyHomeMyData/iob.vis.vitocal250.git
Einen Adapter für ioBroker:
https://github.com/MyHomeMyData/ioBroker.e3oncan
und noch ein paar andre Sachen, die aber in dem Adapter integriert sind. Schaut einfach mal sein Repo an...
https://github.com/MyHomeMyData
ps. wer uns unterstützen will und kann ist herzlich willkommen!
pps. und wir freuen uns über jedes 'like' (👍) - damit zeigt ihr deutlich, dass ihr eine offene und lokale Kommunikation mit den 'One Base' Geräten eigentlich von Viessmann erwartet
Um mir die Arbeitsweise verständlicher zu machen, würde ich gerne die Anzeige des Kältekreislauf nicht nur auf der Anzeige der WP-Inneneinheit sehen. Gibt es eine Möglichkeit das Anzeigebild abzufragen und z.B. im Browser darzustellen.
In den Forum Tiefen dieses (?) Threads hat jemand beschrieben, dass er dieses Anzeigebild aktualisiert anzeigen kann. Kann diese beliebig nachgebaut werden? Wenn ja (oder für andere Hinweise dazu) bitte eine LinkReferenz.
Danke schon mal
Der DID 2256 scheint lauf Codec Liste 16bit breit zu sein und Skalierung 1 und Offset 0 zu haben.
In welcher Reihenfolge müssen die Raw Werte geschrieben werden? MSB oder LSB zuerst?
z.B. 1000 decimal = 03E8 hex oder E803 hex
Vielen Dank und Grüße
Philip
Oh, wie peinlich 🙃
Mein Post erscheint auf einer neuen Seite ganz oben ... und direkt darüber ist wohl die Antwort auf meine Frage ... mit Link ... was will ich mehr?
Nur aufmerksamer lesen sollte ich vor dem Posten. Sooooory 😓
Warum willst du denn did unbedingt RAW schreiben? Simple Integer Werte lassen auch problemlos schreiben ohne den raw modus to benutzen. Habe ich schon zb. Für WW Solltemperatur ausprobiert.
Ich habe auch schon experimentellen Code zum Schreiben von "complex" dids. Da gibt es hoffentlich bald einen PR.
Hab auch ne WP und bin gespannt was bei deinem Experiment rauskommt.
Grüße
Ohne raw? Na hervorragend und Danke für die Info;)
@SanMiggel Ich nöchte eigentlich Raw schreiben vermeiden. Ich dachte nur, man müsste Raw schreiben. Wenn man so einen einfachen DID wie den 2256 einfach dezimal schreiben kann ist das ja noch einfacher.
Ich wollte hauptsächtlich @JWolke unterstützen, da er den DID konkret ausprobieren will.
Ich bekomme meine 250-A erst im März und würde dann bei mir auch testen.
Wie gesagt, reine Integer, bzw floats (falls skaliert) schreiben klappt bei mir prima.
Dann bin ich wohl durcheinander gekommen, dann warte ich auf den Bericht von @JWolke . 😊
>> In welcher Reihenfolge müssen die Raw Werte geschrieben werden? MSB oder LSB zuerst?
Du musst bei raw tatsächlich die Bytes 'rückwärts' schreiben, also LSB..MSB
Am besten liest du erst mal Raw aus, dann siehst du's ja.
>> Ich habe auch schon experimentellen Code zum Schreiben von "complex" dids.
ist das der von Jürgen (MyHomeMyData) oder hast du selber einen gebaut? Der ist auf jeden Fall interessant für's Projekt! Das ist ja kein Hexenwerk, aber Arbeit.... Her damit! 🙂
Grüsse!
Phil
@SanMiggel @HerrP Für den ioBroker Adapter habe ich bereits alle Encoder implementiert, allerdings in Javascript. Siehe ./lib/codecs.js. Die Encoder sind recht gründlich getestet. Ich würde dies in open3E migireren. Wir sollten aber vorher den develop Branch in den master Branch mergen.
Vorschlag: Ich mache heute den Merge und wir gehen anschließend die Implementierung gemeinsam an. Da muss gründlich getestet werden, dann ist es gut, wenn mehre Leute dran arbeiten.
Gruß, Jürgen
Den encoder für complex dids hab ich selbst im Python Code geschrieben. Sind nur ein paar Zeilen. Ich habe auch Mal mit unit Tests angefangen, damit man auch sicher sein kann, das es funktioniert. Ich versuche so bald wie möglich den PR auf zu machen.
Abgesehen davon wäre es auch gut, wenn der Code Mal als"richtiges" Python Paket formatiert wäre. Dann wäre Tests und ci (automatisierte Tests über GitHub) deutlich einfacher. Würde aber wohl nicht ohne breaking changes klappen...
@SanMiggel @HerrP @JWolke Ich habe den develop nach master gemerged.
@SanMiggelDu kannst auf develop loslegen. Ich fände es gut, wenn Du dabei auch gleich die Formatierung als Paket angehen würdest. @HerrP Wie siehst Du das?
Schlage vor, wir machen im open3e-Repository einen neuen Diskussions-Thread auf und führen diese Diskussion dort weiter.
können wir gerne machen!
@Juergen-B Ich habe gerade dein iobroker Adapter getestet. Sieht schon mal echt super aus. Respekt dafür!
Nur das auslesen über das collection data klappt bei mir noch nicht so richtig. Ich gehe davon aus, dass dann alle Punkte aktualisiert werden, oder?
Habe eine VC252-A.
Habe ich noch was vergessen oder so?
@jokermicDanke für's Testen. Freut mich, dass es Dir gefällt.
Bzgl. Collect muss ich Dich leider enttäuschen. Bei einer Stand-alone Konfiguration kommt da auf dem externen Bus gar nichts. Die Vitocal wird erst gesprächig, wenn mindestens ein weiteres E3-Gerät angeschlossen und als Slave konfiguriert wird, z.B. eine VX3.
In Deinem Fall hilft nur UDSonCAN, also die gewüschten Daten gezielt abfragen.
Könntest Du mir einen Screenshot vom Device-Scan schicken?
Gruß, Jürgen
@Juergen-B @HerrP ich hab einen PR aufgemacht zum Schreiben von complex dids.
Das python packaging würde ich separat davon halten. Ich haben einen issue auf GitHub aufgemacht. Am besten wir diskutieren das dort.
ah ok. Dann passt es ja, dass nichts aktualisiert wird.
aber das gezielte aktualisieren läuft jetzt auch schön seit 24 Stunden ohne Auffälligkeiten.
meinst du die Übersicht?
oder das?
Ich meinte die 2te Übersicht. Danke.
Bei mir erscheint tatsächlich nur ein weiteres Device, die VX3.
der 2256 geht nicht...:(
Nach mehreren Abfrage hat sich nun doch gezeigt, dass es schwankt und damit wie in der Serviceanleitung berechnet wird. Daher würde ich auch darauf tippen, dass der DID sich damit wie ein "Sensor" verhält und damit generell nicht schreibbar ist
C:\Users\annaw\open3e>python open3eclient.py -d 192.168.0.1 -raw -r 2256
b554
C:\Users\annaw\open3e>python open3eclient.py -d 192.168.0.1 -raw -w 2256=b554
write 1664.2256 = b554
Traceback (most recent call last):
File "C:\Users\annaw\open3e\open3eclient.py", line 380, in <module>
succ,code = dicEcus[ecu].writeByDid(didkey, didVal, raw=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\open3e\Open3Eclass.py", line 122, in writeByDid
response = self.uds_client.write_data_by_identifier(did, val)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 174, in decorated
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 507, in write_data_by_identifier
response = self.send_request(req)
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 2226, in send_request
raise NegativeResponseException(response)
udsoncan.exceptions.NegativeResponseException: WriteDataByIdentifier service execution returned a negative response ConditionsNotCorrect (0x22)
Evtl. ergibt sich doch noch etwas mit dem 3106: Dieser stand trotz "Heizungspuffer" auf 4600bc02 (Min,MAX,set). Wenn ich es richtig dechiffriert habe dürfte das 7,0 °C, 18,0 °C und "2" als Status bedeuten. Gesetzt ist er nun auf fa001902 und dies sollte (hoffentlich) 25,0°C, 40,0°C und "2" interpretiert werden.
Zugleich habe ich im 625 (Objektdetails) noch ein Buffercylindersize von 200,0 eingetragen;
Mal schauen, ob sich da was tut?
Aber immerhin ein was positives: Auch der Kältekreis hat schreibbare Parameter, so z.B. found 2837:2:SecondaryHeatExchangerOptimumTemperatureSpreadExponent.
Verwunderlich ist nur, dass die notwendige Abtauenergie mit ca. 2100 kJ angegeben wird; die Momentane jedoch auf ca. 6.000 kJ (python open3eclient.py -d 192.168.0.1 -r 2496
5971.0)
C:\Users\annaw\open3e>python open3eclient.py -d 192.168.0.1 -raw -w 0x68c.2611=803e0000
write 1676.2611 = 803e0000
Traceback (most recent call last):
File "C:\Users\annaw\open3e\open3eclient.py", line 380, in <module>
succ,code = dicEcus[ecu].writeByDid(didkey, didVal, raw=True)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\open3e\Open3Eclass.py", line 122, in writeByDid
response = self.uds_client.write_data_by_identifier(did, val)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 174, in decorated
return func(self, *args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 507, in write_data_by_identifier
response = self.send_request(req)
^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\annaw\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.12_qbz5n2kfra8p0\LocalCache\local-packages\Python312\site-packages\udsoncan\client.py", line 2226, in send_request
raise NegativeResponseException(response)
udsoncan.exceptions.NegativeResponseException: WriteDataByIdentifier service execution returned a negative response ConditionsNotCorrect (0x22)
Der 3195:3:ThermalBufferDemand ist zumindest zwischen drei Werte schwankend und nicht schreibbar: 760101 , 770101 und 790101
Edit:
2611:4:NominalThermalCapacityIndoorUnit
Evtl. hätte man die "Normwärmemenge" der Inneneinheit anpassen können; bspw. durch einen "größeren" internen Puffer; aber leider auch nicht schreibbar
2611 - 803e0000 - 16000 und 00000
lt ViGuide ist das schreibbar - aber was bewirkt es ?
Hallo Jörg,
nur aus Interesse. Wie kommst du an so eine Parameteransicht? Bist du Installateur oder hast einen Account für Fachbetriebe?
Grüße
Philip
ViGuide - nicht anmelden, Demo.
dann eine Anlage mit ‚Pro‘ raussuchen und dann kannst du eine Wartungssession aufbauen und Parameter zur Überwachung hinzufügen.
einfach mal ausprobieren … 😎😉
FF
Ich versuche ja die WP dazu zu überreden, nicht den internen Puffer aufzuheizen, sondern stattdessen die Heizkreiswärme zu nutzen. Da der 2256 für uns nicht sinnvoll ist (selbst wenn er schreibbar wäre, müsste ja quasi sekündlich neu geschrieben werden), war der Plan stattdessen genutzte Konstanten zu ändern. Laut dem Wert für den 2256 wären ja ca. 2.100 kJ nötig. Dabei ist mir nicht ganz klar, wie die Anlage auf diesen Wert kommt; Aber sei's drum.
Demnach muss eine andere Rechenoperation prüfen, ob die notwendige Abtauenergie vorhanden ist. Ich denke, dass dazu der Wert 2496 ("CurrentThermalCapacitySystem") mit dem 2256 verglichen wird. Da bei auslesen des 2496 ein Wert >6.000 angezeigt wird, nehme ich mal an, dass es eine Skalierung um den Faktor 10 gibt. Daher wäre anzunehmen, dass die derzeitige (berechnet) verfügbare Wärmemenge mit ca. 600 kJ ermittelt wurde.
Die gebräuchlichste Gleichung zur Wärmemengenermittlung wäre Q=m*c_p*dT. Da dT aufgrund der VL/RL-Temperaturen gemessen wird, bleibt als fixe Größe nur noch m*c_p. Und das wäre meiner Meinung nach die "nominale Wärmekapazität".
Wenn ich nun diese erhöhen würde, denkt die Regelung, dass bei einer gegebenen Temperaturdifferenz, die verfügbare Wärmemenge größer wäre, als sie tatsächlich ist und begibt sich direkt in die Kältekreisumkehr. Dabei stellt die IDU fest, dass die Temp. des Heizungsrücklauf im Laufe des Prozesses höher ist, als die VL zur ODU und stellt das 3/4-Wegeventil auf Heizung um.
Als negativer Aspekt, dürfte dann (eventuell) jedoch die errechnete Heizleistung/SCOP/COP-Darstellung der App nicht mehr funktionieren - wenn die "nominale Wärmekapazität" höher ist und die Temperaturdifferenz konstant bleibt muss rechnerisch folglich die aktuelle Leistungsabgabe stark gestiegen sein.
@JWolke Puhh … da werde ich dir keine Hilfe sein. Ich versuche erst mal der 250 auf die Finger zu schauen - ich drehe zZ maximal an der Heizkennlinie und den gewünschten Zieltemperaturen und deren Zeitplänen - nachdem ich die Begrenzung der maximalen VL Temperatur ändern konnte 🤓
Mein Eindruck zum Abtauvorgang - noch kann ich damit leben und die Einflüsse auf die Wärme im Haus sind imho übersichtlich. Da nervt mich eher das Umschalten nach der Warmwasserbereitung. Im Bild die beiden Vorgänge - während der Zeit findet keine Heizung im Haus statt und wenn es dann wieder umschaltet dauert es auch eine ganze Weile bis die Ziel VL Temperatur erreicht ist.
Und hier aus Sicht der Wärmepumpe (Wärmemenge und Strom)
im externen Strombezug sieht man die Abtauvorgänge recht deutlich
Das verschwindet, wenn ich auf Arbeit umschalte (achtung - andere Anwendung)
Die lange Pause nach WW ist nicht notwendig, denn die Temperaturen sind bereits nach kurzer Zeit, 2-3 Minuten auf normales Niveau abgekühlt.
Kannst du ermitteln, welche Heizleistung die Pumpe bringt, wenn nach einer WW-Bereitung der Heizkreis wieder anspringt? Ich nehme an, Heizstab ist ausgeschaltet?
Verwunderlich finde ich aber den zügigen Abfall der WW-Temperatur. Ist es ein Kombispeicher oder läuft eine Zirkulation?