59_Weather, DarkSky und OpenWeatherMap API Bugfixes

Begonnen von CoolTux, 13 Januar 2019, 21:22:31

Vorheriges Thema - Nächstes Thema

CoolTux

Ich habe eben auf einem frisch installierten und upgedateten System genau Deine definition genommen. Hat funktioniert.
Daher meine Fragen
Wann hast Du ein Update gemacht?
Hast Du das gesamte FHEM geupdatet?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

babbeldoo

öööhmmm, schon eine Weilte her. Ich bin nicht so der Update-König solange alles läuft....
Deine Nachfrage suggeriert mir aber, ich sollte das in diesem Fall tun, um das Weather-Modul ans Laufen zu bekommen?

CoolTux

Naja die Fehlermeldung war ja eindeutig. Wundert mich das er überhaupt Deine Definition angenommen hat.

Aber um es kurz zu machen. Ja bitte Update machen. Und zwar ein komplettes! Also alle Module, nicht selektieren. Scheint wohl so eine neue Mode zu sein, daher sage ich es lieber gleich.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

holle75

#213
Hallo Ihr, könnte man wohl im html widget Wind/Hum für alle Tage anzeigen? Jedenfalls bei mir wird nur für aktuell ein Wert generiert. Max Wind Gust wäre auch eine sehr hilfreiche, spannende Größe (denn eigentlich interessiert ja das Max und nicht der Wind ansonsten?).
Wenn ich es richtig sehe, werden 7 Tage abgefragt? Warum zeigen wir nur 5 als Vorhersage an?

Ansonsten hatte ich mich mal manuell an die DarkSkyApi über HTTPMOD gewagt. Das geht gut, aber so im Modul natürlich wesentlich hübscher. Danke an euch dafür.
Ich bin dann auch ein wenig mit der Darstellung als SVG Plot, ähnlich Proplanta damals, weiter gekommen, aber gerade ein wenig draußen, da fhem als Remoteinstallation 3 Monate nicht lief und ich physisch den Raspi nicht neu starten konnte.

Trotzdem möchte ich das gerne hier als Denkanreiz verewigen.

99_myUtils.pm

############## hdm DarkSky Wetter Plot funktion ##################################
sub logProxy_DarkSky2Plot($$$$;$$) {
my ($device, $fcValue, $from, $to, $fcHour, $expMode) = @_;
    my $regex;
    my @rl;
   
return undef if(!$device);
if ($fcValue =~ s/_$//)
{
$regex = "^hourly_data_[\\d]+_".$fcValue."\$";
}   
    $fcHour = 12 if(!defined $fcHour);
    $expMode = "point" if(!defined $expMode);
#Log3 undef,2, "regex: ".$regex;
if( defined($defs{$device}) ) {
if( $defs{$device}{TYPE} eq "HTTPMOD" ) {
            @rl = sort{
                my ($an) = ($a =~ m/hourly_data_(\d+)_.*/);
                my ($bn) = ($b =~ m/hourly_data_(\d+)_.*/);
                $an <=> $bn or $a cmp $b;
                }( grep /${regex}/,keys %{$defs{$device}{READINGS}} );
return undef if( !@rl );
} else {
Log3 undef, 2, "logProxy_DarkSky2Plot: $device is not a HTTPMOD device";
return undef;
}
}
#Log3 undef,2, Dumper(@rl);
my $fromsec = SVG_time_to_sec($from);
my $tosec   = SVG_time_to_sec($to);
my $sec = $fromsec;
my ($h,$hdmsec,$hdmmin,$hdmhour,$hdmmday,$hdmmon,$hdmyear,$hdmwday,$hdmyday,$hdmisdst);
my $timestamp;
   
my $reading;
my $value;
my $prev_value;
my $min = 999999;
my $max = -999999;
my $ret = "";

# while not end of plot range reached
while(($sec < $tosec) && @rl) {
#remember previous value for start of plot range
$prev_value = $value;

$reading = shift @rl;
        ($h) = $reading =~ m/^hourly_data_(\d+).*/;
$value = ReadingsVal($device,$reading,undef);


# scale cloudCover up to 100%
if ($fcValue =~ /^cloudCover$/)
{
$value = $value * 100;
}

# scale precipProbability up to 100%
if ($fcValue =~ /^precipProbability$/)
{
$value = $value * 100;
}


       
($hdmsec, $hdmmin, $hdmhour, $hdmmday, $hdmmon, $hdmyear, $hdmwday, $hdmyday, $hdmisdst) = localtime(ReadingsVal($device, "hourly_data_".$h."_time",undef));

# necessary conversion of $mon and $year
$hdmmon += 1;
$hdmyear += 1900;
   
$timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $hdmyear, $hdmmon, $hdmmday, $hdmhour, $hdmmin, $hdmsec);
#Log3 undef,2, "timestamp: ".$timestamp;
$sec = SVG_time_to_sec($timestamp);
       
# skip all values before start of plot range
next if( SVG_time_to_sec($timestamp) < $fromsec );

# add first value at start of plot range
if( !$ret && $prev_value ) {
$min = $prev_value if( $prev_value < $min );
$max = $prev_value if( $prev_value > $max );
$ret .= "$from $prev_value\n";
}

# done if after end of plot range
last if($sec > $tosec);

$min = $value if( $value < $min );
$max = $value if( $value > $max );

# add actual controll point
$ret .= "$timestamp $value\n";

#Log 3, "$timestamp $value -0- $reading";
}
    if(($sec < $tosec) && !@rl && ($expMode eq "day")) {
    $timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $hdmyear, $hdmmon, $hdmmday, 23, 59, 59);
    if(SVG_time_to_sec($timestamp) < $tosec) {
        $ret .= "$timestamp $value\n";
        }
        else {
$ret .= "$to $value\n";
        }
    }
    elsif(($sec > $tosec) && ($expMode eq "day")) {
        $value = $prev_value + ($value - $prev_value)*(86400 + ($tosec - $sec))/86400;
        $ret .= "$to $value\n";
    }
