Seit Jahren ist der Ausführungsteil meines Weckers:
define House.Wakeup DOIF ([Weckzeit:today] eq "none") () DOELSEIF ([([Weckzeit:today] + [00:05])]) ({HouseTimeHelper("wakeup")})
Seit wenigen Wochen tritt folgendes Problem auf: Beim Start von FHEM hat Weckzeit:today noch nicht den Wert einer Zeit - und prompt steigt die Definition aus mit
Zitat([([Weckzeit:today] + [00:05:00])]) ({HouseTimeHelper("wakeup")}): House.Wakeup DOIF: Wrong timespec : either HH:MM:SS or {perlcode}: ([Weckzeit:today]+[00:05:00])
2017.03.17 07:22:53 1: configDB: House.Wakeup DOIF: Wrong timespec : either HH:MM:SS or {perlcode}: ([Weckzeit:today]+[00:05:00])
Kann man diese Überprüfung auf die Zeit nach der Initialisierung verschieben ?
LG
pah
Zitat von: Prof. Dr. Peter Henning am 17 März 2017, 16:47:35
Seit Jahren ist der Ausführungsteil meines Weckers:
define House.Wakeup DOIF ([Weckzeit:today] eq "none") () DOELSEIF ([([Weckzeit:today] + [00:05])]) ({HouseTimeHelper("wakeup")})
Seit wenigen Wochen tritt folgendes Problem auf: Beim Start von FHEM hat Weckzeit:today noch nicht den Wert einer Zeit - und prompt steigt die Definition aus mit
Kann man diese Überprüfung auf die Zeit nach der Initialisierung verschieben ?
LG
pah
Das wundert mich aber, da die Zeitangaben schon lange erst nach der Initialisierung des Systems gesetzt werden. Zuvor wird lediglich Klammer-Check gemacht und nicht mehr. Die Auswertung der Readings findet bei der Definition nicht statt.
Das kann für mich nur bedeuten, dass nach der Initialisierung des Systems Weckzeit:today keine gültige Zeitangabe hat.
No, Sir.
Das Ganze tritt erst in der neuen Version 5.8 auf - und nach der Initialisierung steht das auf einer korrekten Zeitangabe.
LG
pah
Zitat von: Prof. Dr. Peter Henning am 17 März 2017, 19:07:37
No, Sir.
Das Ganze tritt erst in der neuen Version 5.8 auf - und nach der Initialisierung steht das auf einer korrekten Zeitangabe.
LG
pah
Dann haben sich offenbar irgendwelche Mechanismen in 5.8 geändert, die ich nicht kenne:
Das ist die Stelle im Code:
if ($dev->{NAME} eq "global" and (EventCheckDoif($dev->{NAME},"global",$eventa,"INITIALIZED") or EventCheckDoif($dev->{NAME},"global",$eventa,"REREADCFG")))
$hash->{helper}{globalinit}=1;
# delete old timer-readings
foreach my $key (keys %{$defs{$hash->{NAME}}{READINGS}}) {
delete $defs{$hash->{NAME}}{READINGS}{$key} if ($key =~ "^timer_");
}
if ($hash->{helper}{last_timer} > 0){
for (my $j=0; $j<$hash->{helper}{last_timer};$j++)
{
DOIF_SetTimer($hash,"DOIF_TimerTrigger",$j);
}
DOIF_SetTimer zum Setzen der Zeit (von dort kommt die Meldung) wir erst gesetzt, wenn der Trigger "global: INITIALIZED" oder "global: REREADCFG" kommt.
Ich habe eine verdächtige Stelle im Code gefunden:
Du kannst die angehängte Version mal testen. Die sollte das Problem beheben.
Nein, diese angehängte Version steigt aus mit
Zitat2017.03.17 20:18:50 1: reload: Error:Modul 98_DOIF deactivated:
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1071.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1078.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1079.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1080.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1084.
2017.03.17 20:18:50 0: Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1071.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1078.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1079.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1080.
Global symbol "$lastWarningMsg" requires explicit package name at /opt/fhem/FHEM/98_DOIF.pm line 1084.
LG
pah
Zitat von: Prof. Dr. Peter Henning am 17 März 2017, 21:33:58
Nein, diese angehängte Version steigt aus mit
LG
pah
ja, es gab letztens ein Update. Dazu musst du die aktuelle fhem.pl nehmen.
Macht es jetzt nicht besser. Die Definition steigt aus, weil unmittelbar bei der Definition der Wert von [Weckzeit:today] geprüft wird. Und wenn der "none" ist => Fehler.
Ist vermutlich eine Folge des von Rudi eingeführten frühen PerlSyntaxCheck...
LG
pah
Zitat von: Prof. Dr. Peter Henning am 18 März 2017, 05:22:45
Macht es jetzt nicht besser. Die Definition steigt aus, weil unmittelbar bei der Definition der Wert von [Weckzeit:today] geprüft wird. Und wenn der "none" ist => Fehler.
Ist vermutlich eine Folge des von Rudi eingeführten frühen PerlSyntaxCheck...
LG
pah
Dann scheint die Abfrage auf $init_done, dann wohl nicht mehr zu greifen. Ich habe mal den harten Ausstieg ausgebaut.
Edit: Ich habe noch einiges im Modul geändert:
Es werden jetzt grundsätzlich DOIF-Module definiert, auch wenn indirekte Timer nicht sauber definiert sind. Das entspricht der bisherigen Vorgehensweise bei Readingangaben. Intervalle bei ungültigen Timerangaben sind dann nicht wahr.