Fehler in twilight: azimut, elevation und twilight_weather werden nicht mehr akt

Begonnen von Elektrolurch, 24 August 2015, 09:01:48

Vorheriges Thema - Nächstes Thema

Dietmar63

am Ende von TW_define wird der Timer direkt ähnlich diesem Code(sind drei Zeilen):
{Twilight_sunpos( {HASH=>$defs{"Daemmerung"}} ) }
aufgerufen.
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

Elektrolurch

Meine fhem.cfg sah bisher so aus:

- globale Attribute setzen
define bayern holiday
define Daemmerung twilight....

- cul und cuno definieren
- fhemweb - Instanzen definieren

- der Rest der Objekte

Damit wird der Timer für den periodischen Aufruf von twilight_sunpos gelöscht.

Wenn ich die Definition von Daemmerung hinter die Definition von fhemweb verschiebe, dann wird der Timer von twilight_sunpos nicht mehr gelöscht.

Wichtig ist nur, das twilight erst nach fhemweb definiert wird. Auf dem Testsystem (wo nur einige Sonos-Objekte sind) verhält es sich genauso.

Seit dem der Fehler in twilight aufgtritt, wurden folgende relevante Dateien aktualisiert:

fhem.pl fhemweb.pl httputils autocreate

fhem.pl und httputils hatte ich testhalber zurückgespielt, ohne Ergebnis.
autocreate nicht.

Also kann es eigentlich nur so sein, dass seit der letzten Aktualisierung von fhemweb in autocreate oder in fhemweb  die InternalTimer zurückgesetzt werden.

Nach dem ich jedenfalls die
define Daemmerung twilight
hinter die Definitionen der drei fhemweb-Instanzen verschoben habe, läuft wieder alles ok, was die "Dämmerung" angeht.

Elektrolurch
configDB und Windows befreite Zone!

Dietmar63

merkwürdig
ich habe mal die Sourcen nach intAt(das hash mit den timern) gegrept - viel habe ich nicht gefunden:


