$hash->{CHANGETIME}->[]

Begonnen von herrmannj, 14 Januar 2016, 20:36:30

Vorheriges Thema - Nächstes Thema

justme1968

die event-on-xx attribute können es nicht sein. die greifen erst nach dem readingsEndUpdate.

-1 kann es nur geben wenn das CHANGED array leer ist. das kann nach einem readingsBulkUpdate eigentlich nur passieren wenn das reading oder der wert nicht definiert waren oder .updateTimestamp nicht definiert ist was nur nach einem vergessenen readingsBeginUpdate passieren sollte. dafür gibt es aber eine meldung im log.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

herrmannj

tja, so schnell kann's gehen. Hier http://forum.fhem.de/index.php/topic,42232.msg397141.html#msg397141 bekomme ich einen gleichlautenden Bericht rein.

Der user sagt das es bei einem update entstanden ist. Da müsste es ja recent Änderungen in fhem.pl gegeben haben ? Checke ich wenn ich den zeitraum kenne. Vielleicht weiß es ja jemand so.

Syntaktisch ist nach meinem Verständnis das
$hash->{CHANGETIME}->[$#{ $hash->{CHANGED} }]
und das
$hash->{CHANGETIME}[$#{ $hash->{CHANGED} }]
gleich.

Lieg ich da falsch ?

vg
joerg

herrmannj

Markus,

welches perl und welches os hast Du ?

Kannst Du "unter bestimmten Umständen" präzisieren ? Kennst Du ein bestimmtes Szenario in dem man das reproduzieren kann ?

Danke vg
joerg

Markus M.

#18
Perl 5.20.2
Nachvollziehbar ist es meiner Meinung nach immer dann passiert, wenn es nur einen Wert im Update gab.
Wo ich das vorher wusste, steht bei mir jetzt einfach $hash->{CHANGETIME}[0].

Dummerweise ist es danach an den anderen Stellen immer noch passiert, weshalb mein Setup jetzt so aussieht:

  readingsBeginUpdate($hash);
  $hash->{".updateTimestamp"} = FmtDateTime($data->{timestamp});
  my $changeindex = 0;

  readingsBulkUpdate($hash, "reading", $data->{value});
  $hash->{CHANGETIME}[$changeindex++] = FmtDateTime($data->{timestamp});

  ...
 
  readingsEndUpdate($hash, 1);



Das funktioniert aktuell noch ohne Abstürze, ich hoffe das bleibt so.
Lustig, dass wir alleine zwischen uns dreien schon mindestens 5 verschiedene Arten durch haben dürften, das gleiche zu erreichen.
Bei meiner letzten Iteration bin ich übrigens damit auf die Schnauze gefallen dass ich versucht habe, mehrere Timestamps in einer Update-Schleife unterzubringen - das hat auch nicht wirklich funktioniert.
FHEM dev + HomeBridge + Lenovo Flex15 + HM-CFG-USB + RFXtrx433 + Fritz!Box 7590/7580/546E

HM Aktor/Sensor/Winmatic/Keymatic/Thermostat, HUE, Netatmo Weather/Security/Heating, Xiaomi AirPurifier/Vacuum, Withings Aura/BPM/Cardio/Go/Pulse/Thermo, VSX828, Harmony, Siro ERB15LE
https://paypal.me/mm0

herrmannj

Danke.

Der andere user hat auch 5.20 - vielleicht ist da was buggy.

Mit dem Index ist verständlich - ich denke ich werde das aber mal so umabuen das er sich den Index weiterhin zieht.

Müsste ja auch so gehen: (peudo)

bulbUpdate ...
my $index = int(@{$hash->{CHANGED}}) -1;
if ($index < 0) {
  Log3 name, 2, "was falsch";
} else {
  $hash->{CHANGETIME}[$index] == $ts;
}

Da fühle ich mich besser weil man unabhängig davon agiert was fhem.pl in die events pushed.

Ich konnte den Fehler auf perl 18 nicht nachstellen.

vg
joerg