Umstellung von "CommandDeleteReading" und evt. Anpassung von fhem.save?

Begonnen von Reinerlein, 29 Dezember 2014, 14:45:48

Vorheriges Thema - Nächstes Thema

Reinerlein

Hallo Rudi,

ich habe gerade einen Fhem-Absturz hinbekommen, indem ich versucht habe mittels des Befehls "deletereading" ein Reading zu löschen.
Das Reading hat den Namen "(00:24". Diese Art Readings werden bei mir immer an meinem Uptime-Dummy erzeugt, wo im State mittels "stateFormat" die Startzeit von Fhem und in Klammern dahinter die Laufzeit steht.

Als Übeltäter für den Absturz habe ich die Zeile 1848 in der fhem.pl ausgemacht.
Dort steht:

foreach my $reading (grep { /$readingspec/ } keys %{$defs{$sdev}{READINGS}} ) {

Das funktioniert nicht, wenn die Readingsnamen eine Klammer enthalten, da dann der reguläre Ausdruck ungültig ist.

Könntest du die Variable $readingspec "sicher" machen, sprich alle Sonderzeichen, die für reguläre Ausdrücke eine besondere Bedeutung haben, vorher maskieren?
Oder das ganze so anpassen, dass gar kein regulärer Ausdruck für den Vergleich verwendet wird?

Außerdem wäre eine Anpassung des Savestate/Readstate-Zyklus super.
Mein oben genannter STATE-String hat dann z.B. das Format

2014-12-29 14:05:10 (00:24 Std.)


Das erzeugt dann folgenden Eintrag in der fhem.save:

setstate Uptime 2014-12-29 14:05:10 (00:24 Std.)

Das wiederrum wird dann als Reading mit Zeitstempel interpretiert, und verursacht die oben beschrieben Readings-Problematik.
Kann man das nicht irgendwie maskieren, sodass der lesende Teil dabei nicht mehr der Meinung ist, einen Zeitstempel für ein reading vor sich zu haben, sondern deutlich erkennen kann, dass es der String des STATE ist?

Danke schon mal für deine Mühen...

Grüße
Reinerlein

rudolfkoenig

deletereading habe ich gefixt, das Regexp bleibt, wird aber vorher geprueft.

Fuer setstate habe ich keine Idee ohne Nebenwirkungen, als Workaround koenntest du das Datumsformat in deinem Uptime-Dummy aendern. Oder sie mit einem Prefix versehen.

Reinerlein

Hi Rudi,

danke, dann kann ich diese Readings wenigstens wieder loswerden :-)

Könntest du beim Speichern des STATE-Wertes nicht einfach das Wort STATE mit in die Datei schreiben?
Das ist doch Case-sensitive, und es dürfte ja kein Reading STATE geben (state gibt es ja auch), oder?

Grüße
Reinerlein