Zusätzlichen Button einfugen

Begonnen von Jackeson, 21 März 2017, 14:44:39

Vorheriges Thema - Nächstes Thema

KernSani

Nette Signatur ;-) Das Einsteiger-PDF hast du aber nicht gelesen, oder? ROLLO kann wohl viel zu viel für deinen Anwendungsfall, daher nehmen wir die basics.

Bin zwar spät dran, aber ich habe das mal etwas ausführlicher runtergetippselt... DOIF geht natürlich auch, verwirrt aber viele Anfänger, da die Syntax anders ist als in FHEM üblich (aber sehr mächtig)

Also. Das at dient dazu einen Befehl zu einem bestimmten Zeitpunkt auszuführen. In deinem Fall "in einer Sekunde". Das funktioniert. gut.

Nun wollen wir einen "button". Dazu nehmen wir einen Dummy. Der Dummy ist einfach ein dummes Device:

define OG.BueroMichael_Rolladen.dummy dummy

der Dummy soll im ersten Schritt nur zwei Befehle verstehen, nämlich "hoch" und "stop" (mit "hoch" läuft er los, mit "stop" hält er an), die bringen wir ihm so bei:
attr OG.BueroMichael_Rolladen.dummy setList hoch stop
Jetzt hast du in deinem Dummy ein Dropdown, um die beiden Befehle abzusenden. Um diese auch noch als "Buttons" zu bekommen, setzen wir webcmd
attr OG.BueroMichael_Rolladen.dummy webCmd hoch:stop
Wenn du einen der Befehle clickst, ändert sich der Status des Dummies, aber es passiert nichts sichtbares... Tatsächlich passiert doch etwas, in FHEM wird ein Event ausgelöst - und auf dieses Event können wir reagieren...
Zwischenbemerkung: Du hast gesehen, dass links oben neben "save config" ein rotes Fragezeichen aufgetaucht ist? Das heißt deine Änderungen sind noch nicht gespeichert, drück mal auf "Save Config", dass dein Dummy auch nach dem nächsten Neustart noch da ist.
Auf ein Event reagieren wir mit notify. In unserem Fall haben wir zwei Events: hoch und stop, die jeweils von deinem Dummy ausgelöst werden. Im folgenden Beispiel reagieren wir auf das Ereignis "hoch". Wir schicken einmal "off", warten zwei Sekunden und schicken dann zweimal "off" (so habe ich verstanden, funktioniert das hochfahren?)
define OG.BueroMichael_Rolladen.notify notify OG.BueroMichael_Rolladen.dummy:hoch set OG.BueroMichael_Rolladen off;;sleep 2;;set OG.BueroMichael_Rolladen off;;set OG.BueroMichael_Rolladen off

(Rotes Fragezeichen --> Save config)

Wenn du jetzt in deinem Dummy auf "hoch" drückst, sollte das notify mit den angegebenen Befehlen ausgeführt werden...


   
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Otto123

@ KernSani Stand in meiner Antwort 3 auch schon in Kurzform (ausführlich im Link), mal sehen ob der Hinweis bei Antwort 30 mit mehr Text auch noch vorbeirauscht :)
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

Jackeson

Hallo,
es war alles sehr viel was mir an Hilfe angeboten wurde,deswegen kann auch mal was vorbeirauschen. ich hoffe du kannst mir vergeben Otto(ich finde dich in Sache Hilfe echt Super) ;)
Bin halt doch noch Anfänger (lese zwar viel aber verstehen muß man es)
"die Lösung von Ellert tut genau das was ich will"
Das von KernSani werde ich jetzt ganz in Ruhe anschauen und ausprobieren damit ich auch
Verstehe wie es funktioniert.

Also Danke nochmals an alle

aller anfang ist schwer

Damian

Nur mal zum Verständnis.
Durch die neuen Features beim DOIF lässt sich das bedingungslose Ausführen von DOIF-Zweigen durch eine zum Status des DOIF Moduls passende Definition von webCmd erreichen. Beim Beispiel von Ellert sind die Bedingungen ([?SELF]) eigentlich bedeutungslos. Man könnte, wenn man nur auf die Buttons reagieren möchte, z. B. auch definieren:

DOIF (1) (set OG.BueroMichael_Rolladen off) (set OG.BueroMichael_Rolladen off)\
DOELSEIF (2) (set OG.BueroMichael_Rolladen off)\
DOELSEIF (3) (set OG.BueroMichael_Rolladen on)


Besonders interessant ist aber die Möglichkeit zusätzlich in den Bedingung Abfragen zu definieren, die z. B. auf eine Fernbedienung reagieren, dann könnte man die Rolladen sowohl über Buttons (wie bereits definiert), wie auch über externe Ereignisse steuern ohne weitere Module definieren zu müssen.

z. B.


DOIF ([Button1]) (set OG.BueroMichael_Rolladen off) (set OG.BueroMichael_Rolladen off)\
DOELSEIF ([Button2]) (set OG.BueroMichael_Rolladen off)\
DOELSEIF ([Button3]) (set OG.BueroMichael_Rolladen on)






Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jackeson

