FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: michael.winkler am 21 Januar 2018, 00:41:18

Titel: Modul deletereading
Beitrag von: michael.winkler am 21 Januar 2018, 00:41:18
Hi,

über die Suche habe ich leider nichts gefunden. Daher frage ich jetzt mal hier.

Ich erzeuge in meinem Modul Readings, welche wieder gelöscht werden müssen. Bisher lösche ich solche Readings mit folgende Codezeile


print (fhem( "deletereading $DeviceName timer_" . sprintf("%02d",$i) . "_id" )) ;


Leider erzeugt dies jedes mal einen LOG Eintrag. Gibt es hier eventuell eine bessere Lösung?

Gruß
Michael
Titel: Antw:Modul deletereading
Beitrag von: KernSani am 21 Januar 2018, 01:12:04
Probier mal
fhem("deletereading ...", 1)
Titel: Antw:Modul deletereading
Beitrag von: igami am 21 Januar 2018, 07:35:34
Es ist auch möglich direkt auf die READINGS zuzugreifen

delete($hash->{READINGS});

oder

  foreach (keys %{$hash->{READINGS}}) {
      delete $hash->{READINGS}->{$_} if($_ ne "state");
    }
Titel: Antw:Modul deletereading
Beitrag von: CoolTux am 21 Januar 2018, 08:36:18
Zitat von: igami am 21 Januar 2018, 07:35:34
Es ist auch möglich direkt auf die READINGS zuzugreifen

delete($hash->{READINGS});

oder

  foreach (keys %{$hash->{READINGS}}) {
      delete $hash->{READINGS}->{$_} if($_ ne "state");
    }


Bitte bitte nicht. Keine direkten Hash Zugriffe.
Schau in die fhem.pl da gibt es eine Funktion CommandDeleteReading, die rufst Du einfach auf.
Allerdings ist es eher verpönt Readings zu löschen um sie dann wieder zu erzeugen. Grund ist das Funktionen wie event-on-change-reading nicht mehr funktionieren.

Es empfiehlt sich generell bei FHEM internen Befehlen einfach mal in die fhem.pl zu schauen um deren Funktion zu verstehen.
Titel: Antw:Modul deletereading
Beitrag von: michael.winkler am 21 Januar 2018, 09:07:39
Zitat von: CoolTux am 21 Januar 2018, 08:36:18
Bitte bitte nicht. Keine direkten Hash Zugriffe.
Schau in die fhem.pl da gibt es eine Funktion CommandDeleteReading, die rufst Du einfach auf.
Allerdings ist es eher verpönt Readings zu löschen um sie dann wieder zu erzeugen. Grund ist das Funktionen wie event-on-change-reading nicht mehr funktionieren.

Es empfiehlt sich generell bei FHEM internen Befehlen einfach mal in die fhem.pl zu schauen um deren Funktion zu verstehen.
Ok, danke. Dann schaue ich mir das mal an.


Gesendet von iPhone mit Tapatalk
Titel: Antw:Modul deletereading
Beitrag von: dev0 am 21 Januar 2018, 10:14:29
Unter Umständen kann es auch Sinn machen AnalyzeCommand(undef, "cmdXYZ") zu verwenden, um zB. ein Umbiegen via cmdalias zuzulassen.
Titel: Antw:Modul deletereading
Beitrag von: rudolfkoenig am 21 Januar 2018, 12:27:46
Da es fuer die Module die readings*Update() Funktionen schon gibt, habe ich ein (triviales) readingsDelete($hash, $readingsname) hinzugefuegt.

CommandDeleteReading bzw. deletereading ist eher fuer den Endbenutzer und seine userReadings gedacht, und macht bei den Modulen die unnoetige Schleife ueber devspec2array. Wenn der Modulautor beim Aufruf auch $cl weitergibt, und der Anwender meint, dieses Geraet auf blacklist setzen zu muessen, dann kann das Modul sein eigenes Reading nicht entfernen, und das ist kontraproduktiv.
Titel: Antw:Modul deletereading
Beitrag von: michael.winkler am 22 Januar 2018, 11:39:24
Zitat von: rudolfkoenig am 21 Januar 2018, 12:27:46
Da es fuer die Module die readings*Update() Funktionen schon gibt, habe ich ein (triviales) readingsDelete($hash, $readingsname) hinzugefuegt.

CommandDeleteReading bzw. deletereading ist eher fuer den Endbenutzer und seine userReadings gedacht, und macht bei den Modulen die unnoetige Schleife ueber devspec2array. Wenn der Modulautor beim Aufruf auch $cl weitergibt, und der Anwender meint, dieses Geraet auf blacklist setzen zu muessen, dann kann das Modul sein eigenes Reading nicht entfernen, und das ist kontraproduktiv.
Danke für die Funktion, funktionier sauber.