return ($ret,$min,$max,$prev_value);
}
############## end hdm DarkSky Wetter Plot funktion ##################################


Sicherlich passen die Definitionen jetzt auf das Modul nicht, aber die Basis, abgeleitet von der Proplanta Function, gibt Ergebnisse. Wie richtig die sind, konnte ich leider noch nicht genauer überprüfen.

Der Plot dazu
# Created by FHEM/98_SVG.pm, 2018-12-27 17:44:22
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Regen / Regenwahrscheinlichkeit / Wolken'
set ytics
set y2tics
set grid y2tics
set ylabel "Regen / UV"
set y2label "Wolken / Regenw / Sonne"

#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","precipIntensity_",$from,$to,0,"day")
#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","precipProbability_",$from,$to,0,"day")
#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","cloudCover_",$from,$to,0,"day")
#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","uvIndex_",$from,$to,0,"day")
#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","windSpeed_",$from,$to,0,"day")
#LogproxyWetterProplanta Func:logProxy_DarkSky2Plot("WetterDarkSky","windGust_",$from,$to,0,"day")
#LogproxyWetterProplanta ConstX:TimeNow(),0,100

plot "<IN>" using 1:2 axes x1y1 title 'Regen (mm)' ls l2fill lw 0.5 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'Regenwahrscheinlichkeit (%)' ls l5fill lw 0.5 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'Wolkenbedeckung (%)' ls l6fill lw 0.5 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y1 title 'UV (1-12)' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Wind (km/h)' ls l1 lw 2 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 title 'Boen (km/h)' ls l3 lw 2 with quadraticSmooth,\
     "<IN>" using 1:2 axes x1y2 notitle ls l5 lw 4 with lines


Denke, mit kleinen Modifikationen sollte das aufs Modul übertragbar sein.

Anhänge wie es aussieht (html widget mit fehlenden Werten und DarkSky als Plot)

Edit: wahnsinnig schade finde ich ja, dass DarkSky keine Sonnenstunden als Wert übergibt. Jemand eine Idee, wie man diese berechnen könnte ... resp. wie die Meteorologen das machen ;)


CoolTux

Wettervorhersage ist so schön Glaskugelschupsen und da willst Du wirklich noch Luftfeuchte und Wind für 7 Tage im Voraus? Nicht wirklich. Ich jedenfalls sehe da keinen Sinn.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

babbeldoo

Danke für die Unterstützung! Hat funktioniert.

holle75

:) ... ja klar, wobei es für Menschen die nicht gemütlich in einer Stadt sitzen schon recht spannend sein kann, ob morgen oder übermorgen die Bäume um dich herum gefährdet sind. Oder für Menschen die Ausflüge oder Aktivitäten Outdoor planen. So ab Gusts > 50 km/h wirds bißchen anstrengend zu wandern oder Windsurfen (für mich alten Mann) zu gehen.

.... und da der Platz ja sowieso okkupiert ist, warum nicht einen Wert reinschreiben?

Glaskugelschubsen ist es ... aber ich habe hier über DarkSky, wie auch früher über Proplanta, eine Akkuratheit von geschätzten 90%.

Und ja, Hum ist wirklich unwichtig. Aber da es auch bei aktuell den Space vorgibt ...

Und ja, klar kann man nur 5 Tage anzeigen obschon es Daten für 7 hat ...

CoolTux

Davon aber mal ab, sorry vergessen zu sagen. DarkskyAPI ist nur Lieferant. Die eigentliche Darstellung macht 59_Weather. Da müsste bitte mal den Boris nett Fragen oder wenn Du magst einen Patch auf GitHub anbieten.

https://github.com/fhem/Weather
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

holle75

#218
Ah, ok, hatte noch nicht geschaut. Dachte das wär hier mit drin. Sorry

Edit: mit "hier mit drin" meinte ich in diesem Thread :D

holle75

@CoolTux, hätte eine Bitte. Hoffe, dass die API die richtige Fragestelle ist ;)

