FHEM Forum

FHEM - Hausautomations-Systeme => Unterstützende Dienste => Wettermodule => Thema gestartet von: Christian Uhlmann am 17 April 2016, 22:37:26

Titel: [Twilight] - userReadings basiernd auf ss [gelöst]
Beitrag von: Christian Uhlmann am 17 April 2016, 22:37:26
Hallo zusammen,

ich möchte gerne ein eigenes Reading haben, welches den Inhalt von "ss" + 15 Minuten enthält.
Dafür habe ich folgendes Code verwendet, es kommt aber zu einem Fehler:

userReadings:
ss_individual { ReadingsVal("SYS.twilight","ss",0)+00:15:00;; }

Fehler:
Error evaluating SYS.twilight userReading ss_individual: syntax error at (eval 68877) line 1, near "00:"

Das ganze liegt vermutlich an meine geringen Perl Kentnissen bzw. der Unkentniss, wie ich zu dem Readings "ss" (welches Format ist das intern?) 15 Minuten hinzuzählen kann.
Habe auch schon mit time_str2num  experimentiert, aber zu keinem brauchbaren Ergebnis gekommen.

Kann mir da jemand weiterhelfen?


Danke und Grüße

Christian
Titel: Antw:[Twilight] - userReadings basiernd auf ss
Beitrag von: Hans Franz am 18 April 2016, 01:24:59
ss_individual {
my ($h,$m,$s) = split(/:/,ReadingsVal("SYS.twilight","ss",""));
my ($mdate,undef) = split(/ /,ReadingsTimestamp("SYS.twilight","ss",""));
my ($y,$mo,$d) = split(/-/,$mdate);
my $d = DateTime->new(year=>$y, month=>$mo, day=>$d, hour=>$h, minute=>$m);
$d->add(minutes => 15);
return $d->hour.":".$d->minute}


Gibt bestimmt aber auch noch andere Möglichkeiten.

Gruß
Hans

Edit:
Falsche Berechnung korrigiert.
Titel: Antw:[Twilight] - userReadings basiernd auf ss
Beitrag von: Christian Uhlmann am 20 April 2016, 21:43:34
Hallo Hans,

danke für die Hilfestellung, es klappt :).

Für alle, es kamen zwei Fehler, die ich wie folgt behoben habe:

Mein Userreading sieht aber nun wie folgt aus, damit auch die Sekunden verwendet werden (und es sind doch nur 10 Minuten :)):
ss_individual {
my ($h,$m,$s) = split(/:/,ReadingsVal("SYS.twilight","ss",""));
my ($mdate,undef) = split(/ /,ReadingsTimestamp("SYS.twilight","ss",""));
my ($y,$mo,$d) = split(/-/,$mdate);
my $d = DateTime->new(year=>$y, month=>$mo, day=>$d, hour=>$h, minute=>$m + 10);
return $d->hour.":".$d->minute.":".$s}



Vielen Dank und Grüße

Christian