DOIF im Perl-Modus. fhem_set() tut nicht, was es soll

Begonnen von abc2006, 16 September 2019, 23:29:56

Vorheriges Thema - Nächstes Thema

abc2006

Moin zusammen,
ich hab hier ein DOIF gebaut:


Internals:
   DEF        Block_1 {
if ([$SELF:lastabwurf] eq "on"){
if ([$SELF:steuern] eq "short" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
fhem("setreading $SELF debug_1a b");
set_State("on");
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 900, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading $SELF debug_1 a");
}
}
if ([$SELF:steuern] eq "long" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
set_State("on");
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 3600, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading $SELF debug_2 a");
}
}
}
}
Block_2 {
if ([$SELF:lastabwurf] eq "on"){
if ([$SELF:steuern] eq "short" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^on/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_3 a");
set_State("off");
}
} elsif ([$SELF:lastabwurf] eq "off")
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_4 a");
set_State("off");
} elsif ([BMS:1_SOC_BMS_total:d] < 98 && get_Exec("tmr_Leuchte_Garage") == 0)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_5 a");
set_State("off");
}

}

   FUUID      5d6ce8ab-f33f-4040-83db-c0f25756ff42a380
   MODEL      Perl
   NAME       DF_Aktor_Leuchte_Garage_Decke
   NR         577
   NTFY_ORDER 50-DF_Aktor_Leuchte_Garage_Decke
   STATE      on
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   OLDREADINGS:
   READINGS:
     2019-09-16 23:16:20   Device          BMS
     2019-09-16 23:07:56   block_Block_1   executed
     2019-09-16 23:07:56   block_Block_2   executed
     2019-09-16 23:07:56   debug_1         a
     2019-09-16 23:07:56   debug_1a        b
     2019-09-16 23:06:32   e_DF_Aktor_Leuchte_Garage_Decke_lastabwurf on
     2019-09-16 23:07:56   e_DF_Aktor_Leuchte_Garage_Decke_steuern short
     2019-09-16 23:06:32   lastabwurf      on
     2019-09-16 23:07:56   state           on
     2019-09-16 23:07:56   steuern         short
     2019-09-16 23:07:56   timer_tmr_Leuchte_Garage 16.09.2019 23:22:56
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0         
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "on"){
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','steuern') eq "short" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_1a b");
set_State("on");
if(::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98)
{
set_Exec("tmr_Leuchte_Garage", 900, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_1 a");
}
}
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','steuern') eq "long" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
set_State("on");
if(::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98)
{
set_Exec("tmr_Leuchte_Garage", 3600, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_2 a");
}
}
}

     1         
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "on"){
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','steuern') eq "short" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^on/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_3 a");
set_State("off");
}
} elsif (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "off")
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_4 a");
set_State("off");
} elsif (::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98 && get_Exec("tmr_Leuchte_Garage") == 0)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_5 a");
set_State("off");
}


     2         
   devices:
     0           DF_Aktor_Leuchte_Garage_Decke
     1           DF_Aktor_Leuchte_Garage_Decke BMS
     all         DF_Aktor_Leuchte_Garage_Decke BMS
   helper:
     event      1_Spannung_total: 47.813
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev BMS
     triggerEvents:
       1_Spannung_total: 47.813
     triggerEventsState:
       1_Spannung_total: 47.813
   internals:
   itimer:
   perlblock:
     0          Block_1
     1          Block_2
     2         
   ptimer:
     tmr_Leuchte_Garage:
       name       tmr_Leuchte_Garage
       subname   
       time       1568668976.60557
       hash:
   readings:
     0           DF_Aktor_Leuchte_Garage_Decke:lastabwurf DF_Aktor_Leuchte_Garage_Decke:steuern
     1           DF_Aktor_Leuchte_Garage_Decke:lastabwurf DF_Aktor_Leuchte_Garage_Decke:steuern BMS:1_SOC_BMS_total
     all         DF_Aktor_Leuchte_Garage_Decke:lastabwurf DF_Aktor_Leuchte_Garage_Decke:steuern BMS:1_SOC_BMS_total
   trigger:
   uiState:
   uiTable:
