Wetterdaten von AccuWeather mit einem PHP-webserver zuverlässig abrufen

Wetterdaten von AccuWeather mit einem PHP-webserver zuverlässig abrufen

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. Ich hatte schon eine Lösung vorgestellt, wie die Wetterdaten von AccuWeather abgerufen werden können. Diese Lösung war ziemlich einfach zu umsetzen, war aber nicht besonders zuverlässig.  Deswegen möchte ich eine zuverlässige Lösung vorstellen, wie man die Wetterdaten von AccuWeather mithilfe eines PHP-Skripts abgreifen kann und diese anschließend beliebig in Homematic Programmen wie z.B. in einer Gartenbewässerung usw. verwenden. Für diese Lösung wird ein PHP-Server (hier Synology Diskstation) benötigt.

Voraussetzungen

  • Internetanschluss
  • Homematic CCU / CCU2 / CCU3 / RaspberyMatic
  • Installiertes XML-API CCU Addon
  • Installiertes CUxD Daemon CCU Addon
  • PHP-Server mit der Unterstützung von cURL
    (hier: Sysnology Diskstation, es kann aber ein anderer Web-Server eingesetzt werden, der PHP und cUrl unterstützt, z. B. hier)

Funktionsprinzip

Das Abrufen von Wetterdaten von AccuWeather funktioniert so: Auf der CCU läuft ein Programm, das periodisch einen HTTP-Request an den PHP-Server sendet und das PHP-Skript auslöst. Das PHP-Sktipt nimmt die Wetterdaten von AccuWeather und verarbeitet diese. Die verarbeiteten Wetterdaten werden an die entsprechenden Systemvariablen in der CCU weitergeleitet, sofern die Verknüpfungen zu den Homematic Systemvariablen bestehen.

 

PHP-Server

Für diese Lösung wird ein PHP-Server mit cURL-Unterstützung benötigt. Es kann entweder ein lokaler oder ein globaler (z. B. hier) PHP-Server sein. Für diese Lösung benutze ich einen eigenen lokalen PHP-Server, der auf Synology Diskstation läuft. In diesem Kapitel werde ich beschreiben, wie ein PHP-Server auf Synology Diskstation eingerichtet wird. Falls ihr einen anderen PHP-Server verwendet oder den schon eingerichtet habt, könnt ihr das Kapitel überspringen.

Web-Server auf Synology Diskstation einrichten

Falls ihr einen anderen Web-Server verwendet, könnt ihr dieses Kapitel überspringen. Bei einem globalen Web-Server müsst ihr einen Fernzugriff auf CCU einrichten.

Hier wird als PHP-Webserver Synology DiskStation DS218j eingesetzt. Bitte vor dem Start darauf achten, dass Sie bereits Folgendes ausgeführt haben:

  • EZ-Internet ist eingerichtet und Port 80 ist konfiguriert, falls nicht, EZ-Internet öffnen und den weiteren Schritten des EZ-Internet-Assistenten folgen (Hinweis: Das Einrichten der Portweiterleitung mit EZ-Internet überschreibt die vorhandenen Portweiterleitungsregeln auf dem Router).
  • Web Station und PHP 5.6 bzw. PHP 7.2 sollen installiert werden

Mit der Web Station kann auf Synology DiskStation eine Website (in diesem Fall PHP-Skript) erstellt werden. Der freigegebene Standardordner „web“ wird von Web Station bereitgestellt, dort können die Webseitendateien zur Erstellung der Websites gespeichert werden. Die Webanwendung mithilfe von Web Station erstellen:

Die Web Station öffnen und zu Allgemeine Einstellungen gehen, um den HTTP Back-end-Server und das PHP-Profil auszuwählen. Hier habe ich zu Demonstrationszwecken der Nginx-Server sowie das Standardprofil (PHP 5.6) ausgewählt.

Zu den PHP-Einstellungen gehen und auf die Schaltfläche Bearbeiten (Edit) klicken, um die PHP-Erweiterungen zu aktivieren.

Wählen Sie Kontrollkästchen aus, um alle Erweiterungen zu aktivieren.

Im Web-Ordner /web ein weiteres Ordner AccuWeather erstellen (ist aber nicht zwingend notwendig).

Die Einrichtung von Synology DiskStation ist somit abgeschlossen.

API-Daten 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 Skripdurchlauf werden 2 API-Aufrufe gemacht. Wenn die Wetterdaten stündlich aktualisiert werden, wird 24*2 = 48 Aufrufe/Tag verbraucht, was noch unterhalb der Begrenzung liegt. Mit 2 Accounts (also 2 API-Keys) können die Wetterdaten halbstündlich aktualisiert werden.

