FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Sirel am 27 Mai 2018, 14:02:30

Titel: Syntaxhilfe für if Bedingung in myUtils
Beitrag von: Sirel am 27 Mai 2018, 14:02:30
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
Titel: Antw:Syntaxhilfe für if Bedingung in myUtils
Beitrag von: amenomade am 27 Mai 2018, 20:16:32
www.tizag.com/perlT/perlif.php

Es fehlen geschweifte Klammern
Titel: Antw:Syntaxhilfe für if Bedingung in myUtils
Beitrag von: Sirel am 27 Mai 2018, 21:40:09
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
Titel: Antw:Syntaxhilfe für if Bedingung in myUtils
Beitrag von: amenomade am 27 Mai 2018, 22:08:56
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.
Titel: Antw:Syntaxhilfe für if Bedingung in myUtils
Beitrag von: Sirel am 27 Mai 2018, 22:54:17
Hi Amenomade,

danke, am Scope hats gelegen. Jetzt läuft es :-)

Cheers,
Max