FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: stim am 09 Juni 2016, 12:20:26

Titel: Erstellen einer Markisensteuerung Probleme mit Vergleichsoperatoren
Beitrag von: stim am 09 Juni 2016, 12:20:26
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
Titel: Antw:Erstellen einer Markisensteuerung Probleme mit Vergleichsoperatoren
Beitrag von: Otto123 am 09 Juni 2016, 12:30:27
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
Titel: Antw:Erstellen einer Markisensteuerung Probleme mit Vergleichsoperatoren
Beitrag von: ChrisK am 09 Juni 2016, 12:30:46
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! ;)