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
Wenn das Licht eingeschaltet ist (status: on) funktioniert das ausschalten einwandfrei.
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
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
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.
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.
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
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
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.
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.
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
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