Weihnachtsbeleuchtung mit Szenarien

Begonnen von Damian, 28 November 2020, 11:40:31

Vorheriges Thema - Nächstes Thema

gestein

#15
Wenn ich die DEF ändere, wird die Seite neu geladen und auch ein F5/Aktualisieren hilft nix.

Ich habe testweise mal 4 Szenen mit unterschiedlicher Anfangszeit, aber dem gleichen Aktuator, angelegt:
push (@{$_sc},[("Terrasse_Ost","[{sunset(-1800)}-22:00]", "MQTT2_shellyswitch25_E098068D28BC_CH2",   "11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh",    "[05:46-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh2",    "[05:47-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh3",    "[05:48-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);


Damit habe ich dann 2 Timer, auch in einem list.
Internals:
   DEF        subs  {
## Parameter    1             2                       3               4        5        6      7     8
@{$_params}=(qw(Szene         Zeitspanne              Aktor           von      bis      Status aktiv icon));
## Szenarien werden durch Hinzufügen einer Definitionszeile erstellt
push (@{$_sc},[("Terrasse_Ost","[{sunset(-1800)}-22:00]", "MQTT2_shellyswitch25_E098068D28BC_CH2",   "11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh",    "[05:46-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh2",    "[05:47-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost-Frueh3",    "[05:48-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
#push (@{$_sc},[("Terrasse_West",    "[{sunset(-1800)}-23:06]",    "MQTT2_shellyswitch25_68C63AFB9B27_CH2",       "12-01", "01-31", "on", "on", "christmas_lights")]);
#push (@{$_sc},[("Terrasse_West-Frueh",     "[05:47-{sunrise(3600)}]",    "MQTT2_shellyswitch25_68C63AFB9B27_CH2",        "12-01", "01-01", "on", "on", "christmas_lights")]);
#push (@{$_sc},[("Krippe",    "[{sunset(-1800)}-23:07]",    "Test",       "12-01", "01-31", "on", "on", "krippe")]);
#push (@{$_sc},[("Krippe-Frueh",     "[05:48-{sunrise(3600)}]",    "Test",        "12-01", "01-01", "on", "on"), "krippe"]);
#push (@{$_sc},[("Stiege",    "[{sunset(-1800)}-23:08]",    "MQTT2_shellyplug_s_EAE605",       "12-01", "01-31", "on", "on", "christmas_lights")]);
#push (@{$_sc},[("Stiege-Frueh",     "[05:49-{sunrise(3600)}]",    "MQTT2_shellyplug_s_EAE605",        "12-01", "01-01", "on", "on", "christmas_lights")]);
#push (@{$_sc},[("Test",     "[05:50-{sunrise(3600)}]",    "MQTT2_shellyplug_s_EAE605_temp",        "12-01", "01-01", "off", "off", "christmas_lights")]);

## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt
if ($::init_done) {
  fhem("deletereading $SELF .*");
  set_State("initialized");
  for (my $i=0;$i < @{$_sc};$i++) {
    for (my $j=5;$j < @{$_params};$j++) { ## Parameter 6 und 7 werden als Reading angelegt
      set_Reading ($_sc[$i][0].".".$_params[$j],$_sc[$i][$j]);
    }
  }
}
} ## end of subs

DEF TPL_light ( ## Definition des Templates namens TPL_light
light_$1 {      ## Parameter: Szene Zeitspanne Aktor von bis
                ##            $1    $2         $3    $4  $5
  if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {
    if ($2) {
      fhem_set("$3 on");
      set_State("Szene: $1");
      set_Reading("$1.Status","on",1);
    } else {
      fhem_set ("$3 off");
      set_Reading("$1.Status","off",1);
    }
  }
} ## Ende des light-Blocks
) ## Ende der Templatedefinition

## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,$_$4,$_$5))
   FUUID      5fc403f2-f33f-0b7a-ef32-d5354fbb0b303c93
   FVERSION   98_DOIF.pm:0.232350/2020-11-25
   MODEL      Perl
   NAME       di_Weihnachtsbeleuchtung_szenen
   NOTIFYDEV  global,MQTT2_shellyswitch25_E098068D28BC_CH2,di_Weihnachtsbeleuchtung_szenen
   NR         1826
   NTFY_ORDER 50-di_Weihnachtsbeleuchtung_szenen
   STATE      initialized
   TYPE       DOIF
   VERSION    23235 2020-11-25 22:42:28
   OLDREADINGS:
   READINGS:
     2020-12-10 08:39:54   Terrasse_Ost-Frueh.Status on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh.aktiv on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh.icon christmas_lights
     2020-12-10 08:39:54   Terrasse_Ost-Frueh2.Status on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh2.aktiv on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh2.icon christmas_lights
     2020-12-10 08:39:54   Terrasse_Ost-Frueh3.Status on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh3.aktiv on
     2020-12-10 08:39:54   Terrasse_Ost-Frueh3.icon christmas_lights
     2020-12-10 08:39:54   Terrasse_Ost.Status on
     2020-12-10 08:39:54   Terrasse_Ost.aktiv on
     2020-12-10 08:39:54   Terrasse_Ost.icon christmas_lights
     2020-12-10 08:39:54   state           initialized
     2020-12-10 08:39:54   timer_01_c01    10.12.2020 16:06:49
     2020-12-10 08:39:54   timer_02_c01    10.12.2020 22:00:00
   Regex:
     accu:
     uiTable:
       MQTT2_shellyswitch25_E098068D28BC_CH2:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_4_0_0:
           state      ^MQTT2_shellyswitch25_E098068D28BC_CH2$:^state:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_4_0_0:
           state      ^MQTT2_shellyswitch25_E098068D28BC_CH2$:^state:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_4_0_0:
           state      ^MQTT2_shellyswitch25_E098068D28BC_CH2$:^state:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_4_0_0:
           state      ^MQTT2_shellyswitch25_E098068D28BC_CH2$:^state:
       di_Weihnachtsbeleuchtung_szenen:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_5_0_0:
           Terrasse_Ost.Status ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost.Status:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_6_0_0:
           Terrasse_Ost.aktiv ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost.aktiv:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_5_0_0:
           Terrasse_Ost-Frueh.Status ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh.Status:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_6_0_0:
           Terrasse_Ost-Frueh.aktiv ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh.aktiv:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_5_0_0:
           Terrasse_Ost-Frueh2.Status ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh2.Status:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_6_0_0:
           Terrasse_Ost-Frueh2.aktiv ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh2.aktiv:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_5_0_0:
           Terrasse_Ost-Frueh3.Status ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh3.Status:
         di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_6_0_0:
           Terrasse_Ost-Frueh3.aktiv ^di_Weihnachtsbeleuchtung_szenen$:^Terrasse_Ost-Frueh3.aktiv:
   condition:
     0                                    if (::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost.aktiv') eq "on" and ($md ge "11-01" or $md le "01-31")) {
    if (::DOIF_time($hash,0,1,$wday,$hms)) {
      fhem_set("MQTT2_shellyswitch25_E098068D28BC_CH2 on");
      set_State("Szene: Terrasse_Ost");
      set_Reading("Terrasse_Ost.Status","on",1);
    } else {
      fhem_set ("MQTT2_shellyswitch25_E098068D28BC_CH2 off");
      set_Reading("Terrasse_Ost.Status","off",1);
    }
  }

   days:
   defs:
     tpl:
       TPL_light    light_$1 {                          if ([?di_Weihnachtsbeleuchtung_szenen:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {
    if ($2) {
      fhem_set("$3 on");
      set_State("Szene: $1");
      set_Reading("$1.Status","on",1);
    } else {
      fhem_set ("$3 off");
      set_Reading("$1.Status","off",1);
    }
  }

   helper:
     DEVFILTER  ^global$|^di_Weihnachtsbeleuchtung_szenen$|^MQTT2_shellyswitch25_E098068D28BC_CH2$
     NOTIFYDEV  global|di_Weihnachtsbeleuchtung_szenen|MQTT2_shellyswitch25_E098068D28BC_CH2
     globalinit 1
     last_timer 2
     sleeptimer -1
     bm:
       DOIF_Get:
         cnt        2
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        10.12. 08:39:55
         max        4.69684600830078e-05
         tot        6.58035278320312e-05
         mAr:
           HASH(0x8d7f210)
           di_Weihnachtsbeleuchtung_szenen
           ?
       DOIF_Notify:
         cnt        3
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        10.12. 08:39:54
         max        0.000100135803222656
         tot        0.000129222869873047
         mAr:
           HASH(0x8d7f210)
           HASH(0xdd9898)
       DOIF_Set:
         cnt        8
         dmx        -1000
         dtot       0
         dtotcnt    0
         mTS        10.12. 08:39:59
         max        0.000336170196533203
         tot        0.00107836723327637
         mAr:
           HASH(0x8d7f210)
           di_Weihnachtsbeleuchtung_szenen
           ?
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1607612809
     1          1607634000
   perlblock:
     0          light_Terrasse_Ost
   realtime:
     0          16:06:49
     1          22:00:00
   time:
     0          {sunset(-1800)}
     1          22:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   triggertime:
     1607612809:
       localtime  1607612809
       hash:
     1607634000:
       localtime  1607634000
       hash:
   uiTable:
     dev        di_Weihnachtsbeleuchtung_szenen
     package    package ui_Table;
     reading    Terrasse_Ost-Frueh3.aktiv
     table:
       0:
         0:
           0:
             0          package ui_Table;"Szene"
         1:
           0:
             0          package ui_Table;"Zeitspanne"
         2:
           0:
             0          package ui_Table;"von"
         3:
           0:
             0          package ui_Table;"bis"
         4:
           0:
             0          package ui_Table;"Aktor"
         5:
           0:
             0          package ui_Table;"Status"
         6:
           0:
             0          package ui_Table;"aktiv"
       1:
         0:
           0:
             0          package ui_Table;ICON("christmas_lights")
             1          package ui_Table;" "
             2          package ui_Table;"Terrasse_Ost"
         1:
           0:
             0          package ui_Table;"[{sunset(-1800)}-22:00]"
         2:
           0:
             0          package ui_Table;"11-01"
         3:
           0:
             0          package ui_Table;"01-31"
         4:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_4_0_0',switch (::ReadingValDoIf($hash,'MQTT2_shellyswitch25_E098068D28BC_CH2','state')),'','MQTT2_shellyswitch25_E098068D28BC_CH2','state')
         5:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_5_0_0',icon(::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost.Status')),'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost.Status')
         6:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_1_6_0_0',::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost.aktiv'),"","select,on,off",'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost.aktiv')
       2:
         0:
           0:
             0          package ui_Table;ICON("christmas_lights")
             1          package ui_Table;" "
             2          package ui_Table;"Terrasse_Ost-Frueh"
         1:
           0:
             0          package ui_Table;"[05:46-{sunrise(3600)}]"
         2:
           0:
             0          package ui_Table;"11-01"
         3:
           0:
             0          package ui_Table;"01-31"
         4:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_4_0_0',switch (::ReadingValDoIf($hash,'MQTT2_shellyswitch25_E098068D28BC_CH2','state')),'','MQTT2_shellyswitch25_E098068D28BC_CH2','state')
         5:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_5_0_0',icon(::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh.Status')),'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh.Status')
         6:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_2_6_0_0',::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh.aktiv'),"","select,on,off",'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh.aktiv')
       3:
         0:
           0:
             0          package ui_Table;ICON("christmas_lights")
             1          package ui_Table;" "
             2          package ui_Table;"Terrasse_Ost-Frueh2"
         1:
           0:
             0          package ui_Table;"[05:47-{sunrise(3600)}]"
         2:
           0:
             0          package ui_Table;"11-01"
         3:
           0:
             0          package ui_Table;"01-31"
         4:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_4_0_0',switch (::ReadingValDoIf($hash,'MQTT2_shellyswitch25_E098068D28BC_CH2','state')),'','MQTT2_shellyswitch25_E098068D28BC_CH2','state')
         5:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_5_0_0',icon(::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh2.Status')),'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh2.Status')
         6:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_3_6_0_0',::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh2.aktiv'),"","select,on,off",'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh2.aktiv')
       4:
         0:
           0:
             0          package ui_Table;ICON("christmas_lights")
             1          package ui_Table;" "
             2          package ui_Table;"Terrasse_Ost-Frueh3"
         1:
           0:
             0          package ui_Table;"[05:48-{sunrise(3600)}]"
         2:
           0:
             0          package ui_Table;"11-01"
         3:
           0:
             0          package ui_Table;"01-31"
         4:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_4_0_0',switch (::ReadingValDoIf($hash,'MQTT2_shellyswitch25_E098068D28BC_CH2','state')),'','MQTT2_shellyswitch25_E098068D28BC_CH2','state')
         5:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_5_0_0',icon(::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh3.Status')),'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh3.Status')
         6:
           0:
             0          package ui_Table;::DOIF_Widget($hash,$reg,'di_Weihnachtsbeleuchtung_szenen_uiTable_c_4_6_0_0',::ReadingValDoIf($hash,'di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh3.aktiv'),"","select,on,off",'','di_Weihnachtsbeleuchtung_szenen','Terrasse_Ost-Frueh3.aktiv')
     tc:
       1          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       10         style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       2          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       3          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       4          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       5          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       6          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       7          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       8          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
       9          style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'
     td:
       0:
       1:
       2:
       3:
       4:
     tr:
   var:
     params:
       Szene
       Zeitspanne
       Aktor
       von
       bis
       Status
       aktiv
       icon
     sc:
       ARRAY(0x1e34ec00)
       ARRAY(0x233d6e98)
       ARRAY(0x23102718)
       ARRAY(0x233adc98)
