Hallo zusammen,
habe mir folgenede If Bedingung gebastelt, aber irgendwo scheint noch ein Fehler drinne. Es geht darum das wenn einer der beiden Sensoren XX oder XY kein WakeUp OK im Reading transmit gibt mir eine SMS auf das Handy zu schicken, zum Test habe ich es aber gerade so das er eine SMS schickt wenn der Transmit OK ist ;)
Ausführen tut er den Befehl aber ich sehe weder im log noch im event Monitor irgendwas, ist das normal ?
define Sensorausfall at +*00:02:00 { if (ReadingsVal("XX","transmit")||(ReadingsVal("XY","transmit") == OK) { fhem ("set SMS MSGSENT") } }
Habe anstatt == auch mal eq getestet, geht aber auch nicht :(
Hat evtl. jemand eine Idee was nicht stimmt ?
Vielen Dank
vg
David
Hi David,
ReadingsVal braucht einen dritten default Parameter -> (ReadingsVal("XX","transmit","")
Den gibt er zurück falls er den Wert nicht lesen kann.
Kann sein im Log siehst Du den Fehler nur wenn Du verbose hochdrehst. -> Not enough arguments for main::ReadingsVal at (eval 700337) line 1, near
Probiere am Besten beide Varianten mal mit {} in der Kommandozeile.
Gruß Otto
...außerdem sollte das OK in Anführungszeichen, also "OK" und das "oder" verknüpft logische Bedingungen und ist kein Mengen-Konstruktor. ...und "==" ist für Zahlen, nicht für Zeichenketten. Also eher so:
{ if (ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")...
Gruß,
Thorsten
hm ok, habe mich an dem Beispiel aus dem Handbuch orientiert, da steht es auch ohne ""
define Heizungssteuerung at +*01:00:00 { if (ReadingsVal("ez_Aussensensor","temperature",99) < 20) { fhem("set heizung on") } else { fhem("set heizung off") } }
habe aber mal umgebaut auf
+*00:02:00 { if (ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK") { fhem ("set SMS MSGSend") } }
da bekomme ich aber
syntax error at (eval 872) line 1, near ") {"
syntax error at (eval 872) line 1, near "} }"
mir fehlt da ein Klammernpaar um die if-Bedingung ???
Grüße Markus
+*00:02:00 { if {(ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")} { fhem ("set SMS MSGSend") } }
so ? ;)
ähm, nee so
+*00:02:00 { if ((ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")) { fhem ("set SMS MSGSend") } }
https://wiki.selfhtml.org/wiki/Perl/Bedingte_Anweisungen#Bedingte_Anweisungen_mit_if.2C_else_und_elsif
Ich glaube es wird Zeit für soooo
eieiei, passt immer noch nicht
Zitat+*00:02:00 { if (ReadingsVal("XX","transmit","") eq "OK" ||( ReadingsVal("XY","transmit","") eq "OK") { fhem ("set SMS MSGSend") } }
Es fehlte kein Klammernpaar, sondern die rote ist zu viel.
ne auch net, fehlt eine klammer ) ^^
hier das funktionierende ergebnis
+*23:00:00 { if ( (ReadingsVal("XX","transmit","") eq "OK") || (ReadingsVal("XY","transmit","") eq "OK")) { fhem ("set SMS MSGSend") } }
Vielen Dank an alle die geholfen haben!
Zitat von: nerothos am 10 Februar 2017, 19:37:49
hm ok, habe mich an dem Beispiel aus dem Handbuch orientiert, da steht es auch ohne ""
define Heizungssteuerung at +*01:00:00 { if (ReadingsVal("ez_Aussensensor","temperature",99) < 20) { fhem("set heizung on") } else { fhem("set heizung off") } }
Bei der 20 ist ja auch die Zahl gemeint und nicht die Zeichenkette "20".
Zitat
habe aber mal umgebaut auf
+*00:02:00 { if (ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK") { fhem ("set SMS MSGSend") } }
da bekomme ich aber
syntax error at (eval 872) line 1, near ") {"
syntax error at (eval 872) line 1, near "} }"
Die öffnende Klammer vor dem zweiten ReadingsVal muss weg.
Gruß,
Thorsten