Hallo zusammen,
ich habe mir ein kleines "Skript" geschrieben, welches die Rollläden bei geöffneten Fenster auf eine definierte Position fährt. Jetzt möchte ich das Skript aber noch etwas verfeinern, dass abhängig vom Besucherstatus das Gästezimmer im Array berücksichtigt wird, oder auch nicht.
Der Syntax passt aber noch nicht. Kann man beim definieren der Variablen überhaupt schon if - Abfragen einbauen?
Hier der Auszug, wie es nicht funktioniert. Was muss ich anpassen/ändern, damit das Array mal mit und mal ohne Gästezimmer gebildet wird?
# Enter you functions below _this_ line.
sub gotosleep_control () {
if (ReadingsVal("Besuch","state","Nein") eq "Nein")
my @monitored=devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer|Gästezimmer):FILTER=Fenster=RL_.*")
else
my @monitored=devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer):FILTER=Fenster=RL_.*")};
Besten Dank für eure Hilfe vorab,
Max
www.tizag.com/perlT/perlif.php
Es fehlen geschweifte Klammern
Hi Amenomade,
danke für die schnelle Hilfe.
Habe jetzt die Klammer gesetzt, allerdings erhalte ich weiterhin eine Fehlermeldung:
line 31. Global symbol "@monitored" requires explicit package name at ./FHEM/99_gotosleep_fenstercontrol_myUtils.pm line 34.
my $visit_state = ReadingsVal('Besuch','state','Nein');
if ($visit_state eq "Nein")
{
my @monitored=devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer|Gästezimmer):FILTER=Fenster=RL_.*");
}
else
{
my @monitored=devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer):FILTER=Fenster=RL_.*");
}
my $lueften=ReadingsVal('du_Beschattung','Lueften',15);
my $cnt_devs=@monitored;
my $cnt_devs=@monitored
entspricht dabei Zeile 31. Zeile 34 will ebenfalls auf die Liste @monitored zurückgreifen.
Kann das so überhaupt funktionieren? Ich habe auch folgendes ausprobiert, aber auch an dieser Stelle geht es nicht weiter.
sub gotosleep_control () {
my $visit_state = ReadingsVal('Besuch','state','Nein');
my @monitored =
if ($visit_state eq "Nein") {
devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer|Gästezimmer):FILTER=Fenster=RL_.*");
}
else
{
devspec2array("(FTK_.*):FILTER=STATE!=closed:FILTER=room!=(Garage|ZWave|Wohnzimmer):FILTER=Fenster=RL_.*");
}
Könntest Du mir etwas konkreter helfen?
Thx und Grüße,
Max
Zitat von: Sirel am 27 Mai 2018, 21:40:09
Könntest Du mir etwas konkreter helfen?
Ja, fang mal an mit den Basics von Perl....
http://www.tizag.com/perlT/index.php
oder
https://www.tutorialspoint.com/perl/index.htm
In deiner erste Version => Stichwort = Scope of variables in Perl
In deiner 2. Version => if liefert kein Ergebnis, der in einem Assignment benutzbar wäre. $var = if {} geht einfach nicht.
Hi Amenomade,
danke, am Scope hats gelegen. Jetzt läuft es :-)
Cheers,
Max