Hallo Zusammen,
ich habe eine Fallarmmarkise und möchte diese mit Fhem steuern.
Dazu habe ich das folgende Modul gebaut:
sub Markise() {
my $Regenstatus = ReadingsVal("Regensensor","state",9999 ); # on | off
my $Windstatus = ReadingsVal("KS300","wind",9999); # wind value in km/h
my $Fenstertemperatur = ReadingsVal("HMS100T_1729","temperature",99999); # temperatur am fenster
my $Fenstertemperatur_9 = ReadingsVal("Kuechenfenster_Temp_Basis","state",99999);
my $elevation = ReadingsVal("Sonnenstand_Markiese","state",9999); # Sonnenstand im Winkel
my $Beschattungsautomatik = ReadingsVal("Beschattungsautomatik","state",9999); # Beschattungsautomatik on | off
Log 3, "Regenstatus $Regenstatus; Windstatus $Windstatus;Fenstertemperatur: $Fenstertemperatur-$Fenstertemperatur_9; Elevation $elevation; Beschattungsautomatik $Beschattungsautomatik;";
if ("on" eq $Beschattungsautomatik){
if ($Regenstatus == "off"){
if ($Windstatus lt 10){
if ($Fenstertemperatur - $Fenstertemperatur_9 gt 3){ # Fenster wird von Sonne beschienen
Log 3, "CMD Markiese set Markiese pct 100-$elevation";
} Log 3, "difference zu klein";
}Log 3, "zu viel wind";
}Log 3, "es Regent";
}Log 3, "Beschattungsautomatik aus";
}
Meine Frage ist warum immer alle else zweige anspringen.
Das Logfile gibt auf Log 3, "Regenstatus $Regenstatus; Windstatus $Windstatus;Fenstertemperatur: $Fenstertemperatur-$Fenstertemperatur_9; Elevation $elevation; Beschattungsautomatik $Beschattungsautomatik;";
folgendes aus:
2016.06.09 12:16:37 3: Regenstatus off; Windstatus 3.0;Fenstertemperatur: 17.7-17.7; Elevation 143.31; Beschattungsautomatik on;
Danach wird dann die Ausgabe von den Jeweiligen Elsezweigen ausgegeben:
2016.06.09 12:16:37 3: Beschattungsautomatik aus
2016.06.09 12:16:37 3: es Regent
2016.06.09 12:16:37 3: zu viel wind
Ob ich nun "on" eq $Beschattungsautomatik oder $Beschattungsautomatik eq "on" schreibe sollte egal sein oder?
Fakt ist so geht es nicht.
Ich bitte um eure Unterstützung.
Mit freundlichen Grüßen
stim
Hallo stim,
ZitatMeine Frage ist warum immer alle else zweige anspringen.
wo steht bei Dir else (http://www.tizag.com/perlT/perlif.php)?
Gruß Otto
Habe zwar mit Perl wenig am Hut, aber Dir fehlt aus meiner Sicht das "else".
Ich glaube, das müsste so ungefähr aussehen:
if ("on" eq $Beschattungsautomatik){
if ($Regenstatus == "off"){
if ($Windstatus lt 10){
if ($Fenstertemperatur - $Fenstertemperatur_9 gt 3){ # Fenster wird von Sonne beschienen
Log 3, "CMD Markiese set Markiese pct 100-$elevation";
}
else { Log 3, "difference zu klein";}
}
else { Log 3, "zu viel wind";}
}
else { Log 3, "es Regent";}
}
else { Log 3, "Beschattungsautomatik aus";}
Ohne "else" führt er immer die Log-Befehle aus.
Was mir auch auffällt ist, dass Du beim Regenstatus "==" statt "eq" nimmst. Bewusst?
//edit:
Genau Otto! ;)