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?
Mit AttrVal
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.
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");
}
}
}