Guten Tag, ich habe anscheinend ein grundsätzliches Verständnisproblem und weder die commandref noch die Suchfunktion haben hier weitergeholfen. Zuerst einmal das Problem: Ich habe ein device, dass Einträge aus einem Telefonverzeichnis enthält. Diese Einträge möchte ich formatieren, weil sie bisher unschön aussehen.
Hier ist das ursprüngliche device:
defmod Telefon dummy
attr Telefon userReadings anrufliste
attr Telefon webCmd einlesen
setstate Telefon 2017-04-06 18:39:10 anrufliste --angerufen\
Nr 0 06.04.2017 13:26:13 08003309266 Dauer 0' 0''\
Nr 1 06.04.2017 13:09:24 XXXX Dauer 0' 23''\
Nr 2 06.04.2017 12:51:07 XXXX Dauer 17' 57''\
Nr 3 06.04.2017 11:04:07 XXXX Dauer 0' 0''\
Die Telefonnummern sind also da. Dann lese ich das in eine Readingsgroup ein:
defmod TelefonListe readingsGroup Telefon:anrufliste
attr TelefonListe valueFormat { FormatiereTelefonliste($VALUE);;;; }\
und damit das klappt, habe ich mit EditFiles die Datei 99_myUtils.pm bearbeitet, sie enthält jetzt
# Enter you functions below _this_ line.
sub FormatiereTelefonliste($)
{
my $liste = @_;
$liste =~ s/Nr \d //g;
$liste =~ s/XXXXX/ABC/g;
$liste =~ s/YYYYY/DEF/g;
return $liste
}
Allerdings stellt sich der gewünschte Erfolg nicht ein. Ich sehe nicht die formatierte Liste, sondern gar nichts. Auch der Logfile meldet keine Fehler. Ich bin ratlos. Weiß jemand, was ich hier falsch mache?
Hi,
so ganz kann ich Dir nicht sagen, warum das nicht funktioniert, aber ich kann mal Hilfestellung zur weiteren Problemlösung geben:
Das Attribut userReadings hast Du missverstanden. Es kann sogar sein, dass es bei dieser Verwendung immer ein leeres Reading erzeugt, da der Kommandoteil des userReadings leer ist. Du solltest das ganz weglassen.
Was sollen die vielen ";" bei valueFormat?
Routinen aus myUtils sollten mit "myUtils_" beginnen.
Das hier ist wahrscheinlich Quatsch:
my $liste = @_;
Ich würde mal sagen, danach enthält $liste die Anzahl der Einträge im Array @_, also 1.
Wahrscheinlich ist $VALUE an der Stelle nicht mit dem Wert gefüllt, den Du erwartest. (Das weiß ich aber nicht mit Bestimmtheit.)
Ansonsten wäre es besser, wenn Du ein list der beteiligten Devices lieferst.
...ach ja, bei Entwicklungen meiner Meinung nach immer hilfreich: perldebug.
Gruß,
Thorsten
Zitat von: Thorsten Pferdekaemper am 09 April 2017, 10:50:36
Das hier ist wahrscheinlich Quatsch:
my $liste = @_;
Ich würde mal sagen, danach enthält $liste die Anzahl der Einträge im Array @_, also 1.
Das war der Fehler, es fehlten die Klammern: also ($liste) ist richtig. Danke, dass Du Dich der Sache angenommen hast. Die anderen Dinge habe ich auch geändert, aber die waren für den Fehler nicht verantwortlich.
Ich habe FHEM kennengelernt, ohne mich je mit Perl beschäftigt zu haben. Das rächt sich nun ein bischen.
Zitat von: andies am 09 April 2017, 11:12:13
Ich habe FHEM kennengelernt, ohne mich je mit Perl beschäftigt zu haben. Das rächt sich nun ein bischen.
Naja, Du dürftest nicht der einzige sein, der Perl wegen FHEM gelernt hat.
Gruß,
Thorsten