Modul für Weather Underground / Wunderground

Begonnen von Loredo, 26 Oktober 2016, 01:31:36

Vorheriges Thema - Nächstes Thema

Loredo

Zitat von: Markus. am 10 Januar 2017, 10:18:13
Aber UV index und so wird doch abgefragt oder nicht?
Ist denn irgendwoeine Aufstellung zu finden, was genau alles an Daten zur Verfügung steht bei diesem Modul?


Es werden alle Werte ausgewertet, die Weather Underground für eine Messstation liefern kann. Aber nicht jede Station liefert UV Werte.
Welche Werte eine Station anbietet, sieht man ja auf den Seiten von Weather Underground.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

hartenthaler

Zitat von: jnewton957 am 03 Januar 2017, 07:45:59
...
In der readinggroup bekomme ich die Symbole nicht angezeigt.
Habe diese wie beschriben aus der webseite geholt und auch die Nachticons mit nt_ versehen in www/images/wunderground/black/svg kopiert

in der fhem.cfig habe ich :
attr WEB iconPath fhemSVG:openautomation:default:icons_small:weather:tvmovie:wunderground

attr rg_WUweather valueIcon { 'fc0_icon' => 'http://icons.wxug.com/i/c/k/%VALUE.gif' , 'fc1_icon' => '/opt/fhem/www/images/wunderground/%VALUE' , 'fc2_icon' => 'wunderground/%VALUE' , 'fc3_icon' => '/opt/fhem/www/images/wunderground/%VALUE.svg' , 'fc0_icon_night' => 'wunderground/black/svg/%VALUE.svg' , 'fc1_icon_night' => 'opt/fhem/www/images/wunderground/black/svg/%VALUE.svg' , 'fc2_icon_night' => '/images/wunderground/black/svg/%VALUE.svg' , 'fc3_icon_night' => '/opt/fhem/www/images/wunderground/black/svg/%VALUE' }

Egal welche Kombination - ich bekomme keine Anzeige der Incons.
...
Ich verwende als Attribut valueIcon in der readingsGroup die lokalen Icons, also nicht die ...icon_url...:
{ 'fc0_icon' => 'wunderground/black/svg/%VALUE' , 'fc1_icon' => 'wunderground/black/svg/%VALUE' , 'fc2_icon' => 'wunderground/black/svg/%VALUE' , 'fc3_icon' => 'wunderground/black/svg/%VALUE' , 'fc0_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc1_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc2_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc3_icon_night' => 'wunderground/black/svg/%VALUE' }
Liegen Deine Icons alle im richtigen Verzeichnis (bei mir ist das /opt/fhem/www/images/default/wunderground/black/svg also bei mir mit "default" zwischen images und wunderground) und sind die Dateirechte richtig gesetzt (also gehören alle Icons dem User fhem)? Wurde fhem einmal neu gestartet, damit alle Icons frisch eingelesen werden?

Wenn ich Deinen Icon-Path richtig interpretiere (ich habe bei mir keinen speziellen gesetzt), dann müsste bei Dir black/svg/%VALUE im Attribut valueIcon funktionieren (eine Variante, die bei Deinen Varianten noch nicht dabei war). Probier das mal. Ansonsten schicke mir mal die komplette Definition Deiner readingsGroup als persönliche Nachricht.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Loredo

Wenn sich dabei eine allgemein gute readingsGroup als Ausgangspunkt für die Allgemeinheit ergibt, dann nehme ich die gerne mit ins Modul auf, so dass man sich die mit einem einfachen Befehl fix erstellen kann.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

hartenthaler

Zitat von: Loredo am 13 Januar 2017, 16:27:28
Wenn sich dabei eine allgemein gute readingsGroup als Ausgangspunkt für die Allgemeinheit ergibt, dann nehme ich die gerne mit ins Modul auf, so dass man sich die mit einem einfachen Befehl fix erstellen kann.
Ich verwende als readingsGroup

