Wetterdaten - Wunderground API

Man sollte sich Gedanken machen, wie das ganze ablaufen soll.

Zig Aufrufe für die Katz belasten den Server des Anbieters.

Eventuell mal nachsehen inwieweit der Anbieter die Daten zur Verfügung stellt und in welchem Zeitraum.

Timer ist suboptimal.

Wie ist grundsätzlich die Funktion bei JSON? Liegen die Daten bei Wunderground automatisch bereit, oder werden diese erst durch meinen Link-Aufruf erzeugt?
Denn wenn die Daten erst durch einen Aufruf erzeugt werden, bringt es auch nichts, ein Skript zu erstellen dass auf einen vollständigen Datensatz wartet.

Hallo Zusammen,

ich nutze das Script aus dem post #96 seit ewigen Zeiten. Jetzt habe ich gestern auf IPS 5 umgestellt und bekomme eine Fehlermeldung.

Anbei mein Script

<?

// =====================================================
// Wetterinformationen abholen
// =====================================================

// Meldung für Logging vorbereiten
IPSUtils_Include ("IPSLogger.inc.php", "IPSLibrary::app::core::IPSLogger");

$Uhrzeit = date('H:i:s');
$api = "c40b98c99ddf1a45";
$ort = "Dortmund";

$timestamp = time();
$mondfase = moon_phase(date('Y', $timestamp), date('n', $timestamp), date('j', $timestamp));
	SetValue (12374 /*[Skripte\Skripte\Wetter\Wettervorhersage\Aktueller Zustand\Mondstatus_2]*/,$mondfase);

 //Start writing your scripts between the brackets
$IDEigen    = $_IPS['SELF'];
$IDParent   = IPS_GetParent ($IDEigen);
$Tag        = GetValue (23118);

// IDs heraussuchen
$IDKat0Aktuell         = IPS_GetCategoryIDByName ("Aktueller Zustand",         $IDParent);
$IDKat1Tag                 = IPS_GetCategoryIDByName ("Tag 1 Heute",                  $IDParent);
$IDKat2Tag                 = IPS_GetCategoryIDByName ("Tag 2 Morgen",             $IDParent);
$IDKat3Tag                 = IPS_GetCategoryIDByName ("Tag 3 Übermorgen",         $IDParent);

// Unwetter 
	//$json_Uw_string = file_get_contents("http://api.wunderground.com/api/$api/alerts/q/zmw:00000.1.16172.json");
	//$json_Uw_string = file_get_contents("http://api.wunderground.com/api/$api/alerts/q/$ort.json");
	//$parsed_Uw_json = json_decode($json_Uw_string);
	//print_r ($parsed_Uw_json);

// aktuelles Wetter
  $json_string = @file_get_contents("http://api.wunderground.com/api/$api/geolookup/conditions/lang:DL/q/DL/$ort.json");
  $parsed_json = json_decode($json_string);
  // $parsed_json ausgeben;
  
  
  setvalue ( IPS_GetVariableIDByName ("WetterIcon"      ,$IDKat0Aktuell), IconCheckAktuell     ($parsed_json->{'current_observation'}->{'icon'}));
  setvalue ( IPS_GetVariableIDByName ("WetterText"      ,$IDKat0Aktuell),                  $parsed_json->{'current_observation'}->{'weather'});
  setvalue ( IPS_GetVariableIDByName ("TempAktuell"      ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'temp_c'}));
  setvalue ( IPS_GetVariableIDByName ("Feuchte"          ,$IDKat0Aktuell), NurZahl        ($parsed_json->{'current_observation'}->{'relative_humidity'}));
  setvalue ( IPS_GetVariableIDByName ("WindSpeed"      ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'wind_kph'}));
  setvalue ( IPS_GetVariableIDByName ("WindRichtung"  ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'wind_degrees'}));
  setvalue ( IPS_GetVariableIDByName ("Luftdruck"      ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'pressure_mb'}));
  //setvalue ( IPS_GetVariableIDByName ("Sichtweite"      ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'visibility_km'}));
  //setvalue ( IPS_GetVariableIDByName ("UV Index"          ,$IDKat0Aktuell), NurZahl         ($parsed_json->{'current_observation'}->{'UV'}));

// Vorhersage
    $json_fc_string = @file_get_contents("http://api.wunderground.com/api/$api/forecast/lang:DL/q/Germany/$ort.json");
	if ((strpos($http_response_header[0], "200") === false)){
		// Meldung für Logging generieren
		IPSLogger_Inf("MyProcedure", "Fehler beim Laden der Wetterdaten");
	    return;
	}
    $parsed_fc_json = json_decode($json_fc_string);
    $prognose = $parsed_fc_json->{'forecast'}->{'simpleforecast'}->{'forecastday'};
	 // print_r ($prognose);
	 // print_r ($parsed_json);

//heute
  setvalue ( IPS_GetVariableIDByName ("TagBezeichnung"          ,$IDKat1Tag),                      $prognose[0]->date->weekday) ;
  setvalue ( IPS_GetVariableIDByName ("WetterIcon"              ,$IDKat1Tag), IconCheckAktuell     ($prognose[0]->icon)) ;
  setvalue ( IPS_GetVariableIDByName ("WetterBezeichnung"      ,$IDKat1Tag), utf8_decode    ($prognose[0]->conditions)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMin"                  ,$IDKat1Tag), NurZahl         ($prognose[0]->low->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMax"                  ,$IDKat1Tag), NurZahl         ($prognose[0]->high->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("WindMax"                  ,$IDKat1Tag), NurZahl         ($prognose[0]->maxwind->kph)) ;
  setvalue ( IPS_GetVariableIDByName ("Regenrisiko"          ,$IDKat1Tag),              ($prognose[0]->pop)) ;

//morgen
  setvalue ( IPS_GetVariableIDByName ("TagBezeichnung"          ,$IDKat2Tag),                      $prognose[1]->date->weekday) ;
  setvalue ( IPS_GetVariableIDByName ("WetterIcon"              ,$IDKat2Tag), IconCheck     ($prognose[1]->icon)) ;
  setvalue ( IPS_GetVariableIDByName ("WetterBezeichnung"      ,$IDKat2Tag), utf8_decode    ($prognose[1]->conditions)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMin"                  ,$IDKat2Tag), NurZahl         ($prognose[1]->low->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMax"                  ,$IDKat2Tag), NurZahl         ($prognose[1]->high->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("WindMax"                  ,$IDKat2Tag), NurZahl        ($prognose[1]->maxwind->kph)) ;
  setvalue ( IPS_GetVariableIDByName ("Regenrisiko"          ,$IDKat2Tag),          ($prognose[1]->pop)) ;

