[Gelöst] Fehlersuche IF Befehl mit UND Bedingung

Begonnen von Mappen, 09 Juni 2017, 20:44:13

Vorheriges Thema - Nächstes Thema

Mappen

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

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

CoolTux

Wenn Du mir ein list vom Notify gibst kann ich mal schauen
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Mappen

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

igami

Warum steht da ein \ am Ende der Zeile?

elsif (($dewpoint_sz - $dewpoint_te < 0.1)\
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Mappen

#6
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.

igami

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?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Mappen

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.