[Modul] OpenWeatherMap

Wäre aus meiner Sicht sinnvoll, dann würden sie zum Profil passen.

versuch mal muodul-store/beta

demel

Da scheint etwas noch nicht zu passen, die Werte holst du ab, aber sie werden nicht korrekt verarbeitet.

Im Debug folgende Zeile:

{„dt“:1608465600,„main“:{„temp“:8.22,„feels_like“:4.69,„temp_min“:8.22,„temp_max“:8.31,„pressure“:1018,„sea_level“:1018,„grnd_level“:1012,„humidity“:79,„temp_kf“:-0.09},„weather“:[{„id“:500,„main“:„Rain“,„description“:„Leichter Regen“,„icon“:„10d“}],„clouds“:{„all“:59},„wind“:{„speed“:3.38,„deg“:185},„visibility“:10000,„pop“:0.5,„rain“:{„3h“:0.13},„sys“:{„pod“:„d“},„dt_txt“:„2020-12-20 12:00:00“}

die hier ist „pop“:0.5.

Aber im symcon

Außerdem wäre es vielleicht interessant dein Modul umzubauen, es gibt seit einiger Zeit die One Call API, die auch über den freien Zugang deutlich bessere Daten bereitstellt:

[ol]
[li] Current weather[/li][li] Minute forecast for 1 hour[/li][li] Hourly forecast for 48 hours[/li][li] Daily forecast for 7 days[/li][li] National weather alerts[/li][li] Historical weather data for the previous 5 days[/li][/ol]

  1. ist die Regenvorhersage für die nächsten 60 Minuten :slight_smile:
  2. liefert vergleichbare Vorhersagewerte wie bisher, aber in 1 Stunden Auflösung :cool:

Der Umstellungsaufwand wäre wahrscheinlich nicht soooo hoooch :D.

Auch in den 3-Stunden Daten gibt es inzwischen „Gefühlte Temperatur“ (feels_like) und UV Index (uvi) ;).

Außerdem gibt es seit 27.11.2020 Werte zur Luftverschmutzung (Air Quality Index and CO, NO, NO2, O3, SO2, NH3, PM2.5, PM10), auch als Vorhersage Air Pollution.

am einfachsten wird vermutlich sein, denn Du mir ein Debug schickst mit einen kompletten Abruf.

demel

:slight_smile: in 4 Minuten als PM

Update:
Mail ist raus, der Anhang ist für eine PM zu groß.

Danke, mit der letzten Beta sieht es sehr gut aus und passt jetzt auch zu den angedrohten mm Regenmenge :D.

Hi zusammen, da ich zwar recht eindeutige Debug Fehler bekomme, jedoch keine Idee habe an welche Stelle ich noch was tun kann, frage ich mal hier.

Angemeldet und das Modul installiert, soweit so gut. Sowohl den Standard als auch einen selbst genierten API Key eingetragen und sowohl mit gefüllten als auch ohne Koordinaten (dadurch aus Location) keinen Erfolg gehabt.

Immer einen Http Fehler der auf den API Key hinweist. Dauert es evtl. ein wenig nach Anmeldung oder geht das sofort?

Ein kurzer Tipp wäre super, besten Dank vorab!

An sich geht das sofort. Es ist aber abhängig davon was Du für einen API Key hast bzw. welche Berechtigungen was Du genau machen kannst.

Ich würde als mögliche Fehlerquelle darauf tippen das einfach zu häufig Anfragen generiert werden bzw. dazu die falsche API Anfrage benutzt wird.

Wenn Du den Wetter Forcast abfragst und das mit einem normalen API Key machst sollte die One Call API benutzt werden
https://openweathermap.org/api/one-call-api
das reduziert die Anzahl der Aufrufe erheblich.

Vielleicht kann das ja im Modul angepasst werden.

Was bekommst Du denn als Response wenn Du das mit einem Skript abfragst?