//übermorgen
  setvalue ( IPS_GetVariableIDByName ("TagBezeichnung"          ,$IDKat3Tag),                      $prognose[2]->date->weekday) ;
  setvalue ( IPS_GetVariableIDByName ("WetterIcon"              ,$IDKat3Tag), IconCheck     ($prognose[2]->icon)) ;
  setvalue ( IPS_GetVariableIDByName ("WetterBezeichnung"      ,$IDKat3Tag), utf8_decode    ($prognose[2]->conditions)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMin"                  ,$IDKat3Tag), NurZahl         ($prognose[2]->low->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("TempMax"                  ,$IDKat3Tag), NurZahl         ($prognose[2]->high->celsius)) ;
  setvalue ( IPS_GetVariableIDByName ("WindMax"                  ,$IDKat3Tag), NurZahl         ($prognose[2]->maxwind->kph)) ;
  setvalue ( IPS_GetVariableIDByName ("Regenrisiko"          ,$IDKat3Tag),          ($prognose[2]->pop)) ;

//Astronomie
    $json_ast_string = file_get_contents("http://api.wunderground.com/api/$api/astronomy/q/Germany/$ort.json");
    $parsed_ast_json = json_decode($json_ast_string);

  	setvalue ( IPS_GetVariableIDByName ("Mondstatus"      ,$IDKat0Aktuell), $parsed_ast_json->{'moon_phase'}->{'percentIlluminated'});

function IconCheck ($Eingang){
    // Icon wird durch eine Zahl ersetzt
    switch ($Eingang){
        case "chanceflurries":                 $Ausgang = 01; break;
        case "chancerain":                     $Ausgang = 02; break;
        case "chancesleet":                     $Ausgang = 03; break;
        case "chancesnow":                     $Ausgang = 04; break;
        case "chancetstorms":                 $Ausgang = 05; break;
        case "clear":                             $Ausgang = 06; break;
        case "cloudy":                         $Ausgang = 07; break;
        case "flurries":                         $Ausgang = 08; break;
        case "fog":                             $Ausgang = 09; break;
        case "hazy":                             $Ausgang = 10; break;
        case "mostlycloudy":                 $Ausgang = 11; break;
        case "mostlysunny":                     $Ausgang = 12; break;
        case "partlycloudy":                 $Ausgang = 13; break;
        case "partlysunny":                     $Ausgang = 14; break;
        case "sleet":                             $Ausgang = 15; break;
        case "rain":                             $Ausgang = 16; break;
        case "snow":                             $Ausgang = 17; break;
        case "sunny":                             $Ausgang = 18; break;
        case "tstorms":                         $Ausgang = 19; break;
        case "nt_chanceflurries":             $Ausgang = 20; break;
        case "nt_chancerain":                 $Ausgang = 21; break;
        case "nt_chancesleet":                 $Ausgang = 22; break;
        case "nt_chancesnow":                 $Ausgang = 23; break;
        case "nt_chancetstorms":             $Ausgang = 24; break;
        case "nt_clear":                         $Ausgang = 25; break;
        case "nt_cloudy":                     $Ausgang = 26; break;
        case "nt_flurries":                     $Ausgang = 27; break;
        case "nt_fog":                         $Ausgang = 28; break;
        case "nt_hazy":                         $Ausgang = 29; break;
        case "nt_mostlycloudy":             $Ausgang = 30; break;
        case "nt_mostlysunny":                 $Ausgang = 31; break;
        case "nt_partlycloudy":             $Ausgang = 32; break;
        case "nt_partlysunny":                 $Ausgang = 33; break;
        case "nt_sleet":                         $Ausgang = 34; break;
        case "nt_rain":                         $Ausgang = 35; break;
        case "nt_snow":                         $Ausgang = 36; break;
        case "nt_sunny":                         $Ausgang = 37; break;
        case "nt_tstorms":                     $Ausgang = 38; break;
        default: $Ausgang = 0; break;
        }
return $Ausgang;}

function IconCheckAktuell ($Eingang){
      global $Tag;
	  // Tag Nacht Unterscheidung
	  If ($Tag == false){$Eingang = "nt_".$Eingang;};
    // Icon wird durch eine Zahl ersetzt
    switch ($Eingang){
        case "chanceflurries":                 $Ausgang = 01; break;
        case "chancerain":                     $Ausgang = 02; break;
        case "chancesleet":                     $Ausgang = 03; break;
        case "chancesnow":                     $Ausgang = 04; break;
        case "chancetstorms":                 $Ausgang = 05; break;
        case "clear":                             $Ausgang = 06; break;
        case "cloudy":                         $Ausgang = 07; break;
        case "flurries":                         $Ausgang = 08; break;
        case "fog":                             $Ausgang = 09; break;
        case "hazy":                             $Ausgang = 10; break;
        case "mostlycloudy":                 $Ausgang = 11; break;
        case "mostlysunny":                     $Ausgang = 12; break;
        case "partlycloudy":                 $Ausgang = 13; break;
        case "partlysunny":                     $Ausgang = 14; break;
        case "sleet":                             $Ausgang = 15; break;
        case "rain":                             $Ausgang = 16; break;
        case "snow":                             $Ausgang = 17; break;
        case "sunny":                             $Ausgang = 18; break;
        case "tstorms":                         $Ausgang = 19; break;
        case "nt_chanceflurries":             $Ausgang = 20; break;
        case "nt_chancerain":                 $Ausgang = 21; break;
        case "nt_chancesleet":                 $Ausgang = 22; break;
        case "nt_chancesnow":                 $Ausgang = 23; break;
        case "nt_chancetstorms":             $Ausgang = 24; break;
        case "nt_clear":                         $Ausgang = 25; break;
        case "nt_cloudy":                     $Ausgang = 26; break;
        case "nt_flurries":                     $Ausgang = 27; break;
        case "nt_fog":                         $Ausgang = 28; break;
        case "nt_hazy":                         $Ausgang = 29; break;
        case "nt_mostlycloudy":             $Ausgang = 30; break;
        case "nt_mostlysunny":                 $Ausgang = 31; break;
        case "nt_partlycloudy":             $Ausgang = 32; break;
        case "nt_partlysunny":                 $Ausgang = 33; break;
        case "nt_sleet":                         $Ausgang = 34; break;
        case "nt_rain":                         $Ausgang = 35; break;
        case "nt_snow":                         $Ausgang = 36; break;
        case "nt_sunny":                         $Ausgang = 37; break;
        case "nt_tstorms":                     $Ausgang = 38; break;
        default: $Ausgang = 0; break;
        }
return $Ausgang;}


function NurZahl ($Input){
    // Filtert aus dem String nur die Zahl heraus
    if ($Input == "N/A"){$Output = -1;
    }else{
    preg_match("/-?\d+(,|\.)?\d*/",$Input,$result);
	    $Output = $result[0];}
	return $Output;}

function moon_phase($year, $month, $day)
{
    /*    modified from http://www.voidware.com/moon_phase.htm    */
    $c = $e = $jd = $b = 0;
    if ($month < 3)
    {
        $year--;
        $month += 12;
    }
    ++$month;
    $c = 365.25 * $year;
    $e = 30.6 * $month;
    $jd = $c + $e + $day - 694039.09;    //jd is total days elapsed
    $jd /= 29.5305882;                    //divide by the moon cycle
    $b = (int) $jd;                        //int(jd) -> b, take integer part of jd
    $jd -= $b;                            //subtract integer part to leave fractional part of original jd
    $b = round($jd * 8);                //scale fraction from 0-8 and round
    if ($b >= 8 )
    {
        $b = 0;//0 and 8 are the same so turn 8 into 0
    }
    switch ($b)
    {
        case 0:
            return 'Neumond';
            break;

        case 1:
            return 'erstes Viertel';
            break;

        case 2:
            return 'zunehmender Halbmond';
            break;

        case 3:
            return 'zweites Viertel';
            break;

        case 4:
            return 'Vollmond';
            break;

        case 5:
            return 'drittes Viertel';
            break;

        case 6:
            return 'abnehmender Vollmond';
            break;

        case 7:
            return 'letztes Viertel';
            break;

        default:
            return 'Error';
    }
}

// Testanzeige
// ---------------------------
if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo " Uhrzeit: $Uhrzeit  
";
    echo " $mondfase  
";
    echo "  
";
    echo " Variable 4 
" ;
}

