Autor Thema: Modul deletereading  (Gelesen 1449 mal)

Offline michael.winkler

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1472
Modul deletereading
« 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

Offline KernSani

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3090
Antw:Modul deletereading
« Antwort #1 am: 21 Januar 2018, 01:12:04 »
Probier mal
fhem("deletereading ...", 1)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Offline igami

  • Developer
  • Hero Member
  • ****
  • Beiträge: 2687
  • RTFM
    • commandref
Antw:Modul deletereading
« Antwort #2 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");
    }
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im August 2019.

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

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 23659
Antw:Modul deletereading
« Antwort #3 am: 21 Januar 2018, 08:36:18 »
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.
« Letzte Änderung: 21 Januar 2018, 08:38:59 von CoolTux »
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://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
Mein Dokuwiki:
https://tuxnetwiki-tuxnet.ddns.net

Offline michael.winkler

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1472
Antw:Modul deletereading
« Antwort #4 am: 21 Januar 2018, 09:07:39 »
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

Offline dev0

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3577
    • _.:|:._
Antw:Modul deletereading
« Antwort #5 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.
Zustimmung Zustimmung x 1 Liste anzeigen

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 21656
Antw:Modul deletereading
« Antwort #6 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.

Offline michael.winkler

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1472
Antw:Modul deletereading
« Antwort #7 am: 22 Januar 2018, 11:39:24 »
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.

 

decade-submarginal