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
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
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
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
Hallo Andre,
konntest Du Dir das mal ansehen? Derzeit habe ich immer noch die abgäeänderte "private" Version in Benutzung.
Gruß
Elektrolurch
kommt noch. versprochen.
gruss
andre