FHEM Forum

FHEM - Entwicklung => Wunschliste => Thema gestartet von: betateilchen am 30 Juli 2013, 10:23:55

Titel: deletereading mit regex
Beitrag von: betateilchen am 30 Juli 2013, 10:23:55
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.
Titel: Aw: deletereading mit regex
Beitrag 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
Titel: Aw: deletereading mit regex
Beitrag von: betateilchen am 04 August 2013, 22:33:55
nö.
Titel: Aw: deletereading mit regex
Beitrag von: justme1968 am 04 August 2013, 22:41:17
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
Titel: Aw: deletereading mit regex
Beitrag von: betateilchen am 04 August 2013, 22:47:48
solange die Namen der Readings alle gleichlang sind, mag das funktionieren. Hast Du auch mal bla1 bla22 und bla333 getestet?
Titel: Aw: deletereading mit regex
Beitrag von: justme1968 am 05 August 2013, 13:07:53
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
Titel: Aw: deletereading mit regex
Beitrag von: betateilchen am 05 August 2013, 13:20:25
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.
Titel: Aw: deletereading mit regex
Beitrag von: betateilchen am 05 August 2013, 13:38:10
ok, Du hast gewonnen :o)
Titel: Antw:deletereading mit regex
Beitrag von: maxritti am 26 Dezember 2014, 18:01:51
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.  ;)
Titel: Antw:deletereading mit regex
Beitrag von: maxritti am 26 Dezember 2014, 18:30:44
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!?

Titel: Antw:deletereading mit regex
Beitrag von: maxritti am 26 Dezember 2014, 18:32:39
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.
Titel: Antw:deletereading mit regex
Beitrag von: maxritti am 26 Dezember 2014, 19:19:17
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.
Titel: Antw:deletereading mit regex
Beitrag von: Sailor am 13 April 2015, 17:13:32
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
Titel: Aw: deletereading mit regex
Beitrag von: GiBy am 19 November 2023, 12:18:55
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.