define rg_WUweather readingsGroup WUweather:<>,fc0_title,fc0_title_night,fc1_title,fc1_title_night,fc2_title,fc2_title_night,fc3_title,fc3_title_night\
WUweather:<>,fc0_icon,fc0_icon_night,fc1_icon,fc1_icon_night,fc2_icon,fc2_icon_night,fc3_icon,fc3_icon_night\
WUweather:<>,fc0_condition,fc1_condition,fc2_condition,fc3_condition \
WUweather:<Vorhersage>,fc0_text,fc0_text_night,fc1_text,fc1_text_night,fc2_text,fc2_text_night,fc3_text,fc3_text_night\
WUweather:<Regenwahrscheinlichkeit/-menge>,fc0_pop,fc0_pop_night,fc1_pop,fc1_pop_night,fc2_pop,fc2_pop_night,fc3_pop,fc3_pop_night\
WUweather:<Schnee>,fc0_snow_day,fc0_snow_night,fc1_snow_day,fc1_snow_night,fc2_snow_day,fc2_snow_night,fc3_snow_day,fc3_snow_night\
WUweather:<Temperatur&nbsp;;min|max>,fc0_low_c,fc1_low_c,fc2_low_c,fc3_low_c\
WUweather:<rel.&nbsp;;Luftfeuchtigkeit>,fc0_humidity,fc1_humidity,fc2_humidity,fc3_humidity\
WUweather:<Wind&nbsp;;(Böen)>,fc0_wind_speed,fc1_wind_speed,fc2_wind_speed,fc3_wind_speed
attr rg_WUweather group Wettervorhersage
attr rg_WUweather nonames 1
attr rg_WUweather nostate 1
attr rg_WUweather room Wetter
attr rg_WUweather sortby 51
attr rg_WUweather style style="border:0px;;background:none;;box-shadow:none"
attr rg_WUweather valueColumns { 'fc0_condition' => 'colspan="2"', 'fc1_condition' => 'colspan="2"', 'fc2_condition' => 'colspan="2"', 'fc3_condition' => 'colspan="2"', 'fc0_low_c' => 'colspan="2"', 'fc1_low_c' => 'colspan="2"', 'fc2_low_c' => 'colspan="2"', 'fc3_low_c' => 'colspan="2"', 'fc0_humidity' => 'colspan="2"', 'fc1_humidity' => 'colspan="2"', 'fc2_humidity' => 'colspan="2"', 'fc3_humidity' => 'colspan="2"', 'fc0_wind_speed' => 'colspan="2"', 'fc1_wind_speed' => 'colspan="2"', 'fc2_wind_speed' => 'colspan="2"', 'fc3_wind_speed' => 'colspan="2"' }
attr rg_WUweather valueFormat {\
fc0_low_c => "{'$VALUE °C | ' . ReadingsVal('WUweather','fc0_high_c',0) .  ' °C'}" , fc1_low_c => "{'$VALUE °C | ' . ReadingsVal('WUweather','fc1_high_c',0) .  ' °C'}" , fc2_low_c => "{'$VALUE °C | ' . ReadingsVal('WUweather','fc2_high_c',0) .  ' °C'}" , fc3_low_c => "{'$VALUE °C | ' . ReadingsVal('WUweather','fc3_high_c',0) .  ' °C'}" ,\
fc0_humidity => '%.0f %%' , fc1_humidity => '%.0f %%' , fc2_humidity => '%.0f %%' , fc3_humidity => '%.0f %%' ,\
fc0_wind_speed => "{'$VALUE km/h (' . ReadingsVal('WUweather','fc0_wind_speed_max','') . ' km/h) ' . grad2himmelsrichtung(ReadingsVal('WUweather','fc0_wind_direction',''))}" , fc1_wind_speed => "{'$VALUE km/h (' . ReadingsVal('WUweather','fc1_wind_speed_max','') . ' km/h) ' . grad2himmelsrichtung(ReadingsVal('WUweather','fc1_wind_direction',''))}" , fc2_wind_speed => "{'$VALUE km/h (' . ReadingsVal('WUweather','fc2_wind_speed_max','') . ' km/h) ' . grad2himmelsrichtung(ReadingsVal('WUweather','fc2_wind_direction',''))}" , fc3_wind_speed => "{'$VALUE km/h (' . ReadingsVal('WUweather','fc3_wind_speed_max','') . ' km/h) ' . grad2himmelsrichtung(ReadingsVal('WUweather','fc3_wind_direction',''))}" , \
fc0_pop => "{'$VALUE % | ' . ReadingsVal('WUweather','fc0_rain_day','') . ' mm'}" , fc0_pop_night => "{'$VALUE % | ' . ReadingsVal('WUweather','fc0_rain_night','') . ' mm'}" , fc1_pop => "{'$VALUE % | ' . ReadingsVal('WUweather','fc1_rain_day','') . ' mm'}" , fc1_pop_night => "{'$VALUE % | ' . ReadingsVal('WUweather','fc1_rain_night','') . ' mm'}"  , fc2_pop => "{'$VALUE % | ' . ReadingsVal('WUweather','fc2_rain_day','') . ' mm'}" , fc2_pop_night => "{'$VALUE % | ' . ReadingsVal('WUweather','fc2_rain_night','') . ' mm'}"  , fc3_pop => "{'$VALUE % | ' . ReadingsVal('WUweather','fc3_rain_day','') . ' mm'}" , fc3_pop_night => "{'$VALUE % | ' . ReadingsVal('WUweather','fc3_rain_night','') . ' mm'}" ,\
fc0_snow_day => '%.0f mm' , fc0_snow_night => '%.0f mm' , fc1_snow_day => '%.0f mm' , fc1_snow_night => '%.0f mm'  , fc2_snow_day => '%.0f mm' , fc2_snow_night => '%.0f mm'  , fc3_snow_day => '%.0f mm' , fc3_snow_night => '%.0f mm' ,\
}
attr rg_WUweather valueIcon { 'fc0_icon' => 'wunderground/black/svg/%VALUE' , 'fc1_icon' => 'wunderground/black/svg/%VALUE' , 'fc2_icon' => 'wunderground/black/svg/%VALUE' , 'fc3_icon' => 'wunderground/black/svg/%VALUE' , 'fc0_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc1_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc2_icon_night' => 'wunderground/black/svg/%VALUE' , 'fc3_icon_night' => 'wunderground/black/svg/%VALUE' }
attr rg_WUweather valueStyle {return 'style="text-align:center;;font-weight:bold"' if($READING =~ m/title/);; return 'style="text-align:center"'}


Ich wollte möglichst viele Werte darstellen, aber keine zu große Tabelle erzeugen, daher mein Ansatz teilweise mehrere Werte in einer Zelle zusammen zu führen, was es aber komplexer macht. Meine private Funktion "grad2himmelsrichtung" könnte man ggf. weglassen oder durch eine Standardfunktion ersetzen.
Zitat von: hartenthaler am 21 November 2016, 18:13:34
Die Funktion grad2himmelsrichtung kommt in 99_myUtils.pm

#---------------------------------------------------------------------------
# grad2himmelsrichtung(Grad) liefert bei Grad=0 oder =360 als Ergebnis "N"; Grad sollte zwischen 0 und 360 liegen
#---------------------------------------------------------------------------
sub grad2himmelsrichtung($) {
  my ($value) = @_;
  my $hr = "N";
 
  if (!defined $value or $value == -1) { $hr = "aus undefinierter Richtung"; }
  else {
    $value = abs($value) % 360;
 
    if ($value < 22.5)      { $hr = "aus N"; }
    elsif ($value < 67.5)   { $hr = "aus NO"; }
    elsif ($value < 112.5)  { $hr = "aus O"; }
    elsif ($value < 157.5)  { $hr = "aus SO"; }
    elsif ($value < 202.5)  { $hr = "aus S"; }
    elsif ($value < 247.5)  { $hr = "aus SW"; }
    elsif ($value < 292.5)  { $hr = "aus W"; }
    elsif ($value < 337.5)  { $hr = "aus NW"; }
  }

  return $hr;
}


