philippoo66 / optolink-splitter

Splitter for Viessmann Optolink connection
GNU General Public License v3.0
14 stars 3 forks source link

Vitocal 200s (CU401B_S) auslesen #44

Open timbrd opened 6 days ago

timbrd commented 6 days ago

Hallo,

seit einiger Zeit funktioniert das Auslesen einiger Stromverbrauchswerte meiner Vitocal 200s. @philippoo66, nochmal danke für deine Hilfe!

Zwischenzeitlich habe ich mit open3e auch meine PV-Anlage, den Stromspeicher und Energy-Meter angebunden.

Ich möchte mich nun wieder der Wärmpepumpe widmen und weitere Daten auslesen. Hierfür habe ich mir aus dem openv-Wiki eine Liste von Adressen (DP-Listen) heruntergeladen. Für meine Vitocal gibt es auch eine entsprechende Datei (CU401B_S).

Einige Daten konnte ich damit auch sauber auslesen, bei anderen habe ich aktuell noch Probleme. Beispielsweise erhalte ich bei den Temperaturangaben für Warmwasser nur unsinnige Werte.

Folgendes steht in der DP-Liste:

- WW Temperatur Oben (7714) [WPR3_WW_Temperatur_Oben~0x01CD (SInt)] HIDDEN:("WW Temperatur Oben"="Sensor nicht vorhanden")
- WW Temperatur Mitte (7718) [WPR3_WW_Temperatur_Mitte~0x01CF (SInt)] HIDDEN:("WW Temperatur Mitte"="Sensor nicht vorhanden")
- WW Temperatur Unten (7716) [WPR3_WW_Temperatur_Unten~0x01CE (SInt)] HIDDEN:("WW Temperatur Unten"="Sensor nicht vorhanden")
- WW Temperatur Ausgang (7720) [WPR3_WW_Temperatur_Ausgang~0x01D0 (SInt)] HIDDEN:("WW Temperatur Ausgang"="Sensor nicht vorhanden")
- (6000) Warmwassertemperatur-Sollwert (7142) [WPR_WW_Temp_soll~0x6000 (SInt)]

In meiner settings._ini.py:

("WW Temperatur Oben (01CD)", 0x01CD, 3, 0.1, True),
("WW Temperatur Unten (01CE)", 0x01CE, 3, 0.1, True),
("WW Temperatur Mitte (01CF)", 0x01CF, 3, 0.1, True),
("WW Temperatur Ausgang (01D0)", 0x01D0, 3, 0.1, True),
("WW Temperatur Soll (6000)", 0x6000, 3, 0.1, True),

Die ausgelesenen Werte:

WW Temperatur Oben (01CD): 4194477.0
WW Temperatur Unten (01CE): 458752.0
WW Temperatur Mitte (01CF): 39321.6
WW Temperatur Ausgang (01D0): 6598.6

Setze ich den Datentyp bzw. die Länge in der settings_ini.py auf "2", dann wird gar kein Wert zurückgegeben. In diesem Thread hier wurde dies ebenfalls angemerkt, die Frage wurde aber leider nicht beantwortet.

Könnte mir jemand unter die Arme greifen und mir einen Hinweis geben, wie ich hier weiterkomme?

philippoo66 commented 5 days ago

moin Tim!

3 ist eine sehr ungewöhnliche Länge, das hab ich noch nicht gesehen. SInt steht ja nun auch eindeutig für 2. Nur weil Werte kommen, wenn man eine unsinnige Länge ausliest, heisst das nicht dass die Werte irgendeinen Sinn ergeben.

Hast du denn mehrere Sensoren im Speicher?

Hast du mal einfach die AD's ausgelesen (0x0800/802/804/.../80A/80D, alles 2 Bytes 1/10 Grad)? Vielleicht kommst du damit ja weiter... Bei mir ist 804 der (einzige) Speichersensor.

timbrd commented 5 days ago

moin Tim!

3 ist eine sehr ungewöhnliche Länge, das hab ich noch nicht gesehen. SInt steht ja nun auch eindeutig für 2. Nur weil Werte kommen, wenn man eine unsinnige Länge ausliest, heisst das nicht dass die Werte irgendeinen Sinn ergeben.

Hast du denn mehrere Sensoren im Speicher?

Hast du mal einfach die AD's ausgelesen (0x0800/802/804/.../80A/80D, alles 2 Bytes 1/10 Grad)? Vielleicht kommst du damit ja weiter... Bei mir ist 804 der (einzige) Speichersensor.

Tatsächlich erhalte ich bei 0x0882 einen Wert (49.6), der meiner Warmwassertemperatur entspricht (ich beobachte noch). Allerdings habe ich im Haus zwei Warmwasserkreise und von 0800-08F8 finde ich den Wert für den zweiten Kreis nicht. Wenn 0882 tatsächlich die Temperatur eines Warmwasserkreises angibt, ist dann die DB-Liste falsch, die ich verwende? Oder sind sie grundsätzlich fehlerbehaftet?

philippoo66 commented 3 days ago

die Listen sind jedenfalls grundsätzlich unvollständig. mit falsch oder nicht fällt mir schwer zu sagen wegen den ganzen 'HIDDEN's. Hatte @FransOv nicht schon eine Tabelle für deine Anlage generiert? Oft sind seine ja etwas treffender...

FransOv commented 3 days ago

Temperature parameters of length 3 consist most of the times of 2 bytes temperature followed by a 1 byte sensor status. you can use the byte-bit filter to extract the temperature.