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
Probier mal
fhem("deletereading ...", 1)
Es ist auch möglich direkt auf die READINGS zuzugreifen
delete($hash->{READINGS});
oder
foreach (keys %{$hash->{READINGS}}) {
delete $hash->{READINGS}->{$_} if($_ ne "state");
}
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.
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
Unter Umständen kann es auch Sinn machen AnalyzeCommand(undef, "cmdXYZ") zu verwenden, um zB. ein Umbiegen via cmdalias zuzulassen.
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.
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.