Die unten stehende Tabelle zeigt, wie viele Abrufe der Wetterdaten pro Tag in Abhängigkeit von der Anzahl der API-Keys gemacht werden können:

Wetterstation ID 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 am CCU anlegen

Um die Daten von AccuWeather in der CCU abzuspeichern, sollen Systemvariablen angelegt werden. Folgende zwei Tabellen zeigen Wetterdatenparameter, die von AccuWeather abgefragt werden können. Für jeweils einen Parameter, den ihr in CCU abspeichern wolltet, wird eine Systemvariable auf der CCU benötigt. Dabei ist es nicht notwendig, für alle Paramtern jeweils eine Systemvariable anlegen. Ihr könnt die Variablen für die Parameter anlegen, die ihr braucht. Die Namen für die angelegten Systemvariablen können beliebig gewählt werden. Die Verknüpfung der angelegten Variablen zu den AccuWeather Parametern erfolgt durch ime_id (XML-API) der Variblen und ist unabhängig von den Variablennamen, dazu kommen wir aber später. Wenn die Variablen angelegt sind, können wir zu dem nächsten Schritt gehen.

Wetterdaten für das aktuelles Wetter

Parameter Typ Beschreibung
WeatherText string Phrase description of the current weather condition. Displayed in the language set with language code in URL.
Temp float Rounded value in specified units. May be NULL.
RealFeelTemp float Patented AccuWeather RealFeel Temperature. Contains Metric and Imperial Values.
RealFeelTempShade float Patented AccuWeather RealFeel Temperature in the shade. Contains Metric and Imperial Values.
RelativeHumidity float Relative humidity. May be NULL.
DewPoint float Dew point temperature. Contains Metric and Imperial Values.
Wind_Direction_Deg float Wind direction in Azimuth degrees (e.g. 180 degrees is a wind coming from the south). May be NULL.
Wind_Direction string Direction abbreviated in the language specified by language code in URL.
Wind_Speed float Wind Speed. Contains Metric and Imperial Values.
WindGust_Speed float Wind gust speed. Contains Metric and Imperial Values.
UVIndex int32 Measure of the strength of the ultraviolet radiation from the sun. May be NULL.
UVIndexText string Text associated with the UVIndex.
Visibility float Visibility. Contains Metric and Imperial Values.
CloudCover float Number representing the percentage of the sky that is covered by clouds. May be NULL.
Ceiling float Cloud ceiling. Contains Metric and Imperial Values.
Pressure float Atmospheric pressure. Contains Metric and Imperial Values.
PressureTendencyText string Description of the pressure tendency in the language specified by language code in the URL.
Past24HTempDeparture float Departure from the temperature observed 24 hours ago. Contains Metric and Imperial Values.
ApparentTemp float Perceived outdoor temperature caused by the combination of air temperature, relative humidity, and wind speed. Contains Metric and Imperial Values.
WindChillTemp float Perceived air temperature on exposed skin due to wind. Contains Metric and Imperial Values.
WetBulbTemp float The temperature to which air may be cooled by evaporating water into it at constant pressure until it reaches saturation. Contains Metric and Imperial Values.
Precip1hr float Amount of precipitation (liquid water equivalent) that has fallen in the past hour. Contains Metric and Imperial Values.
TempSummary_Past6HRange_min float The minimum temperature observed over the past 6 hours. Contains Metric and Imperial Values.
TempSummary_Past6HRange_max float The maximum temperature observed over the past 6 hours. Contains Metric and Imperial Values.
TempSummary_Past12HRange_min float The minimum temperature observed over the past 12 hours. Contains Metric and Imperial Values.
TempSummary_Past12HRange_max float The maximum temperature observed over the past 12 hours. Contains Metric and Imperial Values.
TempSummary_Past24HRange_min float The minimum temperature observed over the past 24 hours. Contains Metric and Imperial Values.
TempSummary_Past24HRange_max float The maximum temperature observed over the past 24 hours. Contains Metric and Imperial Values.

Wetterdaten für die 1-tagiges Wettervorhersage

PHP-Script zum Abrufen der Wetterdaten von AccuWeather anpassen

Für Abrufen der Wetterdaten von AccuWeather und deren Weiterleitung an das CCU ist das PHP-Script verantwortlich. Das Skript kann hier heruntergeladen werden:

Herunterladen

Das heruntergeladene PHP-Skript soll mit eigenen Daten ergänzt werden:

In folgender Zeile soll die IP-Adresse von der CCU eingetragen werden: $ccuIP = "http://192.168.XXX.XXX";

Falls der PHP-Server sich nicht im lokalen Netzwerk befindet, kann hier auch die Webadrese der CCU eingetragen werden: $ccuIP = "http://ccu-adresse";. Die CCU soll in diesem Fall von Außen zugänglich sein.

In dieser Zeile soll Wetterstation-ID aus dem oberen Kapitel eingetragen werden: $wetterstationID = "XXXXXX";

Hier sollen Api-Keys (mindestens 1) eingetragen werden: $apiKeys = array("XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

Bei AccuWeather gibt es aktuelle eine Begrenzung der API-Aufrufe, es können insgesamt 50 API-Aufrufe pro Tag erfolgen. In dem PHP-Skript erfolgen zwei AccuWeather API-Aufrufe pro Skriptdurchlauf. Diese bedeutet, dass mit einem Api-Key können die Wetterdaten 25-mal pro Tag von AccuWeather abgerufen werden, mit zwei Api-Keys dementsprechend 50-mal usw.

Somit würde ich empfehlen, sich bei mehreren Accounts anzumelden und bei jedem Account einen Api-Key erstellen, um die Zeit zw. zwei Abrufen der Wetterdaten zu minimieren. Zeit zwischen zwei Aktualisierungen der Wetterdaten in Abhängigkeit von der Anzahl der Api-Keys zeigt folgende Tabelle:

Im nächsten Abschnitt des PHP-Skripts sollen nun die Homematic Systemvariablen mit den jeweiligen AccuWeather-Parametern verknüpft. Die Homematic-Systemvariable ist mit dem AccuWeather-Parameter verknüpft, wenn ise_id der zu verknüpfenden Systemvariable bei jeweiligem AccuWeather-Parameter eingetragen ist. Es ist nicht notwendig, alle AccuWeather-Parameter mit Homematic Systemvariablen zu verknüpfen.  Die Wetterdaten werden nur den Homematic Systemvariablen übergeben, deren ise_id bei den AccuWeather-Parametern eingetragen ist. Hier findet ihr die ise_id’s der zuvor angelegten Homematic Systemvariablen:  http://CCU-IP-Adresse/addons/xmlapi/sysvarlist.cgi .

Bei mir sieht es z. B. so aus:

//ise_id von Homematic Variablen (general)
$WeatherProvider_ise_id = "10735";  //als Wert wird immer "AccuWeather" übertragen

//ise_id von Homematic Variablen
//Wetter momentan
$WeatherText_ise_id = "10412"; 
$Temp_ise_id = "10409";
$RealFeelTemp_ise_id = "10491";
$RealFeelTempShade_ise_id = "10495";
$RelativeHumidity_ise_id = "10411";
$DewPoint_ise_id = "";
$Wind_Direction_Deg_ise_id = "";
$Wind_Direction_ise_id = "";
$Wind_Speed_ise_id = "10408";
$WindGust_Speed_ise_id = "";
$UVIndex_ise_id = "10492";
$UVIndexText_ise_id = "10493";
$Visibility_ise_id = "";
$CloudCover_ise_id = "";
...

Programm anlegen

Das Abrufen der Wetterdaten erfolgt mit einem Programm im Web-UI, das periodische ausgeführt wird. Dafür ein neues Programm anlegen.

Bedingung: Wenn…: Zeitsteuerung mit folgenden Einstellungen:

Der Zeitinterwall kann in Abhängigkeit von der Anzahl der AccuWeather-API-Keys entsprechend der oben aufgeführten Tabelle eingetragen werden. Bei einem Api-Key ist der Zeitintervall z. B. 57 min.

Hier nochmal die Tabelle:

Aktivität Dann…: Script

!Wetterdaten anfordern............................................................

string url="http://Adresse-des-PHP-Servers/Wetter/AccuWeather.php";

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();

!responce = "OK" bei erfolg oder "ERROR" beim Fehler

if (responce == "ERROR") {
  ! Hier können die Abläufe ausgeführt werden,
  ! wenn der PHP-Skript ein Fehler beim Abruf
  ! der Wetterdaten meldet
  
}

Die Zeile string url="http://Adresse-des-PHP-Servers/wetter/AccuWeather.php"; soll mit ihrer eigener Adresse des PHP-Servers ergänzt werden. Ich verwende einen lokalen PHP-Server, der auf Synology Diskstation läuft, deswegen sieht es bei mir so aus: string url="http://192.168.xxx.xxx/Wetter/AccuWeather.php";

Das war’s! Der PHP-Skript wird periodisch abgerufen, somit bekommen die Homematic-Variablen periodisch aktuelle Wetterdaten.

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

Für Anmerkungen, Vorschläge, Hinweise, Anregungen und konstruktive Kritik zu diesem Artikel bin ich euch dankbar!

Dieser Beitrag hat 25 Kommentare

  1. Hallo zusammen,

    ich bekomme seit heute 10:15 Uhr als Rückmeldung der PHP-Seite nur ein „ERROR“.

    Habe nicht geändert, Skript läuft normalerweise alle 5 Minuten mit 10 APIs, nach dem Fehlerfall reduziert es sich auf Stündlich… jedoch nun seit 2 Stunden keine Besserung.

    Lt. https://status.accuweather.com ist alles i.O.

    Wo sollte ich als erstes mal nachschauen?

    1. Ich werde mir die Situation mit dem php-Skript angucken, das Schwierige ist, dass bei mir alles funktioniert wie vorher…

      1. Habe gerade die debug-funktion entdeckt, hier die Ausgabe für ApiKey 0 – 9:

        jsonCurCond_HTTPCode: 503: ApiKey[0] (###) is inaktiv: The allowed number of requests has been exceeded
        Cenceling weather check with ApiKey[0] (###)

        ERROR 503: The allowed number of requests has been exceeded!!! ERROR

        Kann der Anbieter meine ApiKeys gesperrt haben? Oder muss ich die von Zeit zu Zeit erneuern? Lief Wochenlang ohne Probleme.

        1. Der Server meldet zurück, dass du die maximale Anzahl der API-Abrufe mit dem jeweiligen API-Key erreicht hast. Normalerweise 5 Minuten mit 10 APIKeys geht (wenn bei AccuWeather nichts verändert wurde). Versuch mal einen Tag Pause zu machen, und stell dann das Abrufintervall auf 6-7 Minuten. Gesperrt sind die auf jeden Fall nicht, da wäre es eine andere Fehlermeldung. Erneuern musst du die nicht, bei mir laufen 5 Keys schon seit einem Jahr…

          1. Habe es nun eine Stunde komplett ausgeschaltet – und siehe da – es geht wieder! (Stand 13:15 Uhr)
            Danke nochmals für die tolle Arbeit und die Anleitung! Funktioniert Wunderbar!
            Danke auch für die schnelle Antwort! Gefällt mir! Daumen hoch und so nen „Herz“ 🙂

  2. Ein super Skript. Ich bin gerade dabei daraus zwei Skripte zu machen – eines für das aktuelle Wetter und eines für den Forecast. So kann ich die Nutzung des API-Keys ökonomischer gestalten. Der Forecast wird sich ja auch nicht alle Stunde ändern. Hier plane ich 4x am Tag ein (00 Uhr sowie Zeitraum alle 6 Stunden zwischen 06 und 20 Uhr). So kann ich das aktuelle Wetter alle 32 Minuten abholen und brauche nur einen API Key (mit zwei API Keys natürlich alle 15 Minuten).

    1. Das ist eine gute Idee, habe ich leider nicht daran gedacht.

  3. Hallo zusammen

    Ich krieg das scirpt nicht zum laufen 🙁 Ich habe heute eingerichtet wie beschrieben, ebenfalls auf der synology.
    Habe den mal die seite mittels Synology IP://AccuWeather.php im Browser aufegerufen und es kam eine Rückmeldung „OK“!

    Dann habe ich die variable auf der CCU eingerichtet und den Script gestart, siehe das es ging der Wert wurde eingetragen!
    Ohne das ich irgendwas abgeändert habe gehts jetzt nicht mehr. Wenn ich wieder die Datei im Browser ausführe, kommt ketzt keine „OK“ rückmeldung mehr und es passiert einfach nix.

    Kann mir jemand helfen?

    1. versuche mal das Skript so auszuführen: http:\\…\getAccuWeather.php?debug=true
      und poste hier, was im Browser stehen wird.

  4. Hallo DImitri

    Besten Dank für deine Rückantwort. Folgende Ausgabe erhalte ich dann:
    wetterstationID: 31662XXXX
    apiKey[0]: tdQqdqdw3ZqUXXXX
    apiKey[1]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    apiKey[2]: XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    ccuIP: http:/192.168.2.26

    1. Es ist wirklich seltsam, dass es bei dir nicht funktioniert. Ab Zeile 182 bricht das Skript bei dir ab. Hast du curl-Erweiterung bei den PHP-Einstellungen aktiviert?

  5. Du meinst bei der synology oder? Habe eigendlich alles so gemacht wie von dir oben beschrieben. Und die Abfrage hat einmal geklappt und nacher nicht mehr, aber hatte nichts verstellt.

  6. Also hab jetzt nochmals probiert und siehe da es geht wieder! Hmm eigendlich bin ich froh, aber hätte schon gerne gewusst woran es lag. Werde es mal im Auge behalten und ggf wieder berichten!

    Besten Dank für deine Hilfe

    1. Es freut mich, dass alles funktioniert, leider habe ich auch nicht verstanden, voran das Problem lag. Bei mir hat so was noch nicht vorgekommen.

  7. Hallo, ich würde ebenfalls gern die Wetterdaten über dieses Script abrufen. Allerdings würde ich gern meinen vorhanden Strato Zugang verwenden, der ebenfalls die Php fähig ist. Wie muss ich hier vorgehen?

    1. Ich weiß nicht, wie es bei Strato geht, rein theoretisch soll es aber ähnlich funktionieren. Das Skript auf dem Server zu speichern und es abrufen, sodass es ausgeführt wird. Wichtig dabei ist, dass cURL aktiviert werden soll. Soweit ich weiß, es ist nicht in allen Paketen enthalten.

  8. Vielen Dank für die Info. Ich habe das STRATO PowerWeb Starter Paket. cURL ist in dem Paket enthalten. Wie muss ich cURL aktivieren? Sorry ist für mich absolutes Neuland.

    1. Hallo, soweit ich weiß, curl braucht man bei strato nicht extra aktivieren. Wenn curl in deinem strato-Paket enthalten ist, ist es schon aktiviert. Allerdings kenne ich mich mit strato schlecht aus.

  9. Hab noch ne Frage. Kann ich als Fernzugriff auf die CCU auch den cloudmatic Zugang verwenden?

    1. Ja, dafür ist es auch gedacht, allerdings man muss da ein Abo abschließen und monatlich was bezahlen. Dafür ist es die sicherste und einfachste Möglichkeit für den Fernzugriff.

  10. Hallo Dimitri,

    Danke für die Scriptvorlage!!

    Ich habe das Script nun auf einem Raspi laufen und schreibe damit in die Homematic-Variablen.
    Ich möchte gerne den 5-Tages-Forecast verwenden und mir die Tage 1 (Morgen) bis 3 (in 3 Tagen) in meine Variablen schreiben.

    1) Wie kann ich die Variablen der Forecast-Daten (Tag 1-3) abfragen?

    2) Gibt es ein Script oder eine Vorlage, mit der ich mir die PHP-Code-Teile (für die jeweiligen Variablen) generieren kann? Ich schreibe mir auch gerne Excel-Script zur Generierung. Dazu müsste ich aber die Parameter verstehen, die in jeden Block einzusetzen sind.

    3) In mein Script werde ich noch eine Parameterübergabe mit einbauen, damit man Sprache, Wetterort-ID und auch die API-Keys mit übergeben kann.

    Grüße
    Bernd

  11. Hi,

    ich bin Dir schon mal sehr dankbar für eine Lösung bzgl. Wetterdaten und dann noch per Syno ist wirklich perfekt!

    Hab nur leider das Problem, dass bei mir die Daten vom Syno scheinbar nicht weiter geleitet werden.

    Folgendes habe ich gemacht:
    anhand Deiner Beschreibung die webstation gestartet und eingerichtet, deine PHP bzgl. CCU IP, Station und Keys angepasst und dann im Ordner web/AccuWeather/ abgelegt.

    Beim Aufruf über den Browser kommt die Rückmeldung „OK“ der PHP, allerdings wird in die Variable „WeatherText“ nur ??? geschrieben (mehr Variablen wollte ich erstmal nicht anlegen) 😉

  12. Hallo Dimitri,

    ich habe nun einige Anpassungen am Script vorgenommen und auch herausgefunden, dass ich über die entsprechende Zahl in den Klammern [0-5] die Werte der jeweiligen Forcastdaten auslesen kann.
    Das ist schon mal gut.

    Bei einigen Variablen habe ich nun das Problem, dass es bei der Übertragung zur Homematic zu Fehlern kommt, was sich mir nicht erschließt, was ich falsch mache. Im Fehlerprotokoll steht nichts dazu drinnen.

    Hier ein paar Beispiele:

    if ($Headline_EffectiveEpochDate !== „“) {
    $tmp_EffectiveEpocheDate = date(‚d.m.Y H:i:s‘, $accuWeatherDaily1D->Headline->EffectiveEpochDate);
    echo “ tmpEffectiveEpochDate: „, $tmp_EffectiveEpocheDate;
    //Dieser Aufruf funktioniert nicht. Es steht auch kein Fehler im Fehlerprotokoll.
    curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $Headline_EffectiveEpochDate . „&new_value=“ . $tmp_EffectiveEpocheDate);
    //Workaround für darüberstehenden Aufruf
    //curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $Headline_EffectiveEpochDate . „&new_value=“ . $accuWeatherDaily1D->Headline->EffectiveDate);
    curl_exec($curl);
    $curlStatusCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
    if ($debug == true) {echo “ => Sending to Homematic. Response from Homematic: „, $curlStatusCode, „„;};
    }

    Ergebnis im Debug-Aufruf:
    Headline->EffectiveEpochDate: 1556431200
    tmpEffectiveEpochDate: 28.04.2019 08:00:00 => Sending to Homematic. Response from Homematic: 400

    Ferner habe ich auch bei den Phrases (Iconphrase, ShortPhrase, Longphrase) der Forecasts ein Übertragungsproblem.
    Hier ein Ausschnitt des LongPhrase:
    if ($debug == true) {echo “ DailyForecasts->Day->LongPhrase: „, $accuWeatherDaily1D->DailyForecasts[0]->Day->LongPhrase;};
    if ($DailyForecasts0_Day_LongPhrase !== „“) {
    curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $DailyForecasts0_Day_LongPhrase . „&new_value=“ . $accuWeatherDaily1D->DailyForecasts[0]->Day->LongPhrase);
    curl_exec($curl);
    curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $DailyForecasts1_Day_LongPhrase . „&new_value=“ . $accuWeatherDaily1D->DailyForecasts[1]->Day->LongPhrase);
    curl_exec($curl);
    curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $DailyForecasts2_Day_LongPhrase . „&new_value=“ . $accuWeatherDaily1D->DailyForecasts[2]->Day->LongPhrase);
    curl_exec($curl);
    curl_setopt($curl, CURLOPT_URL, $ccuIP . „/addons/xmlapi/statechange.cgi?ise_id=“ . $DailyForecasts3_Day_LongPhrase . „&new_value=“ . $accuWeatherDaily1D->DailyForecasts[3]->Day->LongPhrase);
    curl_exec($curl);
    $curlStatusCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);
    if ($debug == true) {echo “ => Sending to Homematic. Response from Homematic: „, $curlStatusCode, „„;};
    }

    Ergebnis im Debug-Aufruf:
    DailyForecasts->Day->IconPhrase: Schauer => Sending to Homematic. Response from Homematic: 400
    DailyForecasts->Day->ShortPhrase: Vereinzelte Schauer => Sending to Homematic. Response from Homematic: 200
    DailyForecasts->Day->LongPhrase: Überwiegend bewölkt, einige Schauer; kalt => Sending to Homematic. Response from Homematic: 400

    Interessanterweise liest er ja die Einträge von AccuWeather. Nur die Übertragung funkioniert nicht. Die Homematic-Variablen sind allegar Zeichenketten.

    Ich hoffe, Du hast hier eine Idee, wie ich diese Teile auch noch rüber bekomme.
    Der Rest klappt schon ganz gut.

    Viele Grüße
    Bernd

    1. Hi, ich habe das gleiche Problem. Var WeatherText mit Typ „Zeichenkette“ wird nur übertragen, wenn der Wert z.B. „Schauer“ ist. Wenn dieser „leichter Schauer“ ist kommt der 400er Error.

  13. Hallo! Erst einmal vielen Dank für dieses Script. Ich habe es auf meinem Server per Cron Job am laufen und lasse damit meine Homematic (auf Raspberry Pi) befüllen. Ich habe aber das gleiche Problem wie oben beschrieben. Sobald eine Zeichenkette (z.B. die DF_Day_ShortPhrase) mehrere Wörter enthält, funktioniert die Übertragung nicht. Die Homeatic Variable ist dann ???. Enthält die Zeichenkette hingegen nur ein Wort (wie Regen) zeigt die Homatic die Variable richtig an.
    Bitte um Hilfe! Das wäre richtig toll, wenn das gefixed wird.
    Danke!

Schreibe einen Kommentar

Menü schließen