Erstellen einer Markisensteuerung Probleme mit Vergleichsoperatoren

Begonnen von stim, 09 Juni 2016, 12:20:26

Vorheriges Thema - Nächstes Thema

stim

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

Otto123

Hallo stim,

ZitatMeine Frage ist warum immer alle else zweige anspringen.
wo steht bei Dir else?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

ChrisK

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! ;)