Attributes:
   room       _doif,KNX,Solar_PV


Mit dem Befehl
setreading DF_Aktor_Leuchte_Garage_Decke steuern short


möchte ich das DOIF dazu bringen, das Licht einzuschalten.

Leider werden nur die Befehle
fhem("setreading $SELF debug_1a b");
set_State("on");

ausgeführt, der Befehl

fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");

hingegen nicht.
Im Event-Monitor erhalte ich folgende Einträge:

Zitat2019-09-16 23:07:56.549 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke currentA: 0.000 A
2019-09-16 23:07:56.605 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke currentA: 0.000 A
2019-09-16 23:07:56.614 DOIF DF_Aktor_Leuchte_Garage_Decke block_Block_2: executed

Warum steht da nicht (auch)
DOIF DF_Aktor_Leuchte_Garage_Decke block_Block_1 executed ?

Laut den Readings wird Block 1 ausgeführt, und die readings debug_1a und debug_1 werden gesetzt.
Auch wird der State angepasst.

Ich habe die attribute
"selftrigger all"
und
"do always"  versucht, obwohl ich glaube, dass diese für den Perl-Modus irrelevant sind. Hat aber auch nicht geholfen.

Dass DOIF das Kommando nicht ausführt, um eine Endlossschleife zu verhindern (die ich zugegegebener Maßen gerade auch nicht sehe), vermute ich auch nicht.

In einem minimalen DOIF funktioniert der fhem_set Befehl einwandfrei:

Internals:
   DEF        test {
if([$SELF:rdg1]){
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
}
}
   FUUID      5c844719-f33f-4040-66cc-94fef462c4d1598a
   MODEL      Perl
   NAME       DF_mr
   NR         499
   NTFY_ORDER 50-DF_mr
   STATE      cmd_1
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   READINGS:
     2019-09-16 23:22:50   mode            enabled
     2019-09-16 23:00:57   rdg1            test
     2019-09-16 19:00:00   state           cmd_1
     2019-09-16 22:55:57   test            1
   Regex:
     accu:
   attr:
     cmdState:
     waitdel:
   condition:
     0         
if(::ReadingValDoIf($hash,'DF_mr','rdg1')){
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
}

   devices:
     0           DF_mr
     all         DF_mr
   helper:
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   perlblock:
     0          test
   readings:
     0           DF_mr:rdg1
     all         DF_mr:rdg1
   uiState:
   uiTable:
Attributes:
   comment    timer_01_c01
03.06.2019 19:00:00
2019-06-01 10:40:25
   do         always
   room       x_devel


Hat jemand eine Idee für mich? Wo könnte ich noch suchen? Verbose 5 hat keine Erkenntnisse zutage gefördert ...

Danke und Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

Wenn das Licht eingeschaltet ist (status: on) funktioniert das ausschalten einwandfrei.
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Ich gehe davon aus, dass fhem_set nicht ausgeführt wurde.

Durch das fehlende Fragezeichen werden die Blöcke durch $SELF:steuern ebenfalls angetriggert:

