Hallo,
ich würde gerne einzelne Zweige eines DOIFs per Buttons triggern.
Was ich schon kenne ist eine Triggerung per Text.
Z.B. triggert "trigger testDoif run" den Zweig, in dem das hier hinterlegt ist: ["^testDoif$:^run$"]
Für Buttons auf der FHEM-Oberfläche (hier beispielhaft drei Stück) würde ich gerne so verfahren:
webCmd: cmd_1:cmd_2:cmd:3
cmdIcon: cmd_1:scene_cleaning cmd_2:scene_dinner cmd_3:scene_cubby
Die cmd_x-Angaben sind leider noch Platzhalter für das, was mir an Infos noch fehlt.
Wer kann helfen?
Gruß Chris
Sowas wie hier unter Beispiel C?
https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen
Grüße
Im Prinzip ja, nur mit dem Unterschied, dass ich keinen Zustand des DOIFs im devStateIcon angezeigt bekommen möchte, sondern lediglich Buttons per cmdIcon erstellen möchte.
Kann man das in Beispiel C Geschriebene (attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1) auch unter cmdIcon so angeben und falls ja, was könnte ich da anstatt des Zustands angeben (Beispiel: cmd_1:general_an:cmd_2)?
Gruß Chris
Zitat von: chq am 25 März 2019, 19:14:31
Im Prinzip ja, nur mit dem Unterschied, dass ich keinen Zustand des DOIFs im devStateIcon angezeigt bekommen möchte, sondern lediglich Buttons per cmdIcon erstellen möchte.
Kann man das in Beispiel C Geschriebene (attr di_lamp devStateIcon cmd_1:general_an:cmd_2 cmd_2|initialized:general_aus:cmd_1) auch unter cmdIcon so angeben und falls ja, was könnte ich da anstatt des Zustands angeben (Beispiel: cmd_1:general_an:cmd_2)?
Gruß Chris
Im DOIF ist folgender Mechanismus eingebaut:
Wenn man den Status über cmdState umbenennt z. B. cmdState on|off und
mit setList die definierten Zustände, hier im Beispiel also on off angibt, dann kommen automatisch beim set-Auswahlmenü die angegebenen Optionen on off hinzu.
Damit kann man den cmd_1/cmd_2-Ausführungzweig entweder über set Modulnamen on/off schalten oder direkt in der Statuszeile wo on off aufgrund der setList-Angabe erscheint.
Man muss in der Bedingung dafür nichts ändern, insbesondere nicht den eigenen Status abfragen. Die Ausführung des jeweiligen Zweiges wird durch Anklicken der setList-Angaben hier on off in der Statuszeile wie beim set-Befehl
bedingungslos vorgenommen.
Weiß nicht ob du sowas meinst. Hier mal ein Beispiel welches ich nehme um mich ans Blumen gießen zu erinnern. Mit dem Button setze ich einen Zweig aktiv im DOIF:
defmod xx.Blumen DOIF ([$SELF:reset] and [$SELF:cmd] ne 1)\
( setreading $SELF reset 1,\
msg Die Blumen wurden gegossen. )\
\
DOELSEIF ([18:00] and [$SELF:reset:sec] >= 604800) \
( msg Bitte die Blumen gießen. )
attr xx.Blumen alias Blumen
attr xx.Blumen cmdState gegossen|gießen
attr xx.Blumen cmdpause 3600:3600
attr xx.Blumen devStateIcon gießen:sani_irrigation@red:gegossen gegossen:sani_irrigation@green:gegossen
attr xx.Blumen do always
attr xx.Blumen group Status
attr xx.Blumen icon hue_room_garden
attr xx.Blumen readingList reset
attr xx.Blumen room 0 Home
attr xx.Blumen setList gegossen reset:1
attr xx.Blumen widgetOverride cmdState:textField-long
Damin, ich habe mir auch das hier (https://forum.fhem.de/index.php/topic,66153.msg574144.html#msg574144 (https://forum.fhem.de/index.php/topic,66153.msg574144.html#msg574144)) angeschaut, aber auch dort geht es ja ausschließluch um das devStateIcon; ich hätte aber gerne mehrere Icons unter cmdIcon.
Was ich aber möchte sind lediglich mehrere Schalter (Icons) die immer gleich aussehen, über die ich einzelne DOIF-Zweige abrufen kann. Ich dachte immer, dass es sich beim devStateIcon um ein Icon handeln würde. Ist das nicht so?
Auch dieser Teil der Commandref hat mich nicht erleuchtet, da "cool" (siehe list meines testDoifs ganz unten) nicht auf der Oberfläche erscheint:
Wenn mit cmdState eigene Zuständsbezeichnungen definiert werden, so können diese ebenfalls per set-Befehl angegeben werden.
define di_lamp DOIF ([FB:"on"]) (set lamp on) DOELSEIF ([FB:"off"]) (set lamp off)
attr di_lamp cmdState on|off
attr di_lamp setList on off
set di_lamp on entspricht hier set di_lamp cmd_1 und set di_lamp off set di_lamp cmd_2
Zusätzlich führt die Definition von setList zur Ausführung von set di_lamp on/off durch das Anlicken des Lampensymbols wie im vorherigen Beispiel.
Gruß Chris
Internals:
CFGFN
DEF ([FB:"on"]) ()
DOELSEIF ([FB:"off"]) ()
DOELSEIF ([FB:"cool"]) ()
DOELSEIF ([04:00]) ()
DOELSEIF ([05:00]) ()
FUUID 5c99df40-f33f-b9fb-8248-904f445106f61c33
MODEL FHEM
NAME testDoif
NR 27175
NTFY_ORDER 50-testDoif
STATE on
TYPE DOIF
VERSION 18890 2019-03-13 18:56:41
READINGS:
2019-03-26 10:06:40 cmd 1
2019-03-26 10:06:40 cmd_event set_on_cmd_1
2019-03-26 10:06:40 cmd_nr 1
2019-03-26 10:06:13 mode enabled
2019-03-26 10:06:40 state on
2019-03-26 10:06:13 timer_01_c04 27.03.2019 04:00:00
2019-03-26 10:06:13 timer_02_c05 27.03.2019 05:00:00
Regex:
accu:
attr:
cmdState:
0:
on
1:
off
2:
cool
condition:
0 ::EventDoIf('FB',$hash,'on',1)
1 ::EventDoIf('FB',$hash,'off',1)
2 ::EventDoIf('FB',$hash,'cool',1)
3 ::DOIF_time_once($hash,0,$wday)
4 ::DOIF_time_once($hash,1,$wday)
days:
devices:
0 FB
1 FB
2 FB
all FB
do:
0:
0
1:
0
2:
0
3:
0
4:
0
5:
helper:
globalinit 1
last_timer 2
sleeptimer -1
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: set_on_cmd_1
state: on
intervalfunc:
itimer:
localtime:
0 1553655600
1 1553659200
realtime:
0 04:00:00
1 05:00:00
time:
0 04:00:00
1 05:00:00
timeCond:
0 3
1 4
timer:
0 0
1 0
timers:
3 0
4 1
trigger:
all FB
triggertime:
1553655600:
localtime 1553655600
hash:
1553659200:
localtime 1553659200
hash:
uiState:
uiTable:
Attributes:
cmdState on|off|cool
room Zentrale
setList on off cool
Ja dann mach doch on und off ins webcmd
setList ist ein vererbtes Attribut von fhem, die Funktionalität wird im DOIF zur Verfügung gestellt, was geht und was nicht geht wird nicht von DOIF entschieden.
Eigentlich reicht zu cmdState on|off|cool
die Definiton von webCmd on:off:cool
um die Punkte in der Statuszeile anzeigen zu lassen und durch Anklicken den entsprechenden DOIF-Zweig auszuführen.
setList sowie ReadingList braucht gar nicht erst definiert zu werden.
Naja es geht auch ohne setlist aber ein DOIF beinhaltet ja alles was ein DUMMY kann. Daher ist das schon sinvoll wenn man sich das DOIF noch hübsch bedienbar machen möchte. Ich habe z.B. für meine Waschmaschine ein DOIF welches auch die waschvorgänge in einem reading mit zählt. Man muss ja nich alles in 5 DUMMYs packen nur weil man nicht versteht das DOIF das alles schon kann und mitbringt.
Zitat von: Eistee am 26 März 2019, 15:03:29
Naja es geht auch ohne setlist aber ein DOIF beinhaltet ja alles was ein DUMMY kann. Daher ist das schon sinvoll wenn man sich das DOIF noch hübsch bedienbar machen möchte. Ich habe z.B. für meine Waschmaschine ein DOIF welches auch die waschvorgänge in einem reading mit zählt. Man muss ja nich alles in 5 DUMMYs packen nur weil man nicht versteht das DOIF das alles schon kann und mitbringt.
Natürlich, es macht keinen Sinn Dummys zu definieren, um sie im DOIF abzufragen. ReadingList und setList sind insbesondere interessant, wenn man eigene Readings im DOIF definieren und über die Statusleiste des DOIFs! schalten möchte. Wenn es nur darum geht, einzelne Ausführungszweige des DOIFs ausführen zu lassen ohne dabei auf die Bedingung zu achten, reicht, wie ich vorhin getestet habe, cmdState und webCmd zu setzen. Die Bezeichnungen müssen namentlich übereinstimmen.
Noch eleganter mit viel mehr Möglichkeiten bietet DOIF über das Attribut uiTable. Im Anhang ist ein DOIF mit Zeitsteuerung des Lichtes und passenden Icons der zugehörigen Lampen, die man nicht nur mit Ihrem Status visualisieren, sondern durch Anklicken auch schalten kann.
Erstaunlich, alles was DOIF kann! Dank dem DOIF kriegt sogar der Goldfisch Licht in seiner Schüssel. ;) :P Aber nur wenn die Tür auf ist, und der Topf nicht kocht.
Zitat von: amenomade am 26 März 2019, 19:37:53
Erstaunlich, alles was DOIF kann! Dank dem DOIF kriegt sogar der Goldfisch Licht in seiner Schüssel. ;) :P Aber nur wenn die Tür auf ist, und der Topf nicht kocht.
Naja, das war ja nur ein DOIF als kleiner Ausschnitt des Ganzen, hier sind alle 7 DOIFs, die ja nicht nur steuern, sondern auch visualisieren und über WEB-Oberfläche schalten können.
Es fehlt nur noch das FTUI Widget, um das ganze in TabletUI zu übertragen ;)
Danke Damian, Antwort #7 war sehr hilfreich. :)
Ich hab jetzt fünf Buttons definiert:
cmdState: alles|esszimmer|speisekammer|rausfahren|laden
setList: alles esszimmer speisekammer rausfahren laden
webCmd: alles:esszimmer:speisekammer:rausfahren:laden
cmdIcon: alles:control_building_empty esszimmer:scene_dinner speisekammer:scene_cubby reinigung:dustbin rausfahren:vacuum_top laden:message_socket
Wie kann ich nun als Letztes noch unterbinden, dass mir der zuletzt gewählte Befehl in Textform jeweils links neben den Buttons angezeigt wird?
Ist das praktisch das devStateIcon, was man da sieht?
Gruß Chris
Zitat von: amenomade am 26 März 2019, 20:22:36
Es fehlt nur noch das FTUI Widget, um das ganze in TabletUI zu übertragen ;)
Wir haben bewusst die Schnittstelle zu FHEM-Widgets und nicht zu TabletUI gewählt, um das Modul schlank und performant zu halten.
Zitat von: chq am 26 März 2019, 20:34:48
Danke Damian, Antwort #7 war sehr hilfreich. :)
Ich hab jetzt fünf Buttons definiert:
cmdState: alles|esszimmer|speisekammer|rausfahren|laden
setList: alles esszimmer speisekammer rausfahren laden
webCmd: alles:esszimmer:speisekammer:rausfahren:laden
cmdIcon: alles:control_building_empty esszimmer:scene_dinner speisekammer:scene_cubby reinigung:dustbin rausfahren:vacuum_top laden:message_socket
Wie kann ich nun als Letztes noch unterbinden, dass mir der zuletzt gewählte Befehl in Textform jeweils links neben den Buttons angezeigt wird?
Ist das praktisch das devStateIcon, was man da sieht?
Gruß Chris
Ich weiß nicht, was du für einen Link meinst. Wenn die Symbole existieren, dann werden entsprechende Symbole dargestellt - zumindest ist es bei mir so.
Warum hast du denn jetzt wieder das Attribut setList definiert? Dass man es für diese Funktionalität nicht benötigt, habe ich ja bereits schon geschrieben.
Edit: Eventuell entspricht der angezeigte Begriff einem FHEM-Device, daher der Link
Was Du mit Link meinst verstehe ich wiederum nicht. ::)
Auch wenn ich setList entferne, bekomme ich trotzdem den jeweils zuletzt hinterlegten Button als Text links neben den Buttons angezeigt (siehe Bild). Mitterweile ist es zwar ein Button mehr, aber das Problem ist natürlich noch das selbe. Ansonsten passt das so für mich-. super. Danke vielmals! :)
Gruß Chris
Zitat von: amenomade am 26 März 2019, 20:22:36
Es fehlt nur noch das FTUI Widget, um das ganze in TabletUI zu übertragen ;)
Es ist möglich das readingsGroup-Widget (https://wiki.fhem.de/wiki/FTUI_Widget_Readingsgroup) zu nutzen, um uiTable anzuzeigen.