Neu: 77_SMAEM - Modul für SMA Energie Meter. Alternative zum Sunny Home Manager.

Begonnen von Volker Kettenbach, 30 März 2016, 12:42:05

Vorheriges Thema - Nächstes Thema

rostak

ich saß die Sache lange lustlos aus und siehe da:
Die richtige Seriennummer liefert regelmäßig Daten.
Das gefällt mir nicht wirklich, da ich wissentlich nichts veränderte.
Mal sehn, wie lange es gutgeht...

rostak

ich weiß nicht, an an welchem Ende des Nebels ich weiterstochern soll.
Mein fhem ist bislang fast jungfräulich.
Der raspberry ansonsten ungenutzt.
Wäre es erfolgversprechend, den Rechner komplett neu aufzusetzen, um sbfspot in Gang zu bekommen?

rostak


Xguide

Hallo zusammen,

ich bin jetzt schon zwei Male über einen Fehler mit dem SMAEM gestolpert.
Auswirkung: es holt keine Daten mehr ab
Grund, die Variable $smaserial ist nicht definiert, somit wird $gridinsum, $gridoutsum nicht richtig geschrieben, es kommt eine unplausible Differenz zustande und das Modul geht in den nächsten Zyklus ohne Daten zu liefern. Wie ich das hinbekommen habe? Weiss ich nicht. Gab es nicht mal ein SerialNo Attribut?

Wenn ich meine SerialNo fest eintrage, dann funktioniert das Modul. 
my $smaserial  = '12345678911';#$a[6]; #testweise händisch eingetragen

