Hallo,
ich habe ein funktionierendes DOIF geschrieben und würde gerne die nächste Schaltzeit im stateFormat anzeigen lassen.
Internals:
DEF ([06:00-{sunrise(4500,"8:00","9:00")}] or
[{sunset(-3600,"16:00","21:00")}-22:30] and
[$SELF:Zeitschaltuhr] eq "An")
(set wz_rgb RGB 4D1300 30,
set terrasse_saison ON,
set wz_saison ON,
set kueche_saison1 ON,
set kueche_saison2 ON)
DOELSE
(set wz_rgb RGB 000000 30,
set terrasse_saison OFF,
set wz_saison OFF,
set kueche_saison1 OFF,
set kueche_saison2 OFF)
MODEL FHEM
NAME do_weihnachten
NR 89
NTFY_ORDER 50-do_weihnachten
STATE Automatik: An<br/>Zeitschaltuhr: An
TYPE DOIF
READINGS:
2018-11-25 17:05:10 Device do_weihnachten
2018-11-25 17:05:10 Zeitschaltuhr An
2018-11-25 17:05:11 cmd 1
2018-11-25 17:05:11 cmd_event do_weihnachten
2018-11-25 17:05:11 cmd_nr 1
2018-11-25 17:05:10 e_do_weihnachten_Zeitschaltuhr An
2018-11-25 16:54:06 mode enabled
2018-11-25 17:05:11 state An
2018-11-25 16:54:06 timer_01_c01 26.11.2018 06:00:00
2018-11-25 16:54:06 timer_02_c01 26.11.2018 08:29:42
2018-11-25 16:54:06 timer_03_c01 26.11.2018 16:04:23
2018-11-25 16:54:06 timer_04_c01 25.11.2018 22:30:00
Regex:
attr:
cmdState:
0:
An
1:
Aus
wait:
waitdel:
condition:
0 ::DOIF_time($hash,0,1,$wday,$hms) or ::DOIF_time($hash,2,3,$wday,$hms) and ::ReadingValDoIf($hash,'do_weihnachten','Zeitschaltuhr') eq "An"
days:
devices:
0 do_weihnachten
all do_weihnachten
do:
0:
0 set wz_rgb RGB 4D1300 30, set terrasse_saison ON, set wz_saison ON, set kueche_saison1 ON, set kueche_saison2 ON
1:
0 set wz_rgb RGB 000000 30, set terrasse_saison OFF, set wz_saison OFF, set kueche_saison1 OFF, set kueche_saison2 OFF
helper:
event Zeitschaltuhr: An
globalinit 1
last_timer 4
sleeptimer -1
timerdev do_weihnachten
timerevent Zeitschaltuhr: An
triggerDev do_weihnachten
DOIF_eventas:
cmd_nr: 1
cmd: 1
cmd_event: do_weihnachten
state: An
timerevents:
Zeitschaltuhr: An
e_do_weihnachten_Zeitschaltuhr: An
Device: do_weihnachten
cmd_nr: 1
cmd: 1
cmd_event: do_weihnachten
An
timereventsState:
Zeitschaltuhr: An
e_do_weihnachten_Zeitschaltuhr: An
Device: do_weihnachten
cmd_nr: 1
cmd: 1
cmd_event: do_weihnachten
An
triggerEvents:
Zeitschaltuhr: An
e_do_weihnachten_Zeitschaltuhr: An
Device: do_weihnachten
cmd_nr: 1
cmd: 1
cmd_event: do_weihnachten
An
triggerEventsState:
Zeitschaltuhr: An
e_do_weihnachten_Zeitschaltuhr: An
Device: do_weihnachten
cmd_nr: 1
cmd: 1
cmd_event: do_weihnachten
An
internals:
interval:
0 -1
1 0
2 -1
3 2
intervalfunc:
itimer:
localtime:
0 1543208400
1 1543217382
2 1543244663
3 1543181400
readings:
0 do_weihnachten:Zeitschaltuhr
all do_weihnachten:Zeitschaltuhr
realtime:
0 06:00:00
1 08:29:42
2 16:04:23
3 22:30:00
time:
0 06:00:00
1 {sunrise(4500,"8:00","9:00")}
2 {sunset(-3600,"16:00","21:00")}
3 22:30:00
timeCond:
0 0
1 0
2 0
3 0
timer:
0 0
1 0
2 0
3 0
timers:
0 0 1 2 3
trigger:
triggertime:
1543181400:
localtime 1543181400
hash:
1543208400:
localtime 1543208400
hash:
1543217382:
localtime 1543217382
hash:
1543244663:
localtime 1543244663
hash:
uiState:
uiTable:
Attributes:
alias Weihnachten Automatik
cmdIcon An:taster_ch_an_gruen Aus:taster_ch_aus_rot
cmdState An|Aus
eventMap /Zeitschaltuhr An:An/Zeitschaltuhr Aus:Aus/
group Saison Zeitschaltuhren
icon time_clock
readingList Zeitschaltuhr
room Saison,Zeitschaltuhren
setList Zeitschaltuhr:An,Aus
sortby 1
stateFormat {
"Automatik: ".ReadingsVal($name,"Zeitschaltuhr",0)."<br/>".
"Zeitschaltuhr: ".ReadingsVal($name,"state",0)
}
webCmd An:Aus
attr do_weihnachten stateFormat {min (ReadingsVal("do_weihnachten","timer_01_c01",""),ReadingsVal("do_weihnachten","timer_02_c01",""),ReadingsVal("do_weihnachten","timer_03_c01",""),ReadingsVal("do_weihnachten","timer_04_c01",""))}
Vielen Dank, habe es eingebaut und es funktioniert auf anhieb. ;D
Zitat von: Hi2Helmi am 26 November 2018, 20:45:15
Vielen Dank, habe es eingebaut und es funktioniert auf anhieb. ;D
Hast du etwas anderes erwartet ;)
Zitat von: Damian am 25 November 2018, 22:51:27
attr do_weihnachten stateFormat {min (ReadingsVal("do_weihnachten","timer_01_c01",""),ReadingsVal("do_weihnachten","timer_02_c01",""),ReadingsVal("do_weihnachten","timer_03_c01",""),ReadingsVal("do_weihnachten","timer_04_c01",""))}
Ich hänge mich mal hier rein, weil ich das gerade gefunden habe und mir das sehr weiter hilft.
Eine Ergänzungsfrage hätte ich noch:
Wie kriege ich es jetzt noch hin, dass zusätzlich der aktulle "state" angezeigt wird.
Ich habe schon experimentiert, bekomme es aber nicht hin.
Ein Tipp wäre super.
Gruß,
Jogi
hi,
stateFormat state {.....}
attr do_weihnachten stateFormat state {min (ReadingsVal("do_weihnachten","timer_01_c01",""),ReadingsVal("do_weihnachten","timer_02_c01",""),ReadingsVal("do_weihnachten","timer_03_c01",""),ReadingsVal("do_weihnachten","timer_04_c01",""))}
mfg
Zitat von: eisman am 21 Februar 2019, 18:20:27
hi,
stateFormat state {.....}
mfg
Leider funktioniert das nicht.
Angezeigt wird dann state und das was in der eckigen Klammer steht:
cmd_4 {min (ReadingsVal("doif_Kue3","22.02.2019 05:00:00",""),ReadingsVal("doif_Kue3","22.02.2019 20:15:00",""),ReadingsVal("doif_Kue3","21.02.2019 20:15:00",""),ReadingsVal("doif_Kue3","22.02.2019 09:00:00",""),ReadingsVal("doif_Kue3","21.02.2019 20:15:00",""),ReadingsVal("doif_Kue3","22.02.2019 09:00:00",""))}
Zitat von: Jogi am 21 Februar 2019, 18:08:14
Ich hänge mich mal hier rein, weil ich das gerade gefunden habe und mir das sehr weiter hilft.
Eine Ergänzungsfrage hätte ich noch:
Wie kriege ich es jetzt noch hin, dass zusätzlich der aktulle "state" angezeigt wird.
Ich habe schon experimentiert, bekomme es aber nicht hin.
Ein Tipp wäre super.
Gruß,
Jogi
state ist auch ein Reading, also musst Du es auch mit ReadindgsVal auslesen und mit dem Rückgabewert von der Perlfunktion min verbinden. Mischen der Varianten ist nicht vorgesehen, https://commandref.fhem.de/commandref_DE.html#stateFormat
Zitat von: Ellert am 22 Februar 2019, 05:06:19
state ist auch ein Reading, also musst Du es auch mit ReadindgsVal auslesen und mit dem Rückgabewert von der Perlfunktion min verbinden. Mischen der Varianten ist nicht vorgesehen, https://commandref.fhem.de/commandref_DE.html#stateFormat
Dank für den Hinweis, aber ich bekomme es trotzdem nicht hin.
Folgende Versuche scheitern:
{(ReadingsVal("doif_Kue3","state","")}{min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
{(ReadingsVal("doif_Kue3","state","")min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
{(ReadingsVal("doif_Kue3","state","");min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
{(ReadingsVal("doif_Kue3","state","").min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
Ich gebe zu, dass mir wahrscheinlich grundlegende Kenntnisse fehlen, wie man die beiden "Befehle" verknüpft, aber leider hilft mir da auch die Commandref nicht weiter. Oder ich verstehe es einfach nicht.
Gruß,
Jogi
Ich habe es jetzt durch try & error selbst herausgefunden:
{min (ReadingsVal("doif_Kue3","state","")) . " - " . min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
Zitat von: Jogi am 22 Februar 2019, 11:15:14
Ich habe es jetzt durch try & error selbst herausgefunden:
{min (ReadingsVal("doif_Kue3","state","")) . " - " . min (ReadingsVal("doif_Kue3","timer_01_c01",""),ReadingsVal("doif_Kue3","timer_02_c01",""),ReadingsVal("doif_Kue3","timer_03_c02",""),ReadingsVal("doif_Kue3","timer_04_c02",""),ReadingsVal("doif_Kue3","timer_05_c03",""),ReadingsVal("doif_Kue3","timer_06_c03",""))}
Du berechnest den kleinsten Wert von einem einzelnen Wert, das ist unnötig, also reicht
(ReadingsVal("doif_Kue3","state","") . " - " . min ...
Alternativ eine etwas kürzere Version mit dem DOIF-Attribut state:
attr state [$SELF] {(min("[$SELF:timer_01_c01]","[$SELF:timer_02_c01]","[$SELF:timer_03_c01]","[$SELF:timer_04_c01]","[$SELF:timer_05_c01]","[$SELF:timer_06_c01]"))}
@ Ellert und Damian,
vielen Dank!
Ich lerne immer gerne etwas dazu.