Hallo, Damian
ich hab jetzt das mal so versucht umzusetzen zum üben

define DoifMichaelRollo DOIF ([Button1]) (set at +00:00:01 OG.BueroMichael_Rolladen off) (set OG.BueroMichael_Rolladen off)\
DOELSE ([Button2]) (set OG.BueroMichael_Rolladen off)\
DOELSE ([Button3]) (set OG.BueroMichael_Rolladen on)

dann kam diese Fehlermeldung:

DoifMichaelRollo DOIF: expected DOELSEIF or DOELSE: \ DOELSE ([Button2]) (set OG.BueroMichael_Rolladen off)\ DOELSE ([Button3]) (set OG.BueroMichael_Rolladen on)
aller anfang ist schwer

Damian

Zitat von: Jackeson am 29 März 2017, 00:00:30
Hallo, Damian
ich hab jetzt das mal so versucht umzusetzen zum üben

define DoifMichaelRollo DOIF ([Button1]) (set at +00:00:01 OG.BueroMichael_Rolladen off) (set OG.BueroMichael_Rolladen off)\
DOELSE ([Button2]) (set OG.BueroMichael_Rolladen off)\
DOELSE ([Button3]) (set OG.BueroMichael_Rolladen on)

dann kam diese Fehlermeldung:

DoifMichaelRollo DOIF: expected DOELSEIF or DOELSE: \ DOELSE ([Button2]) (set OG.BueroMichael_Rolladen off)\ DOELSE ([Button3]) (set OG.BueroMichael_Rolladen on)

Die Abfrage nach den Buttons ist eine Bedingung, also musst du DOELSEIF statt DOELSE angeben
und wenn du OG.BueroMichael_Rolladen zwei mal hintereinander off schalten willst, dann kannst du einfach mit wait arbeiten.

define DoifMichaelRollo DOIF ([Button1]) (set OG.BueroMichael_Rolladen off) (set OG.BueroMichael_Rolladen off)\
DOELSEIF ([Button2]) (set OG.BueroMichael_Rolladen off)\
DOELSEIF ([Button3]) (set OG.BueroMichael_Rolladen on)

attr DoifMichaelRollo wait 0,1



Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jackeson

Hallo,
da das wait nicht so genau geht könnte man den Befehl von Button1 auch so definieren damit der Befehl so ausgefürt wird? bsp.

define DoifRaffstore DOIF ([Button1]) (set EG.Wohnzimmer_Raffstore on;sleep 1;set EG.Wohnzimmer_Raffstore off;sleep 0.8;set EG.Wohnzimmer_Raffstore off) \
DOELSEIF ([Button2]) (set EG.Wohnzimmer_Raffstore off)\
DOELSEIF ([Button3]) (set EG.Wohnzimmer_Raffstore on)
aller anfang ist schwer

Damian

Zitat von: Jackeson am 02 Mai 2017, 11:31:44
Hallo,
da das wait nicht so genau geht könnte man den Befehl von Button1 auch so definieren damit der Befehl so ausgefürt wird? bsp.

define DoifRaffstore DOIF ([Button1]) (set EG.Wohnzimmer_Raffstore on;sleep 1;set EG.Wohnzimmer_Raffstore off;sleep 0.8;set EG.Wohnzimmer_Raffstore off) \
DOELSEIF ([Button2]) (set EG.Wohnzimmer_Raffstore off)\
DOELSEIF ([Button3]) (set EG.Wohnzimmer_Raffstore on)

Wenn hinter sleep ein Semikolon steht, ist es unkritisch.

Wait beruht auf den gleichen Timer-Mechanismen wie sleep und arbeitet ebenso auf Millisekunden genau.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jackeson

#38
Hallo
da ich ja" set EG.Wohnzimmer_Raffstore on;sleep 1;set EG.Wohnzimmer_Raffstore off;sleep 0.8;set EG.Wohnzimmer_Raffstore off) \"
also 3 Befehle hintereinander absetze komm ich nicht ganz klar

da ich ja nur bei attr wait 0,8 eingeben kann oder ist es möglich: wait 1,0 on und dann wait 0,8 off einzugeben?(also als ein Befehl)
dann müsste es auch so gehn?
define DoifRaffstore DOIF ([Button1]) (set EG.Wohnzimmer_Raffstore on;wait 1 set EG.Wohnzimmer_Raffstore off;wait 0.8 set EG.Wohnzimmer_Raffstore off) \
DOELSEIF ([Button2]) (set EG.Wohnzimmer_Raffstore off)\
DOELSEIF ([Button3]) (set EG.Wohnzimmer_Raffstore on)
aller anfang ist schwer

Damian

(set EG.Wohnzimmer_Raffstore on;sleep 1;set EG.Wohnzimmer_Raffstore off;sleep 0.8;set EG.Wohnzimmer_Raffstore off)

ist das Gleiche wie:

(set EG.Wohnzimmer_Raffstore on)(set EG.Wohnzimmer_Raffstore off)(set EG.Wohnzimmer_Raffstore off)

attr wait 0,1,0.8
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jackeson

aller anfang ist schwer