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
Anscheinend ist $humi_sz leer.
Wenn Du mir ein list vom Notify gibst kann ich mal schauen
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
Warum steht da ein \ am Ende der Zeile?
elsif (($dewpoint_sz - $dewpoint_te < 0.1)\
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.
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.
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?
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.