-
Notifications
You must be signed in to change notification settings - Fork 28
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
VitoConnect 100 mit Raspberry PI als Proxy #425
Comments
Zum Thema Mitschneiden des Datenverkehrs der vitoconnect 100 s.a. Bauanleitung USB_Duo Sniffer. Dort ist eine alternative Hardware dafür beschrieben und es sind ein paar daraus gewonnene Erkenntnisse beschrieben. |
Ja, diese Bauanleitung habe ich gesehen und gelesen, da hatte ich meine Hardware schon fertig. |
Ich schau mal, ob ich das vcontrold auf dem PI an meinen Proxy "anflanschen" kann. |
Hallo muu55, ich habe einen ähnlichen Aufbau mit meinem Raspi3 versucht:
Mit python ein paar zeilen Code geschrieben:
Bisher kann ich sehen, dass vom Optrolink periodisch 0x05 geschickt wird, was auch an den VitoConnect rausgeht - dieser reagiert aber garnicht (sendet auch nichts von sich aus ...) Habe ich etwas vergesen? Hast Du vielleicht eine Idee oder Dein Beispiel-Code? P.S.: Losgelöst von diesem Versuch funktioniert die ViCare-App und ich kann auch einige Daten manuell auslesen. |
Also ich vermute, die VitoConnect erwartet an ihrem USB-Port einen USB-Seriell Adapter mit CP210x Chip, der dieselbe Vendor:Chip ID wie das Optolink-Kabel hat. Also z.B. die in Uwes Bauanleitung aufgeführten "CJMCU CP2102 MICRO USB to UART TTL Module 6 Pin serial Converter". |
Das kleine C-Programm findet sich hier: https://github.com/muu55/vitolog.git |
Hier die Addressen+Länge, die von "meiner" VitoConnect100 laufend abgefragt werden: 00 F0 02 08 10 04 TiefpassTemperaturwert_KTS 20 00 30 WPR_HK1_Normaltemperatur |
Danke für den Hinweis. |
Hast du @muu55 eine Möglichkeit, die Kommunikation der VitoConnect mit dem Viessmann-Server mitzuschneiden (z.B. mitmproxy? Kannst du in den Logs Kommunikation finden, die nicht ReadData/0x01/Virtual_Read oder WriteData/0x02/Virtual_Write, sondern z.B. Funktion Calls/0x07/Remote_Procedure_Call sind? (wg. Ergänzung der Dokumentation von Protokoll 300) Falls du die XML-Dateien der VitoSoft mal angeschaut hast:Es gibt EventTypes mit der gleichen Adresse, aber unterschiedlicher BytePosition (quasi Offset). Kannst du erkennen, ob der Zugriff dann auf Adresse+BytePosition in ByteLength Länge stattfindet oder ob die Adresse in voller BlockLength abgefragt wird? Und wie sieht das beim Schreiben von EventTypes aus, die eine BitLength > 0 haben? |
Ich habe längere Zeit die Daten mit dem Sniffer aufgezeichnet, die Vitoconnect mit der Heizung (also auf der seriellen Ebene) austauscht. Zum Viessmann-Server sollte er dann wohl nichts anderes schicken können, als er von der Heizung geliefert bekommt. Auszug siehe Excel-Datei hier. In dieser Datei Vitoconnect-Output.zip Was den beschriebenen Adressraum anbelangt: Ich glaube jetzt, dass die Adressen eher als Befehle zu verstehen sind, die die Heizungssteuerung mit unterschiedlich langen Datensätzen beantwortet. Damit werden nicht einfach Speicherplätze im Bereich von 0x0000 bis 0xFFFF adressiert und das dort gespeicherte Byte zurückgegeben.
liefert
Im Antwortdatensatz mit 22 Byte Nutzdaten stecken laut "ecnEventType.xml" (aus der Vitosoft-Demo) Was mich irritiert: An der gleichen Adresse kann auch ein Datensatz mit 17 Byte Datensatzlänge abgefragt werden kann. Laut der obigen XML-Datei sind dann andere Daten unter den genannten Bytepositionen/Offsets verfügbar. Z.B. an Pos. 2 steht anstelle "HK_AufheiztimerA1M1" der Wert von "NRF_HK_VT_Solltemperatur_A1M1". |
Danke für dein Log. Im 4. Byte der Antwort wo der klassischen P300 Protokolldefinition nach nur 0x01, 0x02, 0x07 vorkommen dürfte, sind Bits 7,6,5 offenbar als Zähler (0..7) verwendet worden (da kann man sich Anwendungsmöglichkeiten ausdenken: Erkennung fehlender Pakete, Zuordnen von Anfragen zu Antworten, ...). Hast du ein Log, wo die Anfragen der Vitoconnect auch auftauchen? PS: |
Hallo Sönke,
Meine Vermutungen zu diesen drei ominösen Bits (und was mir sonst noch so aufgefallen ist) hatte ich hier geschildert.
Die Adresse 0x00F0 erscheint in der "ecnDataPointType.xml" (aus der Vitosoft-Demo) nicht, jedenfalls nicht unter Device-ID "VScotHO1_4" - die hier zutreffen sollte. In der "ecnEventType.xml" (auch aus der Vitosoft-Demo) steht sie mit der Bezeichnung "KBUS_V300_T03_VirtKanal_07" und der Länge von zwei Byte.
Bislang habe ich nur ganz wenige Schreibvorgänge manuell ausgelöst und mitgeloggt. Die Fehlerhistorie (an 0x7507) habe ich nicht angefasst. Da dieser Datenpunkt als read/write ausgewiesen ist, kann man den Inhalt evtl. einfach auf Null setzen?? Gruß |
Mein Programm schreibt die Kommunikation zwischen Heizung und VitoConnect100 nach stdout. Die Zeilen mit 0: kommen von der VitoConnect100, die Zeilen mit 1: von der Heizung. 0: 04 Um die Kommunikation von der VitoConnect nach Hause (Viessmann Server) zu analysieren, |
Könntest du den Python-Code sharen? Ich habe einen ähnlichen Aufbau vor, es geht erstmal nur darum die Daten mitzulesen. In meinem Fall ein Pellet-Kessel (Vitoligno 300-C), bei dem es nützlich wäre einige Werte zu erfassen (Anzahl Zündvorgänge, Brenndauer, Pelletverbrauch,...). Leider bietet die App nichts davon an, ich vermute aber das das Vitoconnect die Werte ausliest. Ziel wäre es, dieses auf dem Raspi abzuzweigen und separat wegzuschreiben (z.B. Grafana). |
Hallo hendrikland, hier mein Beispiel. Aufruf ist dann z.B. Und es ist ein UART mit dem Chip CP2102 notwendig (PL2303 geht definitiv nicht) .
|
@hendrikland |
Please tell me the request address V100 |
@hendrikland Bist du mit dem Vitoligno 300-C weiter gekommen? Ich würde meinen auch gerne anbinden und die Werte von dir interessieren mich auch. Danke und Gruß |
@idstein wärst du bitte so nett und teilst kurz dein ESP Sources/Aufbau und eine kurze Beschreibung was du mit deinem DEV Board gemacht hast? Braucht keine große Beschreibung, vorallem interessiert mich wie du den USB Traffic forwardest / interceptest |
ich hab mir jetzt eine Bridge gebaut, womit man vcontrold und vitoconnect parallel betreiben kann und die fehlenden Werte kriegt: https://github.com/h0nIg/vcontrol-vitoconnect-bridge/ |
Hi @idstein das sieht ja sehr spannend aus, kannst du deine ESPhome config teilen? |
Hy @idstein Echt cooles Projekt :) mfg |
Aktueller Stand baut das ganze auf ESPHome bei mir lokal auf fürs Management, Updates, ein bisschen Security usw. Die Funktionalität die Werte konkret auszulesen habe ich noch nicht finalisiert, ich hoffe aber demnächst hier weiter zu kommen. Funktion
Roadmap
Hardware
Software
|
Hy @idstein Echt ein MEGA-COOLES Projekt :) Danke, dass du das Projekt mit uns teilst 😄 Mfg |
Hi @idstein, Vielen Dank! |
Hi @idstein, mfg |
Moin ihr! |
Morgen, mfg |
aber da is eine Vitotronic drin, oder? da könnte dan im Menü unter 'Service' ganz hinten ein Punkt 'Software Information' oder so sein. Das Passwort dafür ist 'vimaster' HW/SW Index sind das 3. und 4. Byte von F8, ich glaube die Zahl vor dem Punkt ist F0. Ich gehe davon aus, dass bei einer Vitotronic die ersten beiden F8 Bytes 20 CB sind... |
könntest du das mal checken beizeiten? ;-) |
@philippoo66 |
wenn du den vom Jul 23, 2022 meinst - das ist eine HO2B. Meine ist eine HO2C. Die beiden Steuerungen unterscheiden sich nur minimal in der grafischen Darstellung. Diesen Bildschirm wirst du auch kennen? Wenn man da nach rechts scrollt, gibt es 'Servicefunktionen', dahinter dann wieder rechts gibt es den Punkt Softwareinformation... Ist aber auch nicht so wichtig, hätte mich nur interessiert. Ich war nämlich etwas verwundert, dass ich in dem alten Vitosoft Kram die DP Adresslisten für Wärmepumpen gefunden hatte, aber scheibar ist das ja erklärbar. Und wenn du die API benutzt, hast du wohl auch keine Verwendung für Optolink Adressen. Ich dachte nur, weil du den eingeschränkten Umfang bei der API moniertest.... Mit Optolink kann man halt alles machen. Sogar die Gerätekennung ändern. Ziemlich nutzlos, aber zeigt was geht... ;-) |
@m1k3f15h : so würde ich es auch gerne machen da ich wegen der Garantie dass vitoconnect weiterlaufen lassen möchte.... |
@challo2018 : Ja leider meldet sich @idstein aktuell nicht mehr.. Der hat ja da schon was zusammen gebracht :) |
Amazing work! I'm using a rpi1 with the same setup @DivisionDurchNull mentioned in his post. But as proxy script I copied your bridge.py and just changed the serial targets towards my setup. Vcontrol-Service also runs on the raspberry and queries the tcp-socket opened by the bridge.py. Vcontrol is then queried by the Vcontrold-Addon in Homeassistant which pushes the values to mqtt an makes them available in Homeassistant. So far everything is working flawless. ViCare-App seems not to notice any interruption. Kudos to @h0nIg & @DivisionDurchNull |
@mattjes04 : does this solution also allow to set values with vcontrold? |
Jup, Warmwasserbereitung auf Anforderung funktioniert einwandfrei. |
Hört sich auch nach einer guten Lösung an, allerdings wäre man hier dann nochmal auf rasperry basis. |
Hi, THX! |
@philippoo66 ja genau der 😊 Ja ich will die Serielle Kommunikation mitschneiden und dann via vcontrold den ioBroker.viessmann Adapter anflanschen, um die Daten im ioBroker als Datenpunkte zu erhalten, zur Visualisierung in Grafana. Mein bisheriges Grafana Dashboard mit Daten aus der Viessmann API |
Wie hast du die Bedeutung und IDs der Datenpunkte rausgefunden? Das frage ich mich schon länger. Habe eine Pelletheizung von Viessmann und bisher noch keine Infos dazu gefunden. Würde aber auch ungern extra das Vitoconnect dafür kaufen und in Betrieb nehmen. |
@ggrote meine Dashboard läuft mit der Viessmann API und die Vitoconnect übermittelt die Daten in die API. Die Unterstützten API Datenpunkte kann man im ioBroker schön mittels Objektbaum auslesen. (Meine genutzten von Vitocal 333G) Bzgl. Node-Red Auch ein schöner Weg 😊 |
Ich bevorzuge halt Cloudfreie Lösungen und habe gerne alles lokal in meinem Netzwerk, daher kommt für mich die Viessmann Api mit Hilfe von Vitoconnect nicht in Frage. Aber danke für den Hinweis mit dem Dev Portal. Muss ich mich mal anmelden, ggf. finde ich dort ein paar Datenpunkte für meinen Vitoligno 300-C Pelletkessel. Node-Red ist wirklich super und mega vielseitig. Zusammen mit MQTT, Influx und Grafana meiner Meinung nach unschlagbar. Aber jeder wie er mag. ;) |
Moin ihr! :-) @ggrote die Datenpunkte findest du mit aller Wahrscheinlichkeit so wie hier beschrieben https://github.com/philippoo66/ViessData21/blob/master/DataPoints_ReadMe.txt und schau auch noch was dazu unter https://github.com/philippoo66/ViessData21 steht, wie man möglicherweise auch noch an welche kommt, die evtl. nicht in der Liste sind. Dann noch einen Optolink Adapter gebastelt oder gekauft, und du hast die volle Bandbreite Datenpunkte ohne blöde Cloud und Heizung im Internet und ohne teures Vitoconnect. @ckoeber83 die Lösung deines Anliegens steht doch eigentlich schon oben. bridge.py realisiert ja das, was ich im V Forum beschrieben hatte, und es scheint ja doch nicht zu Timeout zu führen, was ich befürchtet hatte. Und du liest eben nicht (nur) mit, sondern hast eine vollständige 'quasi-parallele' Kommunikation. beste Grüsse! |
Wahnsinn! Danke! Hoffe da ist auch was für die Vitoligno 300-C bei. |
um die Gerätekennung und ggf. ecnsysDeviceIdent auszulesen brauchst du natürlich schon einen Kommunikationsadapter... hast du einen? |
Noch nicht, aber alles für da. Muss quasi nur noch zusammengebaut werden. Dafür fehlt mir bei gefühlt 500 anderen Projekten im und ums Haus aber die Zeit. Trotzdem verfolge ich hier alles. |
UPDATE! Installing PySerial package on Linux using PIP Step 2: Now, using the following command we install the pip module which is required to install and manage all the packages of Python3: Step 3: Using the following command we install the PySerial package: Verifying PySerial package installation on Linux using PIP _Hi, ich kann die vcontrol-vitoconnect-bridge nicht öffnen.
Serial devices habe ich aber euf meine entsprechenden angepasst:
Fehlt mir hier ein Modul in Python? |
Meine neue Heizung (Vitodens-222 F) kann ich mittels der ViCare App "fernbedienen", leider ist der Funktionsumfang dieser App, na sagen wir mal, "begrenzt". Das schreit nach einer Verbesserung, wobei ich die wesentlichen Komponenten ja bereits habe und auch in ihrer bisherigen Funktion erhalten möchte.
Am schönsten wäre natürlich, ich könnte mich auf der VitoConnect anloggen und direkt
(also ohne das Internet) meine Heizung abfragen und steuern. Das wüde den Nutzen so
einer Box erheblich steigern, ist vom Hersteller aber wohl nicht vorgesehen (?).
Also hab ich mir etwas ausgedacht.
Benötigte Bauteile: Eine Viessman Heizumg mit VitoConnect 100 Typ OPTO1,
ein Raspberry PI Zero WH und ein CP2102 USB-Seriell Adapter.
Um sowohl zu verstehen, was die VitoConnect 100 mit meiner Heizung redet, als auch eigene Kommandos zu senden, habe ich zwischen das original OPTO-Link Kabel und die VitoConnect 100 einen Raspberry PI Zero gehängt, den ich um einen CP2102 USB-Seriell-Adapter erweitert habe.
Das Optolink Kabel verbinde ich über ein "USB-A Buchse auf Micro-USB Stecker"-Kabel mit der USB-Buchse vom PI-Zero. Den CP2102 Adapter verbinde ich über drei Leitung (GND, Tx, Rx) mit dem seriellen Port des PI Zero auf der GPIO Pinleiste und auf der USB-Seite mit der Vitoconnect 100.
Fertig ist die Hardware. Dazu noch ein kleines Programm, das die beiden seriellen Schnitstellen miteinander verbindet und die Daten beim Durchreichen mitprotokolliert.
Schon hat man einen einfachen Proxy mit man-in-the-middle Option.
Erste Erkenntnis: Die VitoConnect 100 redet ununterbrochen mit der Heizung.
Also nicht nur, wenn ich mit der ViCare App eine Verbindung aufbaue oder etwas abfrage.
Offenbar wird dabei das Protokoll 300 (bzw. eine erweiterte Variante) verwendet.
Ich sammle erstmal noch Daten. Sobald ich mehr davon verstehe, versuche ich auch eigene Kommandos auszuführen. Wer so einen Proxy nachbauen will oder wem diese kurze Beschreibung nicht konkret genug war, bitte einfach melden.
The text was updated successfully, but these errors were encountered: