FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Hopfenmann am 03 Oktober 2017, 12:11:35

Titel: ELSE IF Abfrage abhängig von Reading State
Beitrag von: Hopfenmann am 03 Oktober 2017, 12:11:35
Guten Tag,
ich bastel schon seit längerem an einem Sonoff Touch Schalter mit ESP Easy.
Folgende if Abfrage soll einen Dummy Schalten und gleichzeitig die GPIO für das Relay innerhalb des Schalters setzen.
define n_SonoffTouchButton_change notify ESPEasy_FHEM6_key:.* {if(Value("SonoffTouch") eq "off") {fhem("set SonoffTouch on;;set  ESPEasy_FHEM6_Toggle gpio 12 1")} else {fhem("set SonoffTouch off;; set  ESPEasy_FHEM6_Toggle gpio 12 0")}}

Dabei bedeutet das "notify ESPEasy_FHEM6_key:.*" ja eigentlich das ein event ausgelöst wenn sich irgendein Reading ändert richtig?

Eigentlich möchte ich das Event aber haben wenn sich der state ändert. Wenn ich aber folgendes nutze "ESPEasy_FHEM6_key:state:.*" tut sich an dem schalter nichts, obwohl sich der state ändert wenn ich den Button drücke.

Das eigentliche Problem ist jedoch, das das state reading alle 10Minuten in den status "present" geht und eben auch dann ein Event ausgelöst wird, was dazu führt wenn ich den Schalter einschalte er nach 10Minuten von alleine ausgeht.

Also habe ich mir gedacht eine elseif abfrage zu bauen die dann ca. so aussehen sollte:
define n_SonoffTouchButton_change notify ESPEasy_FHEM6_key:state:.* {if(Value("ESPEasy_FHEM6_key:state:.*") eq "key: off") {fhem("set SonoffTouch on;;set  ESPEasy_FHEM6_Toggle gpio 12 1")} elsif(Value("ESPEasy_FHEM6_key:state:.*") eq "key: on")  {fhem("set SonoffTouch off;; set  ESPEasy_FHEM6_Toggle gpio 12 0")}}

Irgendwie kriege ich das aber nicht hin. Hat jemand eine Idee wo mein Fehler ist?

Vielen Dank für jede Hilfe schon mal,
Hopfenmann

Titel: Antw:ELSE IF Abfrage abhängig von Reading State
Beitrag von: Rolfg am 03 Oktober 2017, 12:47:16
Hallo,
Schau mal in der commanref unter If. Da sind ein paar Beispiele. Vor allem ganz zum Schluss. Vielleicht hilft dir das weiter.
Gruß Rolf
Titel: Antw:ELSE IF Abfrage abhängig von Reading State
Beitrag von: Hopfenmann am 03 Oktober 2017, 13:05:52
Um es vlt ein wenig einfacher auszudrücken:
Wenn Sich der state von "ESPEasy_FHEM6_key" in "key: on" ändert möchte ich das die gpio 12 eingeschaltet wird und gleichzeitig der dummy "SonoffTouch" auf on gesetzt wird.
Wenn Sich der state von "ESPEasy_FHEM6_key" in "key: off" ändert möchte ich das die gpio 12 ausgeschaltet wird und gleichzeitig der dummy "SonoffTouch" auf off gesetzt wird.
Jeder andere state soll ignoriert werden.

Titel: Antw:ELSE IF Abfrage abhängig von Reading State
Beitrag von: Rolfg am 03 Oktober 2017, 13:08:28
Hallo,

ich würde es mit DOIF lösen. Schau mal in der Commandref unter DOIF. Da sind so viele Beispiele. Das du das für dich umbauen kannst.

Gruß Rolf
Titel: Antw:ELSE IF Abfrage abhängig von Reading State
Beitrag von: Hopfenmann am 03 Oktober 2017, 13:17:48
Wow, vielen dank Rolfg. Das hat geholfen und scheint dazu eine recht simple syntax zu verfolgen.
Folgendes funktioniert jetzt bei mir:
define n_SonoffTouchButton_change DOIF ([ESPEasy_FHEM6_key:state] eq "key: on") (set  ESPEasy_FHEM6_Toggle gpio 12 1;;set SonoffTouch on) DOELSEIF ([ESPEasy_FHEM6_key:state] eq "key: off") (set  ESPEasy_FHEM6_Toggle gpio 12 0;;set SonoffTouch off)

Gruß,
Hopfenmann