If mit mehreren Bedingungen

Begonnen von Der_müde_Joe, 20 Juli 2015, 00:00:53

Vorheriges Thema - Nächstes Thema

Der_müde_Joe

Hallo erstmal ins Forum und vielen Dank an alle, die hier in ihrer Freizeit Anfängern und DAUs wie mir Hilfe geben.

Ich weiß, dass ich eine absolute Grundlagenfrage stelle aber ich bekomme es einfach nicht hin. Und gerade weil es so einfach ist, finde ich auch keinen guten Suchbegriff, mit welchem ich zum Ziel komme.

Ich habe einen FHT80B-3 und möchte mit diesem Temperaturabhängig den Lüfter in meiner Nachtspeicherheizung Ein und Aus schalten. Dazu habe ich bisher folgendes:

define AZ2_Heizung FHT 050c
attr AZ2_Heizung IODev CUL_0
attr AZ2_Heizung room AZ_Jens
define FileLog_AZ2_Heizung FileLog ./log/AZ2_Heizung-%Y.log AZ2_Heizung
attr FileLog_AZ2_Heizung logtype fht:Temp/Act,text
attr FileLog_AZ2_Heizung room AZ_Jens
define SVG_AZ2_Heizung SVG FileLog_AZ2_Heizung:fht:CURRENT
attr SVG_AZ2_Heizung label "AZ2_Heizung Min $data{min1}, Max $data{max1}, Last $data{currval1}"
attr SVG_AZ2_Heizung room AZ_Jens

define Heizungsschalter FS20 3eed 01
attr Heizungsschalter IODev CUL_0
attr Heizungsschalter room AZ_Jens
define FileLog_Heizungsschalter FileLog ./log/Heizungsschalter-%Y.log Heizungsschalter
attr FileLog_Heizungsschalter logtype text
attr FileLog_Heizungsschalter room AZ_Jens

define AZ2_Heizung_Logo notify AZ2_Heizung { \
my $FHT = "%";; \
  if ($FHT =~ "actuator:") { \
    $FHT = (substr($FHT, 9, (length($FHT)-10)));; \
    if ($FHT > 50) { \
      fhem("set Heizungsschalter on") \
    } \
    else { \
      fhem("set Heizungsschalter off") \
    } \
  } \
}


Nun habe ich das Problem, dass natürlich unabhängig ob der Lüfter bereits läuft oder nicht, immer wieder ON bzw. Off gesendet wird. Ich weiß, dass man eine zweite Bedingung mit && und einer separaten Klammer hinzufügen kann aber ich bekomme immer einen Syntax Fehler. Idee war, dass als weitere Bedingung einfach ein

&& ("Heizungsschalter" eq on)

dazu kommt. Aber das geht halt nicht. Kann mir einer dabei helfen?

Lieben Gruß und Danke im Vorraus
Joe

Prof. Dr. Peter Henning

( (..) && (..) ) mit 6 Klammern.
Und es heißt nicht "if-Schleife", denn darin ist keine Schleife enthalten.

LG

pah

Der_müde_Joe

#2
Hallo,

erstmal danke für deine Antwort und den Hinweis mit der Schleife. Ich habe das entsprechend geändert.

So habe ich das nun ergänzt:

define AZ2_Heizung_Logo notify AZ2_Heizung { \
my $FHT = "%";; \
  if ($FHT =~ "actuator:") { \
    $FHT = (substr($FHT, 9, (length($FHT)-10)));; \
    if (($FHT > 50) && ("Heizungsschalter" ne "off")) { \
      fhem("set Heizungsschalter on") \
    } \
    else { \
      fhem("set Heizungsschalter off") \
    } \
  } \
}


Ergebnis ist nun, dass ich im Logfile folgendes bekomme:

2015.07.20 17:00:32 3: FS20 set Heizungsschalter on
2015.07.20 17:02:29 3: FS20 set Heizungsschalter on
2015.07.20 17:04:26 3: FS20 set Heizungsschalter on


Also sendet er trotzdem weiterhin den Befehl. Änder ich das ne in ein eq dann schaltet er gar nicht mehr. Obwohl in meinen Augen doch das eq richtig sein müsste, oder nicht?

Lieben Gruß

krikan

Der Vergleich der 2 Werte "Heizungsschalter" ne "off" wird immer wahr sein.
Du willst (vermutlich) den Zustand/Wert des Heizungsschalter mit "off" vergleichen. Dazu brauchst Du Value("Heizungsschalter") -> http://fhem.de/commandref.html#perl
Schau Dir am Besten zunächst das Einsteiger-Pdf an.

Der_müde_Joe

#4
Hallo,

danke für die Hilfe. Es hat wirklich an dem Value gelegen. Habe es dann aus dem Einsteiger PDF übernommen. Vielen Vielen Dank für die Unterstützung und die Tipps.

Für andere die eine Steckdose mit einem FHT80B-3 schalten wollen hier nun die Lösung. Allerdings muss dabei natürlich die actuator-Öffnung an dem persönlichen Bedarf angepasst werden (Das ist bei mir die 50).


define AZ2_Heizung_Logo notify AZ2_Heizung { \
my $FHT = "%";; \
  if ($FHT =~ "actuator:") { \
    $FHT = (substr($FHT, 9, (length($FHT)-10)));; \
    if (($FHT >= 50) && Value("Heizungsschalter") eq "off") { \
      fhem("set Heizungsschalter on") \
    } \
    else { \
    if (($FHT < 50) && Value("Heizungsschalter") eq "on") { \
      fhem("set Heizungsschalter off") \
    } \
    } \
  } \
}


Lieben Gruß
Joe

Der_müde_Joe

#5
Durch das neue Update hat sich eine Änderung ergeben. Das % wird nicht mehr unterstützt und muss durch $EVENT ersetzt werden. Wie man in diesem Tread nachlesen kann.

define AZ2_Heizung_Logo notify AZ2_Heizung { \
my $FHT = "$EVENT";; \
  if ($FHT =~ "actuator:") { \
    $FHT = (substr($FHT, 9, (length($FHT)-10)));; \
    if (($FHT >= 50) && Value("Heizungsschalter") eq "off") { \
      fhem("set Heizungsschalter on") \
    } \
    else { \
    if (($FHT < 50) && Value("Heizungsschalter") eq "on") { \
      fhem("set Heizungsschalter off") \
    } \
    } \
  } \
}


LG Joe