FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: kjmEjfu am 11 November 2020, 11:50:57

Titel: gelöst: Template mit >9 Variablen
Beitrag von: kjmEjfu am 11 November 2020, 11:50:57
Hallo,

mir ist gerade aufgefallen, dass man scheinbar nicht mehr als 9 Variablen nutzen.

Bei

if (($timestamp) and [$2:control:d] < $4 and !$VAR{$1} and ($10)) {

Wird die $10 durch den Inhalt von $1 ersetzt und hinten noch eine 0 angehängt.
Wenn das Absicht ist (also die Begrenzung auf 9), dann müsste ich mein DOIF umbauen und mehrere Werte in eine Variable packen, würde auch gehen.
Titel: Antw:Template mit >9 Variablen
Beitrag von: xenos1984 am 11 November 2020, 13:59:04
Das sollte seit Juni funktionieren:

http://forum.fhem.de/index.php/topic,111266.msg1065493.html#msg1065493
Titel: Antw:Template mit >9 Variablen
Beitrag von: kjmEjfu am 11 November 2020, 14:08:37
Hmmm.

FVERSION 98_DOIF.pm:0.229130/2020-10-04

Müsste also eigentlich funktionieren. Tut es aber nicht in meinem Fall ;-)
Titel: Antw:Template mit >9 Variablen
Beitrag von: Damian am 11 November 2020, 16:39:09
Internals:
   CFGFN     
   DEF        DEF TPL_test (
  {set_State("$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11");}
  )
TPL_test (a,b,c,d,e,f,g,h,i,j,k);
   FUUID      5fac04a2-f33f-30f6-90fc-9d1ee78ba111a998
   MODEL      Perl
   NAME       di_template
   NOTIFYDEV  global
   NR         102407
   NTFY_ORDER 50-di_template
   STATE      a b c d e f g h i j k
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   READINGS:
     2020-11-11 16:38:27   block_01        executed
     2020-11-11 16:38:26   mode            enabled
     2020-11-11 16:38:27   state           a b c d e f g h i j k
   Regex:
     accu:
   condition:
     0          set_State("a b c d e f g h i j k");
   defs:
     tpl:
       TPL_test   
  {set_State("$1 $2 $3 $4 $5 $6 $7 $8 $9 $10 $11");}
 
   helper:
     DEVFILTER  ^global$
     NOTIFYDEV  global
     globalinit 1
     last_timer 0
     sleeptimer -1
   perlblock:
     0          block_01
   uiTable:
Attributes:


funktioniert bei mir wie programmiert
Titel: Antw:Template mit >9 Variablen
Beitrag von: kjmEjfu am 11 November 2020, 16:59:09
Dubios.

Habe ich dann wieder einen Syntaxfehler?

DEF TPL_light (    ## Definition des Templates namens TPL_light
## Parameternummer $1             $2                           $3                  $4              $5          $6          $8                       $9 $10
## Bedeutung       Name der Szene Lichtsensor des Zimmers  Lichtaktor      Schwellwert ein   Schwellwert aus   Zeitspanne  Befehl zum Einschalten Befehl zum Ausschalten Anwesenheit



light_$1 { 

## DOIF Block
my $timestamp = $6;
if (($timestamp) and [$2:control:d] < $4 and !$VAR{$1} and ($10)) {
      fhem_set("$3 $7");                     
      set_State("Szene: $1 Lampe ein");       ## Status mit letztem Befehl belegen
      set_Reading("1_$1.Status","on",1);   ## Status für Szene im Reading ablegen
      $VAR{$1}=1;                               ## Merker setzen
    } elsif (([$2:control:d] > $5 and $VAR{$1}) or !($timestamp) ) {
      fhem_set("$3 $8");                     
      set_State("Szene: $1 Lampe aus"); ## Status mit letztem Befehl belegen
      set_Reading("1_$1.Status","off",1);  ## Status für Szene im Reading ablegen
      $VAR{$1}=0;                               ## Merker zurücksetzen
    }
}
)  ## Ende der Templatedefinition


##        $1                 $2                        $3              $4   $5    $6          $7                  $8 $9    $10
TPL_light (Abwesenheit_EG,Sensor_Aussen_HWR_Sonne,strct_Abwesenheit_Lampen,200,350,[([06:15]-int(rand(900)))-([21:50]+int(rand(900)))],on,off,([rg_alle:presence] eq "absent"]))
Titel: Antw:Template mit >9 Variablen
Beitrag von: Damian am 11 November 2020, 17:48:47
Du musst mit list schauen, was DOIF daraus gemacht hat.
Titel: Antw:Template mit >9 Variablen
Beitrag von: kjmEjfu am 11 November 2020, 18:01:12
Das sieht so aus:

Internals:
   DEF        DEF TPL_light (    ## Definition des Templates namens TPL_light
## Parameternummer $1             $2                           $3                  $4              $5          $6          $8                       $9 $10
## Bedeutung       Name der Szene Lichtsensor des Zimmers  Lichtaktor      Schwellwert ein   Schwellwert aus   Zeitspanne  Befehl zum Einschalten Befehl zum Ausschalten Anwesenheit


light_$1 { 

## DOIF Block
my $timestamp = $6;
if (($timestamp) and [$2:control:d] < $4 and !$VAR{$1} and ($10)) {
      fhem_set("$3 $7");                       ##
      set_State("Szene: $1 Lampe ein");       ## Status mit letztem Befehl belegen
      set_Reading("1_$1.Status","on",1);   ## Status für Szene im Reading ablegen
      $VAR{$1}=1;                               ## Merker setzen
    } elsif (([$2:control:d] > $5 and $VAR{$1}) or !($timestamp) ) {
      fhem_set("$3 $8");                      ##
      set_State("Szene: $1 Lampe aus"); ## Status mit letztem Befehl belegen
      set_Reading("1_$1.Status","off",1);  ## Status für Szene im Reading ablegen
      $VAR{$1}=0;                               ## Merker zurücksetzen
    }
}
)  ## Ende der Templatedefinition


