ich versuche mit den 2 Werte von SunRise und SunSet aus ProPlanta die Tageslänge zu berechnen.
Diese werden in HH:MM dargestellt.
Leider gelingt es mir nicht, diese zu wandeln und in sinnvoll Zeiten zu konvertieren, so dass ich eine Differenz berechnen kann.
so versuche ich es...
(
([[WetterProplanta:fc0_moonRise]])
)
(setreading KLIMA_Sun_Elevation X_SunRise {(time_str2num(ReadingsTimestamp("WetterProplanta","fc0_sunrise",0)))})
(setreading KLIMA_Sun_Elevation X_SunSet {(time_str2num(ReadingsTimestamp("WetterProplanta","fc0_sunset",0)))})
(setreading KLIMA_Sun_Elevation X_DayLength {([KLIMA_Sun_Elevation:X_SunSet]-[KLIMA_Sun_Elevation:X_SunRise])})
Natürlich ist ReadingTimeStamp Quatsch, das ist ja der TimeStamp... der Wert zum Bsp.: 07:35 steht im Reading
Ich bekomme es leider einfach hin zusammen...
Danke
Thomas
Moin Thomas,
bestimmt gibt es geschicktere Ansätze als meinen; aber ich denke, Du kannst die einzelnen Berechnungen leicht nachvollziehen...
Probier's mal damit:
{
my $sunRiseTimeStr = ReadingsVal("WetterProplanta", "fc0_sunRise", "00:00");
my $sunSetTimeStr = ReadingsVal("WetterProplanta", "fc0_sunSet", "00:00");
my $sunRiseDateTime = "01-01-01 " . $sunRiseTimeStr;
my $sunSetDateTime = "01-01-01 " . $sunSetTimeStr;
my $dayLengthSeconds = time_str2num($sunSetDateTime) - time_str2num($sunRiseDateTime);
my $dayLengthHours = floor($dayLengthSeconds / (60 * 60));
my $dayLengthMinutes = ($dayLengthSeconds - ($dayLengthHours * 3600)) / 60;
my $dayLengthAsTimeStr = sprintf "%02d:%02d", $dayLengthHours, $dayLengthMinutes;
}
Deine Variablen für
setreading wären dann:
- $sunRiseTimeStr
- $sunSetTimeStr
- $dayLengthAsTimeStr
Grüße,
Carsten
sub Daemmerung($$$)
{
# berechnet die Dauer zwischen 2 Uhrzeiten
# wird für ein Userreading benötigt
my($Device,$Val1,$Val2) = @_;
my @splittime = split(/:/,TU_Get_Difference( ReadingsVal($Device, $Val2, "00:15").":00",ReadingsVal($Device, $Val1, "00:00").":00") );
my $Dauer = $splittime[2] + $splittime[1]*60 + $splittime[0]*3600;
return $Dauer;
}