FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: arokh12 am 06 Januar 2015, 16:37:47

Titel: [Gelöst] Operator in perl vergleichen
Beitrag von: arokh12 am 06 Januar 2015, 16:37:47
Hallo,

ich habe folgenden Operator:

{\
my $Weather = ReadingsVal("Wetter","day_of_week",0);;\
if ($Weather eq Di){\
fhem("set Tag1 Dienstag")}}


Dieser soll verglichen werden, und dann einen dummy (Tag1) setzen.

Die Fehlermeldung lautet:
ZitatWettertempNotify return value: Bareword "Di" not allowed while "strict subs" in use at (eval 15600) line 3.

Was mache ich falsch?

vielen Dank im voraus

arokh12[/code]
Titel: Antw:Operator in perl vergleichen
Beitrag von: rapster am 06 Januar 2015, 16:39:15
Anführungszeichen vergessen
Titel: Antw:Operator in perl vergleichen
Beitrag von: arokh12 am 06 Januar 2015, 16:42:42
Zitat von: rapster am 06 Januar 2015, 16:39:15
Anführungszeichen vergessen

Stimmt, jetzt funktioniert es

Vielen Dank

arokh12
Titel: Antw:Operator in perl vergleichen
Beitrag von: arokh12 am 06 Januar 2015, 17:31:06
Nun habe ich das Problem, dass wenn ich den Operator mehrmals auswerten will mit folgenden Code:
{\
my $Weather = ReadingsVal("Wetter","day_of_week",0);;\
if ($Weather eq "Mo"){fhem ("set Tag1 Montag")};;\
if ($Weather eq "Di"){fhem ("set Tag1 Dienstag")};;\
if ($Weather eq "Mi"){fhem ("set Tag1 Mittwoch")};;\
if ($Weather eq "Do"){fhem ("set Tag1 Donnerstag")};;\
if ($Weather eq "Fr"){fhem ("set Tag1 Freitag")};;\
if ($Weather eq "Sa"){fhem ("set Tag1 Samstag")};;\
if ($Weather eq "So"){fhem ("set Tag1 Sonntag")}}


das ich flogende Fehlermeldung bekomme:
Unknown command my, try help.
IF: no left bracket: {fhem("set Tag1 Dienstag")}
IF: no left bracket: {fhem("set Tag1 Mittwoch")}
IF: no left bracket: {fhem("set Tag1 Donnerstag")}
IF: no left bracket: {fhem("set Tag1 Freitag")}
IF: no left bracket: {fhem("set Tag1 Samstag")}
IF: no left bracket: {fhem("set Tag1 Sonntag")}}
Unknown command my, try help.


Was mache ich falsch?

Vielen Dank im voruas
Titel: Antw:[Gelöst] Operator in perl vergleichen
Beitrag von: fiedel am 07 Januar 2015, 08:33:26
Hm, editierst du direkt in der cfg oder im Frontend? Im Frontend müssen Zeilenumbrüche und Semikolons nicht maskiert werden, in der cfg schon. Irgendeinen Syntaxfehler (Klammerung) hast du noch. Prinzipiell sollte es aber so gehen.

Gruß

Frank
Titel: Antw:[Gelöst] Operator in perl vergleichen
Beitrag von: oniT am 07 Januar 2015, 12:30:08
Hi,

Eventuell hilft Dir dieser Ansatz. Ich habe es so gelöst.


Wetter:day_of_week.* {
fhem("set Tag1 ".kurzWtnachLang(ReadingsVal("Wetter","day_of_week",0)));
}


Und dann in 99_myUtils.pm diesen Code einfügen:

Zitat
sub kurzWtnachLang($)
{
my %wochentag = ('Mo' => 'Montag', 'Di' => 'Dienstag, ... 'So' => 'Sonntag');
return $wochentag {$_[0]};
}

Konnte es eben nicht kopieren ... muss noch mit restlichen Tagen ersetzt werden. Prinzip sollte aber soweit klar sein.

Gruß
Tino
Titel: Antw:[Gelöst] Operator in perl vergleichen
Beitrag von: cRossi am 29 Juli 2018, 16:42:31
Hallo zusammen,
für alle die das Thema finden und aus den obigen Antworten nicht recht schlau werden.  ;)

Ich habe nach einigem probieren mit Yahoo Wetter folgendes gemacht:

1. In Yahoo Wetter das Attribut "userReading" gesetzt:

fc10_day_of_week {wochentag(ReadingsVal("YahooWetter","fc10_day_of_week",0));;},
fc9_day_of_week {wochentag(ReadingsVal("YahooWetter","fc9_day_of_week",0));;},
fc8_day_of_week {wochentag(ReadingsVal("YahooWetter","fc8_day_of_week",0));;},
fc7_day_of_week {wochentag(ReadingsVal("YahooWetter","fc7_day_of_week",0));;},
fc6_day_of_week {wochentag(ReadingsVal("YahooWetter","fc6_day_of_week",0));;},
fc5_day_of_week {wochentag(ReadingsVal("YahooWetter","fc5_day_of_week",0));;},
fc4_day_of_week {wochentag(ReadingsVal("YahooWetter","fc4_day_of_week",0));;},
fc3_day_of_week {wochentag(ReadingsVal("YahooWetter","fc3_day_of_week",0));;},
fc2_day_of_week {wochentag(ReadingsVal("YahooWetter","fc2_day_of_week",0));;},
fc1_day_of_week {wochentag(ReadingsVal("YahooWetter","fc1_day_of_week",0));;},
day_of_week {wochentag(ReadingsVal("YahooWetter","day_of_week",0));;}



2. Unter "Edit files" eine 99_myUtils.pm Datei erzeugt und darin folgenden Code eingegeben:

sub wochentag($) {
my %wochentag = ('Mo' => 'Montag', 'Di' => 'Dienstag', 'Mi' => 'Mittwoch', 'Do' => 'Donnerstag', 'Fr' => 'Freitag', 'Sa' => 'Samstag', 'So' => 'Sonntag');
return $wochentag {$_[0]};
}



Das gute ist, dass der Code so öfter verwendbar ist und nicht im ersten Teil eingebaut werden muss.

cRossi