76_SMAInverter.pm - Abfrage von SMA Wechselrichter

Begonnen von sct14675, 28 Juli 2016, 11:01:16

Vorheriges Thema - Nächstes Thema

Panzerschrauber

Zitat von: cwagner am 09 September 2026, 12:48:10Der erwähnte Update von SMA ( 4.08.29.R ) womöglich in Verbindung mit einem Update des Storages samt BMS (1.01.54.R) führt auch an anderen Stellen Veränderungen von Stringdefinitionen sowie Messages zu Ausfällen/Veränderungen. Bei mir (STP 6.0 SE, also Hybrid-WR) ist es zum Beispiel die Readings bat_temp, .....
Christian
Da ich zwei STP8 am laufen habe und der zweite glücklicherweise noch nicht geändert wurde, konnte ich mit einem TCP dump von beiden Wechselrichtern mit sudo tcpdump -i any -nn -X -s 0 host <IP des geänderten Wechselrichters> and port 9522 -w stp8_neu.pcap und sudo tcpdump -i any -nn -X -s 0 host <IP des 'alten' Wechselrichters> and port 9522 -w stp8_alt.pcap ziehen. Den habe ich von ChatGbt analysieren lassen.
Weiterhin kann mit folgenden Änderungen im 76_SMAInverter.pm die Antwort des Wechselrichters ins fhem-xxx.log geschrieben werden.
Im sub SMAInverter_getstatusDoParse($) {:
nach dem Kommando suchen, mit dem das Modul die Daten vom Wechselrichter holt (z.B. f($detail_level > 1) {
          ....
          elsif ($INVTYPE_NAME =~ /SBS(1\.5|2\.0|2\.5)/xs || $INVCLASS eq "8009")
#der STP8 läuft unter 8009
     {
      push(@commands, "sup_BatteryInfo_2");     # Check BatteryInfo Voltage
      push(@commands, "sup_BatteryInfo_Charge");
     }         
Nach dem sup weiter unten im Code suchen
Dort zu finden: ($sup_BatteryInfo_2,$inv_BAT_TEMP,$inv_BAT_UDC,$inv_BAT_IDC,$inv_susyid,$inv_serial) = SMAInverter_SMAcommand($hash, $hash->{HOST}, 0x51000200, 0x00491E00, 0x00495DFF); Dei letzten zwei Parameter sind im Aufruf sub SMAInverter_SMAcommand($$$$$) {
 my ($hash,$host,$command,$first,$last) $first und $last (Adressbereich der aus dem WR ausgelesen werden soll)
nach # Check the data identifier
if ($first == 0x00491E00)
{
    Log3 $name, 1, sprintf("$name - Data identifier 0x%08X", $data_ID);
    my $raw_data = unpack("H*", substr($data, 55, $size - 55));
    Log3 $name, 1, "$name - RAW=$raw_data";
}
Bitte beachten: die data_Id ist in der Logausgabe gedreht (4a49 im Log ist tatsächlich 494A), ...
(Little-Endian: das niederwertige Byte zuerst gespeichert), oder einfach den HexCode einer AI übergeben.
Die Werte können dann mit denen im Wechselrichter verglichen werden, sofern ein Zugang auf die Webseite möglich ist.
Über den Weg bin ich auch die Sub Ids und deren Bedeutung gestoßen.


300P

Warum denn solch ein Umweg ?? :o
Verbose 5 und es gibt doch alle gesendeten und empfangenen Daten ins Log....  ;)
2026.09.09 19:06:28 4: SB40 - ###############################################################
2026.09.09 19:06:28 4: SB40 - ##########  Begin of new SMAInverter get data cycle  ##########
2026.09.09 19:06:28 4: SB40 - ###############################################################
2026.09.09 19:06:28 4: SB40 - timeout cycles since module start: 2, Interval: 15
2026.09.09 19:06:28 4: SB40 - start BlockingCall
2026.09.09 19:06:28 4: SB40 - running BlockingCall SMAInverter_getstatusDoParse
2026.09.09 19:06:28 4: SB40 -> INVCLASS 8001
2026.09.09 19:06:28 4: SB40 -> INVTYPE 9403
2026.09.09 19:06:28 4: SB40 -> start BlockingCall SMAInverter_getstatusDoParse
2026.09.09 19:06:28 4: SB40 - current time: 09.09.2026 17:06:28
2026.09.09 19:06:28 4: SB40 - operation time begin: 09.09.2026 06:17:08
2026.09.09 19:06:28 4: SB40 - operation time end: 09.09.2026 20:33:58
2026.09.09 19:06:28 4: SB40 - detail-level: 2
2026.09.09 19:06:28 5: SB40 - SB4.0-1AV-41 (Sunny Boy 4.0 AV-41)
2026.09.09 19:06:28 4: SB40 - Send login to 192.xxxxxxxxxx on Port 9522 with password xxxxxxxxx as user
2026.09.09 19:06:28 5: SB40 - Send: 534D410000.....................
2026.09.09 19:06:28 5: SB40 - Received: 534d4100000.............
2026.09.09 19:06:28 4: SB40 - logged in to inverter serial: 3xxxxxx, susyid: xxxx
2026.09.09 19:06:28 5: SB40 - Logged in now
2026.09.09 19:06:28 5: SB40 -> sup_TypeLabel
2026.09.09 19:06:28 3: SB40 - Send request 000..... to 192.1xxxxxxx on port 9522
2026.09.09 19:06:28 5: SB40 - send: 534D4100000........
2026.09.09 19:06:28 5: SB40 - Received: 534d4100000........
2026.09.09 19:06:28 5: SB40 - Data identifier 33310
2026.09.09 19:06:28 5: SB40 - Found Data CLASS=xxxxxx and TYPE=xxxxx
2026.09.09 19:06:28 5: SB40 -> sup_EnergyProduction
2026.09.09 19:06:28 3: SB40 - Send request 0002....... to 192.xxxxxxxxxx on port 9522
2026.09.09 19:06:28 5: SB40 - send: 534D4100.....
2026.09.09 19:06:28 5: SB40 - Received: 534d4100000.....
2026.09.09 19:06:28 5: SB40 - Data identifier 9729
2026.09.09 19:06:28 5: SB40 - Data SPOT_ETOTAL=11111111111 and SPOT_ETODAY=111111111
2026.09.09 19:06:28 5: SB40 -> sup_SpotDCPower........usw. etc.......
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.

Panzerschrauber

Zitat von: 300P am 09 September 2026, 19:14:53Warum denn solch ein Umweg ?? :o
Verbose 5 und es gibt doch alle gesendeten und empfangenen Daten ins Log....  ;)
2026.09.09 19:06:28 4: SB40 - ###############################################################
[/quote]
Danke für den Hinweis, hat den Vorteil, nichts in der 76 er Routine ändern zu müssen.
Mit meiner wird nur die Nachricht ausgegeben, die mich interessiert und auch nur der Teil beginnend mit der data_id. Spart etwas Sucharbeit im Logeintrag.

Hanjo

@Panzerschrauber: Hattest du auch das Problem, dass BAT_PDC nicht mehr aktualisiert? Könntest du deine veränderte Version hier vielleicht hochladen?

Panzerschrauber

Zitat von: Hanjo am 12 September 2026, 22:14:16@Panzerschrauber: Hattest du auch das Problem, dass BAT_PDC nicht mehr aktualisiert? Könntest du deine veränderte Version hier vielleicht hochladen?
Anbei die geänderte Datei. Änderungen sind mit #[Panzerschrauber] .... #[End Panzerschrauber] gekennzeichnet.
Das Modul zeigt jetzt neue Readings an, die das neue Element vom SMA STP8 mitgibt (BAT_INTERNAL_RESISTANCE, ...)

Panzerschrauber

Zitat von: Hanjo am 12 September 2026, 22:14:16@Panzerschrauber: Hattest du auch das Problem, dass BAT_PDC nicht mehr aktualisiert? Könntest du deine veränderte Version hier vielleicht hochladen?
Ja, Grund war, das BAT_IDC nicht mehr mit der alten Data Id vom WR übertragen wurde sondern mit der neuen Id, die zusätzlich noch einige neue Felder enthält.

cwagner

@panzerschrauber: Super, vielen Dank für das wertvolle Engagement. Auch bei mir (STP 6 SE) ist jetzt die Batterie-Temperatur wieder korrekt (Komma war um 7 Stellen nach rechts verschoben nach dem Firmware-Update) und die neuen Readings sind ja sehr aufschlussreich, besonders die Wandlungseffzienz beim Batterie-Ein- und Auslagern (bei mit 94,5%)

Kleiner Hinweis auf eine Typo (ehe jemand darauf referenziert): Das Reading müsste doch statt bat_rount_trip_efficiency eher bat_round_trip_efficiency heißen oder bin ich da auf dem Holzweg?

$sup_InverterTemperature wird im Modul zwar abgefragt, es wird bei mir aber (unabhängig vom Firmware-update auch schon vorher) nicht als Reading erzeugt.

Has Du bei Dir ein Reading wie InverterTemperature o.ä. Über MQTT kann ich sehen, dass mein Inverter dieses Datum regelmäßig liefert. dort hat es die ID h30953.

Christian
320 Devices in MariaDB: Lambda WP an Ecolink-Speicher, FBH, Solarthermie, kontroll. Lüftung mit WRG und Erdwärmetauscher
HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM ESP3), MQTT2, Shelly, SMA (eC2, PV, HM, HS)
DOIF (Perl/uiTable), PID20,Micropelt IRTV, SolarForecast auf PI5

300P

@panzerschrauber:

Deine Änderungen ergeben Perl-Warnings wenn man keinen STP hat ;).

