Hallo,
DOIF nutze ich mittlerweile für so ziemlich jede Automatisierung und bin damit sehr zufrieden.
Um so wenig Devices wie möglich zu haben, kombiniere ich meist mehrere Sachen in einem DOIF.
Konkret ersetze ich damit zum Beispiel einen dummy um einen Zustand anzuzeigen, möchte damit aber gleichzeitig auch schalten können (devstateicon).
Internals:
DEF ([HUEGroup3] eq "true" or [ZW_Kueche_Modul] eq "setOn") (setreading $SELF any_on on) DOELSEIF
([HUEGroup3] eq "false" or [ZW_Kueche_Modul] eq "setOff") (setreading $SELF any_on off) DOELSEIF
([passiertnicht]) (set ZW_Kueche_Modul setOff) DOELSEIF
([passiertnicht]) (set HUEGroup3 false) (set ZW_Kueche_Modul setOff)
NAME Kueche_Lampen
NR 649
NTFY_ORDER 50-Kueche_Lampen
STATE cmd_2
TYPE DOIF
READINGS:
2018-01-05 08:33:30 Device ZW_Kueche_Modul
2018-01-05 08:33:30 any_on off
2018-01-05 08:33:30 cmd 2
2018-01-05 08:33:30 cmd_event ZW_Kueche_Modul
2018-01-05 08:33:30 cmd_nr 2
2018-01-05 07:59:40 e_HUEGroup3_STATE false
2018-01-05 08:33:30 e_ZW_Kueche_Modul_STATE setOff
2018-01-05 08:33:30 state cmd_2
condition:
0 InternalDoIf($hash,'HUEGroup3','STATE') eq "true" or InternalDoIf($hash,'ZW_Kueche_Modul','STATE') eq "setOn"
1 InternalDoIf($hash,'HUEGroup3','STATE') eq "false" or InternalDoIf($hash,'ZW_Kueche_Modul','STATE') eq "setOff"
2 InternalDoIf($hash,'passiertnicht','STATE')
3 InternalDoIf($hash,'passiertnicht','STATE')
devices:
0 HUEGroup3 ZW_Kueche_Modul
1 HUEGroup3 ZW_Kueche_Modul
2 passiertnicht
3 passiertnicht
all HUEGroup3 ZW_Kueche_Modul passiertnicht
do:
0:
0 setreading Kueche_Lampen any_on on
1:
0 setreading Kueche_Lampen any_on off
2:
0 set ZW_Kueche_Modul setOff
3:
0 set HUEGroup3 false
1 set ZW_Kueche_Modul setOff
4:
helper:
event setOff,reportedState: setOff
globalinit 1
last_timer 0
sleeptimer -1
timerdev ZW_Kueche_Modul
timerevent setOff,reportedState: setOff
triggerDev ZW_Kueche_Modul
timerevents:
setOff
reportedState: setOff
timereventsState:
state: setOff
reportedState: setOff
triggerEvents:
setOff
reportedState: setOff
triggerEventsState:
state: setOff
reportedState: setOff
internals:
0 HUEGroup3:STATE ZW_Kueche_Modul:STATE
1 HUEGroup3:STATE ZW_Kueche_Modul:STATE
2 passiertnicht:STATE
3 passiertnicht:STATE
all HUEGroup3:STATE ZW_Kueche_Modul:STATE passiertnicht:STATE
itimer:
readings:
regexp:
0:
1:
all:
state:
STATE:
trigger:
Attributes:
devStateIcon cmd_1:on:cmd_4 cmd_2:off:cmd_3 cmd_3:on:cmd_4 cmd_4:off:cmd_3
group Licht
room Wohnzimmer-BG
Cond 0 und 1 dienen der Darstellung ob mindestens eine Lampe an ist oder beide aus.
Jetzt möchte ich über devStateIcon alle Lampen ausschalten - falls an - und alle anschalten - falls aus.
Dafür habe ich ein cmd3 und cmd4 eingeführt, welches man nur über devStateIcon erreichen kann/ soll.
Das habe ich über die Bedingung ([passiertnicht]) gelöst, damit diese nicht anders ausgelöst werden können.
Gibt es dafür nicht auch eine bessere (Standard-)Lösung?
Ich würde so etwas über uiTable lösen und das DOIF nur für eine Statusdarstellung nutzen
z.B.
define di DOIF ([HUEGroup3] eq "true" or [ZW_Kueche_Modul] eq "setOn")
attr di cmdState on|off
attr di uiTable WID ([ZW_Kueche_Modul],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off") |
WID ([HUEGroup3],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off")
icon_für_off und icon_für_on muss man durch einen gewünschten icon-Namen ersetzen.
gleich mal die neue Lösung vermarkten ;)
Schaue ich mir dann gleich mal an.
Zitat von: T3mplate am 05 Januar 2018, 11:13:51
Hallo,Das habe ich über die Bedingung ([passiertnicht]) gelöst, damit diese nicht anders ausgelöst werden können.
Gibt es dafür nicht auch eine bessere (Standard-)Lösung?
Naja, ich habe als Bedingung
(0)
stehen.
Bei deiner Lösung (unabhängig davon, wie die Bedingung geschrieben wird) musst du noch auf die Selftriggerung achten. Noch besser wäre stattdessen ein
set $SELF cmd_x
Zitat von: T3mplate am 05 Januar 2018, 13:43:39
gleich mal die neue Lösung vermarkten ;)
Schaue ich mir dann gleich mal an.
Du kannst es noch weiter treiben und DOIF zum Nichtstun degradieren. Den Status, wie auch die Schaltbefehle kannst du elegant in einer Icon-Zeile unterbringen. z. B.
define di DOIF (1)
attr di DOIF_Readings H_ZW_state: ([HUEGroup3] eq "true" or [ZW_Kueche_Modul] eq "setOn" ? "on" : "off")
attr di uiTable WID([$SELF:H_ZW_state], "iconLabel,off,icon_für_off,on,icon_für_on") |
WID ([ZW_Kueche_Modul],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off") |
WID ([HUEGroup3],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off")
Zitat von: Damian am 05 Januar 2018, 16:55:23
Du kannst es noch weiter treiben und DOIF zum Nichtstun degradieren. Den Status, wie auch die Schaltbefehle kannst du elegant in einer Icon-Zeile unterbringen. z. B.
define di DOIF (1)
attr di DOIF_Readings H_ZW_state: ([HUEGroup3] eq "true" or [ZW_Kueche_Modul] eq "setOn" ? "on" : "off")
attr di uiTable WID([$SELF:H_ZW_state], "iconLabel,off,icon_für_off,on,icon_für_on") |
WID ([ZW_Kueche_Modul],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off") |
WID ([HUEGroup3],"iconSwitch,setOff,icon_für_on\@DarkOrange,setOn,icon_für_off")
So.
nachdem ich uiTable ewig nicht gefunden habe (FHEM war aktuell, musste aber neu gestartet werden), habe ich es endlich zum ersten Mal getestet.
Ich kann mir mehrere Sachen damit vorstellen, aber in diesem Zusammenhang ist das für mich keine Lösung.
Ich möchte (siehe Anhang) ein Symbol welches beide Devices vereint und auch nur diesen Button zum klicken. Meine Lösung funktioniert ja. Ich hätte nur gehofft, dass es eine andere Lösung als meinen ,,Hack" gibt.
Zitat von: Per am 05 Januar 2018, 13:52:01
Naja, ich habe als Bedingung
(0)
stehen.
Ok. Ich bin also nicht der Einzige der dafür eine Lösung sucht.
Zitat von: Per am 05 Januar 2018, 13:52:01
Bei deiner Lösung (unabhängig davon, wie die Bedingung geschrieben wird) musst du noch auf die Selftriggerung achten. Noch besser wäre stattdessen ein
set $SELF cmd_x
An welcher Stelle meinst du das?
Ich kann noch nicht ganz folgen.
Hallo,
warum definierst Du nicht eine "structure". Mit diesem Device kannst Du dann alle Lampen Ein- oder Ausschalten.
Viele Grüße
Jürgen