Syntaxhilfe für if Bedingung in myUtils

Begonnen von Sirel, 27 Mai 2018, 14:02:30

Vorheriges Thema - Nächstes Thema

Sirel

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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Sirel

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

amenomade

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.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Sirel

Hi Amenomade,

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

Cheers,
Max