Hallo,
bis jetzt habe ich meine DOIFs immer aus Beispielen kopiert und dann angepasst.
Nun wollte ich mal selbst was erstellen und schon stehe ich an ;)
Ich wollte eine Übersicht über alle FileLogs erstellen.
Also flugs ein DOIF definieren und im Attribut uiTable die Tabelle erstellt.
Aber halt, da sind ein paar Fehlermeldungen, deren Grund ich nicht verstehe und vor allem nicht, wie ich das richtig machen muss.
defmod di_LogFiles DOIF ##
attr di_LogFiles uiTable ## alle FileLogs mit Reading\
package ui_Table;;;;\
\
sub test {\
my $item=@_;;;;\
\
# Log 1, "di_LogFiles: ".$item;;;;\
return ("<details><summary>".InternalVal("$item","NAME","")."</summary><ul><li>test1</li><li>test2</li><li>test3</li></ul><p>wie auch jeder andere HTML-Code wie z.B. Bilder</p></details>");;;;\
}\
\
## FOR(@::devspec2array("TYPE=FileLog")),"$_"|[$_:linesInTheFile]|[$_:currentlogfile]))\
FOR(@::devspec2array("TYPE=FileLog"),test("$_"))
attr di_LogFiles verbose 5
Der Code oben bringt folgende Fehlermeldungen:
error Missing right curly or square bracket at (eval 4203905) line 1, at end of line syntax error at (eval 4203905) line 1, at EOF in expression: {
3
di_LogFiles: error Global symbol "$item" requires explicit package name (did you forget to declare "my $item"?) at (eval 4203909) line 1. in expression: $item;;
error Global symbol "$item" requires explicit package name (did you forget to declare "my $item"?) at (eval 4203910) line 1. in expression: return ("
".InternalVal("$item","NAME","")."
");;
error Unmatched right curly bracket at (eval 4203911) line 1, at end of line syntax error at (eval 4203911) line 1, near "}" in expression: }
Warum kennt DOIF die Variable "$item" in der Funktion "test" nicht?
Warum fehlen DOIF so viele Klammern? (ist wahrscheinlich ein Folgefehler)
Warum wird das "Log" nicht aufgerufen?
Ich verstehe es leider nicht.
Könnte mir bitte jemand einen Schubs in die richtige Richtung geben?
Vielen Dank im Voraus
lg, Gerhard
@_ liefert ein Array, daher muss $item in runde Klammern
Aber ich rufe meine Funktion ,,test" mit dem Parameter ,,$_" aus der FOR-Schleife auf.
Ich dachte dann wird ,,test" so oft aufgerufen, wie es Elemente im Array gibt.
Oder nicht?
Wird das komplette Array an ,,test" übergeben?
Muss ich dann dort das Array abarbeiten?
Danke, Lg, Gerhard
Jetzt weiß ich, was Du meinst.
Wenn ich das ,,@" vor dem ,,::devspec2array" wegnehme, dann klappt es.
Danke, Lg, Gerhard
So, nun stehe ich beim nächsten Problem an.
Ich schaffe es nicht, in der Funktion "test" Variablen zu deklarieren.
Es kommen immer diese Fehlermeldungen:
error Missing right curly or square bracket at (eval 4467938) line 1, at end of line syntax error at (eval 4467938) line 1, at EOF in expression: {
3
error Global symbol "$item" requires explicit package name (did you forget to declare "my $item"?) at (eval 4467940) line 1. in expression: my $Filename=InternalVal("$item","logfile","");;
di_LogFiles: error Global symbol "$item" requires explicit package name (did you forget to declare "my $item"?) at (eval 4467944) line 1. in expression: $item;;
error Global symbol "$item" requires explicit package name (did you forget to declare "my $item"?) at (eval 4467946) line 1. in expression: $item
error Global symbol "$formString" requires explicit package name (did you forget to declare "my $formString"?) at (eval 4467948) line 1. in expression: return ("
".$formString."
");;
error Unmatched right curly bracket at (eval 4467949) line 1, at end of line syntax error at (eval 4467949) line 1, near "}" in expression: }
Das Attribut "uiTable" sieht so aus:
## alle FileLogs mit Reading
package ui_Table;;
sub test {
my $item=@_;;
my $Filename=InternalVal("$item","logfile","");;
my $formString;;
# Log 3, "di_LogFiles: ".$item;;
#<div><a href=\"http://$ip \"target=\"_blank\">".FW_makeImage($onl,$ip)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> $cons W/$temp °C</div>
$formString="<div><a href=\"/fhem?detail=".$item."\">".$item."</a></div>";;
return ("<details><summary>".$formString."</summary><ul><li>test1</li><li>test2</li><li>test3</li></ul><p>wie auch jeder andere HTML-Code wie z.B. Bilder</p></details>");;
}
## FOR(@::devspec2array("TYPE=FileLog")),"$_"|[$_:linesInTheFile]|[$_:currentlogfile]))
FOR(::devspec2array("TYPE=FileLog"),test("$_"))
Was mache ich denn da falsch?
Danke für jede Hilfe
lg, Gerhard
## alle FileLogs mit Reading
package ui_Table;;
sub test {
my $item=@_;;
my $Filename=InternalVal("$item","logfile","");;
my $formString;;
# Log 3, "di_LogFiles: ".$item;;
#<div><a href=\"http://$ip \"target=\"_blank\">".FW_makeImage($onl,$ip)."</a> <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\">".FW_makeImage($light)."</a> $cons W/$temp °C</div>
$formString="<div><a href=\"/fhem?detail=".$item."\">".$item."</a></div>";;
return ("<details><summary>".$formString."</summary><ul><li>test1</li><li>test2</li><li>test3</li></ul><p>wie auch jeder andere HTML-Code wie z.B. Bilder</p></details>");;
}
der obige Teil muss in geschweifte Klammern, also in einen Perlblock.
und wie schon geschrieben, muss es heißen:
my ($item)=@_;;
Hallo Damian,
danke für Deine Hilfe.
Da hatte ich wirklich 2 Fehler.
Nun klappt zumindest der Teil.
Danke!
lg, Gerhard