Hallo zusammen,
ich möchte alle geschlossenen Fenster in einem Raum herausfinden. Der zu durchsuchende Raum soll aus einem Dummy ausgelesen werden. Es sollen auch 2 Räume durchsucht werden können.
Ich scheitere jetzt an meiner Abfrage:
sub statusFensterOffen() {
my @monitored=devspec2array("NAME=FTK_.*:FILTER=room=ReadingsVal("test","Etage","na"):FILTER=STATE!=open");
my $cnt_devs=@monitored;
my $i = 0;
my $msgtext = "";
foreach(@monitored) {
$msgtext .= ReadingsVal($_,"Fenster",$_);
if ($i <= $cnt_devs - 2) {
$msgtext .= ",";
}
$i++;
fhem ("set $msgtext Runter") if ($cnt_devs > 0);
}
return $msgtext if ($cnt_devs > 0);
}
1;
Ich frage zunächst nur einen Raum ab.
Ich erhalte jedoch immer eine Fehlermeldung beim speichern:
Zitatsyntax error at ./FHEM/99_fenster_check_myUtils.pm line 21, near ""NAME=FTK_.*:FILTER=room=ReadingsVal("Test" Global symbol "@monitored" requires explicit package name at ./FHEM/99_fenster_check_myUtils.pm line 22.
Ersetze ich > ReadingsVal("test","Etage","na") < durch > Erdgeschoss <, funktioniert die Abfrage so wie sie soll.
Hat jemand eine Idee, was ich falsch mache?
Vielen Dank und Grüße,
Max
So funktioniert es:
my @monitored=devspec2array("NAME=FTK_.*:FILTER=room=(Erdgeschoss||Obergeschoss):FILTER=STATE!=open");
Erdgeschoss oder Obergeschoss sollen aber dynamisch befüllt werden... ???
Max
Hallo Max,
ich bin da relativ unterbelichtet, aber mein Gefühl sagt er mag die geschachtelten " nicht.
Mach den ReadingsVal("test","Etage","na") doch mal vorher separat.
Gruß Otto
Zitat von: Otto123 am 29 November 2016, 20:27:49
ich bin da relativ unterbelichtet, aber mein Gefühl sagt er mag die geschachtelten " nicht.
Mach den ReadingsVal("test","Etage","na") doch mal vorher separat.
Otto hat recht!
Du solltest dir das Reading zunächst per ReadingsVal in eine Variable holen:
my $myRVal=ReadingsVal('test','Etage','na');
Dann kannst du die anschließend ganz einfach in den devspec2array-Parameter-String einbauen:
@monitored=devspec2array("NAME=FTK_.*:FILTER=room=$myRVal:FILTER=STATE!=open");
Hi Ihr zwei,
genau das war die Lösung. Hatte ich nach meinem Post dann auch probiert. Sieht jetzt so aus:
my $room_1=ReadingsVal("du_Rollladen_Etage","Raum_1","na");
my $room_2=ReadingsVal("du_Rollladen_Etage","Raum_2","na");
my @monitored=devspec2array("NAME=FTK_.*:FILTER=room=($room_1||$room_2):FILTER=STATE!=open");
Macht jetzt genau was es soll!
Vielen Dank für Eure Hilfe!
Beste Grüße,
Max
Hi,
wie sieht den eure config aus?
Gruss
Hi,
ich habe das Thema Fensteroffen in einem Reading gespeichert um mir die offenen Fenster per Sonos ansagen zu lassen.
Hier der Teil für das setreading:
{fhem("setreading All.Allesaus_doif fensteroffen ".join(" ", devspec2array("state=open:FILTER=speak=yes")))}
Viele Grüße
Volker