Gibt es ein bestimmte Reading?

Begonnen von Paul Guijt, 08 April 2025, 15:41:22

Vorheriges Thema - Nächstes Thema

Paul Guijt

Hallo,

Wie kann ich testen, ob es ein bestimmte Reading gibt?

FrGr,
Paul
RasPi 2B, CUL 433, Jens' FW, Berker, HomeMatic, KlikaanKlikuit, RFXtrx443, Squeezebox, Z-Wave, TradFri in die Niederlände

betateilchen

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.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Wenn man (echtes) undef als Default übergibt, kann man gegen defined prüfen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

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;
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors