[gelöst] Nächste Schaltzeit im stateFormat abbilden

Begonnen von Hi2Helmi, 25 November 2018, 17:14:13

Vorheriges Thema - Nächstes Thema

Hi2Helmi

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
MfG
Florian

Damian

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",""))}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Hi2Helmi

Vielen Dank, habe es eingebaut und es funktioniert auf anhieb.  ;D
MfG
Florian

Damian

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  ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jogi

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

eisman

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
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Jogi

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",""))}

Ellert

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

Jogi

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

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",""))}


Ellert

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 ...

Damian

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]"))}
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Jogi

@ Ellert und Damian,
vielen Dank!

Ich lerne immer gerne etwas dazu.