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
Klingt vernünftig. Im Moment kämpfe ich noch damit, dass der Access-Point sich nach 1-2 Stunden automatisch wieder zurück auf die normale Internetanbindung schaltet und ich so die Verbindung verliere. Kann man das irgendwie verhindern, weiß das jemand?
Hello, first of all, I'm sorry I don't speak German. Do I get it right that this project was tested on Viessmann Vitocal 200-S ? Because I do have one, but the information and the original photos I'm reading here are bit different than what I have. I bought the CAN adapter, try to run the python3 Open3E_depictSystem.py but with 0 COB-IDs found.
My setup is as follows:
the first unknown for me is where to find the CAN bus connector in my Vitocal 200-S. I can see one clearly on the main board but I'm not sure if this is the correct one.
I could not find any specs in documentation about it. You all are saing that you have connected to 91 connector, but i don't have it.
the second issue I have is with the SW. The python3 Open3E_depictSystem.py runs into an exception with the message "[Errno 105] No buffer space available". I managed to work around it by simply running it multiple times with lower number of COB-Ids in one run. The problem with the raspi zero 1 is that i can only have 24 opened sockets. The "close" method called on the Client is probably not working and it leaves the sockest open. Until it reached the max opened socets. So I've just run only 24 COBs, then reboot the raspi and continue with the next batch of 24 COBs. But at the ned no COB-ID responded in my case.
So basically either my Vitocal 200-S is not supported. Or I have used wrong CAN connector in Viessmann board or there is some problem with the connection itself. I'm a bit lost and have no idea how to continue.
Hi @Solimatorko ,
welcome to open3e! 🙂
Sorry, depictSystem has not been changed to the 'all-Python' communication as yet, so the errors you are experiencing are well known and are related to that. I will change that / get that changed as soon as possible...
Try cmd line option -dev vcal with Open3Eclient instead, this way most of the datatpoints should work. open3e was developed 'on' a Vitocal 200-S, as you can see on top of the thread.
Verify that CAN_Hi and CAN_Lo are connected the right way - hi to hi, low to low, I can't indetify 100% on the pics.
Probably you might have to 'close' this 'jumper' J3, too, to get the bus resistor on the other end. You require 60 ohms to get measured (nothing powered) as 2x 120 ohms 'in parallel.
In case of further issues do a ip -details -statistics link show can0 and post the output here.
to be honest - if the CAN connector isn't equipped, I'm not 100% sure that an external CAN bus exists at least on this board (never saw this before). Is there another CAN connector on the back of the 'control'? Or elsewhere? Look for a communication cable...
greetings!
Phil
ps. if you wouldn't find an external CAN, you might connect to the internal one. this will exist 99% sure and you will have even 'wider'/'deeper' access... 😉
Hat es jemand geschafft die Zirkulationspumpe auszuschalten?
Wollte es nicht ob das anpassen des Zeitplans lösen, ein {"mode": "write", "data":[[491,0]]}
hat bei mir nicht funktioniert...
Danke
Der Parameter 491 ist (im Raw-Mode) ein 2-Byte-Wert, es müssen also zum Schreiben im Raw-Mode auch wieder 2 Byte geschrieben werden (z.B. 00 05). Lies doch erstmal den Wert einmal bei eingeschalteter Z-Pumpe aus und einmal bei ausgeschalteter. Dann siehst du (eventuell), welches Byte du zum Ein/Ausschalten ändern musst.
@nils2410 schrieb:Hat es jemand geschafft die Zirkulationspumpe auszuschalten?
Zum Schalten der Pumpe schreibe ich einfach 0 oder 1 in den Datenpunkt state des Adapters. Das funktioniert alles wie gewünscht.
@galegro Wenn nils2410 die iobroker Adapterversion (3eoncan) benützt, dann ja. Er scheint aber open3e zu verwenden und da geht das Schreiben nicht ganz so einfach.
Mit open3e sollte es so gehen:
python3 Open3Eclient.py -c can0 -cnfg devices.json -w 0x680.491='{"State": 0, "Unknown": 0}'
"State":0 => Aus, "State":1 => Ein.
Bitte darauf achten, dass Hochkommata und Anführungszeichen genau so verwendet werden.
python3 Open3Eclient.py -c can0 -dev vdens -r 491
{'State': 1, 'Unknown': 0}
python3 Open3Eclient.py -c can0 -dev vdens -w 0x680.491='{"State": 0, "Unknown": 0}'
write: 1664.491 = {'State': 0, 'Unknown': 0}
success: True, code: 0
python3 Open3Eclient.py -c can0 -dev vdens -r 491
{'State': 1, 'Unknown': 0}
Hat leider nicht geklappt, überschreibt der Zeitplan den Wert wieder?
Hallo zusammen,
habe folgendes Problem:
ip -details link show can0
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can promiscuity 0 minmtu 0 maxmtu 0
can state ERROR-ACTIVE restart-ms 100
bitrate 250000 sample-point 0.875
tq 250 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
gs_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
clock 48000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
Ist das normal ?
Und dann beim ersten Aufruf vom open3Eclient kommt folgendes:
Python3 Open3E_depictSystem.py
Read DID enums ...
2951 DIDs listed.
scan COB-IDs 0x680 to 0x6ff ...
ECU found: 0x680 : EMCUMASTER
ECU found: 0x684 : HMI
ECU found: 0x68f : BMCU
Given response code "SubFunctionNotSupported" (0x12) is not a supported negative response code according to UDS standard.
Traceback (most recent call last):
File "/home/thajoker/open3e/Open3E_depictSystem.py", line 76, in scan_cobs
response = client.send_request(
File "/home/thajoker/.local/lib/python3.9/site-packages/udsoncan/client.py", line 2247, in send_request
raise NegativeResponseException(response)
udsoncan.exceptions.NegativeResponseException: ReadDataByIdentifier service execution returned a negative response SubFunctionNotSupported (0x12)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/thajoker/open3e/Open3E_depictSystem.py", line 284, in <module>
lstEcus = scan_cobs(startcob, lastcob)
File "/home/thajoker/open3e/Open3E_depictSystem.py", line 95, in scan_cobs
raise Exception(e)
Exception: ReadDataByIdentifier service execution returned a negative response SubFunctionNotSupported (0x12)
Komme hier irgendwie nicht weiter!
Irgendjemand eine Idee oder evtl. das gleiche Problem gehabt ?
Danke schon mal
@nils2410 Das ist natürlich auch möglich, aber irgendwie unterscheiden sich deine Hochkomma/Anführungszeichen auch von Jürgens Vorschlag.
Das Schreiben hat geklappt (success: True). Entweder der Zeitplan überschreibt es, oder die Adresse ist falsch. Lass mal die Adresse (0x680.) weg, also
python3 Open3Eclient.py -c can0 -dev vdens -w 491='{"State": 0, "Unknown": 0}'
Moin Freundinnen und Freunde von open3e!
ich habe gerade Open3E_depictSystem auf die all-Python Kommunikation geändert:
https://github.com/open3e/open3e/blob/depict_all_python/Open3E_depictSystem.py
Es wäre super, wenn das mal auf ein paar System mit CAN und auch am Access Point getestet würde. Bitte dann auch Rückmeldung. (ich kann es ja auch bekanntem Grund nicht an realer Anlage testen...)
einfach nur die Open3E_depictSystem.py in euer Verzeichnis kopieren und ausführen. Das System sollte dabei auf aktuellem Stand sein (Open3Eclient.py in der master oder develop Version muss laufen).
besten Dank & Grüsse!
Phil
python3 Open3Eclient.py -c can0 -dev vdens -w 491='{"State": 0, "Unknown": 0}'
write: 1664.491 = {'State': 0, 'Unknown': 0}
success: True, code: 0
python3 Open3Eclient.py -c can0 -dev vdens -r 491
{'State': 1, 'Unknown': 0}
Hat den gleichen Effekt, aktuell steht der Zeitplan auf immer eingeschaltet, ich werde da noch etwas testen, das schreiben des Parameter funktioniert ja grundsätzlich
Bei meiner Vitodens 300-W bekomme ich den Schalter 491 nicht zum laufen, also doch per Zeitplan 😑
Für den Fall das andere eine vergleichbare Lösung suchen hier der MQTT Payload:
Einschalten:
{"mode": "write", "data":[
[726,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[727,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[728,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[729,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[730,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[731,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}],
[732,{"Count": 1, "Schedules": [{"Start": "00:00", "Stop": "24:00", "Unknown": "0000", "Mode": 3}]}]
]}
Ausschalten:
{"mode": "write", "data":[
[726,{"Count": 0, "Schedules": []}],
[727,{"Count": 0, "Schedules": []}],
[728,{"Count": 0, "Schedules": []}],
[729,{"Count": 0, "Schedules": []}],
[730,{"Count": 0, "Schedules": []}],
[731,{"Count": 0, "Schedules": []}],
[732,{"Count": 0, "Schedules": []}]
]}
Hallo Phil und alle anderen,
auch ich bin stark interessiert an einem Weiterkommen in dieser Sache.
Meine Geräteschaft : Vitocharge VX3 8.0A10 mit Energiezähler seit ca. 2 Monaten im Einsatz. C'est tous.
An einem ähnlichen Projekt war ich bei einer Stiebel Wärmepumpe bereits involviert. Die Anstrengungen waren leider nicht gerade so von Erfolg verwöhnt.
Ich würde meine Lösung gerne mit ESP32/8266 probieren, da ich bereits seit Jahren fhem in Verbindung mit MQTT (hier mehrere ESP32/8266) zur Steuerung und Messwerterfassung) und jetzt auch IOBroker (für meine beiden Stromzähler, auch auf Basis ESP8266) realisiert habe. Würde auch gerne hier zu dem Gesamterfolg tatkräftig beitragen
Mit CAN hatte ich etwa vor anderthalb Jahren schon erste Erfahrung gesammelt, ist aber bestimmt noch ausbaufähig.
Gruss Harald
Moin Harald!
ESP is so ne Sache, weil mit dem MicroPython open3e/udsoncan glaubich nicht geht. Es gibt auf github/open3e ein paar Threads dazu, auch zu alternativen 'Lösungen' mit ESP, musst mal schauen. Ist aber alles mit 'Limitierungen' behaftet. E3 ist ja auch kein pures CAN, sondern mit higher Layer Protokollen (ISO-TP, UDS)...
wenn du da was hinbekommst, bitte gerne auch auf open3e teilen! Das Interesse an ESP ist durchaus 'signifikant'.
Grüsse!
Phil
Moin moin,
weiß jemand, wie die Codierung der Schnellwahlen funktioniert? Bei meiner Vitodens 300 kann ich z.B. "1x WW-Speicherladung" oder "verlängerte Heizphase" auswählen. Bei WW ändert sich dann die
vdens 1007 CurrentQuickMode "000000"
zu
vdens 1007 CurrentQuickMode "020100"
Ich kann jetzt mal alle Kombinationen durchtesten (wird vermutlich eine binäre Addition sein), aber vielleicht hat das ja schon mal jemand entschlüsselt.
cu,
Frank
@FrankSteiner Schnellwahlen (ohne Gewähr 😉) :
einmalig WW EIN: Parameter 1006: 02 01 00
einmalig WW AUS: Parameter 1006: 00 00 00
verlängerte Zeitphase EIN: Parameter 1008 (HK1): 01 01 00
verlängerte Zeitphase AUS: Parameter 1008 (HK1): 00 00 00
Betriebsart WW Standard EIN: Parameter 531: 01 01
Betriebsart WW AUS: Parameter 531: 00 00
Betriebsart Heizen EIN: Parameter 1415 (HK1): 01 02
Betriebsart Heizen AUS: Parameter 1415 (HK1): 00 00
Beim Parameter 1415 definiert Byte 2 den Heizmodus:
01 = Nachtabsenkung
02 = Standard
03 = Komfort
Dieser Heizmodus wird aber sofort überschrieben vom aktuell im Zeitprogramm vorgegebenen Heizmodus.
Hallo Harald, wenn Du ioBroker nutzt, solltest Du Dir den Adapter e3oncan mal anschauen. Den habe ich auf Basis von open3e entwickelt. Mit dem Adapter holst Du die Daten Deiner Anlage direkt in ioBroker rein, ohne Umweg über MQTT.
Falls eine direkte Anbindung vom ioBroker-Rechner zum CAN-Bus nicht möglich/sonnvoll ist, könntest Du dafür einen Pi Zero verwenden und den über Multihost direkt in ioBoker einbinden.
Gruß, Jürgen
Super, vielen Dank!
I was able to find
but no other CAN. I will try terminate the one with 120 Ohm resistor
Dreman Guru und Juergen-B Experte II
Ich habe noch ein paar Fragen zu den Parametern 2426, 2427,2428,2429
Eure Erklärung ist gut und schlüssig, aber ich ,als Laie, habe noch Fragen.
Byte 2/3 a6ff entspricht -9 , a000 entspricht +1
Welche Werte sind zulässig ?
Um im Byte 2/3 Werte -7 , -6 , -5 ,-4 ,-3, -2, -1 darzustellen.
Wie kann man es selbst ausrechnen?
Oder ist es zu kompliziert?
Vielen Dank
Der Adapter von @Juergen-B funktioniert - obwohl noch beta - hervorragend. Beispielsweise waren die Berechnung und Visualisierung der COP-Werte hiermit ein Kinderspiel.