Zitatif ([$SELF:lastabwurf] eq "on"){
      if ([$SELF:steuern]

das willst du vermutlich nicht.

2019-09-16 23:07:56   e_DF_Aktor_Leuchte_Garage_Decke_steuern short







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

abc2006

Guten Morgen Damian,
Danke für deine Antwort.

Zitat von: Damian am 17 September 2019, 08:44:07
Ich gehe davon aus, dass fhem_set nicht ausgeführt wurde.

Das vermute ich auch. Allerdings ist mir nicht klar, warum nicht?

Die Timestamps der Readings stellen sich mir wie folgt dar:
2019-09-16 23:07:56   steuern         short

Ich habe kurz auf den Taster gedrückt, um das Licht in der Garage zu schalten

     2019-09-16 23:07:56   block_Block_1   executed

Block 1 wurde ausgeführt, aber hat kein Event erzeugt (siehe Einträge Eventmonitor)

     2019-09-16 23:07:56   block_Block_2   executed

Block 2 wurde ausgeführt, und hat ein Event erzeugt (siehe Einträge Eventmonitor)

     2019-09-16 23:07:56   debug_1         a

Reading debug_1 wurde aktualisiert (nur möglich im Block 1, wenn BMS leerer als 98%)

    2019-09-16 23:07:56   debug_1a        b

Reading debug_1a wurde aktualisiert(nur möglich im Block1, direkt nach dem *nicht ausgeführten* fhem_set)

Sogar der Timer wurde ordnungsgemäß gesetzt:
ptimer:
     tmr_Leuchte_Garage:
       name       tmr_Leuchte_Garage
       subname   
       time       1568668976.60557
       hash:


Also wurden doch alle Befehle ausgeführt, *ausser* fhem_set ?

Zitat von: Damian am 17 September 2019, 08:44:07

Durch das fehlende Fragezeichen werden die Blöcke durch $SELF:steuern ebenfalls angetriggert:

das willst du vermutlich nicht.

Aus welchem Grund will ich das nicht? Oder ich hab mich da unklar ausgedrückt. Ich versuchs nochmal.

Ich habe in der Garage einen Taster, der das Licht einschalten und ausschalten soll. Je nach Betätigungsdauer sendet dieser ein
setreading DF_Aktor_Leuchte_Garage_Decke steuern short
oder ein
setreading DF_Aktor_Leuchte_Garage_Decke steuern long

Daneben habe ich eine lastabwurf()-Routine, die entscheidet, wie viel Energie ich noch habe, und welche Geräte abgeschaltet werden sollen.
Diese sendet ein
setreading DF_Aktor_Leuchte_Garage_Decke lastabwurf on
oder ein
setreading DF_Aktor_Leuchte_Garage_Decke lastabwurf off

Das DOIF soll nun folgendes tun:

Wenn (Block 1) der Aktor aus ist (also das Licht in der Garage aus) UND ich kurz drücke UND lastabwurf ON ist, möchte ich das licht für 900 sekunden einschalten.
Wenn (Block 1) der Aktor aus ist (also das Licht in der Garage aus) UND ich lang drücke UND lastabwurf ON ist, möchte ich das licht für 3600 sekunden einschalten.

Wenn (Block2) der Aktor an ist (also das Licht in der Garage an) UND ich kurz drücke UND lastabwurf ON ist, möchte ich, dass das Licht ausgeht [funktioniert]
Wenn (Block2) lastabwurf OFF ist, möchte ich, dass das Licht ausgeht [funktioniert]
Wenn (Block2) Der Ladestand meiner Batterie unter 98% sinkt und KEIN Timer gesetzt ist, möchte ich, dass das Licht ausgeht.[funktioniert]

Wenn ich jetzt $SELF:steuern mit einem Fragezeichen versehe, kann ich ja mit dem Taster nicht mehr ein-, und ausschalten - oder?

Hoffe, das ist jetzt verständlicher formuliert...
Danke nochmal,
Stephan

FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Wenn der Trigger auf $SELF:steuern Absicht ist, dann ist ja alles korrekt.

Executed sollte immer kommen, wenn ein Trigger zum Block passt, ob dann tatsächlich etwas ausgeführt wird oder nicht, hängt von den if-Abfragen ab.

Warum Executed vom Block 1 nicht kommt, kann ich noch nicht sagen, ich müsste es bei mir nachbilden.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

Zitat von: Damian am 17 September 2019, 10:50:25
Warum Executed vom Block 1 nicht kommt, kann ich noch nicht sagen, ich müsste es bei mir nachbilden.

Mein Problem ist ja gar nicht hauptsächlich, ob da ein "executed" fehlt, mein Problem ist ja, dass das fhem_set nicht ausgeführt wird.
Und ich weiss nicht, warum nicht, weil alle anderen Anweisungen genau das tun, was sie sollen. Nur diese eine scheint einfach .. ignoriert zu werden. Keine Fehlermeldung, keine Reaktion, nix.
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

So,
Wenn ich den Block_2 lösche, erhalte ich im Event-Monitor das Event
2019-09-17 12:37:23.679 DOIF DF_Aktor_Leuchte_Garage_Decke block_Block_1: executed

Schalten tut trotzdem nix.

Wenn ich im ersten Block die Zeilen 8-12 lösche
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 900, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading $SELF debug_1 a");
}

kommt zwar immer noch nur
2019-09-17 12:42:44.025 DOIF DF_Aktor_Leuchte_Garage_Decke block_Block_2: executed

Aber das DOIF schaltet bei
setreading DF_Aktor_Leuchte_Garage_Decke steuern short

Wenn ich dann auch noch die Zeilen 18-22 lösche
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 3600, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));
fhem("setreading $SELF debug_2 a");
}


