deletereading mit regex

Begonnen von betateilchen, 30 Juli 2013, 10:23:55

Vorheriges Thema - Nächstes Thema

betateilchen

Ist: deletereading <name> bla

funktioniert prima und entfernt das Reading bla bei <name>


Wunsch: deletereading <name> bla.*

sollte aus <name> alle readings entfernen, die mit bla beginnen.


Mir erschließt sich das noch nicht ganz:

deletereading <devspec> <readingname>
<readingname> is a perl regular expression that must match the whole name of the reading.


Wenn ich das richtig interpretiere, kann ich diese regex nicht für den vorgesehenen Zweck einsetzen, da ich ja nicht weiß, welche readings vorhanden sind.


Sinn:
 
In einem Modul vor dem readingsBulkUpdate() erstmal alle bestehenden readings einer bestimmten Namensgruppe löschen, da nicht garantiert werden kann, dass bei einer Aktualisierung alle Werte wieder zur Verfügung stehen. Gerade beim Arbeiten mit Wetterstationsdaten kommt es vor, dass von unterschiedlichen Stationen unterschiedliche Datensätze geliefert werden. Dann kommt es zu einer Vermischung der in den readings gespeicherten Werte einer vorher verwendeten Station.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

ZitatWunsch:
deletereading <name> bla.*
sollte aus <name> alle readings entfernen, die mit bla beginnen.

das tut es doch...

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

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

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

bei mir schon.

gerade verwendet und dann explizit noch mal getestet. sogar mit bla1, bla2 und bla3 als reading und 'deletereading <device> bla.*'.

er löscht alle drei readings, meldet mir alle drei die gelöscht wurden und lässt alle anderen unangetastet.

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

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

betateilchen

solange die Namen der Readings alle gleichlang sind, mag das funktionieren. Hast Du auch mal bla1 bla22 und bla333 getestet?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

justme1968

das ging gerade eben auch...

list x
Internals:
   CFGFN      
   NAME       x
   NR         225
   STATE      ???
   TYPE       dummy
   Readings:
     2013-08-05 13:05:11   bla1            1
     2013-08-05 13:05:11   bla11           11
     2013-08-05 13:05:11   bla12           12
     2013-08-05 13:05:11   bla2            2
     2013-08-05 13:05:11   bla3            3
     2013-08-05 13:05:11   xbla11          11
     2013-08-05 13:05:11   xbla12          12
Attributes:

deletereading x bla.*
Deleted reading bla1 for device x
Deleted reading bla2 for device x
Deleted reading bla12 for device x
Deleted reading bla11 for device x
Deleted reading bla3 for device x

list x
Internals:
   CFGFN      
   NAME       x
   NR         225
   STATE      ???
   TYPE       dummy
   Readings:
     2013-08-05 13:05:11   xbla11          11
     2013-08-05 13:05:11   xbla12          12
Attributes:


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

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

betateilchen

komisch... ich hätte den Wunsch ja nicht geäußert, wenn es hier neulich funktioniert hätte. Ich werde nochmal ausgiebig testen.

Danke für Deine Unterstützung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

maxritti

Na, Du bist ja an vielen Stellen unterwegs.
Ob das so die gute Idee ist?

Readings kann man nicht aus einem Modul löschen, sondern die Readings werden aus einem Device gelöscht.
Und bevor die Frage kommt:
Schau mal hier:

http://fhem.de/commandref.html#deletereading

Warum willst Du denn auch Readings löschen?

Und was heisst denn geht nicht?
Ein wenig Code, den Du eingibst wäre hilfreich. Bzw Fehlermeldungen wird es u.U. auch geben.
Ach ne. Du hast ja auch Probleme mit dem Logfile.  ;)

maxritti

Den Sinn state zu löschen will ich jetzt mal nicht weiter hinterfragen.  :o
Ein Part aus der Commandref, den ich verlinkt habe:

Use with greatest care!

Und bitte prüfe mal Deine Angabe mit dem was in der Commandref steht.
Eventuell fällt Dir die Unstimmigkeit auf!?


