Hallo,
ich müsste alle Readings eines DOIFs durchgehen.
Dazu hätte ich sowas hier gefunden: https://forum.fhem.de/index.php/topic,117844.msg1122741.html#msg1122741 (https://forum.fhem.de/index.php/topic,117844.msg1122741.html#msg1122741)
foreach my $readingname (keys %{$hash->{READINGS}) {
# loop über readings mit $readingname zur Weiterverarbeitung
}
Im Def-Teil meines DOIFs gibt es die Variable $hash aber natülich nicht.
https://forum.fhem.de/index.php/topic,126259.msg1208811.html#msg1208811 (https://forum.fhem.de/index.php/topic,126259.msg1208811.html#msg1208811)
Wie geht man im DOIF alle Readings durch?
Danke für jeden Tipp.
lg, Gerhard
Hi,
für die FHEM Kommandozeile, anstatt fuehler1 trägst Du den Namen Deines DOIFs ein.
{my $d="fuehler1";;my $hash = $defs{$d};;my $readings = $hash->{READINGS};;my $message="{ ";;foreach my $a ( keys %{$readings} ) {my $val=ReadingsVal($d,$a,"error");;$message .= toJSON($a)." : ".toJSON($val)." ," };;chop($message);;$message.="}"}
Den Kram ein Json draus zu machen lässt Du natürlich weg :)
Gruß Otto
Hallo Otto,
Das mit dem "my $hash = $defs{$d}" hatte ich in Deiner Antwort übersehen bzw. nicht verrstanden.
Vielen Dank!
lg, Gerhard
Hallo,
ganz ist es leider noch nicht gelöst.
Zwar könnte ich nun auf den Hash zugreifen, aber leider kennt DOIF das "$defs" nicht.
Ich nehme an, das ist eine fhem System-Variable. Oder?
lg, Gerhard
Es handelt sich um eine globale Variable aus main. Ich bin kein Freund davon, dass Benutzer mit internen Variablen hantieren - aber das scheint in FHEM üblich zu sein.
Im DOIF kannst du auf Variablen aus main mit :: zugreifen, hier also mit $::defs
Unabhängig davon können interne Readings, die vom Modul generiert wurden, morgen wieder anders aussehen. ;)
Hallo Damian,
Ich bin auch kein Freund davon.
Ich muss nur immer wieder die Liste der im DOIF vorhandenen Readings durchgehen um Berechnungen anzustellen - wie auch immer das am einfachsten geht.
Danke für den Hinweis.
lg, Gerhard