FHEM Forum

Verschiedenes => Projekte => Thema gestartet von: Tunka am 19 Februar 2017, 12:01:59

Titel: Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: Tunka am 19 Februar 2017, 12:01:59
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
Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: KernSani am 19 Februar 2017, 12:13:34
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.
Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: Tunka am 19 Februar 2017, 12:41:52
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?



Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: dev0 am 19 Februar 2017, 13:51:11
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
}
Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: Tunka am 19 Februar 2017, 14:56:59
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
Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: betateilchen am 19 Februar 2017, 17:45:01
Für solche Umrechnungen gibt es doch fertige Funktionen in perl? Warum wollen immer alle das Rad neu erfinden?


Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: KernSani am 19 Februar 2017, 17:51:11
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).

Titel: Antw:Zeit aus reading auslesen und in Sekunden umrechnen
Beitrag von: Habbi am 20 März 2017, 11:33:20
Hallo, wie ist es ausgegangen?