readingsHistory - Warnung / Ergänzungsvorschlag

Begonnen von Elektrolurch, 15 Juni 2015, 15:26:15

Vorheriges Thema - Nächstes Thema

Elektrolurch

Hallo,

ich bekomme eine perl-Warnung, dass in Zeile 320 eine undefinierte Variable in einem concat verwendet wird.
Ich habe mir das mal angesehen und vermute, dass da ein kleiner Fehler ist:


Die Zeile habe ich auskommentiert und ersetzt.
  for (my $i = 0; $i < $rows; $i++) {
    my $line = $hash->{fhem}{history}[$i];
    if( ref($line) eq 'ARRAY' ) {
# Elektrolurch
#      $lines .= $line->[3] if( $line );
      $lines .= $line->[3] if( $line->[3] );

    } else {
      $lines .= $line if( $line );
    }
    $lines .= "<br>";
  }

Jetzt kommt die Warnung nicht mehr.

2. Ergänzungsvorschlag:
Wenn die übergebene Zeile an readingsHistory identisch ist mit der ersten Zeile, wird kein zweiter Eintrag erstellt, sondern nur von der ersten Zeile das Datum/Uhrzeit aktualisiert.
Das kann man mit dem Attribut
attr meine_rh overwrite-same 1
einschalten.
Ich habe das mal nur für den "add" - Befehl eingebaut:

(am Ende der readingsHistory_set - sub)

    my $entry = [$t,"", "$param ". join( " ", @a ),$msg];

   # Elektrolurch
   my $oldmsg = $hash->{fhem}{history}[0][2];
   my $newmsg = "$param ". join( " ", @a ); # Log3($name,3,"oldmsg $oldmsg\nnewmsg $newmsg");

   if(AttrVal($name,'overwrite-same',0) && ($oldmsg eq $newmsg)) { # Log3($name,3,"overwrite first line"); $hash->{fhem}{history}[0] = $entry; return undef; } # if same and overwrite-same else {
# normal processing   

    while( @{$hash->{fhem}{history}} >= AttrVal($name,"rows", 5 ) ) {
      pop @{$hash->{fhem}{history}};
    }
    unshift( @{$hash->{fhem}{history}}, $entry ); } # end normal
    DoTrigger( "$name", "history: $msg" ) if( $hash->{mayBeVisible} );
    return undef;


Elektrolurch
configDB und Windows befreite Zone!

justme1968

zur fehler meldung: bekommst du das bei allen zeilen oder nur bei bestimmen? wenn es das array gibt sollt es eigentlich alle teile geben.

zum ersetzen einer zeile: das schaue ich mir an. es reicht aber nicht das auf der perl seite einzubauen. die javascript für die longpoll updates muss auch gebaut werden.

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

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

Elektrolurch

Hallo Andre,

Zitat:
zur fehler meldung: bekommst du das bei allen zeilen oder nur bei bestimmen? wenn es das array gibt sollt es eigentlich alle teile geben.


So ganz habe ich da noch keine Systematik erkennen können. Die Meldung kam nach dem Löschen. Aber da wird ja eine neue Zeile mit der Löschmeldung angelegt. Die Anzeige hatte 8 Zeilen, die Meldung kam aber nur zwei Mal (?)
Jetzt ist sie jedenfalls weg und es funktioniert noch alles.
In dem else - Zweig ist die defined - 'Abfrage ja eine andere, daher dachte ich, dass das ev. der Fehler ist.
Zitat:
zum ersetzen einer zeile: das schaue ich mir an. es reicht aber nicht das auf der perl seite einzubauen. die javascript für die longpoll updates muss auch gebaut werden.

Ja. Hatte ich auch schon gesehen. Das Update auf dem Bildschirm erzeugt erst einmal die neue zeile. Läßt man den Bildschirm neu aufbauen, dann ist es korrekt, d.h. erste Zeile nur einmal mit neuem Datum.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

wenn das mit dem Vorschlag von mir interessant ist, würde ich das so ausformulieren:

Attribut:

overwrite-same = 0 -> normales Verhalten
overwrite-same = 1 Ist der Textinhalt der ersten Zeile identisch mit dem neuen Text, so wird nur das Datum/Uhrzeit geändert
overwrite-same = 2 Ist der Textinhalt der ersten Zeile identisch mit dem neuen Text, so wird nicht eingetragen, d.h. hier bleibt quasi der ältere Eintrag übrig.

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo Andre,

konntest Du Dir das mal ansehen? Derzeit habe ich immer noch die abgäeänderte "private" Version in Benutzung.

Gruß

Elektrolurch
configDB und Windows befreite Zone!

justme1968

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

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