?>

und die Fehlermeldung


Parse error:  Invalid numeric literal in /var/lib/symcon/scripts/21356.ips.php on line 107
Abort Processing during Fatal-Error: Invalid numeric literal
   Error in Script /var/lib/symcon/scripts/21356.ips.php on Line 107

Ich kann absolut keinen Fehler finden Hat jemand eine Idee woran das liegen kann ??

Gruß Stephan

Hallo Zusammen,

habe den Fehler gefunden.
Es gab schon einen ähnlichen Beitrag

Fehler in WetterScript

Es lag an der führenden null.

Gruß Stephan

laut der webseite werden keine kostenlosen APIs mehr versendet und ein premium upgrade funktioniert aktuell nicht.

bekommt man die api nur noch via premium? ich kann das nicht recht entziffern.

Also soweit ich es lesen kann kommt das folgende:

  • Es wird eine neue API geben (letzte Woche kam eine Doku und die ist wirklich anders)
  • Eigentümer einer PWS (Personal Weather Station - werden weiterhin auf ihre Daten zugreifen können, wobei ich davon ausgehe das auch hier z.B. mein Modul aktualisiert werden muss)
  • Der generelle Zugang, also ohne eigene PWS wird wohl kostenpflichtig, wobei ich auch gelesen habe, das low Volume Access (also eine geringe Zahl an Abfragen kostenlos bleiben soll)

