Wetterdaten von Accuweather und OpenWeatherMap (updatet am 03.01.2018)

Wetterdaten von Accuweather und OpenWeatherMap (updatet am 03.01.2018)

Sie möchten Wetterdaten in der Homematic haben, besitzen aber keine teuere Homematic Wetterstation? Wer auf sekundengenaue Daten verzichten kann, der kann die Daten bequem aus dem Internet importieren. Hier möchte ich eine Lösung per Homematic Script vorstellen, das über die API-Schnittstelle von accuweather.com und/oder von OpenWeatherMap mittels CUxD die Daten vom Webservice herunterlädt und in die Homematic Systemvariablen abspeichert. Diese Daten können anschließend beliebig in Homematic Programmen wie z.B. in einer Gartenbewässerung usw. weiterverarbeitet werden.

Voraussetzung ist eine lauffähige CUxD Installation mit Exec-Gerät Konfiguration! Falls dies noch nicht geschehen ist, findest du hier eine Anleitung.

Los geht’s!

Update 14.08.2018: Es gibt eine zuverlässigere Methode, die Wetterdaten abzurufen. Dafür wird aber einen PHP-Server mit cURL Unterstützung benötigt. Diese Lösung habe ich hier beschrieben.

Wetterdaten von AccuWeather

API Key von AccuWeather generieren

Anmelden bei developer.accuweather.com.

Klicken auf „My Apps“ → „Add a New App“, alles ausfüllen und anschließend auf „Create App“ klicken. Das neue App wird erstellt.

Auf das erstellte App klicken, dort findet man das API-Key (s. Bild unten).

Das Benutzen von AccuWeatehr-API ist für private Zwecke kostenlos, es gibt allerdings die Begrenzung der Tagesaufrufe der API: 50 mal/Tag pro Account. Pro Abholvorgang braucht man 2 API-Aufrufe. Wenn man stündlich die Wetterdaten aktualisiert, verbraucht 24*2 = 48 Aufrufe/Tag , was noch unterhalb der Begrenzung liegt. Mit 2 Accounts (also 2 API-Keys) kann man die Wetterdaten halbstündlich aktualisieren.

Wetterstation suchen

Auf accuweather.com gehen, im Suchfeld der gewünschte Standort eingeben. In dem Adressenfeld des Browsers die 6-stellige Zahl merken, das ist das Wetterstation-ID.

System-Variablen anlegen

Im nächsten Schritt werden die Variablen angelegt. Es können insgesamt 40 Systemvariablen mit den Wetterdaten anlegt werden, dabei soll die korrekte Schreibweise und Feldtyp beachtet werden. Es müssen nicht alle Variablen angelegt werden, sondern nur die, die benötigt werden.

Programm anlegen

Homematic Programm: OpenWeatherMap
Einstellung des Zeitmoduls

Bedingung: Wenn…: Zeitsteuerung mit folgenden Einstellungen:Aktivität Dann…: Script einfügen.

ACHTUNG: Im Skript in den Zeilen string wetterstation_id = "HIER WETTERSTATION-ID EINTRAGEN"; und string api_key = "HIER DEIN API KEY EINTRAGEN";  das API-Key und Wetterstation-Id (mit“ „) einfügen!

Skript updatet am 03.02.2019

!Hier die WETTERSTATION-ID und API-KEY eintragen
string wetterstation_id = "HIER WETTERSTATION-ID EINTRAGEN";
string api_key = "HIER DEIN API KEY EINTRAGEN";