Attributes:
   icon       christmas_tree_2
   room       Weihnachten
   uiTable    {
  package ui_Table;
  $TC{1..10}="style='padding-left: 5px; padding-right: 5px; padding-top: 3px; padding-bottom: 3px;' align='center'";
}
"Szene"|"Zeitspanne"|"von"|"bis"|"Aktor"|"Status"|"aktiv"
FOR (@{$_sc},ICON("$_$8")." "."$_$1"|"$_$2"|"$_$4"|"$_$5"|switch ([$_$3:state])|icon([$SELF:$_$1.Status])|WID([$SELF:$_$1.aktiv],"select,on,off"))


Wenn ich noch eine Dummy-Szene mit einem anderen Aktuator am Ende hinzufüge, dann werden alle Timer richtig angelegt.
Zumindest scheinen nicht alle Timer für Szenen mit gleichen Aktuator angelegt zu werden.

Klappt das denn bei Dir?
lg, Gerhard

Damian

Es liegt nicht am Aktor ($3), sondern am Definitionsnamen der Szenen ($1):

Du solltest statt Minus ein Unterstrich nehmen:

push (@{$_sc},[("Terrasse_Ost_Frueh",    "[05:46-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost_Frueh2",    "[05:47-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);
push (@{$_sc},[("Terrasse_Ost_Frueh3",    "[05:48-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);


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

gestein

Echt?
Dann bin ich natürlich wieder voll ins Fettnäpfchen. Wieso musste ich auch ausgerechnet das Minus nehmen?

Mit dem Szenen-Namen ist es eh nicht einfach: keine Umlaute, keine Abstände, kein "-" ...

Habe die Szenen umbenannt und siehe da, die 8x2 Timer sind da.

Damit sollte nun alles geklärt sein.
Vielen herzlichen Dank für Deine Unterstützung!
lg, Gerhard

gestein

Soweit funktioniert das nun wunderbar.
Ist viel übersichtlicher als vorher mit den diversen at.

Wäre es noch möglich in der uiTable statt der Definition der Zeitspanne (also z.B. "[{sunset(-1800)}-22:00]") die wirklichen Zeiten aus den Timern anzuzeigen?
Am besten wäre natürlich nur die Zeiten zu sehen - ohne das Datum (z.B. "16:06 - 22:00").

Leider kenne ich mich mit den uiTable-Codes noch gar nicht aus.
Könnte mir vielleicht jemand einen Tipp geben, möchte nicht wieder in die diversen Fallen stolpern und dann Damian damit beschäftigen ;)

Danke im Voraus
lg, Gerhard

meier81

Zitat von: Damian am 07 Dezember 2020, 18:07:56
Ich habe einen weiteren Parameter Nr. 8 für ein Icon hinzugefügt. Szenenname wird für Readings und Template-Name benutzt, da dürfen keine Leerzeichen vorkommen.

Hallo,

ich habe ein Problem bzw. noch eine Frage. Als erstes habe ich das Problem wenn ich das DOIF exakt genauso wie in der Vorlage anlege sieht soweit alles super aus, fange ich jetzt an die Vorlage anzupassen an mein System gibt es ein Anzeigeproblem mit dem Symbol. Ich habe hier bei mir Steckdosen die über MQTT angesteuert werden, die Definition sieht z.B. so aus:

defmod Steckdose_1 MQTT_DEVICE
attr Steckdose_1 userattr room_map structexclude
attr Steckdose_1 IODev MQTT
attr Steckdose_1 alias Weihnachtsbeleuchtung 1
attr Steckdose_1 event-on-change-reading .*
attr Steckdose_1 eventMap ON:on OFF:off
attr Steckdose_1 group Steckdosen
attr Steckdose_1 icon hue_filled_outlet
attr Steckdose_1 publishSet ON OFF cmnd/steckdose_1/POWER
attr Steckdose_1 room Erdgeschoß->Wohnzimmer,Testbereich->Testdevices
attr Steckdose_1 subscribeReading_LWT tele/steckdose_1/LWT
attr Steckdose_1 subscribeReading_TELEMETRY tele/steckdose_1/SENSOR
attr Steckdose_1 subscribeReading_state stat/steckdose_1/POWER


Sobald ich jetzt das DOIF anpasse, hab es mal so geändert:

push (@{$_sc},[("Tannenbaum","[{sunset(360)}-23:00]", "Steckdose_1",   "11-01", "01-31", "off", "off", "christmas_tree")]);;\

funktioniert die Verlinkung zum Device nicht, ist aber klar da die Szene noch "Tannenbaum" heißt, aber das Statusicon verschwindet und ich kann dementsprechend hier auch nicht mehr draufklicken.

Lege ich einen Dummy an der "Tannebaum" heißt und lasse das DOIF "original", geht dies ohne Probleme.

Zudem hätte ich noch eine Frage zur Zeitspanne: Ich würde dort gerne auch "andere" Bedingungen wie nur die Zeit verwenden, z.B. Helligkeit < 50. Habe das zur Zeit bei mir in einem DOIF als Beispiel so definiert:

defmod di_Weihnachtsbeleuchtung DOIF ## Morgens Anschalten\
([06:00])\
   (set Weihnachtsbeleuchtung on)\
## Morgens Ausschalten\
DOELSEIF ([Wetterstation:brightness] > 5000)\
   (set Weihnachtsbeleuchtung off)\
## Abends anschalten\
DOELSEIF ([Wetterstation:brightness] < 500 and [15:00-18:00])\
   (set Weihnachtsbeleuchtung on)\
## Abends ausschalten\
DOELSEIF ([22:00])\
   (set Weihnachtsbeleuchtung off)
attr di_Weihnachtsbeleuchtung cmdState on|off|on|off
attr di_Weihnachtsbeleuchtung icon helper_doif


Lässt sich das einigermaßen "einfach" mit deinem DOIF umsetzen oder kann ich da deine Vorlage für meine Zwecke nicht verwenden.

Gruß Markus
QNAP NAS mit Debian VM, darauf FHEM, debmatic, influxdb2 und Grafana || HB-RF-ETH || SIGNALduino 433MHz mit Maple mini || WS980 Wetterstation || Xiaomi Mi Robot mit valetudo-FW || Buderus web KM100 || div. Tasmota-Devices

Damian

#20
Hier ein Beispiel mit Dämmerung, siehe auch: https://wiki.fhem.de/wiki/DOIF/Automatisierung#Helligkeitsabh.C3.A4ngige_Zeitsteuerung_f.C3.BCr_mehrere_Szenarien_mit_tabellarischer_.C3.9Cbersicht

defmod di_Licht_all DOIF subs  {\
## Szenarien werden durch Hinzufügen einer Definitionszeile erstellt\
##              Szene         Dämmerungssensor    Zeitspanne                            Einschaltbefehl             Ausschaltbefehl\
push (@{$_sc},[("Erdgeschoss","Daemmerung2",      "([06:25-08:00|8] or [15:00-23:00])", "Lampekueche,Lampeflur on", "Lampekueche,Lampeflur off")]);;\
push (@{$_sc},[("Kinderz_2",  "Daemmerung2",      "[06:25-08:00|8] or [15:00-23:10]",   "schrank2 on",              "schrank2 off")]);;\
push (@{$_sc},[("Terrasse",   "Dunkelheit",       "[16:00-09:00]",                      "Terrasse on",              "Terrasse off")]);;\
push (@{$_sc},[("Garten",     "Dunkelheit",       "[16:00-23:30]",                      "Garten pct 50",            "Garten off")]);;\
push (@{$_sc},[("Strauch1",   "Dunkelheit",       "[17:00-23:05]",                      "Strauch1 on",              "Strauch1 off")]);;\
push (@{$_sc},[("Strauch2",   "Dunkelheit",       "[17:00-23:05]",                      "Strauch2 on",              "Strauch2 off")]);;\
push (@{$_sc},[("Eingang",    "Dunkelheit",       "[17:00-23:05]",                      "Aussenbeleuchtung on",     "Aussenbeleuchtung off")]);;\
push (@{$_sc},[("Tannenbaum", "$SELF:Dunkelheit", "([06:25-00:00])",                    "Tanne on",                 "Tanne off")]);;\
push (@{$_sc},[("Keller",     "$SELF:Dunkelheit", "([10:05-21:55:30])",                 "Keller on",                "Keller off")]);;\
\
## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt\
if ($::init_done) {\
  fhem("deletereading $SELF .*");;\
  set_State("initialized");;\
  set_Reading ("Dunkelheit","on");;\
  for (my $i=0;;$i < @{$_sc};;$i++) {\
      set_Reading ($_sc[$i][0].".Status","off");;\
  set_Reading ($_sc[$i][0].".aktiv","off");;\
  }\
}\
} ## end of subs\
\
DEF TPL_light ( ## Definition des Templates namens TPL_light\
light_$1 {      ## Parameter: Szene Daemmerung Zeitspanne on off \
                ##            $1    $2         $3         $4 $5\
  if ([$SELF:$1.aktiv] eq "auto") {\
    if (($3) and [$2] eq "on") {\
      fhem_set($4);;\
      set_Reading("$1.Status","on",1);;\
    } else {\
      fhem_set ($5);;\
      set_Reading("$1.Status","off",1);;\
    }\
  }\
} ## Ende des light-Blocks\
\
active_$1 {\
  if ([$SELF:$1.aktiv] eq "on") {\
    fhem_set ($4);;\
    set_Reading("$1.Status","on",1);;\
  }\
  if ([$SELF:$1.aktiv] eq "off") {\
    fhem_set ($5);;\
    set_Reading("$1.Status","off",1);;\
  }\
} ## Ende des active-Blocks \
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates\
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,"$_$4","$_$5"))
attr di_Licht_all room Licht
attr di_Licht_all uiTable {\
  package ui_Table;;\
  $TC{1..10}="style='padding-left: 5px;; padding-right: 5px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
\
## Überschrift der Parameter\
"Szene"|"Dämmerung"|"Zeitspanne"|"Status"|"ausgeführt"|"aktiv"\
\
## Pro Datensatz einer Beschattungs-Szene wird eine Zeile mit Werten und Widgets generiert\
FOR (@{$VAR{sc}},"$_$1"|icon([$_$2])|"$_$3"|icon([$SELF:$_$1.Status])|::ReadingsTimestamp("$SELF","$_$1.Status",0)|WID([$SELF:$_$1.aktiv],"select,auto,on,off"))


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

gestein

Hallo,

mein DOIF schaltet trotzdem immer ein/aus, obwohl der Datumsbereich von "11-01" bis "01-31"geht und wir mittlerweile Februar haben.
Da sollte eigentlich nichts mehr einschalten.
Die Timer werden aber trotzdem angelegt.

Anscheinend greift da die Abfrage in der Definition nicht. Aber warum nicht?
if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {

Das push in der Definition sieht so aus:
push (@{$_sc},[("Terrasse_Ost",  "[{sunset(-1800)}-20:45]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);


Danke für jeden Hinweis. Ich find einfach den Fehler nicht.
lg, Gerhard

Adimarantis

#22
Hab jetzt den thread nicht weiter durchgelesen, aber ein ähnliches Problem mit meiner Weihnachtsbeleuchtung gehabt.

Meine Lösung dafür (November bis Januar) schaut so aus:
(([{sunset("REAL",0,"15:00","23:00")}] or [6:30|12345]) and ($month>10 || $month<2) ) (set Aussensteckdose on, set Shelly_Balkon on)
DOELSEIF (([23:01] or [{sunrise("REAL",900,"6:35","9:00")}]) and ($month>10 || $month<2)) (set Aussensteckdose off, set Shelly_Balkon off)


Gruß,
Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Damian

Zitat von: gestein am 03 Februar 2021, 17:01:55
Hallo,

mein DOIF schaltet trotzdem immer ein/aus, obwohl der Datumsbereich von "11-01" bis "01-31"geht und wir mittlerweile Februar haben.
Da sollte eigentlich nichts mehr einschalten.
Die Timer werden aber trotzdem angelegt.

Anscheinend greift da die Abfrage in der Definition nicht. Aber warum nicht?
if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {

Das push in der Definition sieht so aus:
push (@{$_sc},[("Terrasse_Ost",  "[{sunset(-1800)}-20:45]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);


Danke für jeden Hinweis. Ich find einfach den Fehler nicht.
lg, Gerhard

Poste mal list deiner aktuelle Definition, damit ich es bei mir nachstellen kann.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Hallo Damian,

Hier meine Definition.
defmod di_Weihnachtsbeleuchtung_szenen DOIF subs  {\
## Parameter    1             2                       3               4        5        6      7     8\
@{$_params}=(qw(Szene         Zeitspanne              Aktor           von      bis      Status aktiv icon));;\
## Szenarien werden durch Hinzufügen einer Definitionszeile erstellt\
push (@{$_sc},[("Terrasse_Ost",  "[{sunset(-1800)}-20:45]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Terrasse_Ost2", "[06:00-{sunrise(3600)}]", "MQTT2_shellyswitch25_E098068D28BC_CH2","11-01", "01-31", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Terrasse_West", "[{sunset(-1800)}-23:06]", "MQTT2_shellyswitch25_68C63AFB9B27_CH2","12-01", "01-31", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Terrasse_West2","[05:45-{sunrise(3600)}]", "MQTT2_shellyswitch25_68C63AFB9B27_CH2","12-01", "01-01", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Geländer",      "[{sunset(-1800)}-23:08]", "MQTT2_shellyplug_s_EAE605",            "12-01", "01-31", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Geländer2",     "[05:45-{sunrise(3600)}]", "MQTT2_shellyplug_s_EAE605",            "12-01", "01-01", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Schlafzimmer_Lichterdecke1",      "[{sunset(-1800)}-20:45]", "MQTT2_shelly1pm_8CAAB5056CA8", "12-01", "01-31", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Schlafzimmer_Lichterdecke12",     "[06:00-{sunrise(3600)}]", "MQTT2_shelly1pm_8CAAB5056CA8", "12-01", "01-01", "on", "on", "christmas_lights")]);;\
push (@{$_sc},[("Schlafzimmer_Lichterdecke2",      "[{sunset(-1800)}-20:45]", "MQTT2_shellyplug_s_EF28FB",    "12-01", "01-31", "on", "off", "christmas_lights")]);;\
push (@{$_sc},[("Schlafzimmer_Lichterdecke22",     "[06:00-{sunrise(3600)}]", "MQTT2_shellyplug_s_EF28FB",    "12-01", "01-01", "on", "off", "christmas_lights")]);;\
push (@{$_sc},[("Wohnzimmer_Weihnacht",      "[{sunset(-1800)}-20:45]", "strWZ.Weihnacht_Athmos",    "12-01", "01-31", "on", "off", "christmas_santa")]);;\
push (@{$_sc},[("Wohnzimmer_Weihnacht2",     "[06:00-{sunrise(3600)}]", "strWZ.Weihnacht_Athmos",    "12-01", "01-01", "on", "off", "christmas_santa")]);;\
\
## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt\
if ($::init_done) {\
  fhem("deletereading $SELF .*");;\
  set_State("initialized");;\
  for (my $i=0;;$i < @{$_sc};;$i++) {\
    for (my $j=5;;$j < @{$_params};;$j++) { ## Parameter 6 und 7 werden als Reading angelegt\
      set_Reading ($_sc[$i][0].".".$_params[$j],$_sc[$i][$j]);;\
    }\
  }\
}\
} ## end of subs\
\
DEF TPL_light ( ## Definition des Templates namens TPL_light\
light_$1 {      ## Parameter: Szene Zeitspanne Aktor von bis\
                ##            $1    $2         $3    $4  $5\
  if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {\
    if ($2) {\
      fhem_set("$3 on");;\
      set_State("Szene: $1");;\
      set_Reading("$1.Status","on",1);;\
    } else {\
      fhem_set ("$3 off");;\
      set_Reading("$1.Status","off",1);;\
    }\
  }\
} ## Ende des light-Blocks\
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates\
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,$_$4,$_$5))
attr di_Weihnachtsbeleuchtung_szenen icon christmas_tree_2
attr di_Weihnachtsbeleuchtung_szenen room Weihnachten
attr di_Weihnachtsbeleuchtung_szenen uiTable {\
  package ui_Table;;\
  $TC{1..10}="style='padding-left: 5px;; padding-right: 5px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
"Szene"|"Zeitspanne"|"von"|"bis"|"Aktor"|"Status"|"aktiv"\
FOR (@{$_sc},ICON("$_$8")." "."$_$1"|"$_$2"|"$_$4"|"$_$5"|switch ([$_$3:state])|icon([$SELF:$_$1.Status])|WID([$SELF:$_$1.aktiv],"select,on,off"))


Vielen Dank schon mal!
lg, Gerhard

Damian

Bei mir funktioniert folgende Definition korrekt:

Internals:
   CFGFN     
   DEF        subs  {
## Parameter    1             2                       3               4        5        6      7     8
@{$_params}=(qw(Szene         Zeitspanne              Aktor           von      bis      Status aktiv icon));
## Szenarien werden durch Hinzufügen einer Definitionszeile erstellt
push (@{$_sc},[("Terrasse_Ost",  "[23:41-23:42]", "bla","11-01", "01-31", "on", "on", "christmas_lights")]);

## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt
if ($::init_done) {
  fhem("deletereading $SELF .*");
  set_State("initialized");
  for (my $i=0;$i < @{$_sc};$i++) {
    for (my $j=5;$j < @{$_params};$j++) { ## Parameter 6 und 7 werden als Reading angelegt
      set_Reading ($_sc[$i][0].".".$_params[$j],$_sc[$i][$j]);
    }
  }
}
} ## end of subs

DEF TPL_light ( ## Definition des Templates namens TPL_light
light_$1 {      ## Parameter: Szene Zeitspanne Aktor von bis
                ##            $1    $2         $3    $4  $5
  if ([?$SELF:$1.aktiv] eq "on" and ($md ge "$4" or $md le "$5")) {
    if ($2) {
      fhem_set("$3 on");
      set_State("Szene: $1");
      set_Reading("$1.Status","on",1);
    } else {
      fhem_set ("$3 off");
      set_Reading("$1.Status","off",1);
    }
  }
} ## Ende des light-Blocks
) ## Ende der Templatedefinition

## Generierung der Steuerung pro Beschattung-Szene mit Hilfe des obigen Templates
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,$_$4,$_$5))
   FUUID      601dc643-f33f-c0d4-8053-48c092014fe038e4
   MODEL      Perl
   NAME       di_Weihnachtsbeleuchtung_szenen
   NOTIFYDEV  global,di_Weihnachtsbeleuchtung_szenen,bla
   NR         4843
   NTFY_ORDER 50-di_Weihnachtsbeleuchtung_szenen
   STATE      initialized
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   OLDREADINGS:
   READINGS:
     2021-02-05 23:40:16   Terrasse_Ost.Status on
     2021-02-05 23:40:16   Terrasse_Ost.aktiv on
     2021-02-05 23:40:16   Terrasse_Ost.icon christmas_lights
     2021-02-05 23:41:00   block_light_Terrasse_Ost executed
     2021-02-05 23:40:16   state           initialized
     2021-02-05 23:40:16   timer_01_c01    05.02.2021 23:41:00
     2021-02-05 23:40:16   timer_02_c01    05.02.2021 23:42:00


Um 23:41:00 wurde der Block ausgeführt: block_light_Terrasse_Ost executed, der Status des Moduls hat sich aber nicht geändert: initialized, der Dummy bla wurde nicht geschaltet.

Zuvor hatte ich als Grenze 02-31 angegeben, dort wurde der Dummy auch entsprechend ein- und ausgeschaltet - ich kann kein Fehlverhalten bei dieser Definition feststellen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

gestein

Hallo Damian,

vielen Dank für Deine Hilfe.
Ich bin bei meiner Definition fast verzweifelt. Auch ein Neustart hat nichts geändert.
Daher habe ich vorgestern das DOIF gelöscht, fhem neu gestartet, DOIF neu angelegt - und was soll ich sagen? Es funktioniert.
Schön blöd eigentlich. Was der Fehler war, weiß ich nicht.

Aber es klappt nun. Danke!
lg, Gerhard


Damian

#27
Zitat von: gestein am 09 Februar 2021, 09:32:00
Hallo Damian,

vielen Dank für Deine Hilfe.
Ich bin bei meiner Definition fast verzweifelt. Auch ein Neustart hat nichts geändert.
Daher habe ich vorgestern das DOIF gelöscht, fhem neu gestartet, DOIF neu angelegt - und was soll ich sagen? Es funktioniert.
Schön blöd eigentlich. Was der Fehler war, weiß ich nicht.

Aber es klappt nun. Danke!
lg, Gerhard

Eine unschöne Sache ist bei der Lösung die Abfrage der Zeiträume, sie funktioniert nur, wenn der erste Zeitpunkt eine "größere" Datumsangabe beinhaltet als der zweite Zeitpunkt.

Wenn man z. B. 01-01 bis 03-01 haben wollte

dann funktioniert schon die Abfrage  ($md ge "$4" or $md le "$5") nicht,

dann müsste man vielmehr abfragen ($md ge "$4" and $md le "$5")

D. h. der Perlcode ist nicht universell verwendbar.

Ich will zukünftig in DOIF Tageszeiträume einbauen damit solche Abfragen immer funktionieren, z. B. [11-01 to 01-31] oder eben [01-01 to 03-01].

Meine aktuelle Lösung beinhaltet z. Zt. keine Zeitraumangaben und sie hat nun drei Zustände on/off/auto:

defmod di_Licht_all DOIF subs  {\
## Szenarien werden durch Hinzufügen einer Definitionszeile erstellt\
##              Szene         Dämmerungssensor    Zeitspanne                            Einschaltbefehl             Ausschaltbefehl\
push (@{$_sc},[("Erdgeschoss","Daemmerung2",      "([06:25-08:00|8] or [15:00-23:00])", "Lampekueche,Lampeflur on", "Lampekueche,Lampeflur off")]);;\
push (@{$_sc},[("Kinderz_2",  "Daemmerung2",      "[06:25-08:00|8] or [15:00-23:10]",   "schrank2 on",              "schrank2 off")]);;\
push (@{$_sc},[("Terrasse",   "Dunkelheit",       "[16:00-09:00]",                      "Terrasse on",              "Terrasse off")]);;\
push (@{$_sc},[("Garten",     "Dunkelheit",       "[16:00-23:30]",                      "Garten pct 50",            "Garten off")]);;\
push (@{$_sc},[("Strauch1",   "Dunkelheit",       "[17:00-23:05]",                      "Strauch1 on",              "Strauch1 off")]);;\
push (@{$_sc},[("Strauch2",   "Dunkelheit",       "[17:00-23:05]",                      "Strauch2 on",              "Strauch2 off")]);;\
push (@{$_sc},[("Eingang",    "Dunkelheit",       "[17:00-23:05]",                      "Aussenbeleuchtung on",     "Aussenbeleuchtung off")]);;\
push (@{$_sc},[("Tannenbaum", "$SELF:Dunkelheit", "([06:25-00:00])",                    "Tanne on",                 "Tanne off")]);;\
push (@{$_sc},[("Keller",     "$SELF:Dunkelheit", "([10:05-21:55:30])",                 "Keller on",                "Keller off")]);;\
\
## Bei Änderung der Definition werden erfoderliche Readings erstellt und vorbelegt\
if ($::init_done) {\
  fhem("deletereading $SELF .*");;\
  set_State("initialized");;\
  set_Reading ("Dunkelheit","on");;\
  for (my $i=0;;$i < @{$_sc};;$i++) {\
      set_Reading ($_sc[$i][0].".Status","off");;\
  set_Reading ($_sc[$i][0].".aktiv","off");;\
  }\
}\
} ## end of subs\
\
DEF TPL_light ( ## Definition des Templates namens TPL_light\
light_$1 {      ## Parameter: Szene Daemmerung Zeitspanne on off \
                ##            $1    $2         $3         $4 $5\
  if ([$SELF:$1.aktiv] eq "auto") {\
    if (($3) and [$2] eq "on") {\
      fhem_set($4);;\
      set_Reading("$1.Status","on",1);;\
    } else {\
      fhem_set ($5);;\
      set_Reading("$1.Status","off",1);;\
    }\
  }\
} ## Ende des light-Blocks\
\
active_$1 {\
  if ([$SELF:$1.aktiv] eq "on") {\
    fhem_set ($4);;\
    set_Reading("$1.Status","on",1);;\
  }\
  if ([$SELF:$1.aktiv] eq "off") {\
    fhem_set ($5);;\
    set_Reading("$1.Status","off",1);;\
  }\
} ## Ende des active-Blocks \
) ## Ende der Templatedefinition\
\
## Generierung der Steuerung pro Licht-Szene mit Hilfe des obigen Templates\
FOR (@{$_sc},TPL_light($_$1,$_$2,$_$3,"$_$4","$_$5"))
attr di_Licht_all room Licht
attr di_Licht_all uiTable {\
  package ui_Table;;\
  $TC{1..10}="style='padding-left: 5px;; padding-right: 5px;; padding-top: 3px;; padding-bottom: 3px;;' align='center'";;\
}\
\
## Überschrift der Parameter\
"Szene"|"Dämmerung"|"Zeitspanne"|"Status"|"ausgeführt"|"aktiv"\
\
## Pro Datensatz einer Beschattungs-Szene wird eine Zeile mit Werten und Widgets generiert\
FOR (@{$VAR{sc}},"$_$1"|icon([$_$2])|"$_$3"|icon([$SELF:$_$1.Status])|::ReadingsTimestamp("$SELF","$_$1.Status",0)|WID([$SELF:$_$1.aktiv],"select,auto,on,off"))


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

gestein

#28
Ja, das hatte ich auch schon bemerkt.
Momentan habe ich testweise eine Funktion "check_date_range" eingebaut, die die Zeiträume prüft.
Also so was:
sub check_date_range {
  my ($md, $date1,$date2)=@_;
Log 1,"di_Licht_all:check_dates $md;$date1,$date2;";

if("$date1" gt "$date2") {
return ("$md" ge "$date1" and "$md" le "$date2");
}
return ("$md" ge "$date1" or "$md" le "$date2")
}


Sobald ich sicher bin, dass das funktioniert, wollte ich das Thema auch hier ansprechen  ;)
Eine direkte Abfrage im DOIF wäre aber sicherlich besser.

Eine Frage bitte noch:
Könnte man den Datumsbereich auch in deutscher Notation angeben?

lg, Gerhard

Damian

Zitat von: gestein am 09 Februar 2021, 11:06:09
Ja, das hatte ich auch schon bemerkt.
Momentan habe ich testweise eine Funktion "check_date_range" eingebaut, die die Zeiträume prüft.
Also so was:
sub check_date_range {
  my ($md, $date1,$date2)=@_;
Log 1,"di_Licht_all:check_dates $md;$date1,$date2;";

if("$date1" gt "$date2") {
return ("$md" ge "$date1" and "$md" le "$date2");
}
return ("$md" ge "$date1" or "$md" le "$date2")
}


Sobald ich sicher bin, dass das funktioniert, wollte ich das Thema auch hier ansprechen  ;)
Eine direkte Abfrage im DOIF wäre aber sicherlich besser.

Eine Frage bitte noch:
Könnte man den Datumsbereich auch in deutscher Notation angeben?

lg, Gerhard

Warum nicht :)

Das deutsche Format hat einen entscheidenden Nachteil, du kannst Datumsvergleiche mit Tag und Monat nicht mit gt, lt usw. vergleichen, weil der Monat höherwertiger ist als der Tag
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF