[Gelöst] Offene Fenstern in unterschiedlichen Räumen ermitteln

Begonnen von Sirel, 29 November 2016, 19:49:45

Vorheriges Thema - Nächstes Thema

Sirel

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

Sirel

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Benni

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");


Sirel

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

bmilos

Raspberry Pi 3, nanoCUL 433, FHEMduino, HMLAN, Homematic, Intertechno, MiLight, MySensor

vmesser

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