Hallo,
Wie kann ich testen, ob es ein bestimmte Reading gibt?
FrGr,
Paul
Ohne auf den device-hash zuzugreifen und dort evtl. Chaos zu stiften, bietet sich folgende Abfrage an:
if (ReadingsVal(<device>,<reading>,'unknown') ne 'unknown') {print "nicht vorhandenes reading";}
Funktioniert natürlich nicht, wenn das reading "zufällig" den Wert "unknown" enthält. Aber man kann ja auch eine Zeichenkette mit Sonderzeichen prüfen.
Wenn man (echtes) undef als Default übergibt, kann man gegen defined prüfen.
Zitat von: Beta-User am 08 April 2025, 16:10:06...
Ja, aber für das Verständnis der prinzipiellen Vorgehensweise ist ein echter Vergleich zweier Strings einfacher darzustellen.
Zitat von: betateilchen am 08 April 2025, 19:03:47Ja, aber für das Verständnis der prinzipiellen Vorgehensweise ist ein echter Vergleich zweier Strings einfacher darzustellen.
Stimme dir voll zu, zumal hier auch der Gesamtkontext eher rudimentär ist. Eventuell wäre hier auch devspec2array() einen Blick wert, falls es um eine loop über mehrere Devices geht (?).
Trotzdem noch die "unleserliche" Variante mit dem defined-or-Operator - der Code springt direkt zurück, wenn das Reading nicht vorhanden ist, sonst kann man mit der Variable weitermachen:
my $has_value = ReadingsVal(<device>,<reading>,undef) // return;