FHEM/31_MilightDevice.pm:  foreach my $args (keys %intAt)
FHEM/31_MilightDevice.pm:    if (($intAt{$args}{ARG} eq $hash) && ($intAt{$args}{FN} eq 'MilightDevice_CmdQueue_Exec'))
FHEM/31_MilightDevice.pm:      Log3 ($hash, 5, "$hash->{NAME}_CmdQueue_Clear: Remove timer at: ".$intAt{$args}{TRIGGERTIME});
FHEM/31_MilightDevice.pm:      delete($intAt{$args});
FHEM/00_THZ.pm:  foreach my $a (keys %intAt) {
FHEM/00_THZ.pm:    delete($intAt{$a}) if($intAt{$a}{FN} eq $callingfun);
FHEM/fhemStd.pm:use vars qw(%intAt);            # Internal at timer hash, global for benchmark
FHEM/fhemStd.pm:#our(%intAt);            # Internal at timer hash, global for benchmark
FHEM/fhemStd.pm:my $intAtCnt=0;
FHEM/fhemStd.pm:  $intAt{$intAtCnt}{TRIGGERTIME} = $tim;
FHEM/fhemStd.pm:  $intAt{$intAtCnt}{FN} = $fn;
FHEM/fhemStd.pm:  $intAt{$intAtCnt}{ARG} = $arg;
FHEM/fhemStd.pm:  $intAtCnt++;
FHEM/fhemStd.pm:  foreach my $a (keys %intAt) {
FHEM/fhemStd.pm:    delete($intAt{$a}) if($intAt{$a}{ARG} eq $arg);
FHEM/98_apptime.pm:use vars qw(%intAt);
FHEM/98_apptime.pm:  foreach my $i (sort { $intAt{$a}{TRIGGERTIME} <=>
FHEM/98_apptime.pm:                        $intAt{$b}{TRIGGERTIME} } keys %intAt) {
FHEM/98_apptime.pm:    my $tim = $intAt{$i}{TRIGGERTIME};
FHEM/98_apptime.pm:    my $fn = $intAt{$i}{FN};
FHEM/98_apptime.pm:      delete($intAt{$i});
FHEM/98_apptime.pm:      my $arg = $intAt{$i}{ARG};
FHEM/98_apptime.pm:      delete($intAt{$i});
FHEM/95_Alarm.pm:use vars qw(%intAt);               # FHEM at definitions
FHEM/95_Alarm.pm:         foreach my $d (sort keys %intAt ) {
FHEM/95_Alarm.pm:            next if( $intAt{$d}{FN} ne "at_Exec" );
FHEM/95_Alarm.pm:            $mga = $intAt{$d}{ARG}{NAME};
FHEM/00_SONOS.pm:use vars qw{%attr %defs %intAt %data};
FHEM/30_MilightBridge.pm:    foreach my $args (keys %intAt)
FHEM/30_MilightBridge.pm:      if (($intAt{$args}{ARG} eq $hash) && ($intAt{$args}{FN} eq 'MilightBridge_CmdQueue_Send'))
FHEM/30_MilightBridge.pm:        Log3 ($hash, 5, "$hash->{NAME}_CmdQueue_Send: Remove timer at: ".$intAt{$args}{TRIGGERTIME});
FHEM/30_MilightBridge.pm:        delete($intAt{$args});
FHEM/99_Utils_Ort.pm:  foreach my $a (keys %intAt) {
FHEM/99_Utils_Ort.pm:    my $arg = $intAt{$a}{ARG};
FHEM/99_Utils_Ort.pm:    my $tim = strftime('%d.%m.%Y %H:%M:%S',localtime($intAt{$a}{TRIGGERTIME}));
FHEM/99_Utils_Ort.pm:    my $func = sprintf ("%-35s %-35s",$nam,$intAt{$a}{FN});
FHEM/98_Modbus.pm:    foreach my $a (keys %intAt) {
FHEM/98_Modbus.pm:        if($intAt{$a}{ARG} eq $arg) {
FHEM/98_Modbus.pm:            $rest = $intAt{$a}{TRIGGERTIME} - $now;
FHEM/hcTest.pl: #print Dumper \%intAt;
FHEM/hcTest.pl:  foreach  my $timer (sort keys %intAt) {
FHEM/hcTest.pl:    my $fn = $intAt{$timer}{FN};
FHEM/hcTest.pl:    my $tim = $intAt{$timer}{TRIGGERTIME};
FHEM/hcTest.pl:    my @ret = &{$fn} ($intAt{$timer}{ARG});
fhem.pl:use vars qw(%intAt);            # Internal at timer hash, global for benchmark
fhem.pl:my $intAtCnt=0;
fhem.pl:  foreach my $i (sort { $intAt{$a}{TRIGGERTIME} <=>
fhem.pl:                        $intAt{$b}{TRIGGERTIME} } keys %intAt) {
fhem.pl:    next if(!$i || !$intAt{$i}); # deleted in the loop
fhem.pl:    my $tim = $intAt{$i}{TRIGGERTIME};
fhem.pl:    my $fn = $intAt{$i}{FN};
fhem.pl:      delete($intAt{$i});
fhem.pl:      &{$fn}($intAt{$i}{ARG});
fhem.pl:      delete($intAt{$i});
fhem.pl:  $intAt{$intAtCnt}{TRIGGERTIME} = $tim;
fhem.pl:  $intAt{$intAtCnt}{FN} = $fn;
fhem.pl:  $intAt{$intAtCnt}{ARG} = $arg;
fhem.pl:  $intAtCnt++;
fhem.pl:  foreach my $a (keys %intAt) {
fhem.pl:    delete($intAt{$a}) if($intAt{$a}{ARG} eq $arg);
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

stromer-12


fhem.pl:    next if(!$i || !$intAt{$i}); # deleted in the loop


Diese Zeile habe ich aus fhem.pl (2673) wieder rausgenommen, wurde am 18. eingebaut. Da perfmon bei systemstart mir keine Verzögerungen mehr anzeigte.

Edit: Deine Suche nach intAT hat mich bei meinen Problem drauf gebracht.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

Dietmar63

... Und das ist jetzt die Lösung - warum ?
und wie wird das frei gegeben?
Gruß Dietmar
FB7390, CUL, 2 FHT, FS20
modules: 98_WOL.pm, 98_Heating_Control.pm,   98_WeekdayTimer.pm, 98_RandomTimer.pm, 59_Twilight.pm

stromer-12

Zitat von: Dietmar63 am 26 August 2015, 23:01:16
... Und das ist jetzt die Lösung - warum ?
und wie wird das frei gegeben?
Bei mir hängt es mit dieser Änderung zusammen http://forum.fhem.de/index.php?topic=40142.msg323811.msg#323811

Gesendet von meinem GT-I9295

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL