Ich habe hier das Problem, das der wiregated ein Plugin ausführt, obwohl _cycle das eigentlich nicht zulässt.
Beispiel: Ich setze _cycle im plugin auf 8 Sekunden, aber es wird bereits nach deutlich weniger als 2 Sekunden ausgeführt - was schlecht ist. Dabei variieren diese Zeiten ohne dass ich eine Regelmäßigkeit erkennen könnte.
Hier mal ein (abgestripptes) plugin und die davon erzeugten Ausgaben im log.
Das Plugin ist hier tatsächlich zu Ende, es gibt keine weiteren Zeilen mehr.
Nun die Ausgabe im Log (Kommentare in blau manuell hier eingefügt, Zeitsprung zwischen grün und rot viel zu klein):
Ich hab mich hier schon grün und blau geärgert, weil das m.e. vor langer Zeit alles mal tadellos funktionierte. Gibt es da bekannte Änderungen/Einschränkungen ?
Mein emx_dcode plugin hängt z.B. von einigermaßen genauen Timeouts (+/0,5 Sekunden) ab, und hat immer exakt funktioniert. Nun macht es Zicken.
Ich bin hier auf V1.4.0.
Beispiel: Ich setze _cycle im plugin auf 8 Sekunden, aber es wird bereits nach deutlich weniger als 2 Sekunden ausgeführt - was schlecht ist. Dabei variieren diese Zeiten ohne dass ich eine Regelmäßigkeit erkennen könnte.
Hier mal ein (abgestripptes) plugin und die davon erzeugten Ausgaben im log.
Code:
# -*- Perl -*- # Aufrufgrund ermitteln my $event=undef; if (!$plugin_initflag) { $event='restart'; # Restart des daemons / Reboot } elsif ($plugin_info{$plugname.'_lastsaved'} > $plugin_info{$plugname.'_last'}) { $event='modified'; # Plugin modifiziert } elsif (defined $msg{'apci'} and $msg{'apci'} eq "A_GroupValue_Write") { $event = 'bus'; # bus telegram } else { $event = 'cycle'; } plugin_log($plugname, "Doing '$event'"); if ($event eq 'modified') { $plugin_subscribe{'0/0/28'}{$plugname} = 1; $event = 'cycle'; # after subscription, run a regular cycle } # modified ... if ($event eq 'restart') { plugin_log($plugname, "in 'restart'"); $event = 'cycle'; } if ($event eq 'bus') { plugin_log($plugname, "in 'bus'"); plugin_log($plugname, "INF: telegram from pa[$msg{'src'}], ga[$msg{'dst'}], val[$msg{'data'}]"); $plugin_info{$plugname.'_cycle'} = 8; } elsif ($event eq 'cycle') { plugin_log($plugname, "in 'cycle'"); $plugin_info{$plugname.'_cycle'} = 60; } # cycle return "$plugname: _cycle[$plugin_info{$plugname.'_cycle'}]";
Nun die Ausgabe im Log (Kommentare in blau manuell hier eingefügt, Zeitsprung zwischen grün und rot viel zu klein):
Code:
2017-01-21 14:45:33.190,test.pl,Doing 'cycle' [B][COLOR=#0000FF]# Normale Zyklus-Ausführung ab hier[/COLOR][/B] 2017-01-21 14:45:33.190,test.pl,in 'cycle' 2017-01-21 14:45:33.193,test.pl,test.pl: _cycle[60],0s, 2017-01-21 14:45:56.135,test.pl,Doing 'bus'[B][COLOR=#0000FF] # Ab hier telegramm von mir ausgelöst, alles geht wie erwartet[/COLOR][/B] 2017-01-21 14:45:56.136,test.pl,in 'bus' 2017-01-21 14:45:56.136,test.pl,INF: telegram from pa[1.2.201], ga[0/0/28], val[01] 2017-01-21 [B][COLOR=#008000]14:45:56.138[/COLOR][/B],test.pl,test.pl: _cycle[8],0s, [B][COLOR=#0000FF]# eindeutig 8 Sekunden _cycle, hier direkt aus plugin_info angezeigt[/COLOR][/B] 2017-01-21 [B][COLOR=#FF0000]14:45:56.481[/COLOR][/B],test.pl,Doing 'cycle' [COLOR=#0000FF][B]# Ab hier das Problem. Das Plugin wird sofort erneut ausgeführt, [/B][/COLOR] 2017-01-21 14:45:56.481,test.pl,in 'cycle' 2017-01-21 14:45:56.483,test.pl,test.pl: _cycle[60],0s,
Mein emx_dcode plugin hängt z.B. von einigermaßen genauen Timeouts (+/0,5 Sekunden) ab, und hat immer exakt funktioniert. Nun macht es Zicken.
Ich bin hier auf V1.4.0.
Kommentar