Bzgl. der Icons hatte ich mich für lokal abgelegte Icons entschieden.
Zitat von: hartenthaler am 21 November 2016, 18:13:34
Die Icons habe ich von https://www.npmjs.com/package/weather-underground-icons genommen, allerdings sind da keine Versionen für die Nacht dabei, deshalb habe ich einfach die Tag-Icons kopiert und diese dann einfach mit dem Vorsatz nt_ versehen.
Eigentlich müsste man spezielle Nacht-Icons erstellen oder irgendwo einen schönen Satz freier Icons finden. Was ich nicht geschafft habe ist die zentrierte Ausgabe des Wetter-Icons in der Tabelle. Anbei ein Bild wie es bei mir dann aussieht.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

Loredo

Danke! Sieht schon ganz gut aus. Ich würde bei Gelegenheit noch Unit.pm für die Anzeige der Einheiten verwenden (die Definition ist ja bereits vorhanden, nur die Anzeige fehlt).
Allerdings wäre es natürlich eigentlich wünschenswert den Support direkt in readingsGroup zu haben, um sich die ganzen %VALUE Definitionen etc. zu sparen. André hat sich Unit.pm noch nicht weiter angeschaut, würde es aber sicherlich auch begrüßen, wenn sich die teils komplexen readingsGroup Definitionen auch vereinfachen ließen (kommt Zeit, kommt Funktion...).



Bei den Icons hätte ich persönlich lieber große bunte Grafiken, die von WU sind zwar nicht verlustfrei skalierbar und auch nicht Retina-fähig, sehen aber eigentlich ok aus (es gibt sogar unterschiedliche Sätze, für die ich bisher aber kein Attribut eingebaut habe).



Deine Funktion grad2himmelsrichtung() könnte man dann einsparen, da Unit.pm automatisch von Zahlenwerten in Text (und umgekehrt) umrechnen kann und das für den Compasspoint auch schon eingebaut ist (RType=compasspoint). Alternativ gibt es in UConv.pm auch bereits eine allgemeine Funktion UConv::direction2compasspoint().
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

hotbso

Leider ist in die URL "PWS:" fest eincodiert, so dass das Modul nur für Personal Stations funktioniert. Wenn man (so wie ich) einen Flughafen in der Nähe hat, ist das auch immer eine schöne Quelle für amtliche Istwerte.
Hier muss die URL aber zB ".../q/EDDF.json" sein. Kann man das "PWS:" nicht in die Definition übernehmen ? Ich weiss, ist nicht rückwärtskompatibel aber vielleicht hat ja noch jemand eine zündende Idee. Ginge $station =~ /[A-Z]+[0-9]+/ -> PWS ?


trebron106

Hallo ,

ich habe das gleiche Problem mit  PWS bei einer Station und muss nach einem Update immer den URL ändern, könnte man das nicht über ein Attribute lösen  z.B.

PWS = 1 wie bisher mit PWS: im URL ( Default und somit abwärts kompatibel )
PWS = 0 ohne PWS: im URL

Gruß
Klaus




Loredo

Ich habe gerade eine aktualisierte Version eingecheckt, bei der sich Features über die Attribute variabel anpassen lassen.
Außerdem kann die Query-Definition nun flexibel gestaltet werden.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Benni

#98
Hallo Julian,

da bin ich wieder ;D
(feeling like a ping-pong ball)

Nachdem ich mich zusammen mit Heiko (DS_Starter) im entsprechenden DbLog-Thread (leider erfolglos) an einer ersten Analyse des Wunderground-Problems mit DbLog versucht habe und mir das ganze einfach keine Ruhe mehr gelassen hat, habe ich mich jetzt mal noch selbst mit dem DbLog-Code an der entsprechenden Stelle beschäftigt.

