Modul deletereading

Begonnen von michael.winkler, 21 Januar 2018, 00:41:18

Vorheriges Thema - Nächstes Thema

michael.winkler

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

KernSani

Probier mal
fhem("deletereading ...", 1)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

igami

Es ist auch möglich direkt auf die READINGS zuzugreifen

delete($hash->{READINGS});

oder

  foreach (keys %{$hash->{READINGS}}) {
      delete $hash->{READINGS}->{$_} if($_ ne "state");
    }
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

#3
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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

michael.winkler

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

dev0

Unter Umständen kann es auch Sinn machen AnalyzeCommand(undef, "cmdXYZ") zu verwenden, um zB. ein Umbiegen via cmdalias zuzulassen.

rudolfkoenig

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.

michael.winkler

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.