Hauptmenü

DOIF Perl Trigger

Begonnen von bismosa, 16 April 2024, 20:56:05

Vorheriges Thema - Nächstes Thema

bismosa

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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...

Damian

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

bismosa

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
1x nanoCUL 433MHz (SlowRF Intertechno) für Fenstersensoren
1x nanoCUL 868Mhz für MAX (9x HT 1xWT)
1x ZigBee CUL
Weiteres: Squeezebox server, Kindle Display, ESP8266, Löterfahrung, ...