Löschen von "internals" , aber wie ?

Begonnen von fhem-challenge, 02 Januar 2017, 09:21:29

Vorheriges Thema - Nächstes Thema

fhem-challenge

Guten Morgen und zunächst auch ein frohes neues Jahr 2017!

Ich stehe derzeit etwas auf dem Schlauch.

Einfache Frage: Wie kann ich den Wert eines "internals" aus einer Funktion heraus löschen oder ändern ?

Hintergrund: ich muss in einer meiner Funktionen gelegentlich die internals zu den RSSI löschen (Beispiel: CUL2_RSSI).

Natürlich kann ich ein "rereadcfg" machen, damit alle Internals zu RSSI gelöscht werden, aber das will ich natürlich eher vermeiden.

Viele Grüße!

Andreas



dev0

Ich würde Dir davon abraten Internal aus Modulen zu löschen, die Du nicht selbst geschrieben hast, da Du die Auswirkungen nicht kennst. Der sinnvollere Weg wäre mMn den Modulautor zu kontaktieren um eine Lösung zu finden.

rudolfkoenig

Da in diesem Fall ich der betroffene Maintainer bin (folgendes ist perl):
Zitatdelete($defs{<fhem_device_name>}{CUL2_RSSI});

Manchmal ist aber auf 0 setzen sinnvoller, ich habe dafuer ein notify gebaut:
define cntreset notify cntreset {\
  foreach my $k (keys %defs) {\
    $defs{$k}{CUL_RSSI}=0 if($defs{$k}{CUL_RSSI});\
    $defs{$k}{CUL_MSGCNT}=0 if($defs{$k}{CUL_MSGCNT});\
  }\
}


die ich per "trigger cntreset" aufrufe.

ACHTUNG: falls man sich beim <fhem_device_name> verschreibt, wird man Aerger einhandeln, da kommen naemilich die schwer zu lokalisierbaren Meldungen ala "Error: >$d< has no TYPE, but following keys: >...<"

fhem-challenge

Zitat von: rudolfkoenig am 02 Januar 2017, 09:45:31
Da in diesem Fall ich der betroffene Maintainer bin (folgendes ist perl):
Manchmal ist aber auf 0 setzen sinnvoller, ich habe dafuer ein notify gebaut:
define cntreset notify cntreset {\
  foreach my $k (keys %defs) {\
    $defs{$k}{CUL_RSSI}=0 if($defs{$k}{CUL_RSSI});\
    $defs{$k}{CUL_MSGCNT}=0 if($defs{$k}{CUL_MSGCNT});\
  }\
}


die ich per "trigger cntreset" aufrufe.

ACHTUNG: falls man sich beim <fhem_device_name> verschreibt, wird man Aerger einhandeln, da kommen naemilich die schwer zu lokalisierbaren Meldungen ala "Error: >$d< has no TYPE, but following keys: >...<"


Okay ... vielen Dank für die schnellen Antworten.

Ich hätte sonst versucht via "cron" (at +00:05:00 ...) mir die internals als zusätzliche readings am device fest zu legen. Die (selbst) erzeugten readings kann ich ja dann löschen.

Hintergrund war meine RSSI table ... https://forum.fhem.de/index.php/topic,62184.0.html


Aber in der Tat ist mir die "trigger cntreset" Lösung lieber, auch mit dem Makel, dass es zu schwer erkennbaren Fehlern kommen könnte.


Viele Grüße!

Andreas