FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Mappen am 09 Juni 2017, 20:44:13

Titel: [Gelöst] Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: Mappen am 09 Juni 2017, 20:44:13
Hallo zusammen,

ich habe mir für mein Schlafzimmerklima ein Notify erstellt. Alles funktioniert wunderbar, nur scheitere bei dem Versuch diesen um eine UND Bedingung zu erweitern.
Nämlich der Befehl close soll erst erfolgen wenn zusätzlich auch die Luftfeuchte im Raum größer 58 ist.

Zunächst der Code welcher funktioniert und keine Fehler im Log erzeugt:
define SZLueften notify (Schlaf.Temp.*|Schlaflueften.close:(open|close)) {\
my $temperature_sz = ReadingsVal("Schlaf.Temp", "temperature", "-1");;\
my $dewpoint_sz = ReadingsVal("Schlaf.Temp", "dewpoint", "-1");;\
my $temperature_te = ReadingsVal("Garten.Temp", "temperature", "-1");;\
my $dewpoint_te = ReadingsVal("Garten.Temp", "dewpoint", "-1");;\
my $dewpoint_buffer = $temperature_sz - $dewpoint_sz;;\
my $humi_sz = ReadingsVal("Schlaf.Temp", "humidity", "-1");;\
{fhem ("\
setreading Schlaflueften temperature_sz $temperature_sz;;\
setreading Schlaflueften dewpoint_sz $dewpoint_sz;;\
setreading Schlaflueften temperature_te $temperature_te;;\
setreading Schlaflueften dewpoint_te $dewpoint_te;;\
setreading Schlaflueften dewpoint_buffer $dewpoint_buffer;;\
setreading Schlaflueften humi_sz $humi_sz;;\
")};;\
  if ($dewpoint_sz - $dewpoint_te >= 0.3) {\
fhem ("set Schlaflueften open")\
}\
elsif ($dewpoint_sz - $dewpoint_te < 0.1) {\
fhem ("set Schlaflueften close")\
}\
elsif ($dewpoint_buffer < 5) {\
fhem ("set Schlaflueften schimmel")\
}\
else {\
fhem ("set Schlaflueften kA")\
}\
}


Wenn ich nun in der zweiten IF Abfrage ein UND ergänze, geht der Notify nicht mehr und der Log gibt Fehler aus.

Ergänzung mit UND Bedingung:
elsif (($dewpoint_sz - $dewpoint_te < 0.1)\
&& ($humi_sz > 58)) {\
fhem ("set Schlaflueften close")\
}\


Fehlerausgabe im Log:
2017.06.09 20:25:08 1: PERL WARNING: Useless use of numeric gt (>) in void context at (eval 487836) line 28.
2017.06.09 20:25:08 3: eval: my $EVTPART3='60';my $EVTPART4='D:';my $NAME='Schlaf.Temp';my $EVTPART5='14.6';my $EVTPART2='H:';my $EVTPART0='T:';my $TYPE='LaCrosse';my $SELF='SZLueften';my $EVTPART1='22.8';my $EVENT='T: 22.8 H: 60 D: 14.6';{
my $temperature_sz = ReadingsVal("Schlaf.Temp", "temperature", "-1");
...ab hier folgt nur noch der Rest des Code
Titel: Antw:Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: amenomade am 09 Juni 2017, 23:35:08
Anscheinend ist $humi_sz leer.
Titel: Antw:Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: CoolTux am 10 Juni 2017, 00:02:05
Wenn Du mir ein list vom Notify gibst kann ich mal schauen
Titel: Antw:Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: Mappen am 10 Juni 2017, 13:38:09
Ich hoffe ich hab es richtig verstanden.
Danke CoolTux
Internals:
   DEF        (Schlaf.Temp.*|Schlaflueften.close:(open|close)) {
my $temperature_sz = ReadingsVal("Schlaf.Temp", "temperature", "-1");
my $dewpoint_sz = ReadingsVal("Schlaf.Temp", "dewpoint", "-1");
my $temperature_te = ReadingsVal("Garten.Temp", "temperature", "-1");
my $dewpoint_te = ReadingsVal("Garten.Temp", "dewpoint", "-1");
my $dewpoint_buffer = $temperature_sz - $dewpoint_sz;
my $humi_sz = ReadingsVal("Schlaf.Temp", "humidity", "-1");
{fhem ("
setreading Schlaflueften temperature_sz $temperature_sz;
setreading Schlaflueften dewpoint_sz $dewpoint_sz;
setreading Schlaflueften temperature_te $temperature_te;
setreading Schlaflueften dewpoint_te $dewpoint_te;
setreading Schlaflueften dewpoint_buffer $dewpoint_buffer;
setreading Schlaflueften humi_sz $humi_sz;
")};
if ($dewpoint_sz - $dewpoint_te >= 0.3) {
fhem ("set Schlaflueften open")
}
elsif (($dewpoint_sz - $dewpoint_te < 0.1)\
&& ($humi_sz > 58)) {
fhem ("set Schlaflueften close")
}
elsif ($dewpoint_buffer < 3) {
fhem ("set Schlaflueften schimmel")
}
else {
fhem ("set Schlaflueften kA")
}
}
   NAME       SZLueften
   NR         106
   NTFY_ORDER 50-SZLueften
   REGEXP     (Schlaf.Temp.*|Schlaflueften.close:(open|close))
   STATE      active
   TYPE       notify
   Readings:
     2017-06-10 13:34:21   state           active
Attributes:
   room       Notify
Titel: Antw:Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: igami am 10 Juni 2017, 14:03:07
Warum steht da ein \ am Ende der Zeile?

elsif (($dewpoint_sz - $dewpoint_te < 0.1)\
Titel: Antw:Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: CoolTux am 10 Juni 2017, 14:10:56
Zitat von: igami am 10 Juni 2017, 14:03:07
Warum steht da ein \ am Ende der Zeile?

elsif (($dewpoint_sz - $dewpoint_te < 0.1)\


Ja die Frage hätte ich auch. Bitte überprüfe Deinen Code in FHEMWEB. Dazu in die Details des Notifys gehen und dann auf DEF. Wenn du mit dem bearbeiten fertig bist gehst Du auf modify.
Titel: Antw:[Gelöst] Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: Mappen am 10 Juni 2017, 18:36:03
Danke euch, genau das war das Problem. Nun habe ich den Code endlich erweitern können so das die Status open/close nicht ständig Ping Pong spielen.
Ohnehin will ich die Info ja nur wenn es sich im Feuchtbereich bewegt.
Titel: Antw:[Gelöst] Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: igami am 11 Juni 2017, 08:33:50
Zitat von: Mappen am 10 Juni 2017, 18:36:03
Danke euch, genau das war das Problem.
Ja, aber warum stand das \ da? Irgendwo her kopiert?
Titel: Antw:[Gelöst] Fehlersuche IF Befehl mit UND Bedingung
Beitrag von: Mappen am 11 Juni 2017, 09:05:33
Das war mein Fehler, ich hatte dies eingegeben, da ich der Meinung war das es benötigt wird. Mein hauptsächlicher Fehler war aber das Editieren in der FHEM.cfg. Nun habe ich dank CoolTux das Codehighlighting aktiv und nutze die Editfunktion direkt im Notify.