## Definition einzelner DOIF-Blöcke pro Fenstergruppe mit Hilfe des Templates
##        $1                 $2                        $3              $4   $5    $6          $7                  $8 $9    $10

TPL_light (Abwesenheit_EG,Sensor_Aussen_HWR_Sonne,strct_Abwesenheit_Lampen,200,350,[([06:15]-int(rand(900)))-([21:50]+int(rand(900)))],on,off,([rg_alle:presence] eq "absent"]))
   FUUID      5fa26602-f33f-8030-d0ae-38b91a879bd7d25a
   FVERSION   98_DOIF.pm:0.229130/2020-10-04
   MODEL      Perl
   NAME       di_Licht_all
   NOTIFYDEV  global,Sensor_Aussen_HWR_Sonne
   NR         365
   NTFY_ORDER 50-di_Licht_all
   STATE      initialized
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   READINGS:
     2020-11-11 16:57:36   1_Abwesenheit_EG.Status on
     2020-11-05 18:01:55   energy          0
     2020-11-05 18:01:55   energy_begin    1604595715
     2020-11-11 17:57:41   mode            enabled
     2020-11-05 18:01:55   power           0
     2020-11-11 17:57:41   state           initialized
     2020-11-11 17:57:41   timer_01_c01    12.11.2020 00:01:00
     2020-11-11 17:57:41   timer_02_c02    12.11.2020 06:10:57
     2020-11-11 17:57:41   timer_03_c02    11.11.2020 21:59:32
   Regex:
     accu:
     cond:
       Sensor_Aussen_HWR_Sonne:
         1:
           control    ^Sensor_Aussen_HWR_Sonne$:^control:
   condition:
     0          ::DOIF_time_once($hash,0,$wday);delete $hash->{var};
     1           

my $timestamp = ::DOIF_time($hash,1,2,$wday,$hms);
if (($timestamp) and ::ReadingValDoIf($hash,'Sensor_Aussen_HWR_Sonne','control','','d') < 200 and !$hash->{var}{Abwesenheit_EG} and (Abwesenheit_EG0)) {        fhem_set("strct_Abwesenheit_Lampen on");                              set_State("Szene: Abwesenheit_EG Lampe ein");              set_Reading("1_Abwesenheit_EG.Status","on",1);          $hash->{var}{Abwesenheit_EG}=1;                                    } elsif ((::ReadingValDoIf($hash,'Sensor_Aussen_HWR_Sonne','control','','d') > 350 and $hash->{var}{Abwesenheit_EG}) or !($timestamp) ) {        fhem_set("strct_Abwesenheit_Lampen off");                             set_State("Szene: Abwesenheit_EG Lampe aus");        set_Reading("1_Abwesenheit_EG.Status","off",1);         $hash->{var}{Abwesenheit_EG}=0;                                    }

   days:
   defs:
     tpl:
       TPL_light         
   
light_$1 { 

my $timestamp = $6;
if (($timestamp) and [$2:control:d] < $4 and !$hash->{var}{$1} and ($10)) {        fhem_set("$3 $7");                              set_State("Szene: $1 Lampe ein");              set_Reading("1_$1.Status","on",1);          $hash->{var}{$1}=1;                                    } elsif (([$2:control:d] > $5 and $hash->{var}{$1}) or !($timestamp) ) {        fhem_set("$3 $8");                             set_State("Szene: $1 Lampe aus");        set_Reading("1_$1.Status","off",1);         $hash->{var}{$1}=0;                                    }
}

   helper:
     DEVFILTER  ^global$|^Sensor_Aussen_HWR_Sonne$
     NOTIFYDEV  global|Sensor_Aussen_HWR_Sonne
     globalinit 1
     last_timer 3
     sleeptimer -1
   interval:
     1          -1
     2          1
   intervalfunc:
   localtime:
     0          1605135660
     1          1605157857
     2          1605128372
   perlblock:
     0          light_Abwesenheit_EG
     1          light_Abwesenheit_EG
   powerMap:
   readings:
     all         Sensor_Aussen_HWR_Sonne:control
   readingsDesc:
     energy:
       rtype      whr
     power:
       rtype      w
   realtime:
     0          00:01:00
     1          06:10:57
     2          21:59:32
   time:
     0          00:01:00
     1          ([06:15]-int(rand(900)))
     2          ([21:50]+int(rand(900)))
   timeCond:
     0          0
     1          1
     2          1
   timer:
     0          0
     1          0
     2          0
   timers:
     0           0
     1           1  2
   triggertime:
     1605128372:
       localtime  1605128372
       hash:
     1605135660:
       localtime  1605135660
       hash:
     1605157857:
       localtime  1605157857
       hash:
   uiTable:
Attributes:
   group      Logik


Aus $10 hat DOIF ein (Abwesenheit_EG0) gemacht.
Sollte aber sein: ([rg_alle:presence] eq "absent"])
Titel: Antw:Template mit >9 Variablen
Beitrag von: Damian am 11 November 2020, 18:13:26
Dann zähl bitte noch mal die Anzahl der übergebenen Parameter ;)
Titel: Antw:Template mit >9 Variablen
Beitrag von: kjmEjfu am 11 November 2020, 18:32:16
Oh man  :-[ :-[ :-[
Ich geh dann mal ins Wasser ...

Danke fürs Zählen :-)