Perl Doif mit Template - mehrfache Ausfürung

Begonnen von cotecmania, 05 Februar 2025, 17:48:14

Vorheriges Thema - Nächstes Thema

cotecmania

Hallo,

folgendes DOIF triggert einen Fall mehrfach, die anderen aber nicht :

## Template zum speichern der Energiewerte einer Shelly-Steckdose
DEF TPL_UpdateEnergy (
  {
    ## Taeglicher Energieverbrauch aufsteigend in Reading schreiben
    {
      if ([$1:"^energy:.*$"]) {fhem ("setreading $1 energy_day_ongoing ".(([$1:energy]) - ([$1:energy_morning,0])))}
    }

    ## Energiestand morgens in Reading sichern. Alte auflaufende Tagesenergie vom Vortag loeschen.(Ist aber im logfile)
    {
      if ([00:00:05]) {fhem ("setreading $1 energy_morning ".([$1:energy])); fhem("setreading $1 energy_day_ongoing 0")}
    }

    ## Taeglichen Energieverbrauch abends in separates Reading uebernehmen
    {
      if ([23:59:00]) {fhem ("setreading $1 energy_day ".([$1:energy_day_ongoing,0]))}
    }

    ## Tagesenergie zum auflaufenden Monatsverbrauch addieren
    {
      if ([23:59:15]) {fhem ("setreading $1 energy_month_ongoing ".(([$1:energy_month_ongoing,0]) + ([$1:energy_day,0])))}
    }

    ## Taeglichen Energieverbrauch dann wieder loeschen. (Verbleibt aber im Logfile)
    {
      if ([23:59:30]) {fhem ("deletereading $1 energy_day")}
    }

    ## Am Monatsende die Monatssumme als Reading speichern
    {
      if ([23:59:45] and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month [$DEVICE:energy_month_ongoing]");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

##([23:58:00]) (setreading Shelly_02 MonatsErtragLaufend {([Shelly_02:MonatsErtragLaufend] + [Shelly_02:energy_day])})
##DOELSEIF ([23:59:00] and (strftime("%d", localtime(time+86400)) eq "01")) (setreading Shelly_02 MonatsErtrag [Shelly_02:MonatsErtragLaufend], setreading ##Shelly_02 MonatsErtragLaufend 0, deletereading Shelly_02 MonatsErtrag)
##DOELSE()


      ## Logeintrag zum debuggen
##    {
##      if ([$1:"^energy:.*$"]) {Log 3, "$SELF Device: $DEVICE Event: $EVENT"}
##    }

    ## Test wegen mehrfachem Aufruf
##    {
##      if ([09:28:00]) {fhem ("setreading $1 energy_test ".(([$1:energy_month,0]) + ([$1:energy_day,0])))}
##    }

  }
)

## Aufruf des Templates
##
##
##                 Device
## !!! ACHTUNG : Keine leerzeichen vor oder nach den Parametern (para1,para2,para3)
TPL_UpdateEnergy (Shelly_01);
TPL_UpdateEnergy (Shelly_03);
TPL_UpdateEnergy (Shelly_04);
## !!! ACHTUNG : Keine leerzeichen vor oder nach den Parametern (para1,para2,para3)


## ENDE

Hier sieht man, dass energy_month_ongoing 2 aml getriggert wird, energy_day_ongoing aber nur einmal
Obwohl für mich alles gleich aussieht
Ich habe gelesen, dass man jeden Block in geschweifte Klammern setzen muss, aber das war wohl nicht die Lösung ...
2025-02-04_23:57:29 Shelly_01 inttemp: 19.01
2025-02-04_23:59:00 Shelly_01 energy_day: 73413.4
2025-02-04_23:59:15 Shelly_01 energy_month_ongoing: 73413.4
2025-02-04_23:59:15 Shelly_01 energy_month_ongoing: 146826.8
2025-02-05_00:00:05 Shelly_01 energy_morning: 73418.7
2025-02-05_00:00:05 Shelly_01 energy_day_ongoing: 0
2025-02-05_00:06:34 Shelly_01 uptime: 8235595 sec, last reboot at 2024-11-01 16:26:39

Hier noch das List :
Internals:
   CFGFN     
   DEF        ## Template zum speichern der Energiewerte einer Shelly-Steckdose
DEF TPL_UpdateEnergy (
  {
    ## Taeglicher Energieverbrauch aufsteigend in Reading schreiben
    {
      if ([$1:"^energy:.*$"]) {fhem ("setreading $1 energy_day_ongoing ".(([$1:energy]) - ([$1:energy_morning,0])))}
    }

    ## Energiestand morgens in Reading sichern. Alte auflaufende Tagesenergie vom Vortag loeschen.(Ist aber im logfile)
    {
      if ([00:00:05]) {fhem ("setreading $1 energy_morning ".([$1:energy])); fhem("setreading $1 energy_day_ongoing 0")}
    }

    ## Taeglichen Energieverbrauch abends in separates Reading uebernehmen
    {
      if ([23:59:00]) {fhem ("setreading $1 energy_day ".([$1:energy_day_ongoing,0]))}
    }

    ## Tagesenergie zum auflaufenden Monatsverbrauch addieren
    {
      if ([23:59:15]) {fhem ("setreading $1 energy_month_ongoing ".(([$1:energy_month_ongoing,0]) + ([$1:energy_day,0])))}
    }

    ## Taeglichen Energieverbrauch dann wieder loeschen. (Verbleibt aber im Logfile)
    {
      if ([23:59:30]) {fhem ("deletereading $1 energy_day")}
    }

    ## Am Monatsende die Monatssumme als Reading speichern
    {
      if ([23:59:45] and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month [$DEVICE:energy_month_ongoing]");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

##([23:58:00]) (setreading Shelly_02 MonatsErtragLaufend {([Shelly_02:MonatsErtragLaufend] + [Shelly_02:energy_day])})
##DOELSEIF ([23:59:00] and (strftime("%d", localtime(time+86400)) eq "01")) (setreading Shelly_02 MonatsErtrag [Shelly_02:MonatsErtragLaufend], setreading ##Shelly_02 MonatsErtragLaufend 0, deletereading Shelly_02 MonatsErtrag)
##DOELSE()


      ## Logeintrag zum debuggen
##    {
##      if ([$1:"^energy:.*$"]) {Log 3, "$SELF Device: $DEVICE Event: $EVENT"}
##    }

    ## Test wegen mehrfachem Aufruf
##    {
##      if ([09:28:00]) {fhem ("setreading $1 energy_test ".(([$1:energy_month,0]) + ([$1:energy_day,0])))}
##    }

  }
)

## Aufruf des Templates
##
##
##                 Device
## !!! ACHTUNG : Keine leerzeichen vor oder nach den Parametern (para1,para2,para3)
TPL_UpdateEnergy (Shelly_01);
TPL_UpdateEnergy (Shelly_03);
TPL_UpdateEnergy (Shelly_04);
## !!! ACHTUNG : Keine leerzeichen vor oder nach den Parametern (para1,para2,para3)


## ENDE


##TPL_UpdateEnergy ([11:40:00])
##TPL_UpdateEnergy ([11:41:00])

##DEF TPL_UpdateEnergy ( ## Template zum Setzen der Zimmertemperaturen
##  {
##    if ([$1])
##    {
##     {fhem ("set D_Test $1")}
##   }
## }
##)

##            Zeit                   Ku,Ba,DG,WZ,Ko,Kw
##            $1                     $2 $3 $4 $5 $6 $7
##TPL_UpdateEnergy ([11:39:00])
##TPL_UpdateEnergy ([11:40:00])
##TPL_UpdateEnergy ([11:41:00])



##my $MyDevice="Shelly_Heizung"
#### ([+:01]) (setreading Shelly_Heizung energy_day {([Shelly_Heizung:energy] - [Shelly_Heizung:energy_morgens])})
##(["^Shelly_H:^energy"]) (setreading $MyDevice energy_day {([$DEVICE:energy] - [$DEVICE:energy_morgens])})
####(["^Shelly_H:^energy"]) ({Log3 ("$DEVICE", 1, ReadingsVal("$DEVICE","energy","NIX DA?"))})
##DOELSEIF ([00:00:15]) (setreading $DEVICE energy_morgens [$DEVICE:energy], setreading $DEVICE energy_day 0)
##DOELSEIF ([23:59:00]) (setreading $DEVICE energy_daysum  {([$DEVICE:energy] - [$DEVICE:energy_morgens])})
##DOELSEIF ([23:59:15]) (deletereading $DEVICE energy_daysum)
##DOELSEIF ([23:59:30]) (setreading $DEVICE energy_month {([$DEVICE:energy_month] + [$DEVICE:energy_day])})
##DOELSEIF ([23:59:45] and (strftime("%d", localtime(time+86400)) eq "01")) (setreading $DEVICE energy_monthsum [$DEVICE:energy_month], setreading $DEVICE energy_month 0, ##deletereading $DEVICE energy_monthsum)
##DOELSE()
   FUUID      679df276-f33f-623c-d8ee-7ddf0931882b8874
   MODEL      Perl
   NAME       DI_Shelly_Energy
   NOTIFYDEV  Shelly_04,global,Shelly_01,Shelly_03
   NR         1029
   NTFY_ORDER 50-DI_Heizung_Energy2
   STATE      initialized
   TYPE       DOIF
   VERSION    28546 2024-02-23 20:11:05
   eventCount 309
   READINGS:
     2025-02-05 17:43:17   Device          Shelly_03
     2025-02-05 17:41:45   block_01        executed
     2025-02-05 17:43:17   block_02        executed
     2025-02-05 17:43:17   block_03        executed
     2025-02-05 17:41:45   e_Shelly_01_energy 73454.8
     2025-02-05 17:41:45   e_Shelly_01_events energy: 73454.8
     2025-02-05 17:43:17   e_Shelly_03_events uptime: 429861,voltage: 225.5
     2025-02-05 17:35:12   e_Shelly_04_energy 808.828
     2025-02-05 17:43:17   e_Shelly_04_events uptime: 356303,voltage: 224.8,current: 0.221,power: 46
     2025-02-05 17:19:27   mode            enabled
     2025-02-05 17:19:28   state           initialized
     2025-02-05 17:19:28   timer_01_c01    06.02.2025 00:00:05
     2025-02-05 17:19:28   timer_02_c01    05.02.2025 23:59:00
     2025-02-05 17:19:28   timer_03_c01    05.02.2025 23:59:15
     2025-02-05 17:19:28   timer_04_c01    05.02.2025 23:59:30
     2025-02-05 17:19:28   timer_05_c01    05.02.2025 23:59:45
     2025-02-05 17:19:28   timer_06_c02    06.02.2025 00:00:05
     2025-02-05 17:19:28   timer_07_c02    05.02.2025 23:59:00
     2025-02-05 17:19:28   timer_08_c02    05.02.2025 23:59:15
     2025-02-05 17:19:28   timer_09_c02    05.02.2025 23:59:30
     2025-02-05 17:19:28   timer_10_c02    05.02.2025 23:59:45
     2025-02-05 17:19:28   timer_11_c03    06.02.2025 00:00:05
     2025-02-05 17:19:28   timer_12_c03    05.02.2025 23:59:00
     2025-02-05 17:19:28   timer_13_c03    05.02.2025 23:59:15
     2025-02-05 17:19:28   timer_14_c03    05.02.2025 23:59:30
     2025-02-05 17:19:28   timer_15_c03    05.02.2025 23:59:45
   Regex:
     accu:
     bar:
     barAvg:
     collect:
     cond:
       Shelly_01:
         0:
           &STATE     ^Shelly_01$
           energy     ^Shelly_01$:^energy:
           energy_day ^Shelly_01$:^energy_day:
           energy_day_ongoing ^Shelly_01$:^energy_day_ongoing:
           energy_month_ongoing ^Shelly_01$:^energy_month_ongoing:
           energy_morning ^Shelly_01$:^energy_morning:
         1:
         2:
       Shelly_03:
         0:
         1:
           &STATE     ^Shelly_03$
           energy     ^Shelly_03$:^energy:
           energy_day ^Shelly_03$:^energy_day:
           energy_day_ongoing ^Shelly_03$:^energy_day_ongoing:
           energy_month_ongoing ^Shelly_03$:^energy_month_ongoing:
           energy_morning ^Shelly_03$:^energy_morning:
         2:
       Shelly_04:
         0:
         1:
         2:
           &STATE     ^Shelly_04$
           energy     ^Shelly_04$:^energy:
           energy_day ^Shelly_04$:^energy_day:
           energy_day_ongoing ^Shelly_04$:^energy_day_ongoing:
           energy_month_ongoing ^Shelly_04$:^energy_month_ongoing:
           energy_morning ^Shelly_04$:^energy_morning:
   condition:
     0           
         {
      if (::EventDoIf('Shelly_01',$hash,'^energy:.*$',1)) {fhem ("setreading Shelly_01 energy_day_ongoing ".((::ReadingValDoIf($hash,'Shelly_01','energy')) - (::ReadingValDoIf($hash,'Shelly_01','energy_morning','0'))))}
    }

         {
      if (::DOIF_time_once($hash,0,$wday)) {fhem ("setreading Shelly_01 energy_morning ".(::ReadingValDoIf($hash,'Shelly_01','energy'))); fhem("setreading Shelly_01 energy_day_ongoing 0")}
    }

         {
      if (::DOIF_time_once($hash,1,$wday)) {fhem ("setreading Shelly_01 energy_day ".(::ReadingValDoIf($hash,'Shelly_01','energy_day_ongoing','0')))}
    }

         {
      if (::DOIF_time_once($hash,2,$wday)) {fhem ("setreading Shelly_01 energy_month_ongoing ".((::ReadingValDoIf($hash,'Shelly_01','energy_month_ongoing','0')) + (::ReadingValDoIf($hash,'Shelly_01','energy_day','0'))))}
    }

         {
      if (::DOIF_time_once($hash,3,$wday)) {fhem ("deletereading Shelly_01 energy_day")}
    }

         {
      if (::DOIF_time_once($hash,4,$wday) and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month ::ReadingValDoIf($hash,'$DEVICE','energy_month_ongoing')");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

   

         
       
 
     1           
         {
      if (::EventDoIf('Shelly_03',$hash,'^energy:.*$',1)) {fhem ("setreading Shelly_03 energy_day_ongoing ".((::ReadingValDoIf($hash,'Shelly_03','energy')) - (::ReadingValDoIf($hash,'Shelly_03','energy_morning','0'))))}
    }

         {
      if (::DOIF_time_once($hash,5,$wday)) {fhem ("setreading Shelly_03 energy_morning ".(::ReadingValDoIf($hash,'Shelly_03','energy'))); fhem("setreading Shelly_03 energy_day_ongoing 0")}
    }

         {
      if (::DOIF_time_once($hash,6,$wday)) {fhem ("setreading Shelly_03 energy_day ".(::ReadingValDoIf($hash,'Shelly_03','energy_day_ongoing','0')))}
    }

         {
      if (::DOIF_time_once($hash,7,$wday)) {fhem ("setreading Shelly_03 energy_month_ongoing ".((::ReadingValDoIf($hash,'Shelly_03','energy_month_ongoing','0')) + (::ReadingValDoIf($hash,'Shelly_03','energy_day','0'))))}
    }

         {
      if (::DOIF_time_once($hash,8,$wday)) {fhem ("deletereading Shelly_03 energy_day")}
    }

         {
      if (::DOIF_time_once($hash,9,$wday) and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month ::ReadingValDoIf($hash,'$DEVICE','energy_month_ongoing')");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

   

         
       
 
     2           
         {
      if (::EventDoIf('Shelly_04',$hash,'^energy:.*$',1)) {fhem ("setreading Shelly_04 energy_day_ongoing ".((::ReadingValDoIf($hash,'Shelly_04','energy')) - (::ReadingValDoIf($hash,'Shelly_04','energy_morning','0'))))}
    }

         {
      if (::DOIF_time_once($hash,10,$wday)) {fhem ("setreading Shelly_04 energy_morning ".(::ReadingValDoIf($hash,'Shelly_04','energy'))); fhem("setreading Shelly_04 energy_day_ongoing 0")}
    }

         {
      if (::DOIF_time_once($hash,11,$wday)) {fhem ("setreading Shelly_04 energy_day ".(::ReadingValDoIf($hash,'Shelly_04','energy_day_ongoing','0')))}
    }

         {
      if (::DOIF_time_once($hash,12,$wday)) {fhem ("setreading Shelly_04 energy_month_ongoing ".((::ReadingValDoIf($hash,'Shelly_04','energy_month_ongoing','0')) + (::ReadingValDoIf($hash,'Shelly_04','energy_day','0'))))}
    }

         {
      if (::DOIF_time_once($hash,13,$wday)) {fhem ("deletereading Shelly_04 energy_day")}
    }

         {
      if (::DOIF_time_once($hash,14,$wday) and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month ::ReadingValDoIf($hash,'$DEVICE','energy_month_ongoing')");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

   

         
       
 
   days:
   defs:
     tpl:
       TPL_UpdateEnergy
  {
         {
      if ([$1:"^energy:.*$"]) {fhem ("setreading $1 energy_day_ongoing ".(([$1:energy]) - ([$1:energy_morning,0])))}
    }

         {
      if ([00:00:05]) {fhem ("setreading $1 energy_morning ".([$1:energy])); fhem("setreading $1 energy_day_ongoing 0")}
    }

         {
      if ([23:59:00]) {fhem ("setreading $1 energy_day ".([$1:energy_day_ongoing,0]))}
    }

         {
      if ([23:59:15]) {fhem ("setreading $1 energy_month_ongoing ".(([$1:energy_month_ongoing,0]) + ([$1:energy_day,0])))}
    }

         {
      if ([23:59:30]) {fhem ("deletereading $1 energy_day")}
    }

         {
      if ([23:59:45] and (strftime("%d", localtime(time+86400)) eq "01"))
      {
        fhem ("setreading $DEVICE energy_month [$DEVICE:energy_month_ongoing]");
        fhem ("deletereading $DEVICE energy_month");
      }
    }

   

         
       
  }

   helper:
     NOTIFYDEV  Shelly_04,global,Shelly_01,Shelly_03
     event      uptime: 429861,voltage: 225.5
     globalinit 1
     last_timer 15
     sleeptimer -1
     triggerDev Shelly_03
     triggerEvents:
       uptime: 429861
       voltage: 225.5
     triggerEventsState:
       uptime: 429861
       voltage: 225.5
   internals:
   intervalfunc:
   localtime:
     0          1738796405
     1          1738796340
     10         1738796405
     11         1738796340
     12         1738796355
     13         1738796370
     14         1738796385
     2          1738796355
     3          1738796370
     4          1738796385
     5          1738796405
     6          1738796340
     7          1738796355
     8          1738796370
     9          1738796385
   perlblock:
     0          block_01
     1          block_02
     2          block_03
   readings:
     all         Shelly_01:energy Shelly_01:energy_morning Shelly_01:energy_day_ongoing Shelly_01:energy_month_ongoing Shelly_01:energy_day Shelly_03:energy Shelly_03:energy_morning Shelly_03:energy_day_ongoing Shelly_03:energy_month_ongoing Shelly_03:energy_day Shelly_04:energy Shelly_04:energy_morning Shelly_04:energy_day_ongoing Shelly_04:energy_month_ongoing Shelly_04:energy_day
   realtime:
     0          00:00:05
     1          23:59:00
     10         00:00:05
     11         23:59:00
     12         23:59:15
     13         23:59:30
     14         23:59:45
     2          23:59:15
     3          23:59:30
     4          23:59:45
     5          00:00:05
     6          23:59:00
     7          23:59:15
     8          23:59:30
     9          23:59:45
   time:
     0          00:00:05
     1          23:59:00
     10         00:00:05
     11         23:59:00
     12         23:59:15
     13         23:59:30
     14         23:59:45
     2          23:59:15
     3          23:59:30
     4          23:59:45
     5          00:00:05
     6          23:59:00
     7          23:59:15
     8          23:59:30
     9          23:59:45
   timeCond:
     0          0
     1          0
     10         2
     11         2
     12         2
     13         2
     14         2
     2          0
     3          0
     4          0
     5          1
     6          1
     7          1
     8          1
     9          1
   timer:
     0          0
     1          0
     10         0
     11         0
     12         0
     13         0
     14         0
     2          0
     3          0
     4          0
     5          0
     6          0
     7          0
     8          0
     9          0
   timers:
     0           0  1  2  3  4
     1           5  6  7  8  9
     2           10  11  12  13  14
   trigger:
     all         Shelly_01 Shelly_03 Shelly_04
   triggertime:
     1738796340:
       localtime  1738796340
       hash:
     1738796355:
       localtime  1738796355
       hash:
     1738796370:
       localtime  1738796370
       hash:
     1738796385:
       localtime  1738796385
       hash:
     1738796405:
       localtime  1738796405
       hash:
   uiState:
   uiTable:
Attributes:
   room       Interfaces,Shelly

Was mache ich falsch ?

Gruss
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Damian

Du muss bedenken, dass alle Angaben in eckigen Klammern Trigger darstellen, egal wo sie stehen, z. B.:

if ([$1:"^energy:.*$"]) {fhem ("setreading $1 energy_day_ongoing ".(([$1:energy]) - ([$1:energy_morning,0])))}


schau mal hier: https://forum.fhem.de/index.php?topic=140088.msg1327855#msg1327855

ich habe dort auch Templates definiert, die Energie dem Tag, Monat, Jahr zuordnen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cotecmania

Hi,

Die Seite kannte ich, war mir aber zu komplex mit den ganzen Diagrammen.
Habs jetzt aber mal in einem Testdevice angelegt.

Hast Du mir noch einen Tip, wie ich meinen Ansatz zum laufen bekomme bzw. wie ich das mit den Triggern löse ?
Verstanden habe ich es nicht ganz, da ja einige Blöcke funktionieren, aber der eine eben 2 Mal ausgeführt wird.
Hatte das ganze als normales DOIF und das hat problemlos funktioniert.
Ich wollte dann aber nicht für jedes Device ein eigenes DOIF anlegen und kam so auf die Templates die den Perl-Mode benötigen.
Das hat mich schon sehr viel Zeit gekostet und bis auf den mehrfachen Aufruf läuft ja alles ...

Gruss und Danke
Joe
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Per


cotecmania

#4
Das mit dem Fragezeichzen hat nicht funktioniert :
if ([07:54:00]) {fhem ("setreading $1 energy_month_ongoing ".(([?$1:energy_month_ongoing,0]) + ([?$1:energy_day,0])))}   

Dann bin ich auf ReadingsVal umgestiegen um die eckigen Klammern zu entfernen :
if ([08:53:00]) {fhem ("setreading $1 energy_month_ongoing ".(ReadingsVal("$1","energy_month_ongoing",0) + ReadingsVal("$1","energy_day",0)))}

Trotzdem hab ich den Eintrag 2 mal :
2025-02-07_08:53:00 Shelly_03 energy_month_ongoing: 442.076
2025-02-07_08:53:00 Shelly_03 energy_month_ongoing: 480.203


Mein Debug-Log sieht so aus:
Für jedes Device gibt es 2 Aufrufe, aber im jeweils 2ten Aufruf fehlt der Device-Name  ...
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device: Shelly_01 Event: energy_month_ongoing: 149623.2 Tag: 7 RV: 73951.5
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device:  Event: timer_7 Tag: 7 RV: 73951.5
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device: Shelly_03 Event: energy_month_ongoing: 442.076 Tag: 7 RV: 298.942
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device:  Event: timer_17 Tag: 7 RV: 298.942
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device: Shelly_04 Event: energy_month_ongoing: 1741.938 Tag: 7 RV: 1067.5
2025.02.07 08:53:00 1: 2!!! DI_Shelly_Energy2 Device:  Event: timer_27 Tag: 7 RV: 1067.5

Die Uhrzeit ist nur einmalig drin. Wie kann das 2 mal ausgeführt werden ?
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Damian

Du hast alle Perl-Blöcke in einen DOIF-Block gepackt, d.h. wenn irgendwo ein Trigger triggert, ob Zeit oder Event, werden alle Perl-Blöcke abgearbeitet, das ist nicht sinnvoll. Dein Template kann mehrere Blöcke haben, diese sollten aber unabhängig von einander sein.


DEF TPL_UpdateEnergy (
  {
    ## Taeglicher Energieverbrauch aufsteigend in Reading schreiben
    {
...


Um das Problem einzukreisen, kannst du die einzelnen Blöcke zusätzlich auskommentieren und einzeln testen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

cotecmania

Hmmm, ich hab hier glaub echt ein Verständnisproblem aber ich versuche es mal abzuspecken...

Weiteres Problem :
Obwohl ich nun 2 Devices auskommentiert habe, werden diese trotzdem angelegt :
#TPL_UpdateEnergy (Shelly_01)
#TPL_UpdateEnergy (Shelly_03)
TPL_UpdateEnergy (Shelly_04)

Nur wenn ich doppelte ## verwende, geht es
##TPL_UpdateEnergy (Shelly_01)
##TPL_UpdateEnergy (Shelly_03)
TPL_UpdateEnergy (Shelly_04)
 
???
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

Damian

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

cotecmania

Jetzt hab ich den Fehler gefunden.

Es lag an der Klammerung.
Innerhalb des Templates mit runden Klammern muessen die Blöcke mit den geschweiften kommen.
DEF TPL_Test (

  Block_1{
  }

  Block_2{
  }

)
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI

cotecmania

@Damian
Dein obiges verlinktes Beispiel läuft nun auch bei mir und die cards werden angezeigt.
Wenn ich das Device nun aber mit rename umbenennen will, wird nichts mehr angezeigt.
Benenne ich es wieder zurück in di_counter_new gehts wieder.
Hab aber sonst keine Abhängigkeiten zum Namen gefunden ...
FHEM auf RaspberryPI B (buster)
2xCUL868 für MAX/Slow_RF, HM-LAN, JeeLink
MAX!/HM-Thermostate, FS20/HM-Rolladenschalter, FS20-EM, LevelJet-Ölstandsmessung, PCA301, IT, KM271, IPCAM, FireTAB10 FTUI