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, 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.
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.
Eine Sammlung von nützlichen Informationen hat @TSG initiert:
https://github.com/open3e/open3e/wiki
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
> aber das ist eh schon ein "alter Hut" und bekannt.
mir war das jetzt nicht gegenwärtig und offensichtlich hat es ja auch noch niemand eingearbeitet. müssen wir mal machen. Ich hab es hier mal quick&dirty (vorm Duschen und Frühstück...) für dich zum reinkopieren gemacht:
3335 : O3EComplexType(8, "HeatingCoolingHysteresisHeatingCircuitOne", [O3EInt16(2, "TurnOnHysteresis_Heating", scale=10.0, signed=False), O3EInt16(2, "TurnOffHysteresis_Heating", scale=10.0, signed=False), O3EInt16(2, "TurnOnHysteresis_Cooling", scale=10.0, signed=False), O3EInt16(2, "TurnOffHysteresis_Cooling", scale=10.0, signed=False)]),
scale und signed kannst du auch weglassen, das ist default bei O3EInt16. signed=False ist doch richtig, oder?
Hallo @HerrP .
Danke für deine Unterstützung,
Ich habe deine Zeile mit signed=True einkopiert - nun können die Parameter beim Auslesen korrekt via MQTT gesendet werden - perfekt.
Allerdings beim Schreiben habe ich noch meine Probleme - am besten ich schildere wie ich dabei vorgehe:
1. Ich lese den Parameter 3335 im RAW-Format mit open3e -raw -r 3335 aus, im konkreten Fall kommt folgende Rückmeldung: "140014001e001400"
2. Ich ändere den RAW-Wert bei der TurnOnHysteresis_Cooling von 3,0 auf 2,5K ab: "1400140019001400"
3. Ich schreibe den RAW-Wert mit open3e -raw -w 3335=140014001900140.
Diese Vorgehensweise habe ich z.B. beim Parameter 2413 bezogen auf dessen RAW-Wert bereits erfolgreich durchgeführt.
Beim Schreiben von Parameter 3335 kommt allerdings folgende Antwort:
Device rejected this write access (negative response). You may try again using the experimental service 77 by adding command line option -f77 (see readme).
Err: WriteDataByIdentifier service execution returned a negative response ConditionsNotCorrect (0x22)
Ist meine Vorgehensweise falsch?
SG,
Günther
moin @GüntherR !
die Vorgehensweise ist genau richtig! obwohl es ja inzwischen auch die Möglichkeit gibt, einzelne Subs in Klartext zu schreiben...
das Problem ist, dass Viessmann den DID offensichtlich als schreibgeschützt ausgeführt hat, er sich also so einfach nicht per standard UDS Service schreiben lässt (obwohl es ja per Bedieneinheit geht).
service 77 bedeutet wir würden so tun als ob wie die Bedieneiheit wären - die schreibt nämlich die Werte ja, und natürlich auch über den CAN Bus, aber sie benutzt dabei nicht den normalen UDS write-did-Service Code, sondern einen proprietären Code 77h.
Das Blöde ist, dass sie das auf dem internen Bus tut, und dieser Service 77 nur auf dem internen Bus funktioniert. Es ist also die Frage, auf welchem CAN Bus du deinen CAN Adapter angeklemmt hast. Auf dem externen CAN Bus wird auch mit -f77 eine Rückweisung kommen, auf dem internen wirst du damit wahrscheinlich erfolgreich schreiben können.
@GüntherR Der Parameter 3335 ist auch in der aktuellen 'Open3Edatapoints_writables.json' noch nicht als 'writable' definiert. Trag das mal nach (3335 : "HeatingCoolingHysteresisHeatingCircuitOne",) eventuell löst das schon das Schreibproblem.
Hallo @HerrP.
Ja - richtig. Im internen Bus mit Service 77 kann ich die Parameter ändern, aber übernommen werden sie dann doch nicht richtig. Wenn ich die Parameter nach dem Schreiben auslese, dann bekomme ich zwar den abgeänderten Wert zurück, aber auf der Anzeige der Wärmepumpe ändert sich nichts - auch das Verhalten bleibt unverändert.
Hallo @Dreman.
Die Anpassung an der Open3Edatapoints_writables.json hat dabei nichts geändert.
So, jetzt will ich aber nicht mehr weiter lästig sein. Vielen Dank für eure Unterstützung. Ich muss wohl akzeptieren, dass die Parameter 3335.0-.3 nicht im 0,1K-Bereich verändert werden können und einen Kompromiss eingehen.
Ich werde euren Beitrag auf jeden Fall weiter beobachten - vielen Dank nochmals für eure Arbeit.
Noch einen schönen Sonntag.
SG.
Moin @HerrP
Ich habe erst am Wochenende gesehen, dass es schon eine AddOn für HA gibt. Damit konnte ich den Adapteer schon mal in Betrieb nehmen.
Die Vitocal wird wohl das Führungsgerät sein. Allerdings habe ich das Splitt-Model. Einer der beiden Anschlüsse bei mir die 72 geht schon zur Außeneinheit. Dann würde der verbleibende zur Vitocharge gehen müssen und von der Vitocharge dann der zweite zum E380. Das würde bedeuten das bei der Kommunikationskette nur noch ein Anschluss am E380 frei wäre und der hat keinen GND.
Es sei denn, ich könnte den GND von der Vitocharge nutzen der ja nicht am E380 aufgelegt werden kann.
moin @Sven73 !
in letzter Zeit gab es immer mehr Leute, die (erfolgreich) CAN aufgelegt haben ohne Gnd Anschluss. Ich bin da zwar (beim galvanisch getrenntem Adapter) kein Freund von, aber Probieren geht über Studieren.
du könntest auch bsw. den Gnd mit zum E380 führen und ihn da zwar nicht auflegen, aber von da aus weiter zum CAN Adapter führen und da anschliessen. Wichtig ist dass die Leiter möglichst verdrillt sind und auf jeden Fall nahe beieinander geführt werden, damit die Fläche für Einstrahlungen möglichst klein bleibt bzw aufhebend wirkt (bei verdrillt)
moin @Dreman ! die Open3Edatapoints_writables.json ist nur ein 'Hilfsmittel' für Jürgens Adapter, weil er da Schreiben nur für in der writables.json aufgeführte DIDs 'anbietet' (soweit ich das verstanden hab). In open3e wird die Datei nirgends auch nur betrachtet.
Grüsse!
@HerrP schrieb:
du könntest auch bsw. den Gnd mit zum E380 führen und ihn da zwar nicht auflegen, aber von da aus weiter zum CAN Adapter führen und da anschliessen. Wichtig ist dass die Leiter möglichst verdrillt sind und auf jeden Fall nahe beieinander geführt werden, damit die Fläche für Einstrahlungen möglichst klein bleibt.
genau das meine ich. Ich habe eine TP Leitung vom Vitocharge zur UV legen lassen. Es bleiben ja 2 Adern frei somit kann ich eine auf DND von der Vitocharge legen und dann den CAN2 vom E380 nutzen...
Aber wo kommt dann der 120 Ohm Widerstand hin?
immer an's Ende (an jedes) des Busses, also dann auf dem Adapter. Der Widerstand ist ja zwischen CAN_hi und CAN_lo, nicht zu Gnd. Die Brücke beim E380 entfernen nicht vergessen
also die Brücke parallel zu CanH & CanL an dem Adapter anschließen?
Ich komme jetzt an die Daten von der Vitocal. zumindest habe ich schon einige gefunden.
Was kommt eigentlich vom E380, gibt es dort auch Parameter die man abgreifen kann...?
hallo @der_Jörg
Danke für die schnelle Antwort.
Wenn ich unter MQTT explorer folgendes absende
{"mode": "read-json", "data":[0592]}
bekomme ich:
ERR = bad payload: b'{"mode": "read-json", "data":[0596]}'
Hallo zusammen,
ich verwende open3e erfolgreich. Vielen Dank nochmal an alle Mitwirkenden.
Ich habe jedoch 1 Problem und 2 Fragen.
1. Problem:
Wenn ich den HomeAssistant neustarten muss, zwecks Updates, startet auch der dort laufende MQTT Broker neu und der Client im open3e geht in einen Timeout. Danach verbindet es sich zumindest bei mir nicht selbstständig neu. Ich muss es killen und neustarten. Hat jemand dafür eine Lösung?
Frage 1: Verwendent ihr das automatische Update der Viessmann Anlagen? Ich habe 2 VX3 und das Update derzeit ausgeschaltet, weil ich Bedenken habe, dass Viessmann am Ende solchen lokalen Lösungen irgendwie nen Riegel vorschiebt.
Damit wären wir bei Frage 2. Regulatorisch ist das Nachladen des Akkus aus dem Netz glaube ich inzwischen erlaubt oder soll erlaubt werden. Richtig?
Falls Viessmann darauf reagiert benötige ich dafür wohl dann aber ein Update.
Hat jemand Erfahrung damit, ob man das mit Datenpunkten aus open3e steuern kann, bzw. mit welchen?
Ich hab da nicht wirklich etwas gefunden.
Vielen Dank
Moin @Sven73
ich habe es nicht so mit dem tippen, daher benutze ich den IOBroker mit den entsprechenden Adaptern.
Wie das dort auf tieferer Ebene gelöst wurde, den E380 auszulesen, entzieht sich daher meiner Kenntnis.
Angefangen habe ich ich mit open3e bzw. mein Bruder hatte mir das eingerichtet (Software-Ing.).
Als Endanwender waren mir das aber zuviele einzelne Programme / Prozesse (mqtt, grafanan, influx…) und ich habe mir dann halt den IOBroker angesehen. Da komme ich persönlich besser mit klar.
Anbei ein ausgeklappter Baum vom E380
Hallo @der_Jörg
okay, so weiß schon mal was geht.
Ich denke es hängt bei mir an der Abfrage. Ich habe ja das AddOn in Home-Assistant am laufen.
schauen wir mal wie ich an die Daten komme. werd mal eine Frage auf GitHub stellen.
Morgen geht meine VX3 in Betrieb, bin gespannt wie kommunikativ die dann sein wird.
moin @Sven73
> Wenn ich unter MQTT explorer folgendes absende {"mode": "read-json", "data":[0592]}
hm, das liegt wahrscheinlich da dran dass der Herr json mit der 0592 nix anfangen kann. versuch es bitte mal mit
{"mode": "read-json", "data":[592]}
Moin,
welches HA Addon meinst du genau? Das "homeassistant-addon-viessmann-gridbox" ?
Gruß
moin @HerrP ,
es liegt leider daran, dass der E380 kein UDS spricht und somit mit open3e nicht kommunizieren kann. Zumindest war das das im Februar noch so.. https://github.com/open3e/open3e/discussions/200
@HerrP schrieb:{"mode": "read-json", "data":[592]}
gibt mir einen anderen Datenpunkt zurück der nicht vom E380 kommt.
moin @Pollux !
das Problem ist ja, dass der MQTT Broker nach einem Neustart garnix mehr von open3e weiss. Wir machen ja ein mqtt_client.reconnect_delay_set() bei der Anmeldung, von daher denke ich, dass sich der client auch automatisch wiederverbindet, allerdings wird sich das nur auf Netzwerk-Aussetzer und sowas beziehen, nicht auf einen Neustart des Brokers.
Beim Anmelden an den Broker teilt ja der Client dem Broker mit, dass es ihn gibt, welche Topics er aboniert und allesowas. Das müsste er alles erneut tun. Das ist in der Struktur von open3e überhaupt nicht vorgesehen.
Was man ausprobieren könnte, wäre in der on_disconnect() Event-Prozedur eine (nicht abgefangene) Exception auszulösen, die open3e zum kontrollierten Absturz bringt und in der Folge systemd dazu, open3e neu zu starten. Vorraussetzung wäre natürlich, dass der Broker geordnet beendet wird und das disconnect überhaupt sendet.
Kennst du dich ein wenig mit Python aus? Könntest du in Open3Eclient.py eine Zeile einfügen?!
und das Ganze dann ausprobieren und Bescheid sagen, ob der Reconnect dann läuft wie geplant?!
und noch zu den Fragen:
Wir haben Viessmann schon mehrfach eine Zusammenarbeit angeboten/nahegelegt, haben darauf aber noch nie auch nur irgendeine Antwort erhalten...
Grüsse!
Phil
hallo @Flopsing
nein ich meine das o3e.
das läuft soweit super... im MQTT-brocker kann ich die Werte meiner Vitocal_200S schon auslesen. allerdings habe ich es noch nicht hinbekommen eine Entität anzulegen. Irgendwo mache ich da noch einen Fehler.
Es gibt aber eine Lösung für den E380 https://github.com/MyHomeMyData/E3onCAN/tree/main
das kann auch mit dem E380 kommunizieren aber eben nur lesend, was kein Problem für mich ist.
ABER: ich habe HA Blue image auf meinem Odroid N2+ installiert und keine Ahnung wie ich dort E3onCAN installieren kann. Ich komme von Linux/Ubuntu aber das funktioniert hier nicht, ist ein Docker image denke ich...
Wenn Du mir bei der Installation helfen kannst, kann ich das mal testen...
hai @Sven73
> es liegt leider daran
ich hatte jetzt nur auf das Formale geschaut. ERR = bad payload besagt ja, dass es mit dem Payload nix anfangen kann, wegen einer formalen Unverständlichkeit.
Ohne Angabe einer ECU liest read... immer von der 0x680, und da ist 592 ja MacAddressLan. Und du hast recht - der E380 ist keine ECU im Sinne von UDS, sondern nur irgendwie per CAN(open?) 'angeflanscht'. Es gibt aber glaubich auf der 0x680 (oder der VX3?) einen Datenpunkt, der die Infos vom E380 reflektiert. Den hab ich aber grad nicht parat... (ich hab nur eine Vitodens der Optolink Generation 😉 )
Ein solcher Datenpunkt wäre natürlich super und würde mir ein wenig Arbeit ersparen.
ich habe nur eine Core-Installation von Home-Assistant und die erlaubt keine Side-Installationen von AddOns
VX3 geht hoffentlich morgen an den Start. Dann kann ich ja mal probieren. Ansonsten muss das HA auf Ubuntu minimal umziehen…
je nach Setup möchte V ja glaubich mehrere E380 (einen vorm Netzzähler und einen vor der VX3 und ...). Je nachdem welchen du meinst vielleicht
1810 : O3EComplexType(4, "ElectricalEnergyInverterPowerAc", [O3EInt16(2, "ActivePower", scale=1.0, signed=True), O3EInt16(2, "ReactivePower", scale=1.0, signed=True)]),
3228 : O3EComplexType(73, "EnergyMeterOne", [O3EInt32(4, "PowerL1", scale=1, signed=True), O3EInt32(4, "ReactivePowerL1", scale=1, signed=True), O3EInt32(4, "PowerL2", scale=1, signed=True), O3EInt32(4, "ReactivePowerL2", scale=1, signed=True), O3EInt32(4, "PowerL3", scale=1, signed=True), O3EInt32(4, "ReactivePowerL3", scale=1, signed=True), O3EInt64(8, "EnergyImport", scale=100), O3EInt64(8, "EnergyExport", scale=100), O3EInt64(8, "Unknown1", scale=100), RawCodec(8, "Unknown2"), O3EInt16(2, "VoltageL1", scale=10), O3EInt16(2, "VoltageL2", scale=10), O3EInt16(2, "VoltageL3", scale=10), O3EInt16(2, "CurrentL1", scale=10), O3EInt16(2, "CurrentL2", scale=10), O3EInt16(2, "CurrentL3", scale=10), O3EInt16(2, "PowerFactor", scale=10), RawCodec(3, "Unknown3")]),
3229 : O3EComplexType(73, "EnergyMeterTwo", [O3EInt32(4, "PowerL1", scale=1, signed=True), O3EInt32(4, "ReactivePowerL1", scale=1, signed=True), O3EInt32(4, "PowerL2", scale=1, signed=True), O3EInt32(4, "ReactivePowerL2", scale=1, signed=True), O3EInt32(4, "PowerL3", scale=1, signed=True), O3EInt32(4, "ReactivePowerL3", scale=1, signed=True), O3EInt64(8, "EnergyImport", scale=100), O3EInt64(8, "EnergyExport", scale=100), O3EInt64(8, "Unknown1", scale=100), RawCodec(8, "Unknown2"), O3EInt16(2, "VoltageL1", scale=10), O3EInt16(2, "VoltageL2", scale=10), O3EInt16(2, "VoltageL3", scale=10), O3EInt16(2, "CurrentL1", scale=10), O3EInt16(2, "CurrentL2", scale=10), O3EInt16(2, "CurrentL3", scale=10), O3EInt16(2, "PowerFactor", scale=10), RawCodec(3, "Unknown3")]),
3230 : O3EComplexType(73, "EnergyMeterThree", [O3EInt32(4, "PowerL1", scale=1, signed=True), O3EInt32(4, "ReactivePowerL1", scale=1, signed=True), O3EInt32(4, "PowerL2", scale=1, signed=True), O3EInt32(4, "ReactivePowerL2", scale=1, signed=True), O3EInt32(4, "PowerL3", scale=1, signed=True), O3EInt32(4, "ReactivePowerL3", scale=1, signed=True), O3EInt64(8, "EnergyImport", scale=100), O3EInt64(8, "EnergyExport", scale=100), O3EInt64(8, "Unknown1", scale=100), RawCodec(8, "Unknown2"), O3EInt16(2, "VoltageL1", scale=10), O3EInt16(2, "VoltageL2", scale=10), O3EInt16(2, "VoltageL3", scale=10), O3EInt16(2, "CurrentL1", scale=10), O3EInt16(2, "CurrentL2", scale=10), O3EInt16(2, "CurrentL3", scale=10), O3EInt16(2, "PowerFactor", scale=10), RawCodec(3, "Unknown3")]),
3231 : O3EComplexType(73, "EnergyMeterFour", [O3EInt32(4, "PowerL1", scale=1, signed=True), O3EInt32(4, "ReactivePowerL1", scale=1, signed=True), O3EInt32(4, "PowerL2", scale=1, signed=True), O3EInt32(4, "ReactivePowerL2", scale=1, signed=True), O3EInt32(4, "PowerL3", scale=1, signed=True), O3EInt32(4, "ReactivePowerL3", scale=1, signed=True), O3EInt64(8, "EnergyImport", scale=100), O3EInt64(8, "EnergyExport", scale=100), O3EInt64(8, "Unknown1", scale=100), RawCodec(8, "Unknown2"), O3EInt16(2, "VoltageL1", scale=10), O3EInt16(2, "VoltageL2", scale=10), O3EInt16(2, "VoltageL3", scale=10), O3EInt16(2, "CurrentL1", scale=10), O3EInt16(2, "CurrentL2", scale=10), O3EInt16(2, "CurrentL3", scale=10), O3EInt16(2, "PowerFactor", scale=10), RawCodec(3, "Unknown3")]),
680 : RawCodec(123, "EnergyMeter"),
oder vlt irgendein anderer (es gibt 120 Treffer für 'Energy' in der datapoints).
vielleicht sagt ja einer was, der das im Einsatz hat!?
Moin,
das Plugin kannte ich noch nicht, aktuell hab ich beide Projekte via proxmox in einer VM mal zum laufen gebracht aber mangels Zeit das Thema nicht weiter verfolgt. Ich muss es aber auch mal wieder aufnehmen da die Verbindung VX3 -> Gridbox oft abbricht und man die ganze VX3 stromlos machen muss damit die Verbindung wieder aufgebaut werden kann.
das sind jetzt ausgaben von der VX3? Sprich ich müsste für den Zähler nicht noch das 2. Projekt laufen lassen da ich die Daten auch über die VX3 bekommen kann? Das wäre ja super.
Gruß
Benutzer | Anzahl |
---|---|
2 | |
2 | |
2 | |
1 | |
1 |