Abfrage eines nicht vorhandene Attributs abfangen

Begonnen von roedert, 21 Juni 2017, 12:55:19

Vorheriges Thema - Nächstes Thema

roedert

In einem at frage ich tgl. ab welche Pflanzen ich giessen muss ... außer die auf "disable" gesetzt sind.

foreach (devspec2array("TYPE=XiaomiFlowerSens"))
   {
     if (($attr{$_}{'disable'} != 1) && (ReadingsVal($_,"moisture",0) < $attr{$_}{'minMoisture'}))
         ......
   }


Jetzt kommt natürlich auch eine Warnung "PERL WARNING: Use of uninitialized value in numeric ne (!=) at (eval 194680) line 4.", da es das disable-Attribut bei machen Devices gar nicht gibt.
Ist zwar nur eine Warnung - aber wie wäre ein sauberer Weg dies abzufangen?

rudolfkoenig


justme1968

das geht mit defined(). aber man sollte niemals direkt auf $attr zugreifen sondern AttrVal verwenden.

aber warum baust du das nicht direkt als
FILTER bei devspec2array mit ein? das geht für das attribut und für das reading.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

roedert

Perfekt .... danke!

*13:10:00 {
   foreach (devspec2array("TYPE=XiaomiFlowerSens:FILTER=disable!=1"))
   {
     if (ReadingsVal($_,"moisture",0) < AttrVal($_,"minMoisture",0))
     {
       fhem("set iMessage " . $_ . " (" . ReadingsVal($_,"ID","") . ") giessen");
     }
   }
}