Effekt von Version 5.8 auf DOIF

Begonnen von Prof. Dr. Peter Henning, 17 März 2017, 07:57:16

Vorheriges Thema - Nächstes Thema

Prof. Dr. Peter Henning

Guten Morgen,

seit Jahren ist der Ausführungsteil meines Weckers:

define House.Wakeup DOIF ([Weckzeit:today] eq "none") () DOELSEIF ([([Weckzeit:today] + [00:05])]) ({HouseTimeHelper("wakeup")})

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])

Das könnte ein Effekt des frühen Perl Syntaxcheck sein. Mir ist bisher noch keine Möglichkeit eingefallen, das zu verhindern.

LG

pah

rudolfkoenig

perlSyntaxCheck() ist waehrend des Einlesens von fhem.cfg ($init_done == 0) nicht aktiv.

Gibt es einen Grund dieses Problem nicht direkt dem DOIF Maintainer, sondern im Developer zu melden? Ich fuehle mich angesprochen, weiss aber nicht, was ich tun soll.

betateilchen

Zitat von: rudolfkoenig am 17 März 2017, 11:25:50
perlSyntaxCheck() ist waehrend des Einlesens von fhem.cfg ($init_done == 0) nicht aktiv.

Anmerkung: Peters Konfiguration wird nicht aus der fhem.cfg gelesen, sondern aus configDB.
configDB selbst führt beim Aktivieren der Konfiguration keinerlei Syntaxprüfung durch, sondern übergibt das an AnalyzeCommandChain()

Ob dort der perlSyntaxCheck irgendeinen Einfluss während des Systemstarts hat, kann ich spontan nicht beantworten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

@Peter: hast Du schon getestet, ob das Problem auch auftritt, wenn Du perlSyntaxCheck abschaltest?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatAnmerkung: Peters Konfiguration wird nicht aus der fhem.cfg gelesen, sondern aus configDB.
Das ist eher irrelevant. Weil:
- Befehl wird per cfgDB_ReadAll oder "include fhem.cfg"  gelesen
- Diese Funktionen rufen jeweils AnalyzeCommandChain auf, was wiederum ueber CommandDefine das Modulspezifische DefineFn aufruft
- DefineFn ruft perlSyntaxCheck auf
- perlSyntaxCheck macht nichts, falls init_done 0 ist.

Das gemeldete Problem duerfte nicht an dem perlSyntaxCheck liegen, da die Pruefung des Zeitformats nicht da stattfindet. Und daran hat sich mit der Aktivierung von perlSyntaxCheck oder csrfToken (und was anderes hat 5.8 nicht gemacht) nichts geaendert.

Ein Blick ins 98_DOIF.pm hat mir gerade verraten, dass es perlSyntaxCheck nicht kennt. Bisher wird das Attribut in notify, at, EnOcean, readings* verwendet und beim Aendern des stateFormat Attributes.

Ich gehe von einem "normalen" DOIF Bug oder Feature aus, evtl. eins was in der letzten Zeit implementiert wurde.

betateilchen

Zitat von: rudolfkoenig am 17 März 2017, 13:06:55
Das ist eher irrelevant. Weil:
- Befehl wird per cfgDB_ReadAll oder "include fhem.cfg"  gelesen
- Diese Funktionen rufen jeweils AnalyzeCommandChain auf, was wiederum ueber CommandDefine das Modulspezifische DefineFn aufruft
- DefineFn ruft perlSyntaxCheck auf
- perlSyntaxCheck macht nichts, falls init_done 0 ist.

Soweit war ich gerade beim Suchen auch gekommen :) Danke für die Bestätigung.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Prof. Dr. Peter Henning

Ich schließe das hier, und poste es im DOIF-Bereich.

Danke für Eure Mithilfe.

LG

pah