diverse :
PERL WARNING: Use of uninitialized value $inv_BAT_SELF_DISCHARGE_RATE in concatenation (.) or string at ./FHEM/76_SMAInverter.pm

Deine gesamten Änderung habe ich in diese Version V2.30.6 heute mal eingebracht und ein paar Anpassungen aufgrund von Fehlermeldungen die bei anderen als STPX-WR auftreten beseitigt.
Bei meinem Zoo (SB2.5|SB3.0|SB4.0|SBS2.5|SBS3.7) kommen jetzt keine Fehlermeldungen mehr.

026.09.16 14:23:25 0: Server shutdown
2026.09.16 14:23:26 2: myDbLog - stopping SubProcess PID >8576< ...
2026.09.16 14:23:26 2: myDbLog - SubProcess PID >8576< stopped
2026.09.16 14:25:00 1: Including fhem.cfg
2026.09.16 14:25:01 2: myDbLog - Subprocess >17823< initialized ... ready for non-blocking operation
2026.09.16 14:25:01 2: eventTypes: loaded 17177 lines from ./log/eventTypes.txt
2026.09.16 14:25:02 1: MB_CFG_SBS25: loading config from cfg file
2026.09.16 14:25:06 1: Zisterne: loading config from cfg file
2026.09.16 14:25:23 1: Including ./log/fhem.save
2026.09.16 14:25:25 0: Featurelevel: 6.4
2026.09.16 14:25:25 0: Server started with 461 defined entities (fhem.pl:31607/2026-08-29 perl:5.036000 os:linux user:fhem pid:17822)