var url = "http://dataservice.accuweather.com/currentconditions/v1/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); 
string responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var WeatherText = (responce.StrValueByIndex(",",2)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var Temperature = (responce.StrValueByIndex(",",7)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperature = (responce.StrValueByIndex(",",13)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperatureShade = (responce.StrValueByIndex(",",19)).StrValueByIndex(":",3).ToFloat();
var RelativeHumidity = (responce.StrValueByIndex(",",25)).StrValueByIndex(":",1).ToFloat();
var WindSpeed = (responce.StrValueByIndex(",",35)).StrValueByIndex(":",3).ToFloat();
var UVIndex = (responce.StrValueByIndex(",",47)).StrValueByIndex(":",1).ToFloat();
var UVIndexText = (responce.StrValueByIndex(",",48)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var CloudCover = (responce.StrValueByIndex(",",56)).StrValueByIndex(":",1).ToFloat();
var Pressure = (responce.StrValueByIndex(",",63)).StrValueByIndex(":",3).ToFloat();
url = "http://dataservice.accuweather.com/forecasts/v1/daily/1day/"#wetterstation_id#"?apikey="#api_key#"&language=de-de&details=true&metric=true";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); 
responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var TemperatureMin = (responce.StrValueByIndex(",",22)).StrValueByIndex(":",3).ToFloat();
var TemperatureMax = (responce.StrValueByIndex(",",25)).StrValueByIndex(":",2).ToFloat();
var RealFeelTemperatureMin = (responce.StrValueByIndex(",",28)).StrValueByIndex(":",3).ToFloat();
var RealFeelTemperatureMax = (responce.StrValueByIndex(",",31)).StrValueByIndex(":",2).ToFloat();
var HoursOfSun = (responce.StrValueByIndex(",",40)).StrValueByIndex(":",1).ToFloat();
var DayWeather = (responce.StrValueByIndex(",",75)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var DayWindSpeed = (responce.StrValueByIndex(",",81)).StrValueByIndex(":",3).ToFloat();
var DayWindGust = (responce.StrValueByIndex(",",87)).StrValueByIndex(":",3).ToFloat();
var NightWeather = (responce.StrValueByIndex(",",113)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var NightWindSpeed = (responce.StrValueByIndex(",",119)).StrValueByIndex(":",3).ToFloat();
var NightWindGust = (responce.StrValueByIndex(",",125)).StrValueByIndex(":",3).ToFloat();
var DayWeatherPrecipitationProbability = (responce.StrValueByIndex(",",76)).StrValueByIndex(":",1).ToFloat();
var DayWeatherThunderstormProbability = (responce.StrValueByIndex(",",77)).StrValueByIndex(":",1).ToFloat();
var DayWeatherRainProbability = (responce.StrValueByIndex(",",78)).StrValueByIndex(":",1).ToFloat();
var DayWeatherSnowProbability = (responce.StrValueByIndex(",",79)).StrValueByIndex(":",1).ToFloat();
var DayWeatherIceProbability = (responce.StrValueByIndex(",",80)).StrValueByIndex(":",1).ToFloat();
var NightWeatherPrecipitationProbability = (responce.StrValueByIndex(",",114)).StrValueByIndex(":",1).ToFloat();
var NightWeatherThunderstormProbability = (responce.StrValueByIndex(",",115)).StrValueByIndex(":",1).ToFloat();
var NightWeatherRainProbability = (responce.StrValueByIndex(",",116)).StrValueByIndex(":",1).ToFloat();
var NightWeatherSnowProbability = (responce.StrValueByIndex(",",117)).StrValueByIndex(":",1).ToFloat();
var NightWeatherIceProbability = (responce.StrValueByIndex(",",118)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfPrecipitation = (responce.StrValueByIndex(",",105)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfRain = (responce.StrValueByIndex(",",106)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfSnow = (responce.StrValueByIndex(",",107)).StrValueByIndex(":",1).ToFloat();
var DayHoursOfIce = (responce.StrValueByIndex(",",108)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfPrecipitation = (responce.StrValueByIndex(",",143)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfRain = (responce.StrValueByIndex(",",144)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfSnow = (responce.StrValueByIndex(",",145)).StrValueByIndex(":",1).ToFloat();
var NightHoursOfIce = (responce.StrValueByIndex(",",146)).StrValueByIndex(":",1).ToFloat();

string svName;
object svObj;

svName = "Wetter";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(WeatherText);
}
svName = "Temperatur [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(Temperature);
}
svName = "RealFeel-Temperatur [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RealFeelTemperature);
}
svName = "RealFeel-Temperatur im Schatten [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RealFeelTemperatureShade);
}
svName = "Luftfeuchtigkeit [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(RelativeHumidity);
}
svName = "Windgeschwindigkeit [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(WindSpeed);
}
svName = "UV-Index";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(UVIndex);
}
svName = "UV-Intensität";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(UVIndexText);
}
svName = "Wolkendecke [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(CloudCover);
}
svName = "Luftdruck [hPa]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(Pressure);
}
svName = "Min. Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. Temp. [°C]").State(TemperatureMin);
}
svName = "Max. Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. Temp. [°C]").State(TemperatureMax);
}
svName = "Max. RealFeel-Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. RealFeel-Temp. [°C]").State(RealFeelTemperatureMax);
}
svName = "Min. RealFeel-Temp. [°C]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj. RealFeel-Temp. [°C]").State(RealFeelTemperatureMin);
}
svName = "Dauer Sonne [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(HoursOfSun);
}
svName = "tagsüber";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeather);
}
svName = "Windstärke tagsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWindSpeed);
}
svName = "Böen tagsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWindGust);
}
svName = "Wetter nachtsüber";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeather);
}
svName = "Windstärke nachtsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWindSpeed);
}
svName = "Böen nachtsüber [km/h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWindGust);
}
svName = "Niederschlagwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherPrecipitationProbability);
}
svName = "Gewitterwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherThunderstormProbability);
}
svName = "Regenwahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherRainProbability);
}
svName = "Schneewahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherSnowProbability);
}
svName = "Icewahrscheinlichkeit tagsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayWeatherIceProbability);
}
svName = "Niederschlagwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherPrecipitationProbability);
}
svName = "Gewitterwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherThunderstormProbability);
}
svName = "Regenwahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherRainProbability);
}
svName = "Schneewahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherSnowProbability);
}
svName = "Icewahrscheinlichkeit nachtsüber [%]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightWeatherIceProbability);
}
svName = "Niederschlagsdauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfPrecipitation);
}
svName = "Regendauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfRain);
}
svName = "Schnedauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfSnow);
}
svName = "Icedauer tagsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(DayHoursOfIce);
}
svName = "Niederschlagsdauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfPrecipitation);
}
svName = "Regendauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfRain);
}
svName = "Schnedauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfSnow);
}
svName = "Icedauer nachtsüber [h]";
svObj = dom.GetObject(svName);
if (svObj){
  svObj.State(NightHoursOfIce);
}
svName = "Wetterdienst";
svObj = dom.GetObject(svName);
if (svObj){ 
  svObj.State("Accuweather");
}

Über die Favoriten kann man sich eine schöne Ansicht der Wetterdaten legen:

Es ist möglich, bei mehreren Accounts anzumelden, um die Zeit zw. zwei Updates der Wetterdaten zu minimieren. Beim Programm soll man dann das zweite Skript einfügen, dessen Ausführung zeitlich versetzt ist. Im folgenden Bsp. werden die Daten alle 30 Minuten aktualisiert.

Wetterdaten von OpenWeatherMap

Da die aktuelle Temperatur (Variable: „Temperatur [°C]“) in weiteren Programmen eingebunden ist (bei mir: Heizungssteuerung und automatische Gartenbewässerung), soll der Abholvorgang der Wetterdaten 100% zuverlässig sein. Für den Fall, wenn bei AccuWeather zum Beispiel API sich ändert oder der Server nicht verfügbar ist, habe ich mir das zweite Skript gebastelt, der im Falle eines Fehlers von AccuWeather sich die aktuellen Wetterdaten (Wettervorhersage wird folgen) von OpenWeatherMap einholt. Das Gute ist, dass OpenWeatherMap keine Einschränkungen der API-Aufrufe hat, die Wetterdaten sind aber etwas ungenauer, als bei AccuWeather. Der Fehlerzustand beim Aufruf von AccuWeather-Wetterdaten wird abgefangen durch die Veriable „Luftdruck [hPa]“. Wenn die Variable null wird, was im Normalzustand nicht sein kann, werden die Wetterdaten von OpenWeatherMap einholt.

Das Vorgehen ist ähnlich wie bei AccuWeather.

API Key von OpenWeatherMap generieren

Anmelden bei openweathermap.org.

Unter „API keys“ liegt der API-key, das man für die API-Aufrufe braucht (s. Bild unten).

Wetterstation suchen

Auf openweathermap.org gehen, im Suchfeld das gewünschte Standort eingeben. Aus den vorgeschlagenen Wetterstationen die passende wählen.

In dem Adressenfeld des Browsers die 7-stelluge Zahl merken, das ist das Wetterstation-ID.

System-Variablen anlegen

In diesem Schritt werden die Variablen angelegt. Es können insgesamt 5 Systemvariablen mit Wetterdaten anlegt werden, dabei soll die korrekte Schreibweise und Feldtyp beachtet werden. Auch hier müssen nicht alle Variablen angelegt werden, sondern nur die, die benötigt werden. Falls diese Variablen im Abschnitt AccuWeather angelegt wurden, kann dieser Schritt übersprungen werden.

Programm anlegen

Als Auslösebedingung wollte ich den Fehlerzustand vom AccuWeather-Skript abfangen. Somit wird das Skript ausgelöst, wenn Lüftdruck=0 ist, was im Normalfall nicht vorkommen kann.

Homematic Programm: OpenWeatherMap

Bedingung: Wenn…: Luftdruck [hPa] im Wertebereich von 0.00 bis kleiner 0.01 bei Änderung auslösen.

Aktivität: Dann…: Skript.

ACHTUNG: Im Skript in den Zeilen string wetterstation_id = "HIER WETTERSTATION-ID EINTRAGEN"; und string app_id = "HIER DEIN APP-ID EINTRAGEN";  das App-ID und Wetterstation-Id (mit “ „) einfügen!

Skript updatet am 03.02.2019

!Hier die WETTERSTATION-ID und APP-ID eintragen
string wetterstation_id = "HIER WETTERSTATION-ID EINTRAGEN";
string app_id = "HIER DEIN APP-ID EINTRAGEN";


var url = "http://api.openweathermap.org/data/2.5/weather?id="#wetterstation_id#"&units=metric&lang=de&appid="#app_id;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);	 
string rueckgabe = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
integer slenght = rueckgabe.Length();
integer scount = 1;
integer sstart=1;
string s;
while (scount<slenght){
  s=rueckgabe.Substr(scount,1).ToString(1);
  if (rueckgabe.Substr(scount,1)=="]"){sstart = scount;}
  scount=scount+1;
}
string rueckgabe2=rueckgabe.Substr(sstart+2,slenght);
var wspeed = (rueckgabe2.StrValueByIndex(",",7)).StrValueByIndex(":",2).ToFloat()*3.6;
var stemp = (rueckgabe2.StrValueByIndex(",",1)).StrValueByIndex(":",2).ToFloat();
var pressure = (rueckgabe2.StrValueByIndex(",",2)).StrValueByIndex(":",1).ToInteger();
var humidity = (rueckgabe2.StrValueByIndex(",",3)).StrValueByIndex(":",1).ToInteger();
var description = (rueckgabe.StrValueByIndex(",",4)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
string svName;
object svObj;
svName = "Windgeschwindigkeit [km/h]";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.State(wspeed);
}
svName = "Temperatur [°C]";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.State(stemp);
}
svName = "Luftdruck [hPa]";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.State(pressure);
}
svName = "Luftfeuchtigkeit [%]";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.State(humidity);
}
svName = "Wetter";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.Get("Wetter").State(description);
}
svName = "Wetterdienst";
svObj = dom.GetObject(svName);
if (svObj) {
  svObj.State("OpenWeatherMap");
}

Fertig! Für Verbesserungsvorschläge oder Anmerkungen bin ich dankbar.

Dieser Beitrag hat 24 Kommentare

  1. Hallo Dmitri,
    es ist eine sehr gute Anleitung!
    Ich habe schon lange nach der Möglichkeit gesucht, Wetterdaten in meine Homematic Steuerung aus dem Internet zu holen.
    Ich habe deine Anleitung befolgt, leider werden meine Variablen nicht beschrieben.
    CUxD habe ich nach deiner Anleitung installiert und das Systemgerät mit Exec-Funktion angelegt.
    Könntest du mir ein Paar Tipps geben wie ich den Fehler finden kann?
    Vielen Dank im Voraus!

    1. Hallo Alex,
      um den Fehler besser identifizieren zu können, gehst du in „Programme und Zentralverknüpfung“, klickst dann auf „Skript testen“ und dort fügst dein Skript ein. Danach nach jeder Wertzugabe der jeweiligen Variable prüfst du mit WriteLine() ob die Variable tatsächlich diesen Wert bekommen hat. Zum Beispiel:

      string responce = dom.GetObject(„CUxD.CUX2801001:1.CMD_RETS“).State();
      WriteLine(responce);
      Damit prüfst du, ob ein Antwort auf HTTP-Request überhaupt kommt.

      Dannach z. B.:
      var Temperature = (responce.StrValueByIndex(„,“,5)).StrValueByIndex(„:“,3).ToFloat();
      WriteLine(Temperature);
      Damit prüfst du, ob der in dem Skript deklarierte Variablen den Temperaturwert zugewiesen wird.

      oder z. B. hier:
      dom.GetObject(„Temperatur [°C]“).State(Temperature);
      WriteLine(dom.GetObject(„Temperatur [°C]“).State());
      Hier prüfst du z. B. ob die zuvor eingelegte Systemvariable den Temperaturwert bekommt.

      So würde ich vorgehen.

      1. Hallo Dmitri,
        danke für den Tipp, ich habe den Fehler gefunden.
        es sieht so aus, dass die Werte verschoben wurden.
        z.B der Temperaturwert wird an der 7.Stelle geliefert
        responce.StrValueByIndex(„,“,7)).StrValueByIndex(„:“,3).ToFloat();
        Danke noch mal für deine Unterstützung!

        1. Das ist aber komisch, bei mir funktioniert es immer noch mit den alten Stellen, die in dieser Anleitung aufgeführt sind. Nur „UV-Intensität“ liefert komischen Wert. Ich überprüfe es aber noch mal. Danke für den Hinweis.

  2. Hallo Dimitri,
    zuerst herzlichen Dank für Deine Super Beschreibung.
    Habe das soeben auch für meine CCU2 konfiguriert und kann die Aussage von Alex bestätigen.
    Vielen Dank und Grüße

    1. Ja, es stimmt. Habe ich nicht sofort bemerkt, weil ich, wie in diesem Artikel auch beschrieben wurde, zur Absicherung die Daten von OpenWeatherMap verwende. Das Skript funktioniert also nicht und muss angepasst werden! Die Anpassung kommt bald…

  3. Hallo Dimitri,
    ich kann mich Alex und Mike nur anschließen. Eine richtig tolle Anleitung.
    Es funktioniert auch soweit. Allerdings habe ich auch das gleiche Problem. Wie ist das mit den verschobenen Daten? Kann man einfach die Zeilen durchzählen und die entsprechende Zahl im Script einsetzen oder ist da speziel etwas zu beachten? Welche Zeilen muss man bechten, welche nicht?

    1. Ich habe jetzt das Skript angepasst, sodass die richtigen Werte geliefert werden. Mal sehen für wie lange…

  4. Hallo,
    Tolle Idee. Danke für die Anleitung.
    Beim Script-Test kommt bei mir dieser Fehler (Id und Key verfremdet).
    Wie kann ich dem Fehler auf dem Grund gehen?

    Error 1 at row 253 col 85 near ^ather“);^
    Parse following code failed:
    !Hier die WETTERSTATION-ID und API-KEY eintragen
    string wetterstation_id = „2273999“;
    string api_key = „uuuLX8uTfMd0LBGMFlH8DMmK30MaGUf8Um“;
    var url = „http://dataservice.accuweather.com/currentconditions/v1/“#wetterstation_id#“?apikey=“#api_key#“&language=de-de&details=true“;

  5. Sorry, war mein Fehler.

  6. Hallo Dmitri,
    vielen Dank für das Skript. Beim Schreiben der Wetterdaten in die Systemvariablen hakt es bei mir.
    Wenn ich bei Skripttest z.B nach „dom.GetObject(„Windgeschwindigkeit [km/h]“).State(wspeed);“
    die Zeile „WriteLine(dom.GetObject(„Windgeschwindigkeit [km/h]“).State());“ einfüge, sehe ich das den Systemvariablen kein Wert zugwiesen wird. Die Daten kommen von Openweather rein und die im Skript deklarierten Variablen werden auch alle befüllt. Das habe ich vorher schon überprüft.

    1. Wird der Variable wspeed ein Wert zugewiesen?
      Steht es bei dir so?
      var wspeed = (rueckgabe2.StrValueByIndex(„,“,7)).StrValueByIndex(„:“,2).ToFloat()*3.6;
      Welcher Wert wird der Variable „wspeed“ zugewiesen? Führ mal die Zeile aus: WriteLine(wspeed);
      Was kommt da raus? Ich befürchte, dass irgendwas mit der Variablen wspeed nicht stimmt.

      Bei mir steht so was (und funktioniert auch):
      var wspeed = (rueckgabe2.StrValueByIndex(„,“,7)).StrValueByIndex(„:“,2).ToFloat()*3.6;
      dom.GetObject(„[Wetter] Windgeschwindigkeit“).State(wspeed);

  7. Danke für die schnelle Antwort. Es kommt bei WriteLine(wspeed) der Wert 20.5 raus.
    Den anderen Variablen stemp, pressure, humidity und description werden auch Werte zugewiesen.

  8. Hallo Dimitri,
    von Deinen Skripten benutze ich nur das zweite Skript für die Open Weather Daten. Die Abfrage ob die Luftdruckdaten = 0 sind bei AccuWeather hab ich dementsprechend bei mir nicht berücksichtigt.
    Ich glaube das Problem gefunden zu haben. Das Skript springt nicht in den If Abfrage Zweig
    „if (!svObj) {
    dom.GetObject(„Windgeschwindigkeit [km/h]“).State(wspeed);
    }
    Warum wird die Abfrage im Skript durchgeführt ( if (!svObj)….) ?

    1. Hallo Carsten,

      du hast recht, da ist ein Fehler drin. Es soll „if (!svObj)…“ sein, ohne Ausrufezeichen.
      In diesem If-Zweig wird überprüft, ob die Variable existiert, nur dann wird der Variablen ein Wert zugewiesen. Ich habe das Skript angepasst, es soll jetzt funktionieren.

      Gruß
      Dmitri

  9. Hallo,
    ich habe alles entsprechend der Vorgaben umgesetzt, erhalte aber nur Standardwerte in den Variablen (den niedrigst zulässigeen Wert). Habe daher mal die URL aus dem Skript im Browser eingegeben:

    http://dataservice.accuweather.com/currentconditions/v1/„#167330#“?apikey=“#yp380aS…9NdkeMnAp#“&language=de-de&details=true (Key wurde gekürzt)

    Dann erhalte ich folgende Rückmeldung:
    fault
    faultstring „Failed to resolve API Key variable request.queryparam.apikey“
    detail
    errorcode „steps.oauth.v2.FailedToResolveAPIKey“

    Hat jemand eine Idee, was mein Fehler ist? Die erstellte App auf Accuweather hat den Status Approved, und der Key wurde mit Copy and Paste übernommen. Vielen Dank für Tips.

  10. Hallo,

    sehr schönes Script, funktioniert soweit auch. Eine Frag habe ich: Können Sie mir sagen für welchen Zeitraum die Forecast werte gültig sind? Ich würde gerne für den kommenden Tag die Sonnenscheindauer haben (für die Steuerung von Rollläden). Weis aber nicht wann ich den Abruf machen soll um den Zeitraum für den kommenden Tag zu erhalten.
    Gibt es dazu eine Dokumentation oder hat dazu schon jemand Erfahrung?

    Grüße,
    Benedikt

    1. Hallo,

      in dem Skript werden die 1-Tag-Wetterdaten von AccuWeather abgerufen. Leider steht auf der Seite on AccuWeather nichts darüber, für welchen Zeitraum die Wetterdaten gültig sind. Es steht nur so was da: Returns daily forecast data for a specific location. Ich nehmen an, die Wetterdaten sind für kommenden Tag gpltig. Wenn du also den Abruf der Wetterdaten bis 00:00 machst, werden die Wetterdaten für den nächsten Tag ab 00:00 gültig.

      Gruß
      Dmitri

  11. Hallo.

    habe beide Skripte von hier erfolgreich laufen. Ein prima Beitrag.
    Nur leider lassen sich ein paar Daten nur sehr unregelmäßig empfangen. z.B. min. Temp und max. Temp sehe ich in den Variablen nur sehr sehr selten mal. Woran kann das liegen?

    Gruß

    Christian

  12. Hallo Dmitri,
    es scheinen sich einige Fehler u.a. ab Zeile 109 MinTemp eingeschlichen zu haben. Kannst Du bitte mal prüfen. Irgendwie komme ich nicht weiter.
    VG, Peter

  13. Hi!

    Leider liefert mir die variable „rueckgabe“ in deinem openweathermap skript keinerlei werte zurück. URL mittels WriteLine (url); direkt im Browser funktioniert hingegen anstandslos – was habe ich falsch gemacht?

    1. Hat sich erledigt (CUxD addon vergessen..)

  14. Hallo Dmitri, danke für das Skript für OpenWeatherCom.
    Funktioniert super.
    Allerdings geht die Variable Wetter bei mir so nicht:
    svName = „Wetter“;
    svObj = dom.GetObject(svName);
    if (svObj) {
    svObj.Get(„Wetter“).State(description);
    }

    Habe es in
    svObj.State(description);

    geändert.

Schreibe einen Kommentar

Menü schließen