maxritti

Zitat von: Jochen68 am 26 Dezember 2014, 18:26:41
Außerdem:
Wenn ich unnötige Readings lösche, würde so auch die Log-Datei kleiner ?
Definiere mal unnötig?

Wobei disconnected bei state deutet für mich irgendwie auf ein (weiteres) Problem in Deiner Config hin.

maxritti

Zitat von: Jochen68 am 26 Dezember 2014, 18:39:34
"state" ist gelöscht... , komisch hatte vorige Stunde schonmal "state" und "KWL" vertauscht  ::) , da funktionierte es nicht, alles seltsam ... steht hier im Thread ja auch schonmal weiter oben ...

Nun, das Posting ist schon aus 2013. Da hat sich an FHEM mittlerweile sehr viel getan.
Aber sei es drum.

Zitat von: Jochen68 am 26 Dezember 2014, 18:39:34
Und nein, den "state" hatte ich mir irgendwie zusätzlich "eingefangen" (gem. Datum auch schon älter). Alle Readings im Modul sind auch mit einem Großbuchstaben beginnend.

Jedenfalls ist das "Teil" weg ...

Würde eine Reduzierung auch das Log-File verkleinern ?

Wenn die Readings von der regExp im FileLog erreicht werden, dann kommen die zwangsläufig ins Log.
Darum würde ich aber nicht direkt Readings löschen.
Eher würde ich dem Log sagen, was es loggen soll und somit die Readings, die du nicht im Log haben willst, rausnimst.

Dazu einen Blick in die CommandRef werfen.

Zitat von: Jochen68 am 26 Dezember 2014, 18:39:34
Und wenn ich das Modul lösche und neu einbinde, wären alle Readings wieder da ?

Keine Ahnung. Hellsehen ist nicht meine Stärke.

Um was für ein Modul handelt es sich denn?

Ein Modul stellt die Readings bereit, welche es benötigt. Einleuchtend oder?
Wenn Du Dir natürlich irgendwie, irgendwelche andere Readings "einfängst", kann das natürlich sein, dass die dann auch wieder auftauchen.

Aber das ist jetzt genug OffTopic hier.

Sailor

Moin zusammen

Kurze Frage: Warum kann ich "deletereading" nicht aus einem Modul heraus ausfuehren?

Der Befehl


### Delete all existing readings
my $SearchWord = ".*";
my $name = "myDevice";
fhem( "deletereading $name $SearchWord" );



fuehrt zu nix.  :o

mit


### Delete all existing readings
my $SearchWord = ".*";
my $name = "myDevice";
print (fhem( "deletereading $name $SearchWord" ));


Scheint er gerade mal einen einzigen Reading zu loeschen

Danke fuer Eure Hilfe!

Gruss
    Sailor
******************************
Man wird immer besser...

GiBy

Zitat von: justme1968 am 04 August 2013, 21:32:49
ZitatWunsch:
deletereading <name> bla.*sollte aus <name> alle readings entfernen, die mit bla beginnen.

das tut es doch...

gruss
  andre

Ich stand eben vor dem Problem, je 500+ alte readings namens LetzteAktualisierung.* eines Dutzends ähnlichlautender Geräte namens Draussen.* zu entfernen. Händisch und einzeln hätte ich da bei laufendem FHEM wohl Zeit in der Größenordnung einiger Jahre und einige filesysteme/Datenträger gebraucht. Dankenswerterweise gelang es auch mittels
        deletereading Draussen.* LetzteAktualisierung.*
binnen weniger Sekunden.
Dank sei MAL WIEDER den Forumsmitgliedern für diese (und andere) Diskussionen abgestattet.
Nutze FHEM 5.9 auf Pi3B Raspbian
4.19.66-v7+ #1253 SMP Thu Aug 15 11:49:46 BST 2019 mit Mosquitto und CUL 3.4 868MHz, λ/4-Antenne,
433MHz-Funkschaltdosen, Sonoff/Tasmota: RF Bridge 433 MHz (incl. Portisch-FW), Basic, POW-R2