->> Bitte prüf mal mit deinem STP ob alles okay ist. Dann können alle diese Version V2.30.6 vom 16.09.2026 auch laden und benutzen.
Gern dein Input an dieser Stelle

Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.

Hanjo

Zitat von: 300P am 16 September 2026, 14:36:07->> Bitte prüf mal mit deinem STP ob alles okay ist. Dann können alle diese Version V2.30.6 vom 16.09.2026 auch laden und benutzen.
Gern dein Input an dieser Stelle

Ich bekomme noch ein paar Meldungen:
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1471.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1472.

300P

#1929
Zitat von: Hanjo am 16 September 2026, 22:56:49Ich bekomme noch ein paar Meldungen:

Danke für die Rückmeldung. Schaue ich mir im Lauf des Tages an.

Sicherheitsfrage zur Eingrenzung -> (hilft mir etwas)
Welche SMA-WR / -BWR nutzt du (alle angeben -Danke)?
Gruß
300P

FHEM 6.4|RPi|SMAEM|SMAInverter|SolarForecast| DbLog|DbRep|MariaDB|Buderus-MQTT_EMS|
Fritzbox|fhempy|JsonMod|HTTPMOD|Modbus ser+TCP| ESP32_AI_on_the_Edge|ESP32CAM usw.

cwagner


Ich bekomme noch ein paar Meldungen:
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1471.
2026.09.16 22:55:39 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1472.

[/quote]

auch bei mir hat es über die Nacht in der Entladephase des Speichers unentwegt solche Nachrichten gehagelt.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1471.
2026.09.17 00:00:07 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1472.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in multiplication (*) at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1471.
2026.09.17 00:00:22 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1472.
2026.09.17 00:00:37 1: PERL WARNING: Use of uninitialized value $inv_BAT_UDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2026.09.17 00:00:37 1: PERL WARNING: Use of uninitialized value $inv_BAT_IDC in string ne at ./FHEM/76_SMAInverter.pm line 1428.
2
...

STP 6 SE

Christian
320 Devices in MariaDB: Lambda WP an Ecolink-Speicher, FBH, Solarthermie, kontroll. Lüftung mit WRG und Erdwärmetauscher
HMCUL, 1-Wire (FT232RL ; DS2480B), EnOcean (TCM ESP3), MQTT2, Shelly, SMA (eC2, PV, HM, HS)
DOIF (Perl/uiTable), PID20,Micropelt IRTV, SolarForecast auf PI5