// Get location ID
// https://openweathermap.org/find
$locationID = '1234567';
$key_owm = 'XXXXXXXXXX';

$weather_now = GetCurrentWeather($locationID, $key_owm);
var_dump($weather_now);

function GetCurrentWeather($locationID, $key_owm)
{
    $content = Sys_GetURLContent("http://api.openweathermap.org/data/2.5/weather?id=$locationID&lang=en&mode=json&units=metric&APPID=$key_owm");
    $weather_now = json_decode($content);
    // var_dump($weather_now);
    // var_export($weather_now);    
    return $weather_now;
}

ich hatte das von 3 Montane schon mal angeschaut, als @ralf gefragt hatte. Meiner Erinnerung nach … so einfach ist es nicht, da die Daten nicht deckungsgleich sind. Ich müsste dann diese Daten zusätzlich als Variablen anlegen. Ich weis nicht mehr genau, aber da hat mich Ewas davon abgehalten, da spontan drauf zu springen,

nein, das wäre ein Error 429 (Frequently Asked Questions - OpenWeatherMap)

Error 401 bedeutet das entweder die falschen API’s mit den Key verknüpft sind oder der API-Key noch nicht aktiv ist (Frequently Asked Questions - OpenWeatherMap)

die URL wird ja von der API als Meldung zurück geliefert.

demel

Ohje peinlich, war gestern Nacht wohl zu spät und es hat sich beim Kopieren des API Keys am Ende ein Fehler eingeschlichen.
Klappt nun wunderbar und bringt mir die Außentemperatur auf meinen KNX Bus, super :slight_smile:

Gibt es keine Möglichkeit die Ansicht vertikal zu scrollen um die folgende Tage in der Vorschau zu betrachten?

Hallo, bei mir sieht die Tabelle etwas zusammengeschoben aus.
D.h. bei Wind, Regen und Bewölkung benötige ich zwei Zeilen da die Spaltenbreite vermutlich zu schmal ist.
Screenshot 2021-08-22 112922
Wie und wo bekomme ich eine breitere Spaltenbreite damit diese drei Werte in einer Zeile dargestellt werden können?

Viele Grüße, Yansop.

es gibt keine Einstellungsmögliuchkeiten, die Funktion war seinerzeit gedacht für eine einfache Vorlage und ich habe es nicht so mit HTML-Darstellungen.

Daher habe ich die einfach Möglichkeit geschaffen, diese Box über ein eigenes Custom-Script zu füllen, das gibst Du in der Konfiguration an.
Diesem Script wird die InstanceID übergeben und mit diese InstanceID kannst Du dann mit der Funktion *OpenWeatherData_GetRawData() die Daten holen, entweder Current oder *HourlyForecast (siehe README.md).
Die Daten habe ich nicht im Detail beschrieben, das ist die Originatstruktur, wie sie von OpenWeather kommt.
Oder du greifst einfach auf die Variablen der Instanz zu. Als Vorlage kannst Du die eingebaute Funktion des Moduls heranziehen (Build_WeatherSummary()) - die kann man natürlich nicht 1:1 nehmen, sondern die Modul-typischen Aufrufen, z.B.

$temperature = $this->GetValue('Temperature');

ersetzen z.B. durch

$temperature = GetValueFloat(IPS_GetObjectIDByIdent('Temperature', $_IPS['InstanceID']));

Der aufgebaute HTML-Script muss dann ja mit echo zurückgeliefert werden und wird dann die die String-Variable mit ¯HTMLBox WeatherSummary geschrieben.

demel

Vielen Dank.
Was ich bisher herausfinden konnte ist, das es wohl ein Problem mit folgender Codezeile zu tun hat:

          <tr>
            <td>Ø Wind</td>
            <td>' . $wind_speed . ' km/h<td>
          </tr>

Das Leerzeichen vor km/h verursacht einen Zeilenumbruch, deshalb habe ich die Zeile folgend abgeändert und funktioniert:

          <tr>
            <td>Ø Wind</td>
            <td>' . $wind_speed . '&nbsp;km/h<td>
          </tr>