Man findet recht viel in diesem FRED: End of Service for the Weather Underground API | The WeatherAPI Community Customer Community

Generell scheint IBM dem eigenen Zeitplan weit hinterher zu hinken, womit sich aktuell ausser das keine neues Keys vergeben werden nichts geändert hat.

Good morning, PWS uploaders!

Let me thank you for being such a wonderful, patient group. As we approach the closing date for the Weather Underground API on February 15, 2019, several of you have asked for updates. So I want to share with you what I know at this moment.

  1. We are hoping that the gateway for obtaining keys on the new API will open on February 15, 2019. In order to provide PWS uploaders with time to transition their API calls, all current WU API keys that are linked to a PWS will stay open through Friday, March 1, 2019. That gives you two full weeks to sign up for a new key and change your calls.

  2. For those who already use the WU API, not all API keys are linked to the PWS. If you used two different email addresses when setting up the PWS and API key, they may not be connected. If you are concerned that they are not connected, please contact me and let me check. If they are not, I can make sure they are connected in my database so that your key is not shut off. I have verified whether the API key sent to me is safe or not, and if not, put it in the protected key list. You will receive a second email from me if your key is among this group.

  3. I continue to maintain an email list for news about the transition to the new API for PWS owners. If you know others who would like me to add them to the list, please have them email me with their PWS id, which I use to verify that you are eligible for the PWS API.

The link to the most recent update on the Forum, with links to documentation and details about data: Weather Underground API update | The WeatherAPI Community Customer Community

Thank you once again for being loyal Weather Underground participants!

Victoria Gardner
victoria.gardner@ibm.com

p.s. If you would be so kind as to let me know you received this email, I would appreciate it

Wie macht Ihr weiter? Ich brauche nur Vorhersagedaten. Woher nehmen?

Danke Sebastian

Openweathermap sollte doch eine Option sein? Wobei ich mich damit nicht beschäftigt habe.

Ich habe da vor einiger Zeit mal ein Modul für OpenWeather gemacht: Modul OpenWeatherMap

Ansonsten werden ich mich mit Wunderground-API noch beschäftigen, Solbad die neuen API-Key’s erhältlich sind (sollte eigentlich seit gestern soweit sein). Die API-Key’s sind aber, so wie es zur zeit aussieht, nur für Leute kostenlos, die auch mit eigener Wetterstation Daten liefern (was ich tue).

Gruß
demel

Diese Info kam heute zum Thema der neuen Keys:

Dear kind PWS users!

I write to make sure you know you are not forgotten. We are working hard to prepare the gateway to distribute the new API keys. Thank you for your continuing attention and patience.

I expect that it will be open by Friday, February 22 at the latest, and perhaps as early as Monday, February 18.

I will email you again just as soon as I have better information!

Yours very truly,

Victoria Gardner
Weather Underground API customer service

Ich werde auch mein Modul nachführen, also das PWS Upload Modul, falls es was zu tun gibt. Laut Victoria wird sich der Upload nicht ändern, aber wenn sich was tut werde ich es einbauen.

Ich hab hier ein Script für darksky gepostet. OpenWeatherMap ist bei mir sehr ungenau.

Baue Deinen eigenen Wetterdienst - Dark Sky API

Sebastian

als alternative habe ich hier aus gleichem grund mit apixu gearbeitet und bin damit eigentlich ganz zufrieden:

Wetter APIXU Script

Sven

Ich bohre gerade mein Modul auf, so das diejenigen die Wetterdaten zu Wunderground laden, auch wieder Daten laden können.

Wer hochlädt bekommt eine kostenlosen Schlüssel um Weather.com Daten zu laden - die Qualitativ bestimmt recht gut sind. Man muss halt auch hochladen.

Ich denke ich bin übers Wochenende fertig.

Update landet hier.

[Modul] Wunderground Wetterstation (PWS) Upload

Ich bin gerade dabei, SymconMisc/Wunderground anzupassen.

Eine Info, die ich von Wunderground bekommen habe: (fasst DU es noch nicht wissen solltest): der Forcaste funktioniert für die Keys der PWS-Besitzer kostenfrei nur als 5days-Variante (getestet). Ich hatte vorgestern erst mit der 7days-Variante getestet und bin immer gescheitert und habe denen dann geschrieben.

Bzgl des Upload der Daten zu Underground: da habe ich die Info von Wunderground, das sich da nichts ändert. Hast Du da andere Informationen?

Gruß
demel

Ja - die Infos decken sich. Upload bleibt gleich / Download ist neu.

vom Grundsatz her bin ich mit der Anpassung schon durch … ich muss nur noch details bearbeiten und die Übersetzung

Funktionen umfassen:

  • Download von „Übersichtswetter“ (1-5 Tage)
  • Download von Detailwetter (Dayparts - 1 - 12)
  • Möglichkeit die Art des Wetters zu wählen (Temp, Rain, Wind usw)
  • Möglichkeit Text vorhersagen einzeln zu wählen

Natürlich bleibt der Upload erhalten bez. wird erweitert.

Anbei mal ein Screenshot - evtl. müssen wir nicht alles doppelt machen.

Ach ja … die API liefert eine MENGE an Daten!!! Ich glaube wenn man alles lesen würde, benötigt man alleine dafür eine Unlimited Lizenz :slight_smile:

Ich werde vermutlich heute Nachmittag eine Beta in Github stellen. Aktuell bastel ich noch an der Konfigurierbarkeit, da es sonst zu viele Variablen werden.

Ok, dann machen ich erstmal nicht weiter, denn wenn dein Modul ja alles (soweit möglich) liefert, kann man ja darauf umsteigen, Module brauchen nicht doppelt zu sein. Ich selbst benutze nur einen Bruchteil davon (nur die 12h-Vorhersage für Temperatur und bräuchte auch die Regenvorhersage)

Wenn Du das Modul online hast, würde ich das gerne testen …

demel

Hi … Modul steht als Beta zum testen bereit.

Bitte Fehler und Ideen usw hier posten: [Modul] Wunderground Wetterstation (PWS) Upload - Seite 2 (in dem Fred gibt es noch ein paar Infos).

Ich denke es reicht auch einfach die Aussentemperatur zu laden um einen Key zu bekommen - wäre mal einen Versuch wert :rolleyes:

Hallo,

  1. Versuch:

Grund: ich hatte die Geo-Position mit Komma eingegeben. Wäre es nicht besser, die Properes als Float zu machen denn als String? Du müsste natürlich die Float entsprechend formatieren …
Ich habe das bei einigen Module auch so gemacht, wenn die Werte 0 sind hole ich die Position aus dem Location-Modul …

  1. Versuch

nach Korrektur der Position

Debug-Dump ist attached.

Ich kann natürlich gerne auch danach suchen, nur dann kollidieren ggfs. meine Korrekturen mit Änderungen von Dir?

Wenn ich das auf die schnelle richtig sehe ist der Wert, der in die Variable geschrieben werden soll, leer.

Um das abzufangen verwende ich immer eine solche Funktion


    protected function SetValue($Ident, $Value)
    {
        @$varID = $this->GetIDForIdent($Ident);
        if ($varID == false) {
            $this->SendDebug(__FUNCTION__, 'missing variable ' . $Ident, 0);
            return;
        }

        if (IPS_GetKernelVersion() >= 5) {
            $ret = parent::SetValue($Ident, $Value);
        } else {
            $ret = SetValue($varID, $Value);
        }
        if ($ret == false) {
            $this->SendDebug(__FUNCTION__, 'mismatch of value "' . $Value . '" for variable ' . $Ident, 0);
        }
    }

und einfach so aufrufen


$this->SetValue('DP0QPF', $DP0QPF);

Man muss zwar bei fehlende oder leeren Angaben den Inhalt (hier wäre ja eine 0 korrekt) sinnvollerweise abfangen, aber so knallt es nicht…

Eine Nachfrage zu dem Upload: Du hast in der Doku angegeben, das man das WU-Passwort angeben soll. Nicht den Station-Key? Ich mache im Rahmen von meinem Netatmo-Modul auch den Upload und da verwende ich Station-ID und Station-Key.

Gruß
demel

dump.txt (22.9 KB)