Ich moechte mit DOIF ein Toggle realisieren, aber wie ?
Das Ereignis fuer das DOIF ist ja immer gleich, nur die Auswertung aendert sich.
Standardmaessig kann man ja nicht dasselbe Event damit zweimal hintereinander verwenden,
erst muss sich was aendern.
Kann ich das abschalten ?
Licht Toggle mir the DOIF:
defmod Licht_Werkstatt DOIF ([GPIO_IN_05:"^on$"] and [?GPIO_OUT_17] eq "off") (set GPIO_OUT_17 on)\
DOELSEIF ([GPIO_IN_05:"^on$"] and [?GPIO_OUT_17] eq "on") (set GPIO_OUT_17 off)
attr Licht_Werkstatt cmdState on|off
attr Licht_Werkstatt cmdpause 1:1
attr Licht_Werkstatt devStateIcon on:on:cmd_2 initialize|initialized|off:off:cmd_1
attr Licht_Werkstatt do always
attr Licht_Werkstatt stateFormat [GPIO_OUT_17:state]
Mit dem Handy online, daher kurz gefasst...
DOIFs führen auch auch Aktionen auf identische Trigger aus, wenn sie mit dem Attribut do always versehen werden. So lässt sich auch toggeln, und der Aufriss um die Statusabfrage erübrigt sich sogar, wenn das zu steuernde Gerät einen Toggle-Befehl direkt untersützt (wie etwa HomeMatic, Rademacher-Rolläden, ...).
Für die Verhinderung zu schnell aufeinanderfolgender Trigger (vulgo: Prellen) gibt es das Attribut cmdpause. Steht alles in der hervorragenden deutschen commandref.
Zitat von: Frank_Huber am 05 November 2017, 10:39:54
Licht Toggle mir the DOIF:
defmod Licht_Werkstatt DOIF ([GPIO_IN_05:"^on$"] and [?GPIO_OUT_17] eq "off") (set GPIO_OUT_17 on)\
DOELSEIF ([GPIO_IN_05:"^on$"] and [?GPIO_OUT_17] eq "on") (set GPIO_OUT_17 off)
attr Licht_Werkstatt cmdState on|off
attr Licht_Werkstatt cmdpause 1:1
attr Licht_Werkstatt devStateIcon on:on:cmd_2 initialize|initialized|off:off:cmd_1
attr Licht_Werkstatt do always
attr Licht_Werkstatt stateFormat [GPIO_OUT_17:state]
Mit dem Handy online, daher kurz gefasst...
das hast du mit dem handy getippt? :o
Respekt!
Zitat von: nils_ am 06 November 2017, 16:19:48
das hast du mit dem handy getippt? :o
Respekt!
Neee, aber auch ein Handy kann copy & paste vom Browser. :-)
Da wären sonst mindestens 20 Rechtschreibfehler...
Danke, jetzt habe ich folgendes :
1. Ein Notify. Ist kompliziert, funktioniert aber.
LichtWohnAll:cSceneSet:.* {
my $test = sprintf ( "%u", ReadingsVal("LichtWohnAll", "cSceneSet", 0));;
if ( $test == 3 )
{
if ( ReadingsVal("LichtWohnEsstisch","state","") eq "on")
{ fhem ("set LichtWohnEsstisch off");; }
else
{ fhem ("set LichtWohnEsstisch on");;}
}
}
2. Ein DOIF
Ist viel einfacher, geht aber nicht.
([LichtWohnAll:cSceneSet] == 3 ) (IF ([LichtWohnEsstisch:state] eq "on" ) (set LichtWohnEsstisch off) ELSE (set LichtWohnEsstisch on))
Wo liegt hier der Fehler ?
Zitat von: howi42 am 10 November 2017, 10:59:52
Danke, jetzt habe ich folgendes :
1. Ein Notify. Ist kompliziert, funktioniert aber.
LichtWohnAll:cSceneSet:.* {
my $test = sprintf ( "%u", ReadingsVal("LichtWohnAll", "cSceneSet", 0));;
if ( $test == 3 )
{
if ( ReadingsVal("LichtWohnEsstisch","state","") eq "on")
{ fhem ("set LichtWohnEsstisch off");; }
else
{ fhem ("set LichtWohnEsstisch on");;}
}
}
2. Ein DOIF
Ist viel einfacher, geht aber nicht.
([LichtWohnAll:cSceneSet] == 3 ) (IF ([LichtWohnEsstisch:state] eq "on" ) (set LichtWohnEsstisch off) ELSE (set LichtWohnEsstisch on))
Wo liegt hier der Fehler ?
versuche mal das:
([LichtWohnAll:cSceneSet] == 3 and [LichtWohnEsstisch] eq "on" ) (set LichtWohnEsstisch off) DOELSEIF ([LichtWohnAll:cSceneSet] == 3 and [LichtWohnEsstisch] eq "off" ) (set LichtWohnEsstisch on))
Nicht ganz ....
Wenn ich mal die allerletzte Klammer wegnehme, erhalte ich ein Doppelkommando , on off hintereinander,
was ich auch verstehe.
Nach der 1. Bedingung geht die Lampe an, beim ElSEIF geht sie wieder aus.
Zitat von: Frank_Huber am 10 November 2017, 11:10:21
versuche mal das:
([LichtWohnAll:cSceneSet] == 3 and [?LichtWohnEsstisch] eq "on" ) (set LichtWohnEsstisch off) DOELSEIF ([LichtWohnAll:cSceneSet] == 3 and [?LichtWohnEsstisch] eq "off" ) (set LichtWohnEsstisch on)
Ja, sorry hinten war ne Klammer zuviel. LichtWohnEsstisch auf nicht triggernd.
Habs hier angepasst. versuch mal.
dazu evtl noch
attr cmdpause 1:1
hi,
ich habe das so gelöst....
defmod Taste33 DOIF ([Pin33:"low"] and [$SELF:Taste] ne "on") (set $SELF Taste on)\
DOELSEIF\
([Pin33:"low"] and [$SELF:Taste] ne "off") (set $SELF Taste off)
attr Taste33 alias Grünetaste
attr Taste33 cmdState off|on
attr Taste33 devStateIcon on:10px-kreis-rot off:10px-kreis-gruen
attr Taste33 group Steuerung
attr Taste33 readingList Taste
attr Taste33 room Steuerung
attr Taste33 setList Taste
und geht
gruss
Danke fuer eure Hilfe.
Letztendlich hat es das
attr cmdpause 1:1
gebracht.