Das &nbsp; erzwingt ein Leerzeichen ohne Zeilenumbruch!

Hallo nochmals,
da das vorherige Problem mit der Darstellung gelöst wurde gleich die nächste Frage:

Wie kann das Icon des aktuellen Wetters separat in einer anderen String-Variable mit HTML-Box-Profil gespeichert werden??

Komme nicht auf einen Lösungsansatz und würde mich über Hinweise freuen!
Mfg. Yansop.

siehe die genannte Funktion:

   private function Build_WeatherSummary()
    {
        $img_url = 'http://openweathermap.org/img/w/';
....

        $icon = $this->GetValue('ConditionIcon');

      <img src="' . $img_url . $icon . '.png" style="float: left; padding-left: 17px;">';
...
        for ($i = 0; $i < $hourly_forecast_count; $i++) {
            $pre = 'HourlyForecast';
            $post = '_' . sprintf('%02d', $i);

            $icon = $this->GetValue($pre . 'ConditionIcon' . $post);
...

Vielen Dank, das wird eher schwer für mich :dizzy_face:

<?php
   private function Build_WeatherSummary()
    {
        $img_url = 'http://openweathermap.org/img/w/';

        $icon = $this->GetValue('ConditionIcon');

    }
      <img src="' . $img_url . $icon . '.png" style="float: left; padding-left: 17px;">';

        for ($i = 0; $i < $hourly_forecast_count; $i++) {
            $pre = 'HourlyForecast';
            $post = '_' . sprintf('%02d', $i);

            $icon = $this->GetValue($pre . 'ConditionIcon' . $post);

Die zweite Eckklammer habe ich ergänzt da diese fehlte, aber ich erhalte bereits in der zweiten Zeile einen Fehler:

Parse error: syntax error, unexpected 'private' (T_PRIVATE) in /mnt/data/symcon/scripts/36774.ips.php on line 2

das war auch kein fertiger Code, den du direkt verwenden kannst, sondern nur der Hinweis, wie du an die Icons kommst.
Und ausgegebene wird das mit einem HTML-img-Tag mit der URL als src.

demel

Hallo,

ich teste gerade das Modul und bin mir nicht sicher wie ich mein „Problem“ damit lösen kann. Ich möchte etwas anhand der zu erwartenden Tageshöchsttemperatur bzw der Tiefsttemperatur in der Nacht für heute und morgen ggf übermorgen steuern. Die 3h Vorcasts sind ja jeweils in eigenen Variablen, wie bokomme ich da das Min/Max raus???

Viele dank vorab.
Viele Grüße
Rolf

die min/max-Werte bekommst du zZt nur, indem du die entsprechenden 3h-Forecast-Werte heranziehst - es gibt ja in jedem Block eine Timstamp, der den Beginn des 3h-Blocks enthält.
Ich bin @KaiS schon lange die Integration der One Call Api (One Call API: weather data for any geographical coordinate - OpenWeatherMap) in das Modul schuldig und da gibt es u.a. auch tägliche Werte.

Vielleicht schaffe ich es ja heute, mich dem zu widmen …

demel

Nachtrag: ich habe gerade die erste Version der OneCall-API in den Modulstore/Beta eingestellt.
ist ein neuer Typ OpenWeatherOneCall innerhalb des des Moduls OpenWeatherMap

Es funktioniert so weit, ich werde allerdings noch etwas daran arbeiten, die zu übernehmenden Variablen aus den Vorhersagen differenzierte selektieren zu können. Es sind, wenn man alles ausreizt (60 Minuten + 48 Stunden + 7 Tage Vorhersage) schon echt viele Werte …

Die Idents der Variablen werden sich nicht mehr ändern, aber vermutlich werden bei dieser Umstellung Variablen gelöscht …

demel

1 „Gefällt mir“