Autor Thema: $hash->{CHANGETIME}->[]  (Gelesen 4106 mal)

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 20405
Antw:$hash->{CHANGETIME}->[]
« Antwort #15 am: 23 Januar 2016, 17:03:34 »
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
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5671
Antw:$hash->{CHANGETIME}->[]
« Antwort #16 am: 23 Januar 2016, 22:31:08 »
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
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5671
Antw:$hash->{CHANGETIME}->[]
« Antwort #17 am: 23 Januar 2016, 23:48:54 »
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
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Markus M.

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2917
Antw:$hash->{CHANGETIME}->[]
« Antwort #18 am: 24 Januar 2016, 14:27:33 »
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.
« Letzte Änderung: 24 Januar 2016, 14:39:13 von Markus M. »
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

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 5671
Antw:$hash->{CHANGETIME}->[]
« Antwort #19 am: 24 Januar 2016, 14:40:34 »
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
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

 

decade-submarginal