gelöst: Template mit >9 Variablen

Begonnen von kjmEjfu, 11 November 2020, 11:50:57

Vorheriges Thema - Nächstes Thema

kjmEjfu

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.
Migriere derzeit zu Home Assistant

xenos1984


kjmEjfu

Hmmm.

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

Müsste also eigentlich funktionieren. Tut es aber nicht in meinem Fall ;-)
Migriere derzeit zu Home Assistant

Damian

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

kjmEjfu

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"]))
Migriere derzeit zu Home Assistant

Damian

Du musst mit list schauen, was DOIF daraus gemacht hat.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kjmEjfu

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"])
Migriere derzeit zu Home Assistant

Damian

Dann zähl bitte noch mal die Anzahl der übergebenen Parameter ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

kjmEjfu

Oh man  :-[ :-[ :-[
Ich geh dann mal ins Wasser ...

Danke fürs Zählen :-)
Migriere derzeit zu Home Assistant