FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: nerothos am 10 Februar 2017, 17:56:34

Titel: Frage zu If Bedingung
Beitrag von: nerothos am 10 Februar 2017, 17:56:34
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
Titel: Antw:Frage zu If Bedingung
Beitrag von: Otto123 am 10 Februar 2017, 18:03:06
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
Titel: Antw:Frage zu If Bedingung
Beitrag von: Thorsten Pferdekaemper am 10 Februar 2017, 19:07:51
...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
Titel: Antw:Frage zu If Bedingung
Beitrag 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") } }



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 "} }"


Titel: Antw:Frage zu If Bedingung
Beitrag von: KölnSolar am 10 Februar 2017, 19:47:22
mir fehlt da ein Klammernpaar um die if-Bedingung  ???
Grüße Markus
Titel: Antw:Frage zu If Bedingung
Beitrag von: nerothos am 10 Februar 2017, 19:56:43
+*00:02:00 { if {(ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")} { fhem ("set SMS MSGSend") } }

so ? ;)
Titel: Antw:Frage zu If Bedingung
Beitrag von: KölnSolar am 10 Februar 2017, 20:02:47
ähm, nee so
+*00:02:00 { if ((ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")) { fhem ("set SMS MSGSend") } }
Titel: Antw:Frage zu If Bedingung
Beitrag von: CoolTux am 10 Februar 2017, 20:04:03
https://wiki.selfhtml.org/wiki/Perl/Bedingte_Anweisungen#Bedingte_Anweisungen_mit_if.2C_else_und_elsif


Ich glaube es wird Zeit für soooo
Titel: Antw:Frage zu If Bedingung
Beitrag von: KölnSolar am 10 Februar 2017, 20:14:43
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.
Titel: Antw:Frage zu If Bedingung
Beitrag von: nerothos am 10 Februar 2017, 20:16:06
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!
Titel: Antw:Frage zu If Bedingung
Beitrag von: Thorsten Pferdekaemper am 10 Februar 2017, 20:46:05
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