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
Wer es ausprobieren möchte: Hier gibt es eine Anleitung.
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
Mal eine Frage zu den Verfügbaren DIDs für eine Vitodens:
Gibts es Äquivalente von:
features.heating.circuits.0.operating.programs.active.properties.value.value
features.heating.circuits.0.operating.programs.reduced.properties.temperature.value
features.heating.circuits.0.operating.programs.normal.properties.temperature.value
features.heating.circuits.0.operating.programs.comfort.properties.temperature.value
???
Es geht mir um das Auslesen des aktuellen Heizprogramms (reduced,normal,comfort) und dann das Lesen, was für eine Solltemperatur für die drei jeweils eingestellt ist.
Daraus könnte man die Planvorlauftemperatur ableiten, wenn man die Heizkurve auch hat.
ich bin mir so gut wie sicher dass es das gibt. Die API kommuniziert doch wohl auch per UDS (on IP) mit den Geräten, deshalb sollten wir alles bekommen, was auch die API bekommt. Wir müssen die 'Items' nur identifizieren (und die Daten deuten).
Ich glaube, wir haben noch keinen Scan der DIDs von der Vitodens. Bisher haben wir hier einen 'Monkey Poke' benutzt:
Dabei wird einfach ein UDS ReadDataByIdentifier Request Frame geschickt und nur der erste Antwort Frame 'benutzt'. Weil bei längeren Daten dann der Rest der Kommunikation weggelassen wird, muss ziemlich lange gewartet werden, bis die nächste Anfrage geschickt wird...
Ich habe versucht, so was richtig per Python Skript und udsoncan.Request(service=udsoncan.services.ReadDataByIdentifier, ...) zu machen, aber weil ich nix ausprobieren kann, ist mir das bisher nicht gelungen... 🤕
@Hotzen-Plotz ich habe dir das Skript 'didiscan.sh' geschickt. Würdest du einen Dump auf 680/690 starten (Kommentarzeile oben) und das Skript laufen lassen und mir dann die .log schicken? Dann mach ich da draus eine vollständige datapointsVdens und wir können mal schauen, ob und wo wir die heating.circuits.0.operating Sachen finden?!
Grüsse!
Die 3 Soll-Temperaturen kannst du mit DID 424 auslesen und schreiben (UDS-Multiframe mit 9 Bytes an Daten):
- Komfort-Temperatur: Byte 1/2
- Standard-Temperatur: Byte 3/4
- Reduzierte Temperatur: Byte 5/6
Byte 7/8 sind (eventuell) immer 00 00 und die Bedeutung von Byte9 ist noch nicht erforscht 😉.
Und die Planvorlauftemperatur findest du (eventuell) einfacher, indem du DID 987 (MixerOneCircuitFlowTemperatureTargetSetpoint, Single Frame) ausliest. Ist aber nur eine Vermutung 😉.
Danke für den Hinweis. 👍 Ich hätte aber keine Idee, wie ich an die ganzen Werte komme. Aktuell spuckt der DID 424 (MixerOneCircuitRoomTemperatureSetpoint) nur eine zweistellige Zahl aus (ich denke, es ist die Komfort-Temperatur).
Hotzi @Hotzen-Plotz ersetze in deiner datapointsXy.py mal den 424 Eintrag
424 : O3EInt16(9, "MixerOneCircuitRoomTemperatureSetpoint", signed=True),
durch
424 : O3EComplexType(9, "MixerOneCircuitRoomTemperatureSetpoint", [O3EInt16(2, "RoomTempSp_Comfort"), O3EInt16(2, "RoomTempSp_Normal"), O3EInt16(2, "RoomTempSp_Reduced")]),
dazu muss die Open3Ecodecs aber die aktuelle aus dem develop Branch sein, die den O3EComplexType enthält (ggf. Datei ersetzen).
Die Bezeichnungen kannst du ja nach deinen Wünschen anpassen, ich weiss nicht, wie die auftauchen...
Ob die Raumtemperatursollwerte jetzt unter 0 werden (signed) ist glaubich ziemlich irrelevant, solange man nicht im Kühlhaus wohnt... 😉
hier noch 987 (hinzufügen?!)
987 : O3EInt16(2, "MixerOneCircuitFlowTemperatureTargetSetpoint"),
Man kann sich über dieses Tool den Diagnosebildschirm der Vitocal 250 Kältekreisübersicht mit Live-Daten als View in ioBroker anschauen:
View und Installationsanleitung gibt's hier: https://github.com/MyHomeMyData/iob.vis.vitocal250.git
Tolle Vorbereitung … läuft … Danke.
Sehr cool! Der aktuelle Ausfall der Vicare App zeigt ja ganz genau warum diese ganzen Cloude Lösungen Schrott sind. Mein Homeassistant greift auf einige Datan meiner 252 Anlage zu und reagiert dementsprechend was natürlich nicht möglich ist weil deren Cloud immer noch down ist und Vissmann sich bedeckt hält was die da gerade veranstalten.
Werde mir dann mal einen Adapter bestellen um alle Daten lokal abzugreifen weil es ist schon lächerlich im Jahre 2023 keine Daten mehr von der Heizung geliefert zu bekommen.
Juhuuu, es tut sich was bei diesem Thema. Traurig das es überhaupt notwendig ist, dank der Firmenpolitik von Viessmann ! Gibt es vieleicht eine deutsche Anleitung mit dem was man brauch und machen muss um über den CAN zu schreiben ?
Bei mir würde es darum gehen über Iobroker richtung Viessmann über den Wlan Adapter Werte zu schreiben.
Sprich die Heizung bei PV Überschuss zu starten. Das wäre damit möglich ???
Falls ja, kämpfe ich mich auch gerne durch die englischen Seiten und würde mit testen 🙂
Ich hab mir mal ein paar Gedanken gemacht… Ohhhjeee.
Eigentlich ist es ja unnütz die Heizkurve selbst einzustellen… Wäre es zb nicht möglich dass meine Homematic IP Heizgruppen über die API meine 252 informiert dass die Temperatur in Zimmer X nicht erreicht wird und so die Heizkurve dann angepasst wird?
moin ihr!
@Sourex ich fürchte zum Schreiben gibt es nichtmal ne Anleitung auf Englisch? Du musst mal auf Seite 8 dieses Threads (rel. unten) schauen, dann weisst du, wie das mit dem Schreiben aktuell so geht (is auf Deutsch)...
Grundsätzlich ist es bestimmt möglich, die Heizung (oder WW oder Pufferbeheizung) bei PV Überschuss zu starten, aber ich fürchte, nur auf irgendwelchen Umwegen. Wenn man den Thread https://www.viessmann-community.com/t5/Waermepumpe-Hybridsysteme/Gut-zu-wissen-Die-Smart-Grid-Funkti... liest, scheint Viessmann ja sowas per Schalten eines Kontaktes vorgesehen zu haben. Ich denke, es würde aber auch per Anhebung irgendwelcher Sollwerte funktionieren, was natürlich mit open3e ginge, aber aktuell eben noch ziemlich 'kryptisch'.
Du müsstest erstmal ein Konzept entwickeln, wie du dir das eigentlich vorstellst. So eine Wärmepumpe sollte man ja auch nicht im Minutentakt an- und ausschalten (z.B.). Wenn du da was hat, können wir dich beim Schreiben unterstützen, und auf Dauer wird das auch noch einfacher werden, aber das Thema insgesamt ist nicht trivial.
@Petgi178 mit open3e kann man in der beschriebenen Art die Heizzkurve anpassen. Das hat natürlich nix mit der API zu tun, weil die API ja nur übers Internet und die Viessmann Cloud Geschichte läuft, und es hier ja gerade da drum geht, das ganze direkt und lokal und kostenlos zu machen 😉
Wenn du Tips zur API brauchst, ist das Developer Forum glaubich der bessere Bereich. Aber da musst du eben (mindestens) damit leben, dass es zwischendurch immer mal wieder nicht funktioniert...
Grüsse!
Die Vtocal 250 bei PV Überschuss zu starten ist mit Bordmitteln kein Problem, dazu ist SG Ready da, auf Gitlab ist eine Lösung veröffentlicht, die das API des Wechselrichters nutzt, um zu ermitteln, ob ein ausreichender PV Überschuss verfügbar ist. Mode 3 sagt der Vitocal 250 "jetzt wäre ein guter Zeitpunkt für einen Start", mit Mode 4 erfolgt die Anweisung "Jetzt auf jeden Fall starten". SG Ready ist sicher nicht perfekt, allerdings bleiben dabei alle Schutz- und Sicherheitsmechanismen in Kraft, die Viessmann in die Vitocal 250 eingebaut hat, so werden z.B. zu viele Verdichterstarts vermieden.
Open3E kommt für mich dann ins Spiel, wenn mehr Einstellmöglichkeiten gebraucht werden, insbesondere bei der Parametrisierung wie sie Viguide in der "Fachbetriebsausführung" bietet oder einfach die Vitocal 250 von dem ViCare Cloudmurks befreien will.
Dynamische Anpassung der Heizkurve: Viessmann geht hier von der Annahme aus, dass die thermischen Prozesse im Haus einer linearen Funktion folgen. Wenn ich mich allerdings noch richtig an die Physikvorlesungen erinnere, dann gibt es bei den Wärmeverlusten nichtlineare Komponenten. Die Funktion zur Wärmestrahlung ist definitiv nicht linear, allerdings weiß ich nicht ob die einen nennenswerten Einfluss auf die Einstellung einer Heizkurve hat.
Hallo,
in der Datei Open3EdatapointsVx3.py ist in Zeile 146 ein kleiner Fehler:
1801: O3EComplexType(40, "ElectricalEnergyStorageEnergyTransferStatistic", [O3EInt32(4, "BatteryChargeToday", scale=1.0), O3EInt32(4, "BatteryChargeWeek", scale=1.0), O3EInt32(4, "BatteryChargeMonth", scale=1.0), O3EInt32(4, "BatteryDischargeYear", scale=1.0), O3EInt32(4, "BatteryChargeTotal", scale=1.0), O3EInt32(4, "BatteryDischargeToday", scale=1.0), O3EInt32(4, "BatteryDischargeWeek", scale=1.0), O3EInt32(4, "BatteryDischargeMonth", scale=1.0), O3EInt32(4, "BatteryDischargeYear", scale=1.0), O3EInt32(4, "BatteryDischargeTotal", scale=1.0)]),
hier sollte BatteryChargeYear stehen.
Die Werte von Zeile 122 habe ich mal mit der Gridbox verglichen und folgendes probiert:
1603: O3EComplexType(4, "PointOfCommonCouplingPower", [O3EInt32(2, "P1", signed=True, scale=1.0), O3EInt32(2, "P2", signed=True, scale=1.0)]),
P1 scheint die Netzeinspeisung/Netzbezug zu sein
P2 habe ich noch nicht erkannt, ist meist negativ
Kennt jemand die Zelle in der man für die BackupBox die mindest Batterieladung angeben kann?
Ich habe das bei der Installation auf 0 stellen lassen und in der Zelle
Zeile 181: 2214: RawCodec(2, "BackupBoxConfiguration"),
lese ich auch eine 0.
moin @petkow !
danke für den Hinweis mit 1801! das bring ich gleich in Ordnung. Du weisst, dass du das auch per github machen kannst? aber wenn dir das zu wiggelig ist, sag auch gern hier Bescheid.
1603: P1 möglicherweise Wirkleistung, P2 möglicherweise Blindleistung? Wobei die Blindleistung gab es ja in kapazitiv und induktiv?!? Steckt das vielleicht im Vorzeichen? Hast du einen elektronischen Zähler vom Netzanbieter (hast du bestimmt) und kannst das da vielleicht mit abgleichen? Solange wir nicht sicher sind, würde ich das lieber noch nicht ändern, 'P1' und 'P2' sind ja irgendwie ziemlich unverfänglich, wobei P2 im Falle von Blindleistung ja eigentlich 'Q' heissen müsste... 😉
2214: "Configuration" klingt mir im ersten Moment nicht nach einem Ladungs/schwellen/wert, und oft sind diese Werte auch länger als 2 Bytes (wobei SOC in % (1664) ist auch nur ein Byte ist). Wenn ich dazu komme, schaue ich mal, ob ich was zu 2214 finde,
vielleicht weiss ja wer was sich hinter 2214 verbrigt oder wo die Entladegrenze der BackupBox steht (hab ich doch richtig verstanden?)!?!
Grüsse!
Phil
Meine BackupBox ist auf Limit 20% eingestellt. Die 2214 liefert mir hex 14 00. Als 16 Bit intepretiert also 20. Das würde passen. Hat schon jemand probiert, den Wert zu ändern?
Gruß, Jürgen
Mit großem Interesse verfolge ich das Projekt und bewundere Euren Einsatz.
Was ich absolut toll finde:
in all zu ferner Zukunft wird es eine einfache Windows Oberfläche geben.
Hier würden sich die User wiederfinden, die nicht so mit LINUX, Raspberry & Co klar kommen.
Weiter so
Gruß Ronald
Hallo zusammen, fetten Respekt vor eurem Projekt und der Energie die ihr darein steckt.
Kann man eigentlich z.B. bei der Vitocal 250 den internen und den externen CAN getrennt abfragen?
Es scheinen unterschiedliche DP auf den beiden Bussysteme zu liegen. Dazu muß ich vermutlich die Verkabelung jeweils anpassen, oder?
Danke und viele Grüße
Marc
Hallo Marc,
ja, da liegen unterschiedliche Werte und man kann prnzipiell mit 2 Adaptern auch auf beiden Bussen gleichzeitig aktiv sein.
Ich sehe aber keinen Mehrwert, denn Dank open3e kommt man auf dem externen Bus an alle Daten ran. Auch an die, die sonst nur auf dem internen liegen.
Auf dem externen Bus liegen zudem auch direkt die Daten des Energy Meters - sofern vorhanden. Sendet bei mir auf CAN-IDs 0x0250 bis 0x025A.
Hi Juergen,
hier diskutieren wir gerade darüber, ob die untere Modulationsgrenze der Wärmepumpe konfigurierbar ist.
Ein Parameter erscheint dafür möglicherweise verantwortlich. Wenn ich den Bus scanne, dann bekomme ich den Parameter aber überhaupt nicht angezeigt.
Muss ich beim scannen für den Internen Bus einen anderen Parameter auf der Kommandozeile übergeben?
Die Datenpunkte 1100 und 1101 können prinzipiell mit open3e ausgelesen werden. open3e nutzt das Protokoll UDSonCAN, das auf dem externen Bus implementiert ist. Damit können auch Daten abgefragt werden, die sonst nur auf dem internen Bus liegen.
Man muss also gar nicht an den internen Bus ran, bekommt aber trotzdem die "internen" Daten.
Habe diese Info auch im anderen Thread gepostet.
Moin @Juergen-B !
>> Meine BackupBox ist auf Limit 20% eingestellt. Die 2214 liefert mir hex 14 00. Als 16 Bit intepretiert also 20.
das klingt interessant! kann man die 'Konfiguration' irgendwo einsehen (Display, irgend ne App, API)? Dann würde ich sagen, einen Versuch ist es wert! ( @petkow ) ich vermute, das zweite Byte ist dann irgend was andres...
Grüsse!
Moin
ich habe eben den Wert von 2214 auf 1400 gesetzt 🤔
python3 /opt/open3e/Open3Eclient.py -c can0 -dev vx3 -raw -w 2214=1400
beim rücklesen mit
python3 /opt/open3e/Open3Eclient.py -c can0 -dev vx3 -r 2214
kommt 2.0
mit python3 /opt/open3e/Open3Eclient.py -c can0 -dev vx3 -raw -r 2214
kommt 1400
Eine Anzeige am VX3 im Display oder in einer App gibt es nicht.
Ich werde das jetzt beobachten. Vielleicht brauch die VX3 auch einen Reboot.
Scheint geklappt zu haben, im Display steht abwechselnd
unter Batterie:
16%
Ersatzstromreserve nachladen
und
16%
Laden mit 2926 W
hast du den O3EInt16 Codec benutzt? der hat scale=10 als default, teilt also den gelesenen Wert durch 10, dementsprechend wäre das Leseergebnis logisch.
ich vermute ja, es sind zwei Bytes und das zweite steht woanders für (keine Ahnung für was). Ein Discharge Limit von über 255% würde ja keinen Sinn machen.
2214 : O3EComplexType(2, "BackupBoxConfiguration", [O3EInt8(1, "Discharge Limit"), RawCodec(1, "unknown")]),
wäre die vorläufige Kodierung, die dann auch 20 beim Auslesen liefert. Gibt es da vielleicht auch eine Charge Obergrenze? das könnte dann ja das 2. Byte sein, wobei da ein Default von 0x64 logischer wäre...
Danke für den Test, brichte bitte weiter!
weiss jemand, ob bei dem Akku "0%" wirlich für das cell discharge limit steht, oder ob der Batteriewächter da eh schon eine Sicherheit eingebaut hat? So einen LiIon(?) Akku dauerhaft an der unteren Grenze zu halten ist ja nun wirklich alles andre als gut für die Lebensdauer...