ELSE IF Abfrage abhängig von Reading State

Begonnen von Hopfenmann, 03 Oktober 2017, 12:11:35

Vorheriges Thema - Nächstes Thema

Hopfenmann

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


Rolfg

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

Hopfenmann

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.


Rolfg

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

Hopfenmann

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