###############################################################
#         Auswertung non-blocking Inverter Datenabruf
###############################################################
sub SMAEM_ParseDone ($) {
my ($string)   = @_;
my @a          = split("\\|",$string);
my $name       = $a[0];
my $hash       = $defs{$name};
my $rowlist    = decode_base64($a[1]);
my $gridinsum  = $a[2];
my $gridoutsum = $a[3];
my $error      = decode_base64($a[4]) if($a[4]);
my $discycles  = $a[5];
my $smaserial  = '12345678911';#$a[6]; #testweise händisch eingetragen

Log3 ($name, 4, "SMAEM $name -> Start BlockingCall SMAEM_ParseDone");
  Log3 ($name, 1, "SMAEM $name -> MS a0:".$a[0]);
  Log3 ($name, 1, "SMAEM $name -> MS a1:".$a[1]);
  Log3 ($name, 1, "SMAEM $name -> MS a2:".$a[2]);
  Log3 ($name, 1, "SMAEM $name -> MS a3:".$a[3]);
  Log3 ($name, 1, "SMAEM $name -> MS a4:".$a[4]);
  Log3 ($name, 1, "SMAEM $name -> MS a5:".$a[5]);
  Log3 ($name, 1, "SMAEM $name -> MS a6:".$a[6]);


Ausgabe:


2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - ##############################################################
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - ### Begin of new SMA Energymeter 12345678911 get data cycle ###
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - ##############################################################
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - discarded cycles since module start: 15
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - last update time set to: 06.05.2019 / 21:52:42
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - Blocking process with PID: 6228 started
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter -> Start BlockingCall SMAEM_DoParse
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - old GRIDIN_SUM_12345678911 got from RAM: 25401.5354
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - old GRIDOUT_SUM_12345678911 got from RAM: 7044.6720
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - bezug_wirk_count: 7044.9114
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - gridoutsum_12345678911: 7044.6720
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - diffb: 0.2394
2019.05.06 21:52:42 1: SMAEM SMA_EnergyMeter - cycle discarded due to allowed diff GRIDIN exceeding
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter -> BlockingCall SMAEM_DoParse finished
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter -> Start BlockingCall SMAEM_ParseDone
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - last update time set to: 06.05.2019 / 21:52:42
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter - wrote new energy values to INTERNALS - GRIDIN_SUM_'': 25422.7813, GRIDOUT_SUM_'': 7044.9114
2019.05.06 21:52:42 5: SMAEM SMA_EnergyMeter - row_array after decoding:
2019.05.06 21:52:42 4: SMAEM SMA_EnergyMeter -> BlockingCall SMAEM_ParseDone finished

2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a0:SMA_EnergyMeter
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a1:''
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a2:25422.7814
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a3:7044.9115
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a4:''
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a5:18
2019.05.06 21:54:14 1: SMAEM SMA_EnergyMeter -> MS a6:''


a[6] ist leer und somit ist $smaserial nicht definiert

Jemand eine Idee?

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 -

Xguide

Ohne das jetzt im Detail zu verstehen,

müsste hier nicht der Fehler liegen?

259| $hash->{HELPER}{RUNNING_PID} = BlockingCall("SMAEM_DoParse", "$name|$dataenc|$smaserial", "SMAEM_ParseDone", $timeout, "SMAEM_ParseAborted", $hash);

DoParse wird die Serial extra übergeben, da ist sie ja auch existent. Wurde hier angenommen, die Serial für SMAEM_ParseDone ist im hash? Bzw. sollte im Hash sein und bei mir ist sie es nicht?

Nun fällt mir ein, ich habe das Device einmal gelöscht und wieder über Raw Definition hinzugefügt. Ist es dann ein Problem, dass es schon einen Eintrag in cacheSMAEM gibt?

Na vielleicht hilft es den Fehler einzugrenzen.

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 -

300P

Zitat von: Xguide am 06 Mai 2019, 22:08:45
Hallo zusammen,

ich bin jetzt schon zwei Male über einen Fehler mit dem SMAEM gestolpert.
Auswirkung: es holt keine Daten mehr ab
Grund, die Variable $smaserial ist nicht definiert, somit wird $gridinsum, $gridoutsum nicht richtig geschrieben, es kommt eine unplausible Differenz zustande und das Modul geht in den nächsten Zyklus ohne Daten zu liefern. Wie ich das hinbekommen habe? Weiss ich nicht. Gab es nicht mal ein SerialNo Attribut?

Wenn ich meine SerialNo fest eintrage, dann funktioniert das Modul. 
my $smaserial  = '12345678911';#$a[6]; #testweise händisch eingetragen

a[6] ist leer und somit ist $smaserial nicht definiert

Jemand eine Idee?

Grüße Marcel

dto.
Dies kann ich genau so bestätigen:
Ich habe schon gedacht das mein SMA-EM20 defekt wäre.  Immer nur wenn ich einen Wechsel von Wert 0 zu 1 oder Wert 1 zu 0 bei 'disableSernoInReading' vorgenommen habe wurde temporär der Gridin/out Wert gelesen. Aber nicht abgespeichert, ->> ohne weitere Readings dabei anzuzeigen.

EDIT:
Nach manueller und fester Hinterlegung der Seriennummer (s.o.) läuft es aber wie früher/gewünscht!! 8)
Gruß
300P
FHEM 6.3 - Raspberry Pi 3 / Pi 4 - VControl300 mit VITOVALOR 300P - SMAEM - SMAInverter - DbLog/DbRep - MariaDB/QNAP - div. HTTPMOD - div. Modbus ser+TCP - SolarForecast - Tibber + Ladung mit SMA-SBS25

Volker Kettenbach

@DS_Starter: das scheint ja ein Bug zu sein. Kannst Du Dir das mal anschauen und einen Patch schreiben!? Ich kenne Deinen Code nicht.

DS_Starter

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

Volker Kettenbach


DS_Starter

Hallo zusammen,

nehme mir gerade das Modul vor.

Zitat
ich bin jetzt schon zwei Male über einen Fehler mit dem SMAEM gestolpert.
Auswirkung: es holt keine Daten mehr ab
Grund, die Variable $smaserial ist nicht definiert, somit wird $gridinsum, $gridoutsum nicht richtig geschrieben, es kommt eine unplausible Differenz zustande und das Modul geht in den nächsten Zyklus ohne Daten zu liefern. Wie ich das hinbekommen habe? Weiss ich nicht. Gab es nicht mal ein SerialNo Attribut?

Dazu erstmal folgende Anmerkung:
* das Modul holt KEINE Daten ab, sondern sie werden per Mulicast geliefert
* wenn die Variable $smaserial nicht definiert wäre, würde die Parse-Routine nicht angesprungen (Zeile 230 -> return if(!$smaserial); ). Es müssen also Serials geliefert worden sein, wenn auch vllt. unsinnige.
*  Gab es nicht mal ein SerialNo Attribut? Ja, allerdings konnte es für den eingebauten Multimeter-Support nicht mehr verwendet werden und ist schon lange raus.

Grundsätzlich läuft das Modul bei mir seit über einem Jahr völlig geräuschlos.
Deswegen werde ich zunächst einen Workaround einbauen (Reset-Möglichkeit), damit man eine Fehlersituation manuell/halbautomatisch bereinigen kann.
Man müsste herausbekommen, was genau zu dieser Fehlersituation führt. Dann könnte ich besser Massnahmen treffen.

Ich melde mich wieder mit einer Version zum Test.

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

Hallo Heiko,

welcome back.

Hast Du das logging in #483 gesehen, da wird ParseDone mit leerem $a[6] ausgeführt.
return if(!$smaserial); war zu dem Zeitpunkt korrekt gefüllt, wie das Logging aus (245) --> Log3 ($name, 4, "SMAEM $name - ### Begin of new SMA Energymeter $smaserial get data cycle ###"); zeigt.

Reproduzieren kann ich den Fehler nicht, habe es auch noch nicht versucht. War immer froh das Modul wieder zum Rennen bekommen zu haben. Passiert ist es bei mir bei der Umstellung auf die neue Hardware. Initialinstallation hat funktioniert, danach noch einmal gelöscht und per Raw Definition wieder eingespielt. Das müsste das Vorgehen gewesen sein.

Gruß 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 -

DS_Starter

Hi Marcel,

ZitatHast Du das logging in #483 gesehen, da wird ParseDone mit leerem $a[6] ausgeführt.
return if(!$smaserial); war zu dem Zeitpunkt korrekt gefüllt, wie das Logging aus (245) --> Log3 ($name, 4, "SMAEM $name - ### Begin of new SMA Energymeter $smaserial get data cycle ###"); zeigt.

Ja, hast recht. Hatte ich so nicht gesehen.
Jetzt habe ich vielleicht eine halbe Stunde auf den Code gestarrt und eine mögliche Fehlermöglichkeit gesucht.
Wahrscheinlich gefunden ...  :)

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 bin gespannt. Leider kapiere ich den Aufruf nicht...

Grüße Marcel


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 -

DS_Starter

Nun habe ich eine Testversion 3.3.0 in mein contrib geladen:

https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter  (Downloadbutton benutzen)

Neben dem (hoffentlich) erledigten Bugfix gibt es momentan noch folgende Neuerungen:

* set .. reset : es wird das vorhandene cacheFile gelöscht und neu initialisiert. Dadurch kann eine eventuelle Fehlersituation aufgelöst werden
* die direkte Attributhilfe ist eingebaut
* die neue DelayedShutdown-Funktion zum sauberen beenden von Hintergrundprozessen ist implementiert

Die Unterstützung für den Installer und Meta.pm habe ich noch vor zu implementieren.
Aber bitte testet schon mal die Version 3.3.0.
Wenn ich mit allem durch bin und die Tests erfolgreich verlaufen, erstelle ich einen Patch für Volker und checke das Modul ein.

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

Hallo Heiko,

ich habe die neue Version eingespielt.
Beim Reload bekomme ich folgende Meldung:


Too many arguments for main::SMAEM_setCacheValue at /opt/fhem//FHEM/77_SMAEM.pm line 741, near "$as)"
Too many arguments for main::SMAEM_setCacheValue at /opt/fhem//FHEM/77_SMAEM.pm line 762, near "$sumstr)"


Scheint aber zu laufen!

Gruß 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 -