EM 1000-WZ Sprung im Absolutzählerstand

Begonnen von duke-f, 26 August 2016, 09:10:00

Vorheriges Thema - Nächstes Thema

rudolfkoenig

Da es zu viele Fehlermeldungen gibt, und ich nicht in der Lage bin (fehlende Zeit/Debuginfo/etc) die Probleme zu fixen, habe ich die Version von 2016-08-19 wieder als die Neueste eingecheckt.
Falls jemand das Problem besser beheben kann, bitte melden.

noansi

Hallo Rudolf,

ich denke Deine Änderung machte eine doppelte Korrektur beim device restart.
Beim EM1000-S, mit dem ich testen kann, wird beim device restart eine seqno von 1 mit dem ersten Telegramm und Zählwerten von 0 gesendet. Im laufenden Betrieb wird eine seqno von 2 - 255 gesendet.

Deine bisherige basis_cnt Korrektur kann beim device restart schon mal scheitern, bei ungünstigen Zählwerten.
Die seqno von 1 kann man jedoch ausnutzen, sofern das Telegramm empfangen wird.

Daher folgender Vorschlag:

    #
    # translate into device units
    #
    my $corr1 = $hash->{corr1}; # EMEM power correction factor
    my $corr2 = $hash->{corr2}; # EMEM energy correction factor
    my $counter_offset = AttrVal($n,"CounterOffset",0);
    my $basis_cnt = ReadingsVal($n, "basis", 0);
#    my $oldraw = ReadingsVal($n, "RAW", "");          # Forum #55626
#    if($oldraw) {
#      my @a = split(" ", $oldraw);
#      if($a[3] > $total_cnt) {
#        $basis_cnt += ($a[3]+$total_cnt)/$corr2;
#        readingsSingleUpdate($hash, "basis", $basis_cnt, 0);
#        Log 1, "$n was reset, old CUM $a[3], new CUM: $total_cnt, ".
#                        "new basis $basis_cnt";
#      }
#    }

...
    # correct counter wraparound and device power on reset
    if ($seqno != 1) {
      if($total_cnt < $total_cnt_last) {
        # check: real wraparound or reset only
        $basis_cnt += ($total_cnt_last > 65000 ? 65536 : $total_cnt_last); # even in case seqno 1 was not received try to correct a device restart
        $readings{basis} = $basis_cnt;
      }
    }
    else {
      # definitely a device reset
      $basis_cnt += $total_cnt_last;
      $readings{basis} = $basis_cnt;
    }


Gruß,

Ansgar.

rudolfkoenig

Hallo Ansgar,

danke fuers Nachdenken. Ich habe Schwierigkeiten die Aenderungen einzuspielen, weil es nicht als Patch kommt, und vermutlich auf der alten Version aufbaut. Ein Patch gegen die aktuelle Version faende ich wichtig.

Weiterhin sollten das bitte jemand mit den erwaehnten Problem testen, bevor ich es Einchecke, will nicht die gleichen Fehler wiederholen.

Gruss,
  Rudi

noansi

Hallo Rudi,

ZitatIch habe Schwierigkeiten die Aenderungen einzuspielen, weil es nicht als Patch kommt, und vermutlich auf der alten Version aufbaut.
ich habe die $Id: 15_CUL_EM.pm 12259 2016-10-03 14:01:05Z rudolfkoenig $ als Basis.

Ein weiterer Punkt ist die 65000 bei basis_cnt += ($total_cnt_last > 65000 ? 65536 : $total_cnt_last); die Du verwendet hast, um einen Überlauf von einem Neustart zu unterscheiden.
Es hängt an den counts/Einheit und dem laufenden Verbrauch (und ggf. noch nicht empfangener Telegramme) ab, ob die Differenz zu 655356 ausreichend ist, ob es zu Fehlern kommen kann.
Dazu fehlt mir einiges an Informationsbasis.

Daher kein Patch, sondern ein Vorschlag zum Testen, da ich auch nur ein anderes device aus der Familie zum Testen habe.

ZitatWeiterhin sollten das bitte jemand mit den erwaehnten Problem testen, bevor ich es Einchecke, will nicht die gleichen Fehler wiederholen.

Sehe ich genauso.

Gruß, Ansgar.

FhemPiUser

#19
ZitatWeiterhin sollten das bitte jemand mit den erwaehnten Problem testen, bevor ich es Einchecke, will nicht die gleichen Fehler wiederholen.

Bei mir läuft alles stabil, es treten keine Probleme mehr auf, daher habe ich keinen Bedarf für Codeänderungen...

ich hatte nur probleme mit sprüngen nach stromausfall, habe jetzt aber eine usv...

cyberdwarf

Bei mir läuft auch alles stabil.

Grüße
Torsten
RPi+COC | RFXtrx433 | HMLAN
fht80b, FHT80TF, S300TH, hms100-tf, EMFM, EMWZ
FS20:bs,di,piri,rsu,s4a,s6a,sm4,sm8,s8m,st,tfk
YCR-1000, ITL-230, HE877, HE878A, AB440
KD101, RGR918, TS15C_10, WGR918, WS2300
HM-LC-Sw1PBU-FM, HM-LC-BL1-FM
ZWAVE(Test)