FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: bismosa am 16 April 2024, 20:56:05

Titel: DOIF Perl Trigger
Beitrag von: bismosa am 16 April 2024, 20:56:05
Hallo!

Sorry. Ich verstehe es wohl nicht richtig...oder finde den Fehler einfach nicht.

Ich habe ein etwas komplexeres DOIF und der eine Block will einfach nicht triggern.
Dieser funktioniert einwandfrei. Bei einer Reading-Änderung wird dieser Block ausgeführt:
Status{
  set_Reading_Begin;
  set_Reading_Update("PV",[SMAInverter:SPOT_PACTOT]); ##duplikat,
  my $Netz = [SMAInverter:Meter_Power_Grid_Consumation]-[SMAInverter:Meter_Power_Grid_FeedIn];
  set_Reading_Update("Netz",$Netz);
  set_Reading_Update("Haus",$Netz + [SMAInverter:SPOT_PACTOT]);
  set_Reading_End(1);
}
Dieser wird hingegen nicht ausgeführt. Obwohl die entsprechenden Readings ein Event (im Event-Monitor sichtbar) erzeugen:
test{
[SMAInverter:SPOT_ETOTAL];
[SMAInverter:Meter_TOTAL_Grid_FeedIn];
[SMAInverter:Meter_TOTAL_Grid_Consumation];
set_Reading("Test2",get_Reading("Test2",0)+1,1);
}
Dabei steht im Wiki:
Zitat[<device>:<reading>] reagiert auf alle Events vom angegebenen Device mit dem angegebenen Reading, Rückgabewert: Inhalt des Readings des Devices
Dann sollte doch ein Triggern erfolgen, wenn ein Reading beim SMAInverter geändert wird?
BTW:
Wenn mehrere Readings gleichzeitig geändert werden, wird der entsprechende Block mehrfach ausgeführt?
Gruß
Bismosa
Titel: Aw: DOIF Perl Trigger
Beitrag von: Damian am 16 April 2024, 23:13:27
Die Definition ist in Ordnung. Für eine Analyse musst du ein list des Devices posten und am besten ein Auszug aus dem entsprechenden Eventlog.
Titel: Aw: DOIF Perl Trigger
Beitrag von: bismosa am 17 April 2024, 11:07:21
Hallo!
Danke für die Bestätigung, das die Definition in Ordnung ist. Nach ein paar Stunden Fehlersuche fängt man da langsam an zu zweifeln.
Ich habe nun wohl das Problem gefunden. Ich habe zum testen diese Definition:
defmod di_TriggerTest DOIF Test1{\
[SMAInverter:SPOT_PACTOT];;\
set_Reading_Begin;;\
set_Reading_Update("Netz",get_Reading("Netz",0)+1);;\
set_Reading_Update("Haus",get_Reading("Haus",0)+1);;\
set_Reading_End(1);;\
}\
\
Meter_TOTAL_Grid_Consumation{\
[SMAInverter:Meter_TOTAL_Grid_Consumation];;\
set_Reading("Meter_TOTAL_Grid_Consumation", get_Reading("Meter_TOTAL_Grid_Consumation",0)+1,1);;\
}\
Meter_TOTAL_Grid_Consumation2{\
[SMAInverter:"Meter_TOTAL_Grid_Consumation"];;\
set_Reading("Meter_TOTAL_Grid_Consumation2", get_Reading("Meter_TOTAL_Grid_Consumation2",0)+1,1);;\
}\
\
Test2{\
[$SELF:Haus];;[$SELF:PV];;\
set_Reading_Begin;;\
set_Reading_Update("Haus_PV",get_Reading("Haus_PV",0)+1);;\
set_Reading_End(1);;\
}\

attr di_TriggerTest event-on-change-reading .*

setstate di_TriggerTest initialized
setstate di_TriggerTest 2024-04-17 10:59:51 Device SMAInverter
setstate di_TriggerTest 2024-04-17 10:59:51 Meter_TOTAL_Grid_Consumation 45
setstate di_TriggerTest 2024-04-17 10:59:51 Meter_TOTAL_Grid_Consumation2 63
setstate di_TriggerTest 2024-04-17 10:59:51 block_Meter_TOTAL_Grid_Consumation executed
setstate di_TriggerTest 2024-04-17 10:59:51 block_Meter_TOTAL_Grid_Consumation2 executed
setstate di_TriggerTest 2024-04-17 10:59:51 e_SMAInverter_Meter_TOTAL_Grid_Consumation 151773
setstate di_TriggerTest 2024-04-17 10:59:51 e_SMAInverter_events Meter_TOTAL_Consumation: 151773,Meter_TOTAL_Grid_Consumation: 151773,Meter_Grid_Consumation_PAC1: 55,background_processing_time: 1.7358,inverter_processing_time: 0.7871
Hier wird der Block "Meter_TOTAL_Grid_Consumation2" regelmäßig, der Block "Meter_TOTAL_Grid_Consumation" nur unregelmäßig ausgeführt.
Ich denke das hier die Loop Erkennung von FHEM greift? Da ja der Block "Meter_TOTAL_Grid_Consumation" den Block "Test2" triggert.
Entferne ich den Block "Test2" funktioniert alles wie gewünscht.

Gruß
Bismosa