reagiert es auch auf
setreading DF_Aktor_Leuchte_Garage_Decke steuern long
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

abc2006

So, die Meldung "Block 1 executed" wird zwar immer noch nicht geliefert, aber:
Ich hab mal das DOIF Zeile für Zeile auseinandergenommen. Dabei ist mir aufgefallen, dass ich das set_Exec wie folgt definiert hatte:
set_Exec("tmr_Leuchte_Garage", 3600, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));

Nachdem ich mir ein weiteres Mal die Commandref zu Gemüte geführt hatte, hab ich folgendes probiert:
set_Exec("tmr_Leuchte_Garage", 3600, 'fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');

Und schon schaltet das fhem_set 5 Zeilen vorher die Leuchte ein. Keine Ahnung, wo hier das Problem liegt, zumal auch mit der ersten Variante (ohne die beiden ' ' ) fehlerfrei ein Timer erzeugt wird.
Aber: jetzt gehts. Und in der commandref stehts dann ja auch richtig. Bleibt also nur noch die Frage, warum die executed-Meldung für Block1 nicht kommt.

Danke schonmal für alle Hilfe, wenn ich dir noch Infos liefern kann, melde dich.
Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Zitat von: abc2006 am 17 September 2019, 13:08:37
So, die Meldung "Block 1 executed" wird zwar immer noch nicht geliefert, aber:
Ich hab mal das DOIF Zeile für Zeile auseinandergenommen. Dabei ist mir aufgefallen, dass ich das set_Exec wie folgt definiert hatte:
set_Exec("tmr_Leuchte_Garage", 3600, fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off"));

Nachdem ich mir ein weiteres Mal die Commandref zu Gemüte geführt hatte, hab ich folgendes probiert:
set_Exec("tmr_Leuchte_Garage", 3600, 'fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');

Und schon schaltet das fhem_set 5 Zeilen vorher die Leuchte ein. Keine Ahnung, wo hier das Problem liegt, zumal auch mit der ersten Variante (ohne die beiden ' ' ) fehlerfrei ein Timer erzeugt wird.
Aber: jetzt gehts. Und in der commandref stehts dann ja auch richtig. Bleibt also nur noch die Frage, warum die executed-Meldung für Block1 nicht kommt.

Danke schonmal für alle Hilfe, wenn ich dir noch Infos liefern kann, melde dich.
Grüße,
Stephan

Die executed-Meldung muss ich mir noch mal anschauen. Die Übergabe der Funktion in Anführungszeichen ist bedingt durch Perl.

Wenn man eine Funktion nur übergeben will, um sie später auszuführen, dann muss man das über Pointer machen oder wie hier in Anführungszeichen angeben, ansonsten würde die Funktion bereits zum Zeitpunkt der Übergabe ausgeführt werden.



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

Damian

Vielleicht hat das Problem damit etwas zu tun: https://forum.fhem.de/index.php/topic,101106.0.html

Du könntest das Reading steuern in einen Dummy auslagern und damit mal testen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

abc2006

Ich habe einen neuen Dummy erstellt:
D_Leuchte_Garage_Decke
Wenn ich jetzt sage
setreading D_Leuchte_Garage_Decke steuern short
dann schaltet mein DOIF


Internals:
   DEF        Block_1 {
if ([$SELF:lastabwurf] eq "on"){
if ([D_Leuchte_Garage_Decke:steuern] eq "short" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
fhem("setreading $SELF debug_1a b");
set_State("on");
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 900, 'fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');
fhem("setreading $SELF debug_1 a");
}
}
if ([D_Leuchte_Garage_Decke:steuern] eq "long" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^off/)
{
fhem_set"KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on";
set_State("on");
if([?BMS:1_SOC_BMS_total:d] < 98)
{
set_Exec("tmr_Leuchte_Garage", 3600, 'fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');
fhem("setreading $SELF debug_2 a");
}
}
}
}
Block_2 {
if ([$SELF:lastabwurf] eq "on"){
if ([D_Leuchte_Garage_Decke:steuern] eq "short" && [?KNX02.O08_Aktor_Leuchte_Garage_Decke:status] =~ /^on/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_3 a");
set_State("off");
}
} elsif ([$SELF:lastabwurf] eq "off")
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_4 a");
set_State("off");
} elsif ([BMS:1_SOC_BMS_total:d] < 98 && get_Exec("tmr_Leuchte_Garage") == 0)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading $SELF debug_5 a");
set_State("off");
}

}
   FUUID      5d6ce8ab-f33f-4040-83db-c0f25756ff42a380
   MODEL      Perl
   NAME       DF_Aktor_Leuchte_Garage_Decke
   NOTIFYDEV  global,DF_Aktor_Leuchte_Garage_Decke,D_Leuchte_Garage_Decke,BMS
   NR         573
   NTFY_ORDER 50-DF_Aktor_Leuchte_Garage_Decke
   STATE      off
   TYPE       DOIF
   VERSION    20163 2019-09-15 16:48:42
   READINGS:
     2019-09-17 17:19:06   Device          BMS
     2019-09-17 17:19:01   block_Block_1   executed
     2019-09-17 17:19:06   block_Block_2   executed
     2019-09-17 16:18:27   debug_1         a
     2019-09-17 17:18:33   debug_1a        b
     2019-09-17 13:13:40   debug_2         a
     2019-09-17 17:19:01   debug_3         a
     2019-09-17 10:10:34   debug_4         a
     2019-09-17 17:19:06   e_BMS_1_SOC_BMS_total 99.6
     2019-09-17 17:19:01   e_D_Leuchte_Garage_Decke_steuern short
     2019-09-17 10:11:39   lastabwurf      on
     2019-09-17 17:14:55   mode            enabled
     2019-09-17 17:19:01   state           off
     2019-09-17 16:18:27   steuern         short
   Regex:
     accu:
     cond:
       BMS:
         0:
         1:
           1_SOC_BMS_total ^BMS$:^1_SOC_BMS_total:
       DF_Aktor_Leuchte_Garage_Decke:
         0:
           lastabwurf ^DF_Aktor_Leuchte_Garage_Decke$:^lastabwurf:
         1:
           lastabwurf ^DF_Aktor_Leuchte_Garage_Decke$:^lastabwurf:
       D_Leuchte_Garage_Decke:
         0:
           steuern    ^D_Leuchte_Garage_Decke$:^steuern:
         1:
           steuern    ^D_Leuchte_Garage_Decke$:^steuern:
   condition:
     0         
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "on"){
if (::ReadingValDoIf($hash,'D_Leuchte_Garage_Decke','steuern') eq "short" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^off/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_1a b");
set_State("on");
if(::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98)
{
set_Exec("tmr_Leuchte_Garage", 900, 'fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_1 a");
}
}
if (::ReadingValDoIf($hash,'D_Leuchte_Garage_Decke','steuern') eq "long" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^off/)
{
fhem_set"KNX02.O08_Aktor_Leuchte_Garage_Decke steuern on";
set_State("on");
if(::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98)
{
set_Exec("tmr_Leuchte_Garage", 3600, 'fhem("set KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off")');
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_2 a");
}
}
}

     1         
if (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "on"){
if (::ReadingValDoIf($hash,'D_Leuchte_Garage_Decke','steuern') eq "short" && ::ReadingValDoIf($hash,'KNX02.O08_Aktor_Leuchte_Garage_Decke','status') =~ /^on/)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_3 a");
set_State("off");
}
} elsif (::ReadingValDoIf($hash,'DF_Aktor_Leuchte_Garage_Decke','lastabwurf') eq "off")
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_4 a");
set_State("off");
} elsif (::ReadingValDoIf($hash,'BMS','1_SOC_BMS_total','','d') < 98 && get_Exec("tmr_Leuchte_Garage") == 0)
{
fhem_set("KNX02.O08_Aktor_Leuchte_Garage_Decke steuern off");
fhem("setreading DF_Aktor_Leuchte_Garage_Decke debug_5 a");
set_State("off");
}


   helper:
     event      1_SOC_BMS_total: 99.6
     globalinit 1
     last_timer 0
     sleeptimer -1
     triggerDev BMS
     triggerEvents:
       1_SOC_BMS_total: 99.6
     triggerEventsState:
       1_SOC_BMS_total: 99.6
   internals:
   perlblock:
     0          Block_1
     1          Block_2
   readings:
     all         DF_Aktor_Leuchte_Garage_Decke:lastabwurf D_Leuchte_Garage_Decke:steuern BMS:1_SOC_BMS_total
   trigger:
   uiState:
   uiTable:
Attributes:
   room       _doif,KNX,Solar_PV



Aber es kommen gar keine Meldungen mehr bezüglich des ausgeführten Blockes:
Zitat2019-09-17 17:19:01.237 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke last-sender: fhem
2019-09-17 17:19:01.237 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke power: 821 VA
2019-09-17 17:19:01.237 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke currentA: 3.570 A
2019-09-17 17:19:01.240 DOIF DF_Aktor_Leuchte_Garage_Decke debug_3: a
2019-09-17 17:19:01.243 DOIF DF_Aktor_Leuchte_Garage_Decke off
2019-09-17 17:19:01.245 dummy D_Leuchte_Garage_Decke steuern: short
2019-09-17 17:19:01.952 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke status: off
2019-09-17 17:19:01.952 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke last-sender: 1/1/3
2019-09-17 17:19:01.952 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke off
2019-09-17 17:19:01.952 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke power: 821 VA
2019-09-17 17:19:01.952 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke currentA: 3.570 A
2019-09-17 17:19:02.991 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke current: 0 mA
2019-09-17 17:19:02.991 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke last-sender: 1/1/3
2019-09-17 17:19:02.991 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke off
2019-09-17 17:19:02.991 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke power: 0 VA
2019-09-17 17:19:02.991 KNX KNX02.O08_Aktor_Leuchte_Garage_Decke currentA: 0.000 A

Hilft dir das?
oder meintest du was anderes?

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Damian

Ich habe folgenden einfachen Fall nachgestellt:

Internals:
   CFGFN     
   DEF        block1 {[$SELF:test]}
block2 {[$SELF:test]}
   MODEL      Perl
   NAME       testexec
   NOTIFYDEV  global,testexec
   NR         3476
   NTFY_ORDER 50-testexec
   STATE      initialized
   TYPE       DOIF
   READINGS:
     2019-09-17 17:54:33   block_block1    executed
     2019-09-17 17:54:33   block_block2    executed
     2019-09-17 17:54:33   e_testexec_test 1
     2019-09-17 17:53:49   mode            enabled
     2019-09-17 17:53:01   state           initialized
     2019-09-17 17:54:32   test            1
...


mit

setreading testexec test 1

werden sowohl die Readings entsprechend gesetzt (siehe oben), wie auch Events produziert:

2019-09-17 17:54:33.050 DOIF testexec test: 1
2019-09-17 17:54:33.050 DOIF testexec e_testexec_test: 1
2019-09-17 17:54:33.050 DOIF testexec block_block1: executed
2019-09-17 17:54:33.050 DOIF testexec block_block2: executed
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF