Hallo,
bin blutiger Anfänger und versuche jetzt schon seit Tagen folgende Funktion ans laufen zu bringen.
Irgendwie komm ich nicht weiter und brauche Hilfe:
fhem.cfg
define dimupM dummy
attr dimupM room Lichtsteuerung
attr dimupM userReadings dimsec ({my $time2sec = time2sec(ReadingsVal("dimupM","dimupM",0))})
Myutils
sub
time2sec($)
{
my ($time2sec) = @_;
@a = (split /:/,$time2sec);
$time2sec = $a[0] *3600 + $a[1] *60;
return $time2sec
}
setreading dimupM dimupM 00:10 ändert den Wert dimupM, bei dimsec kommt eine Fehlermeldung:
"Error evaluating dimupM userReading dimsec: syntax error at (eval 277) line 1, at EOF"
Erwarteter Wert: 600
Auf die Schnelle (ohne deinCiding genauer anzusehen): FHEM hat eine Funktion time_str2num, die genau das machen sollte. Und am Besten packst du Coding hier im Forum in code tags (# Button im Editor) um das Ganze lesbarer zu machen.
Danke für den Hinweis mit den Code Tags :-)
Leider hilft mir hier time_str2num wohl nicht weiter, da mein Format HH:MM hat (oder verstehe ich da was falsch?).
Die Frage ist, habe ich einen Formatierungsfehler oder habeich das ganze falsch verstanden.
Besser DOIF oder notify?
Die Variable @a ist nicht deklariert und die Klammern rundum split sind falsch getzt. Ein Blick ins Log hätte das auch verraten...
sub
time2sec($)
{
my ($time2sec) = @_;
my @a = split(/:/,$time2sec);
$time2sec = $a[0] *3600 + $a[1] *60;
return $time2sec
}
Hallo,
danke, bin für jeden Tip dankbar. Ich suche jetzt schon seit Tagen und versuche zu verstehen wie ich die Funktion umsetzen kann.
Ein Beispiel würde mir hier weiterhelfen das Ganze zu verstehen.
Habs jetzt die MyUtils angepasst:
sub
time2sec($)
{
my ($time2sec) = @_;
@a = split (/:/,$time2sec);
$time2sec = $a[0] *3600 + $a[1] *60;
return $time2sec
}
Ich hoffe das passt jetzt.
Was mir noch nicht klar ist, wie der Rückgabewert in das Reading dimsec kommt
dimsec ({time2sec(ReadingsVal("dimupM","dimupM",0))})
Übernimmt er hier den Rückgabewert direkt.
Danke im voraus
Für solche Umrechnungen gibt es doch fertige Funktionen in perl? Warum wollen immer alle das Rad neu erfinden?
Zitat von: Tunka am 19 Februar 2017, 14:56:59
dimsec ({time2sec(ReadingsVal("dimupM","dimupM",0))})
Übernimmt er hier den Rückgabewert direkt.
ja, sollte direkt übernommen werden, die runden Klammern (außen) sind aber unnötig (oder verursachen sogar Probleme - kann ich jetzt nicht sagen).
Hallo, wie ist es ausgegangen?