Ich bin jetzt schon seit Stunden auf der Suche nach einem ganz dubiosen Problem. Ich habe folgenden Code (gekürzt):
init
{
set_Exec('init_next', 300, 'startParse("$SELF", "next")');
}
{
if ([+00:15])
{
startParse("$SELF", 'next');
}
}
Innerhalb der startParse Funktion werden irgendwann Strings um gewisse Sonderzeichen bereinigt:
sub filterText($)
{
my $text = shift;
#$text =~ s/[\x22\x60\x3b\x27"`;\'\r]//g;
$text =~ s/["`;\'\r]//g;
$text =~ s/[\n]/<br>/g;
return $text;
}
Passiert das mit dem Timer im init Block, dann findet aus mir unerklärlichen Gründen kein Match statt und die Sonderzeichen werden nicht gefiltert. Im Standard Block darunter hingegen, werden die Sonderzeichen gefiltert. Ich vermute dahinter einen ganz dubiosen encoding Effekt, kann es aber nicht genau eingrenzen.
Ich werde versuchen ein kleines DOIF zu kreieren, um das Problem vielleicht isoliert zu bekommen. Ich kann aber nicht versprechen das es klappt.
Liegt das nicht an der Interpolation von $SELF zwischen single quotes im init Block?
Die Readings werden innerhalb der aufgerufenen Funktion im richtigen Device erzeugt, der Name wird also in beiden Fällen richtig übergeben. Im ersten Fall kriege ich allerdings Fehler wegen unterminierter Strings, weil das Zeichen ' nicht entfernt wurde. Die verarbeiteten Daten sind in beiden Fällen ebenfalls gleich.
Was das Modul aus der Definition macht, kannst du unter condition im List sehen:
ZitatInternals:
CFGFN
DEF init
{
set_Exec('init_next', 300, 'startParse("$SELF", "next")');
}
{
if ([+00:15])
{
startParse("$SELF", 'next');
}
}
FUUID 5ee72fc1-f33f-c0d4-08c5-dc978fab7cb692d7
MODEL Perl
NAME di_init
NOTIFYDEV global
NR 1365
NTFY_ORDER 50-di_init
STATE initialized
TYPE DOIF
VERSION 21979 2020-05-20 08:36:23
READINGS:
2020-06-15 10:22:34 block_init executed
2020-06-15 10:22:34 mode enabled
2020-06-15 10:22:25 state initialized
2020-06-15 10:22:34 timer_01_c02 15.06.2020 10:37:34
2020-06-15 10:22:34 timer_init_next 15.06.2020 10:27:34
Regex:
accu:
condition:
0
set_Exec('init_next', 300, 'startParse("di_init", "next")');
1
if (::DOIF_time_once($hash,0,$wday))
{
startParse("di_init", 'next');
}
...
Ich sehe da kein Problem.
Ich hatte schon im DOIF Modul geschaut und konnte ebenfalls nichts entdecken. Deshalb bin ich daher auch etwas ratlos was da genau passiert. Ich muss da wahrscheinlich weitere debug Meldungen einbauen, wobei Encoding Probleme immer extrem schwierig zu finden sind...
Zitat von: mumpitzstuff am 15 Juni 2020, 11:21:24
Ich hatte schon im DOIF Modul geschaut und konnte ebenfalls nichts entdecken. Deshalb bin ich daher auch etwas ratlos was da genau passiert. Ich muss da wahrscheinlich weitere debug Meldungen einbauen, wobei Encoding Probleme immer extrem schwierig zu finden sind...
Was ich sagen kann ist: Das, was im jeweiligen condition-Block zu sehen ist, wird einfach ohne Änderung per eval ausgeführt.