76_SMAInverter.pm - Abfrage von SMA Wechselrichter

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

Vorheriges Thema - Nächstes Thema

Dersch

Ah ok:

2019.08.18 10:54:36 5: SMATRIPOWER - Data identifier 9729
2019.08.18 10:54:36 5: SPOT_ETOTAL 62,4 & SPOT_ETODAY 78,4 --- 534d4100000402a0000000010036001060650da0e90023bb590700a07a0158bd10b30000000000000380010200540000000000000000010126004b12595d996302000000000000000000
2019.08.18 10:54:36 1: PERL WARNING: substr outside of string at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 10:54:36 1: PERL WARNING: Use of uninitialized value in unpack at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 10:54:36 1: PERL WARNING: Use of uninitialized value $inv_SPOT_ETODAY in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1115.
2019.08.18 10:54:36 5: SMATRIPOWER - Found Data SPOT_ETOTAL=156569 and SPOT_ETODAY=
2

Waldmensch

ich sehe grad im Code, da fehlt doch ein Klammerpaar. Bin jetzt mit der Perl Syntax nicht so vertraut aber muss das:
$inv_SPOT_ETODAY = unpack("V*", substr $data, 78, 4);
nicht so?
$inv_SPOT_ETODAY = unpack("V*", substr($data, 78, 4));

Der String ist ansonsten ja lang genug mit 149 Zeichen. Der substr() kann also nicht außerhalb sein

Waldmensch

#617
aus dem String werden dann folgende werte gelesen

534d4100000402a0000000010036001060650da0e90023bb590700a07a0158 bd10b300 00000000 00038001 0200540000000000000000010126004b12595d996302000000000000000000

also dezimal für ETOTAL 3171988224 und für ETODAY 229377
Keine Ahnung ob die Werte plausibel sind

Xguide

Die Werte sind in Watt. 3 erscheint recht wenig, auch wenn das Wetter heute echt zum Abgewöhnen ist...


Gesendet von iPhone mit Tapatalk
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

Waldmensch

#619
mea culpa, ich habe oben nochmal korrigiert. Wir lesen ja 4 Byte beim substr() Ich weiß allerdings nicht, ob die Bytes noch gedreht werden müssen. Das ist ja ein elendes hin/her gedrehe mit dem little/big Endian. Es knnte also auch ETOTAL 11735229 und ETODAY 25166592 sein was aber für ETODAY viel zu viel wäre

Xguide

#620
Zitat von: Dersch am 16 August 2019, 21:05:42
Es fällt mir auf, dass SPOT_ETOTAL 135960 einen Wert erhalten hat! Und der Wert ist auch noch richtig :)
Dann muss es aber gestern sehr sonnig gewesen sein, dass die Werte passen sollen!?
Und heute schon 230kW?

Da ist noch was falsch umgerechnet.

Gesendet von iPhone mit Tapatalk
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

Waldmensch

substr() ist doch in Perl 0-basiert? Ich kann mich natürlich im String auch verzählt haben mit Position 63 und 78. Müssen wir mal abwarten was bei @Dersch nach dem Setzen der Klammern jetzt ausgespuckt wird

Dersch

#622
Das Setzen der Klammern hat leider nichts verändert:

2019.08.18 11:58:20 5: SMATRIPOWER - Data identifier 9729
2019.08.18 11:58:20 5: SPOT_ETOTAL 62,4 & SPOT_ETODAY 78,4 --- 534d4100000402a0000000010036001060650da0e90023bb590700a07a0158bd10b30000000000000380010200540000000000000000010126003a21595d6b7302000000000000000000
2019.08.18 11:58:20 1: PERL WARNING: substr outside of string at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 11:58:20 1: PERL WARNING: Use of uninitialized value in unpack at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 11:58:20 1: PERL WARNING: Use of uninitialized value $inv_SPOT_ETODAY in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1115.
2019.08.18 11:58:20 5: SMATRIPOWER - Found Data SPOT_ETOTAL=160619 and SPOT_ETODAY=


Wenn ich nun genau andersrum die Klammer bei ETOTAL entferne:

if($data_ID eq 0x2601) {
        my $received = unpack("H*", $data);
         Log3 $name, 5, "SPOT_ETOTAL 62,4 & SPOT_ETODAY 78,4 --- $received";
         $inv_SPOT_ETOTAL = unpack("V*", substr $data, 62, 4);
         $inv_SPOT_ETODAY = unpack("V*", substr $data, 78, 4);
         Log3 $name, 5, "$name - Found Data SPOT_ETOTAL=$inv_SPOT_ETOTAL and SPOT_ETODAY=$inv_SPOT_ETODAY";
         return (1,$inv_SPOT_ETODAY,$inv_SPOT_ETOTAL,$inv_susyid,$inv_serial);


ändert sich lustiger Weise auch nicht. etotal wird sogar weiter geschrieben.

2019.08.18 12:06:16 5: SMATRIPOWER - Data identifier 9729
2019.08.18 12:06:16 5: SPOT_ETOTAL 62,4 & SPOT_ETODAY 78,4 --- 534d4100000402a0000000010036001060650da0e90023bb590700a07a0158bd10b30000000000000380010200540000000000000000010126001623595d967502000000000000000000
2019.08.18 12:06:16 1: PERL WARNING: substr outside of string at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 12:06:16 1: PERL WARNING: Use of uninitialized value in unpack at ./FHEM/76_SMAInverter.pm line 1114.
2019.08.18 12:06:16 1: PERL WARNING: Use of uninitialized value $inv_SPOT_ETODAY in concatenation (.) or string at ./FHEM/76_SMAInverter.pm line 1115.
2019.08.18 12:06:16 5: SMATRIPOWER - Found Data SPOT_ETOTAL=161174 and SPOT_ETODAY=

DS_Starter

Danke für die Unterstützung Waldmensch, Xguide !
Habe Thomas angeschrieben, mal schauen ob/was er antwortet.

@Waldmensch, in welcher Doku sieht man am ehesten den Kommunikationsaufbau ?
Kann mich täuschen, aber mir ist so als Thomas und du "damals" intensiv den Aufbau analysiert hattet.

Grüße,
Heiko
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Xguide

Ich mache jetzt auch mal den Rechner an, es kommt mir gerade so vor, als das beim Logging unpack(,,H"... und unpack (,,V"... benutzt wurden. Kann mich aber auch irren...


Gesendet von iPhone mit Tapatalk
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

Waldmensch

@Dersch: das ist sehr ungewöhnlich, der String ist lang genug um per substr() an Stelle 78 etwas auszulesen. In der verkorksten ersten Ausgabe weiter oben sah das allerdings so aus, als ob da ein Zeilenumbruch drin ist. Vermutlich bringt das substr() aus dem Tritt (oder ein String Terminator) SBFSPOT liest ja Byteweise und das Plugin geht da einfach brachial vor, indem es davon ausgeht, das alle Bytes als ASCII darstellbar sind. Da müsste man jetzt mal gucken, an welcher Stelle im verkorksten String der Bruch ist und das byteweise am sauberen unpack String abzählen. Wenn diese Stelle vor Byte 78 liegt, wäre das Problem eingegrenzt. Ganz dreckiger Workaround wäre, das Byte in $data, was Probleme macht einfach gegen ein anderes zu ersetzen, vor dem substr().
Die anderen Fehler sind nur Folgefehler, weil ETODAY aufgrund des substr() Fehlers null ist.

@DS_Starter: irgendwer hatte im Forum einen Codeschnipsel gepostet, bzw. den Ansatz für ein Plugin. Ich habe das dann eine Weile weiterentwickelt und die Sleepsachen eingebaut sowie den Ringbuffer für die Durchschnittsberechnung (avg last 5 minutes oder so ähnlich, um eine Hysterese bei Wolken abzubilden). Keine Ahnung ob das überhaupt noch drin ist. Ich weiß nicht, wer das dann weiterentwickelt hat. Ich heiße übrigens auch Thomas. Nicht das Du da was verwechselst.


Gesendet von iPhone mit Tapatalk

DS_Starter

Der Ringbuffer ist natürlich noch drin (avg_power_lastminutes_xx). Ich hatte damals das gesamte auf non-blocking umgestellt, die Kompatibilität der Readings zu SBFSpot erstellt, die Operationführung nach Sonnenstand eingebaut und in die heutige Form weiterentwickelt sowie gepflegt. Nur mit dem SMA Protokoll an sich bin ich nicht so vertraut. Soweit zur Historie.  :D

Nein, ich meine Thomas den Threadersteller (sct14675). Er hatte sich intensiv um das SMA Protokoll gekümmert. Er und ich stehen zur Zeit als Maintainer für das Modul.
ESXi@NUC+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Xguide

Hallo zusammen,

ich gebe auf. Das Einzige was mir wirklich aufgefallen ist, ist das $data unterschiedlich lang ist.


534d4100000402a00000000100 4 600106065 119 0e90023bb590700a0 b50060042e12 000000000000038001020054000000000 1 00000001012600 d52b595d5f5a8a 020000000001222600d52b595dae0e00 000000000000000000 (Xguide)
534d4100000402a00000000100 3 600106065 0da 0e90023bb590700a0 7a0158bd10b3 000000000000038001020054000000000 0 00000001012600 1623595d967502 000000000000000000 (Dersch)


Das ist die Logging Implementierung:

my $dataUnpack = unpack("V*", $data);
Log3 $name, 1, "$name - MS Debug entireData=$dataUnpack";
my $dataUnpackH = unpack("H*", $data);
Log3 $name, 1, "$name - MS Debug entireData=$dataUnpackH";

my $subData62 = unpack("H*", substr ($data, 62, 4));
Log3 $name, 1, "$name - MS Debug subData62=$subData62";
my $subData78 = unpack("H*", substr ($data, 78, 4));
Log3 $name, 1, "$name - MS Debug subData78=$subData78";


Das ein entsprechendes Ergebnis:


2019.08.18 12:43:33 1: SMA_TriPower10 - MS Debug entireData=4279635
2019.08.18 12:43:33 1: SMA_TriPower10 - MS Debug entireData=534d4100000402a0000000010046001060651190e90023bb590700a0b50060042e12000000000000038001020054000000000100000001012600d52b595d5f5a8a020000000001222600d52b595dae0e00000000000000000000
2019.08.18 12:43:33 1: SMA_TriPower10 - MS Debug subData62=5f5a8a02
2019.08.18 12:43:33 1: SMA_TriPower10 - MS Debug subData78=ae0e0000


Vielleicht kann mir noch mal jemand erklären wie man auf die Werte kommt. Hex in Dezimal hat mich nicht weiter gebracht...

Beste Grüße,

Marcel
FHEM 5.9 - Intel NUC i3 mit Proxmox im Stretch Container
HomeMatic - VCCU mit 2 x HM-LAN-CFG
Module: SMA Peripheries - Sonos - IPCam(s) - Philips Hue - Sprinkler - TabletUI - DBlog -

Waldmensch

Der String ist wirklich nicht lang genug. Wir müssen Byte zählen und nicht Stellen.

@XGuide: Nimm mal die Stelle aus dem Screenshot und tipp die Bytes rückwärts in den Taschenrechner


Waldmensch

@Xguide: hier noch mal dein String im Vergleich (screenshot)

Dein ETOTAL müsste 42.621.535‬ sein und Dein ETODAY 3.758‬