Irgendwo wird das von DarkSky gelieferte "_time" in "_pubDate" gewandelt und ausgeliefert. Damit ich meinen Plot fertig bekomme, und Perl eher Codekopieren statt verstehen bei mir ist, die Frage, wie ich _pubDate in ein logProxy verständliches Format bekomme. Zb -> 2010-05-22 13:43:17

_pubDate bekomme ich mit meinem Wissensstand nicht formatiert. Bei original DarkSky hatte ich bisher $timestamp mit _time generiert:

($hdmsec, $hdmmin, $hdmhour, $hdmmday, $hdmmon, $hdmyear, $hdmwday, $hdmyday, $hdmisdst) = localtime(ReadingsVal($device, "hfc".$h."_time",undef));

# necessary conversion of $mon and $year
$hdmmon += 1;
$hdmyear += 1900;
   
$timestamp = sprintf("%04d-%02d-%02d_%02d:%02d:%02d", $hdmyear, $hdmmon, $hdmmday, $hdmhour, $hdmmin, $hdmsec);


oder ihr liefert als ExtraWert _time wieder mit? Wobei ich nicht weiß, ob andere etwas davon hätten.

Danke und Gruß
H.

SABINEMUELLER

Hallo Zusammen,

ich habe auch das Problem mit der WEB-Anzeige.

"city     Mu�" und " pubDate      Di, 12 Mär 2019 17:43"

Getestet habe ich die Anzeige auf einem PC (Debian 8.0) auf einem Laptop (Debian 9.0) und auf einem Smartphone (Android 6).
Sowohl mit Firefox wie auch mit Konqueror.
Auf dem Raspberry PI (FHEM Server) habe ich die WEB Anzeige mit Epiphany kontrolliert.
Alle Systeme zeigen mir das gleiche fehlerhafte  Datum/Ort an.

Die locale Einstellungen habe ich nach den Anleitungen hier im Forum schon überprüft und keine Auffälligkeiten festgestellt.

Komplettes FHEM Update habe ich am 09.03.2019 gemacht. Auf dem Raspberry PI läuft Jessie mit aktuellem Update.

Wirken die Forcast und ForcastLimit Einstellungen auf bei Openweathermap? Wenn JA, wie sind die Einzustellen?

Ist es möglich die 7 Tage Anzeige im WEBLINK über die Uhrzeit bei Openweathermap auszuwählen?

Gruß
SM



Omega-5

Zitat"city     Mu�" und " pubDate      Di, 12 Mär 2019 17:43"

@CoolTux

Das gab es doch schon mal vor ca. einem Jahr in FB_calllist. https://forum.fhem.de/index.php/topic,85132.msg774801.html#msg774801
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),

CoolTux

Danke für den Link, das hat geholfen es zu verstehen

Alle die DarkSky verwenden und testen wollen hier mal eine Version mit fix
https://raw.githubusercontent.com/fhem/Weather/utf8fix/DarkSkyAPI.pm
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Omega-5

Zitat von: CoolTux am 14 März 2019, 14:38:05
Alle die DarkSky verwenden und testen wollen hier mal eine Version mit fix
https://raw.githubusercontent.com/fhem/Weather/utf8fix/DarkSkyAPI.pm

O.K. der Würg... klappt.  ;)

fc1_pubDate Do, 14 Mär 2019 00:00

LG Friedrich
RaspberryPi2, nanoCUL, 3x DS18B20, FS20: 4x Funk-Schalter ST-4, LaCrosseGW,
HomeMatic: HMLAN, HM-WDS10-TH-O, HM_MYS_RelaisBoard,
I2C: HYT221 über modifiziertes Modul I2_I2C_SHT21.pm (Q&D),

CoolTux

Zitat von: SABINEMUELLER am 12 März 2019, 18:39:37
Hallo Zusammen,

ich habe auch das Problem mit der WEB-Anzeige.

"city     Mu�" und " pubDate      Di, 12 Mär 2019 17:43"

Getestet habe ich die Anzeige auf einem PC (Debian 8.0) auf einem Laptop (Debian 9.0) und auf einem Smartphone (Android 6).
Sowohl mit Firefox wie auch mit Konqueror.
Auf dem Raspberry PI (FHEM Server) habe ich die WEB Anzeige mit Epiphany kontrolliert.
Alle Systeme zeigen mir das gleiche fehlerhafte  Datum/Ort an.

Die locale Einstellungen habe ich nach den Anleitungen hier im Forum schon überprüft und keine Auffälligkeiten festgestellt.

Komplettes FHEM Update habe ich am 09.03.2019 gemacht. Auf dem Raspberry PI läuft Jessie mit aktuellem Update.

Wirken die Forcast und ForcastLimit Einstellungen auf bei Openweathermap? Wenn JA, wie sind die Einzustellen?

Ist es möglich die 7 Tage Anzeige im WEBLINK über die Uhrzeit bei Openweathermap auszuwählen?

Gruß
SM

Sabine würdest Du bitte auch testen? Habe OpenWeatherMap ebenfalls angepasst.
https://raw.githubusercontent.com/fhem/Weather/utf8fix/OpenWeatherMapAPI.pm
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net