IDM Wärmepumpe einlesen
Moderator: Ulrich
IDM Wärmepumpe einlesen
Hallo,
ich habe die "weishaupt_wp.php" genommen und diese etwas umgebaut, dass meine IDM WP Aero SLM6-17 in die Solaranzeige integriert wird. Das hat auch soweit gut funktioniert, da die Schnittstelle Modbus TCP und der Port 502 ist. Es kommen damit auch viele Daten richtig an. Nur bei den Temperaturen spielen diese verrückt.
Im Anhang sende ich einen Auszug aus dem Grafana-Dashboard wie diese ausschauen. Ich lese derzeit absichtlich nur die Rohwerte ein, aber diese schwanken in einem Bereich von +/- 20.000 obwohl die Temperaturen auf der WP selbst absolut konstant sind. Lt. Modbus Register der WP werden diese als "Float" gesendet (ab Seite 13). Habe ich da einen Fehler in meinem Programmcode irgendwo eingebaut. Im Anhang noch die umgebaute PHP-Datei und die Modbus-Registerdatei der WP.
Kann jemand dazu sachdienliche Hinweise geben? Danke schon mal im Voraus!
lg Helmut
ich habe die "weishaupt_wp.php" genommen und diese etwas umgebaut, dass meine IDM WP Aero SLM6-17 in die Solaranzeige integriert wird. Das hat auch soweit gut funktioniert, da die Schnittstelle Modbus TCP und der Port 502 ist. Es kommen damit auch viele Daten richtig an. Nur bei den Temperaturen spielen diese verrückt.
Im Anhang sende ich einen Auszug aus dem Grafana-Dashboard wie diese ausschauen. Ich lese derzeit absichtlich nur die Rohwerte ein, aber diese schwanken in einem Bereich von +/- 20.000 obwohl die Temperaturen auf der WP selbst absolut konstant sind. Lt. Modbus Register der WP werden diese als "Float" gesendet (ab Seite 13). Habe ich da einen Fehler in meinem Programmcode irgendwo eingebaut. Im Anhang noch die umgebaute PHP-Datei und die Modbus-Registerdatei der WP.
Kann jemand dazu sachdienliche Hinweise geben? Danke schon mal im Voraus!
lg Helmut
- Dateianhänge
-
- ma_de_812170_Modbus TCP_Navigator 2.0.pdf
- (1.43 MiB) 210-mal heruntergeladen
-
- IDM_Aero_SLM6-17.php
- (22.16 KiB) 95-mal heruntergeladen
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: IDM Wärmepumpe einlesen
Wenn es sich um eine Float Zahl handelt, versuche es bitte einmal mit folgender Funktion:
xxx = $funktionen->hex2float($Ergebnis["Wert"]);
xxx = $funktionen->hex2float($Ergebnis["Wert"]);
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Re: IDM Wärmepumpe einlesen
Hallo Ulrich,
danke für die schnelle Hilfe. Leider hat der hex2float kein für mich brauchbares Ergebnis gebracht. Es wurde mir ein Wert von 5746874958E-39 ausgespuckt. Zumindest kann ich das Ergebnis nicht wirklich deuten.
Auch mit hex2float32, hex2float64 und _hex2float kam nichts brauchbares heraus.
Ich habe mir dann die Rückgabewerte von "modbus_tcp_lesen" angeschaut.
11.07. 20:39:45 -Register 03e8
11.07. 20:39:45 -RawDaten 0087000000050104021550
11.07. 20:39:45 -Transaction 0087
11.07. 20:39:45 -Protocol 0000
11.07. 20:39:45 -Länge 0005
11.07. 20:39:45 -Adresse 01
11.07. 20:39:45 -Befehl 04
11.07. 20:39:45 -DatenLänge 2
11.07. 20:39:45 -Wert 1550
Dabei ist mir Datenlänge 2 aufgefallen. Kann es sein, dass der Rückgabewert aus mehreren Teilen besteht? Hast du dahingehend Erfahrung bei anderen Projekten sammeln können?
lg Helmut
danke für die schnelle Hilfe. Leider hat der hex2float kein für mich brauchbares Ergebnis gebracht. Es wurde mir ein Wert von 5746874958E-39 ausgespuckt. Zumindest kann ich das Ergebnis nicht wirklich deuten.
Auch mit hex2float32, hex2float64 und _hex2float kam nichts brauchbares heraus.
Ich habe mir dann die Rückgabewerte von "modbus_tcp_lesen" angeschaut.
11.07. 20:39:45 -Register 03e8
11.07. 20:39:45 -RawDaten 0087000000050104021550
11.07. 20:39:45 -Transaction 0087
11.07. 20:39:45 -Protocol 0000
11.07. 20:39:45 -Länge 0005
11.07. 20:39:45 -Adresse 01
11.07. 20:39:45 -Befehl 04
11.07. 20:39:45 -DatenLänge 2
11.07. 20:39:45 -Wert 1550
Dabei ist mir Datenlänge 2 aufgefallen. Kann es sein, dass der Rückgabewert aus mehreren Teilen besteht? Hast du dahingehend Erfahrung bei anderen Projekten sammeln können?
lg Helmut
- Ulrich
- Administrator
- Beiträge: 6320
- Registriert: Sa 7. Nov 2015, 10:33
- Wohnort: Essen
- Hat sich bedankt: 159 Mal
- Danksagung erhalten: 933 Mal
Re: IDM Wärmepumpe einlesen
Kann es sein, dass das Ergebnis ganz einfach 15,5 °C ist?
Also:
Temperatur = ( $Ergebnis["Wert"]/100 );
Also:
Temperatur = ( $Ergebnis["Wert"]/100 );
-----------------------------------------------------
Ulrich . . . . . . . . [ Admin ]
Ulrich . . . . . . . . [ Admin ]
Re: IDM Wärmepumpe einlesen
Hallo Ulrich,
ich bin inzwischen draufgekommen, dass der Rückgabewert aus 2x Word besteht. Das Lower-Word beinhaltet anscheinend den tatsächlichen Wert und der kommt tatsächlich immer konstant daher.
Ich habe jetzt nur das Problem, dass ich den Wert richtig interpretiere:
41fb = 16891 (Umwandlung hex2decs) und das entspricht 31,7°C.
Wie komme ich nun auf den korrekten Wert?
lg Helmut
ich bin inzwischen draufgekommen, dass der Rückgabewert aus 2x Word besteht. Das Lower-Word beinhaltet anscheinend den tatsächlichen Wert und der kommt tatsächlich immer konstant daher.
Ich habe jetzt nur das Problem, dass ich den Wert richtig interpretiere:
41fb = 16891 (Umwandlung hex2decs) und das entspricht 31,7°C.
Wie komme ich nun auf den korrekten Wert?
lg Helmut
-
- Beiträge: 54
- Registriert: Do 10. Feb 2022, 10:44
- Hat sich bedankt: 2 Mal
- Danksagung erhalten: 12 Mal
Re: IDM Wärmepumpe einlesen
Hi,
was du bekommst ist ein Floatwert in 2 Registern.
Du musst also beide Werte (0x41 und 0x FB) lesen und damit den Floatwert ermitteln mittels hex2float.
Wenn da Fantasiewerte rauskommen dann musst du die Reihenfolge deiner beiden Werte ändern.
Also anstelle von 0x41FB auf 0xFB41.
Da hat es was mit little und big endian.
Deine IDM liefert little endian Werte; 0x41FB ergibt 31.375 in Dezimalschreibweise.
LG,
Michael
was du bekommst ist ein Floatwert in 2 Registern.
Du musst also beide Werte (0x41 und 0x FB) lesen und damit den Floatwert ermitteln mittels hex2float.
Wenn da Fantasiewerte rauskommen dann musst du die Reihenfolge deiner beiden Werte ändern.
Also anstelle von 0x41FB auf 0xFB41.
Da hat es was mit little und big endian.
Deine IDM liefert little endian Werte; 0x41FB ergibt 31.375 in Dezimalschreibweise.
LG,
Michael
Kostal Plenticore Gen1 8,5kW, KSEM Gen2, Solarfabrik Mono S3 Module 375W, installierte Leistung 7,5kWp, BYD HVS 7,68kWh
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste