Hauptmenü

Frage zu If Bedingung

Begonnen von nerothos, 10 Februar 2017, 17:56:34

Vorheriges Thema - Nächstes Thema

nerothos

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

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Thorsten Pferdekaemper

...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
FUIP

nerothos

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



KölnSolar

mir fehlt da ein Klammernpaar um die if-Bedingung  ???
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

nerothos

+*00:02:00 { if {(ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")} { fhem ("set SMS MSGSend") } }

so ? ;)

KölnSolar

ähm, nee so
+*00:02:00 { if ((ReadingsVal("XX","transmit","") eq "OK" ||(ReadingsVal("XY","transmit","") eq "OK")) { fhem ("set SMS MSGSend") } }
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

CoolTux

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

KölnSolar

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.
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

nerothos

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!

Thorsten Pferdekaemper

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
FUIP