Das Problem ist, dass beim Abarbeiten (in DbLog) der Events, die durch das Wunderground-Modul bei einem update erzeugt werden, anscheinend 2278 Events vorliegen. Dass das auch auf relativ flotter Hardware für spürbare Verzögerungen sorgen kann ist nachvollziehbar.

DbLog holt sich die Events mittels deviceEvents vom Wunderground-Device ab. Im zurückgelieferten Array befinden sich dann tatsächlich 2278 Einträge, alle natürlich mehrfach (Deshalb auch der mehrfache Aufruf der DbLog_SplitFn).

In sofern sehe ich das Problem hier nicht beim DbLog-Modul, sondern doch eher wieder beim Wunderground-Modul.

Ich habe mir das DbLog-Modul mal soweit modifiziert, dass es direkt, nachdem es sich die Wunderground-Events mittels deviceEvents geholt hat, durch das Array laufen lasse, um alle Einträge auszugeben. Das Ergebnis findest du im Anhang.

Falls du dir das in DbLog mal selbst anschauen willst, der Entsprechende Code-Abschnitt ist in der sub DbLog_Log (irgendwo ab Zeile 725).

Sorry, falls ich lästig werden sollte, aber ich würde wirklich gerne beide Module einsetzen. :)

Gruß Benni.

Update: Was mir nach erneuter Durchsicht des von mir erzeugten Logs aufgefallen ist: Von der Doppelung sind anscheinend nur die Events zu den fc_... Readings betroffen.

Update2: Problemstelle in Wunderground gefunden -> s. Folgepost...

Benni

Hallo Julian,

ich habe mir jetzt auch noch mal dein Modul vorgenommen.  ;D
Du erzeugst diese multiplen Events für die fc_-Readings tatsächlich selbst.

Das ganze passiert in Wunderground_Hash2Readings dort werden für simpleforecast und textforecast jedes mal alle dazugehörigen Readings direkt aus dem Ergebnis-Hash geholt und direkt per readingsBulkUpdate erzeugt, obwohl in der Schleife jeder einzelne Key aber sowieso kommt ($k), d.h. für jeden Key der zu simpleforecast, bzw. txt_forecast gehört, werden jedes mal alle simpleforecast-Readings, bzw. txt_forecast-Readings erzeugt.

Ich habe bei mir das Wunderground_Modul in der entsprechenden sub (Wunderground_Hash2Readings) mal um zusätzliche Debug-Ausgaben erweitert. Das Ergebnis findest du im Anhang.

Gruß Benni.

paul79

Hallo,

ich bekomme schon länger in meiner Tablet UI ständig disconnections, jetzt habe ich endlich rausgefunden woher es kommt.

Immer wenn ich in FHEM im Modul Wunderground auf update klicke bekomme ich die Fehler siehe Anhang.

Kann man da etwas machen?

Gruß Paul

FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

Loredo

Du darfst es gerne selbst beheben.

Alternativen:
1. Consulting Stunden bei mir erwerben.
2. Abwarten.
3. Modul nicht verwenden.


Gruß

Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

paul79

Zitat von: Loredo am 13 Februar 2017, 22:56:55
Du darfst es gerne selbst beheben.

Alternativen:
1. Consulting Stunden bei mir erwerben.
2. Abwarten.
3. Modul nicht verwenden.


Gruß

Julian

habe ich dir etwas getan?
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI

Loredo

Ggf. hätte es geholfen die vorigen Posts zu lesen.


Gruß

Julian
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

paul79

ich bin kein Hellseher und weiß auch nicht ob das Obere es etwas mit mein Problem zu tun hat.

Also wähle ich die Alternative 3 und werde glücklich mit deinem Modul.

bye
FHEM5.7 auf Pi3
Busware CUL433 (IT), JeeLink Lacrosse, HM-MOD-RPI-PCB, HM, TabletUI