Wettervorhersage über AccuWeather

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Wettervorhersage über AccuWeather

Beitrag von MichaelN » 15.06.2020, 11:20

Da ich (für meinen Standort) mit der Wettervorhersage von OpenWeatherMap sehr unzufrieden war - die Abweichungen waren einfach zu gravierend - habe ich nochmal eine Version für AccuWeather erstellt:


Was macht das Skript:
es kann die 12-h-Wettervorhersage von AccuWeather abrufen und in Systemvariablen schreiben. Dabei kann man frei definieren, welche Werte abgerufen werden sollen und wahlweise Durchschnitt, min und/oder max schreiben lassen. Windgeschwindigkeit wird (wahlweise) in km/h umgerechnet. Regen kann wahlweise als Durchschnitt oder Gesamtmenge ermittelt werden.

Was kann man damit machen:
Zum Beispiel anhand der Vorhersage für Bewölkung die Rolläden zur Beschattung steuern oder mit der Temperaturvorhersage die Heizung oder mit den Daten zur Regenmenge die Beregnungsanlage im Garten.

Was macht es nicht:
- es gibt keine Texte oder Piktogramme aus
- es legt keine Systemvariablen an, das muss man schon selber machen. Da das aber eine einmalige Sache ist, sollte das zu schaffen sein. Die Systemvariablen müssen vom Typ Zahl (optional Logik oder Text) sein und einen ausreichend großen Wertebereich haben. Der Name der SV's ist frei wählbar; sollte sicherheitshalber einmalig sein (also nicht identisch mit Programm, Gerät oder Kanal-Namen) und wird dann im Deklarationsteil des Skripts in die Listen NameSVavg0, etc. eingetragen. Vorschlag für typische Daten:
  • Temperatur -50 - 50 (°C)
  • Luftfeuchte 0 - 100 (%)
  • Niederschlag 0 - 1000 (mm)
  • Windgeschwindigkeit 0 - 300 (km/h)
- es schreibt keine Werte in eine virtuelle Wetterstation. Das aber ist ja kein großes Hexenwerk und das kann sich dann jeder nach Wunsch anpassen.

Ein alternativer Ansatz: mit meinem JSON-Skript kann man nahezu jeden übermittelten Wert in eine Systemvariable übertragen ohne größeren Konfigurationsaufwand. Dafür sind die Daten dann "pur". Was zugegebenermaßen eher für stündliche Daten Sinn macht.

Vorraussetzungen:
CCU mit Firmware ab 3.45.7
optional Addon CUxD installiert

benötigte Fähigkeiten:
Grundlegendes Verständnis von IT
Grundkenntnisse in der WebUI-Programmierung (Anlernen von Geräten, Anlegen und Ändern von Programmen, Einfügen von Skripten)
Grundkenntnisse in der Skript-Programmierung (einfache Anpassungen, korrektes und akkurates Setzen von " oder ,)
optional Anlegen und Konfigurieren von CUxD-Geräten
Anlegen von Systemvariablen

Was ist zu tun:

1) free API-Key beantragen: https://developer.accuweather.com/
Nach dem Einloggen siehe My Apps / Add a new App

2) Orts-ID des eigenen Orts herausfinden - in AccuWeather nach dem eigenen Ort suchen. Die Nummer am Ende der URl ist die Orts-ID. Oder man nutzt die entsprechende API
Hier z.B. 178087 für Berlin:
https://www.accuweather.com/de/de/berli ... ast/178087
Unsicher, was gemeint ist? Siehe viewtopic.php?f=18&t=59370&start=100#p763561

Code: Alles auswählen

!-=== Hier anpassen ===
string OrtsID = "123456";                           !- Hier ID für den Ort eintragen
string APIKey = "AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDD"; !- Hier API-Key eintragen
string CUXD_Device = "CUxD.CUX2801001:1";           !- Hier CUxD-Device konfigurieren   
Hier im Skript die ermittelten Keys eintragen, ggf. das für den System.Exec-Ersatz / Datenabruf per HTTP benutzte CUxD-Gerät (CUxD-Gerätetyp (28) System) anpassen. Ggf. vorher CUxD installieren. Fragen dazu? Siehe Link

Es kann auch nicht schaden sich den Timeout für den genutzten CUxD-Kanal anzusehen (Eigenschaft EXEC_TIMEOUT in den Geräteeinstellungen - 1 Minute maximal. Wenn der Server bis dahin keine Antwort geliefert hat, kommt auch keine mehr)

(Neu in V1.6) Hat man CUxD nicht installiert oder will man es nicht für diesen Zweck nutzen, dann lässt man den Eintrag leer:

Code: Alles auswählen

string CUXD_Device = "";           !- Hier CUxD-Device konfigurieren
3) Das Skript ruft die 12h Vorhersage ab. Ein Aufruf alle 12 Stunden wäre daher sinnvoll. Man hat 50 freie Abrufe in 24 Stunden. Wird das überschritten, gibt es keine Daten... Ändert man in den Parametern den Wert "Stunden" auf 1, dann kann man mit einem stündlichen Abruf die Daten für die jeweils nächste Stunde erhalten. Häufigere Abrufe sind allerdings recht sinnfrei! Wohlgemerkt es handelt sich um Vorhersagen, also keine aktuellen Messdaten. Dafür gibt es bei AccuWeather eine andere API, die prinzipiell mit diesem Programm auch nutzbar wäre, wenn man die URL anpasst und ggf. die Tags. Aber die 50 Abrufe pro Tag bleiben das Limit beim kostenlosen Zugang.

4) Dieses Skript einfügen und im Deklarationsteil sorgfältig anpassen.Insbesondere sind wahlweise die im Skript unter string NameSVavg0 und folgende genannten Systemvariablen anzulegen oder man trägt dort Namen bereits existierender SV ein. Existiert eine SV nicht, passiert nichts weiter, diese wird einfach ignoriert. Braucht man einen Wert nicht, dann kann man den Eintrag für die SV löschen - aber Achtung nicht das Komma löschen!

Nicht vergessen vorher die Systemvariablen anzulegen, die die Daten aufnehmen sollen. Die Systemvariablen müssen vom Typ Zahl sein (Ausnahme ist weiter unten beschrieben) und einen ausreichend großen Wertebereich haben. Der Name der SV's ist frei wählbar; sollte sicherheitshalber einmalig sein (also nicht identisch mit Programm, Gerät oder Kanal-Namen) und wird dann im Deklarationsteil des Skripts in die Listen NameSVavg0, etc. eingetragen. Vorschlag für typische Daten:
  • Temperatur -50 - 50 (°C)
  • Luftfeuchte / Bewölkungsgrad 0 - 100 (%)
  • Niederschlag 0 - 1000 (mm)
  • Windgeschwindigkeit 0 - 300 (km/h)
Das Skript liefert so wie es ist die Daten für Temperatur, gefühlte Temperatur, Luftfeuchtigkeit, Bewölkungsgrad und Regenmenge. Ausserdem werden in den SV FC-Timestamp-von und ...-bis der Timestamp der ersten und letzten Vorhersage abgelegt. Und in der Zeichenketten-Variable FC_Text_Phrase wird die Wetterbeschreibung je Stunde abgelegt. Braucht man mehr oder weniger Daten muss man die Konfigurationsdaten anpassen. Die Konfigurationsdaten bestehen immer aus einer Auflistung, die durch Komma getrennt ist. Entsprechend wird in jeder Konfigurationsvariablen die gleiche Anzahl von Einträgen erwartet! (weiter unten verschiedene Beispiele)

Code: Alles auswählen

!-=== Hier anpassen ===
integer AnzahlTags        = 7; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'Temperature,RealFeelTemperature,RelativeHumidity,CloudCover,TotalLiquid,EpochDateTime,IconPhrase';     !-XML-Start-Tag
string xmlTagEnd          = 'RealFeelTemperature,WetBulbTemperature,IndoorRelativeHumidity,MobileLink,Rain,WeatherIcon,Precipitation'; !-XML-End-Tag
string xmlWertStart       = 'Value,Value,:,:,Value,:,:'; !-Suchstring vor dem Wert
string xmlWertEnd         = 'Unit,Unit,",",Unit,",Has';    !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7,1,1,7,1,2";             !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9,9,2,2,9,2,5";             !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0         = "Forecast_Temp_AVG,FC_feel_AVG,Forecast_Feuchte_AVG,FC_Wolken_AVG,FC_Regen_gesamt,,FC_Text_Phrase";      !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0         = "FC_Temp_min,FC_feel_min,FC_Feuchte_min,FC_Wolken_min,FC_Regen_min,FC-Timestamp-von,";	  !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0         = "FC_Temp_max,FC_feel_max,FC_Feuchte_max,FC_Wolken_max,FC_Regen_max,FC-Timestamp-bis,";	  !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 4;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer WindFlag          = 999;    ! Position der Winddaten (zur Umrechnung von km/h in m/s) - auf 999 setzen, wenn keine Umrechnung gewünscht oder kein Wind ausgewertet werden soll
integer Stunden           = 12;     !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
boolean SAVE              = true;   !- in SV speichern: auf false für Testbetrieb, sonst true
1) AnzahlTags: löscht man Werte oder fügt welche hinzu => hier Anzahl anpassen! Die Wertelisten müssen immer genau soviele Einträge enthalten, die hier angegeben ist.
2) xmlTagStart und xmlTagEnd: der Text, der den jeweiligen Wert im JSON einrahmt (kann man sich im Browser ansehen)
3) xmlWertStart und xmlWertEnd: Texte vor und hinter dem gesuchten Wert. Man kann - wie bei xmlWertEnd gezeigt auch nach " suchen, muss den String dann aber vorne und hinten mit ' statt wie üblich mit " einrahmen!
4) xmlWertStartOffset und xmlWertEndOffset: entsprechend anpassen, Erklärung im Quelltext

Woher weiß man, was man unter xmlTagStart oder xmlWertEnd eintragen muss? Einfach nach diesem Schema vorgehen:
Konfiguration Wettervorhersage.jpg
Siehe auch Beispiel für Wind im nächsten Beitrag!

Hier beispielsweise die Ausgabe der API. Anhand dieses Aufbaus kann man die Parameter für weitere Werte anpassen. Erweitert man die Parameter, dann muss man beachten, das der Suchstring möglichst eindeutig ist! Will man Rain auswerten, dann darf man nicht nur nach Rain suchen, da dann das vorherige RainProbability gefunden wird. Also dann nach Rain" (mit ") suchen. Hat man den gesuchten Wert sauber durch einen Suchbegriff vorher und nachher definiert, dann muss man nur noch beachten, das die Suchbegriffe für xmlWertStart und xmlWertEnd innerhalb dieses eingegrenzten Bereichs eindeutig sind. Der End-Begriff wird immer NACH dem Vorkommen des Start-Begriff gesucht. Wichtig: setzt man ein " als Suchbegriff ein, muss die gesamte Werteliste in ' (Hochkomma) statt " (Anführungszeichen) gesetzt werden, wie bei xmlWertEnd gezeigt!

Code: Alles auswählen

[
  {
    "DateTime": "2020-06-15T15:00:00+02:00",
    "EpochDateTime": 1592226000,
    "WeatherIcon": 6,
    "IconPhrase": "Stark bewölkt",
    "HasPrecipitation": false,
    "IsDaylight": true,
    "Temperature": {
      "Value": 22.7,
      "Unit": "C",
      "UnitType": 17
    },
    "RealFeelTemperature": {
      "Value": 23.9,
      "Unit": "C",
      "UnitType": 17
    },
    "WetBulbTemperature": {
      "Value": 15.5,
      "Unit": "C",
      "UnitType": 17
    },
    "DewPoint": {
      "Value": 10.7,
      "Unit": "C",
      "UnitType": 17
    },
    "Wind": {
      "Speed": {
        "Value": 11.1,
        "Unit": "km/h",
        "UnitType": 7
      },
      "Direction": {
        "Degrees": 288,
        "Localized": "WNW",
        "English": "WNW"
      }
    },
    "WindGust": {
      "Speed": {
        "Value": 16.7,
        "Unit": "km/h",
        "UnitType": 7
      }
    },
    "RelativeHumidity": 47,
    "IndoorRelativeHumidity": 47,
    "Visibility": {
      "Value": 16.1,
      "Unit": "km",
      "UnitType": 6
    },
    "Ceiling": {
      "Value": 4359,
      "Unit": "m",
      "UnitType": 5
    },
    "UVIndex": 3,
    "UVIndexText": "Mittel",
    "PrecipitationProbability": 34,
    "RainProbability": 34,
    "SnowProbability": 0,
    "IceProbability": 0,
    "TotalLiquid": {
      "Value": 0,
      "Unit": "mm",
      "UnitType": 3
    },
    "Rain": {
      "Value": 0,
      "Unit": "mm",
      "UnitType": 3
    },
    "Snow": {
      "Value": 0,
      "Unit": "cm",
      "UnitType": 4
    },
    "Ice": {
      "Value": 0,
      "Unit": "mm",
      "UnitType": 3
    },
    "CloudCover": 80,
    "MobileLink": "http://m.accuweather.com/de/de/sterkrade/46145/hourly-weather-forecast/170293?day=1&hbhhour=15&unit=c",
    "Link": "http://www.accuweather.com/de/de/sterkrade/46145/hourly-weather-forecast/170293?day=1&hbhhour=15&unit=c"
  },
5) nameSVavg0, nameSVmin0, nameSVmax0: Diese Variablen beinhalten die Namen der Systemvariablen, die den Durchschnittswert (avg), das Minimum (min) und Maximum (max) aufnehmen. Diese SV's müssen vorher in der WebUI als Zahlenwert angelegt werden. Für Werte die man nicht benötigt, kann man die SV weglassen. Wichtig ist kein Leerzeichen stehen lassen, aber das Komma.
z.B.
string NameSVavg0 = ",,,,,";
würde keinerlei Durchschnittswerte abspeichern
string NameSVmax0 = "Forecast_Temp,,Forecast_Feuchte,,,";
speichert Maximalwerte für Temperatur und Feuchtigkeit in den SVs Forecast_Temp und Forecast_Feuchte - und sonst nichts

EDIT: Die V1.3 kann nun auch mit Systemvariablen des Typs String umgehen. Damit ist es nun prinzipiell möglich auch Text abzufragen. ABER: da man aus Texten schlecht einen Mittelwert oder min/max ermitteln kann.... funktioniert das nur mit den Variablennamen, die unter NameSVavg0 eingetragen sind. Gespeichert werden alle ausgelesenen Texte in einer Tabulator (Trennzeichen kann man anpassen, siehe Variable Trenner im Deklarationsteil) getrennten Liste, die man z.B. mit foreach weiter verarbeiten kann. Ich habe es hier im Beispiel mal mit "IconPhrase" gezeigt. Dafür muss eine Systemvariable "FC_Text_Phrase" mit dem Typ Zeichenkette angelegt sein. Und fragt man nun 12 Stunden ab, bekommt man die IconPhrasen der 12 Stunden angezeigt.

Ab V1.8 kann das Skript auch mit Systemvariablen Typ Logik umgehen. Das macht natürlich nur Sinn, wenn an der Stelle auch nur boolesche Werte (true/false) geliefert werden. Dann wird der max-Wert true annehmen, wenn mindestens einmal true enthalten war. Der min-Wert wird false, wenn mindestens einmal false enthalten war. Der avg-Wert wird true, wenn die meisten übermittelten Werte true waren, ansonsten false. Damit das funktioniert, muss in NameSVavg0 der Name einer Systemvariable Typ Logik eingetragen sein. Auch wenn man den avg-Wert gar nicht braucht. Man kann dann die gleiche SV wie für min oder max eintragen. Der avg-Wert wird dann überschrieben.

6) RegenFlag: Position der Regendaten in der Auflistung. Dabei startet die Zählung mit 0. Gibt man hier die korrekte Position an, wird die Gesamtmenge für den gewählten Zeitraum [siehe 8 ) Stunden] ermittelt. Will man den Durchschnitt, oder wertet gar keinen Regen aus, dann trägt man hier 999 ein.
7) WindFlag: Position der Winddaten in der Auflistung. Dabei startet die Zählung mit 0. Gibt man hier die korrekte Position an, wird die Windgeschwindigkeit in m/s umgerechnet. Will man km/h, oder wertet gar keinen Wind aus, dann trägt man hier 999 ein. (Neu in V1.4)
8 ) Stunden: Anzahl der Stunden, die ausgewertet werden. Die API liefert max. 12, größere Zahlen führen zu nichts. Weniger als 1 auch nicht. Will man z.B. nur die Daten der nächsten 3 Stunden wissen, trägt man dort 3 ein.
9 ) SAVE: dient zum Debugging. Insbesondere wenn man in seinen Programmen auf Änderungen der beschriebenen SV's reagiert, kann es ganz hilfreich sein, das während der Testphase nicht ständig irgendwelche Dinge triggern. Trägt man bei SAVE false ein, dann kann man unter "Skript testen" alle Debuggingausgaben sehen, ohne das die SV geändert werden! Dazu kann ich auch nur dringend beim Anpassen von Parametern raten, das ganze erst einmal im "Skript testen" Fenster laufen zu lassen, damit man den Erfolg der Maßnahmen überprüfen kann. War der Test erfolgreich, endet die Debugging-Ausgabe mit:

Code: Alles auswählen

*Temperature* avg/min/max:18.1/16.4/19.5
*RealFeelTemperature* avg/min/max:17.2/16.0/17.8
*RelativeHumidity* avg/min/max:77.8/68.0/94.0
*CloudCover* avg/min/max:88.8/71.0/98.0
*TotalLiquid* avg/min/max:1.2/0.0/0.4
*EpochDateTime* avg/min/max:1629376200.0/1629356400.0/1629396000.0
*IconPhrase* avg/min/max:Wolkig	Stark bewölkt	Stark bewölkt	Stark bewölkt	Schauer	Wolkig	Schauer	Schauer	Wolkig	Stark bewölkt	Stark bewölkt	Heiter bis wolkig/3000000000.0/-1000.0

Tip für die Testphase: um die 50 freien Abfragen pro Tag nicht aufzubrauchen kann man den API-Abruf durch statische Testdaten ersetzen.
Dazu diese Zeilen suchen

Code: Alles auswählen

if ( !CUXD_Device ) {
! system.exec
system.Exec(func, &recXML, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(func);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
recXML = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
und ersetzen durch:

Code: Alles auswählen

recXML='[{"DateTime":"2021-08-19T09:00:00+02:00","EpochDateTime":1629356400,"WeatherIcon":7,"IconPhrase":"Wolkig","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":16.4,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":16.0,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":16.0,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.9,"Unit":"C","UnitType":17},"DewPoint":{"Value":15.4,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":11.1,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":231,"Localized":"SW","English":"SW"}},"WindGust":{"Speed":{"Value":18.5,"Unit":"km/h","UnitType":7}},"RelativeHumidity":94,"IndoorRelativeHumidity":75,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":47,"ThunderstormProbability":9,"RainProbability":47,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":92,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":3.4,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=9&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=9&unit=c"},{"DateTime":"2021-08-19T10:00:00+02:00","EpochDateTime":1629360000,"WeatherIcon":6,"IconPhrase":"Stark bewölkt","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":16.8,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":16.6,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":15.6,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.8,"Unit":"C","UnitType":17},"DewPoint":{"Value":15.1,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":11.1,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":232,"Localized":"SW","English":"SW"}},"WindGust":{"Speed":{"Value":16.7,"Unit":"km/h","UnitType":7}},"RelativeHumidity":90,"IndoorRelativeHumidity":73,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":43,"ThunderstormProbability":8,"RainProbability":43,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":87,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":4.4,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=10&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=10&unit=c"},{"DateTime":"2021-08-19T11:00:00+02:00","EpochDateTime":1629363600,"WeatherIcon":6,"IconPhrase":"Stark bewölkt","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":17.1,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.4,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":15.9,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.7,"Unit":"C","UnitType":17},"DewPoint":{"Value":14.6,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":13.0,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":232,"Localized":"SW","English":"SW"}},"WindGust":{"Speed":{"Value":18.5,"Unit":"km/h","UnitType":7}},"RelativeHumidity":85,"IndoorRelativeHumidity":71,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":1981.0,"Unit":"m","UnitType":5},"UVIndex":2,"UVIndexText":"Niedrig","PrecipitationProbability":43,"ThunderstormProbability":8,"RainProbability":43,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":81,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":5.5,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=11&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=11&unit=c"},{"DateTime":"2021-08-19T12:00:00+02:00","EpochDateTime":1629367200,"WeatherIcon":6,"IconPhrase":"Stark bewölkt","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":17.6,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.5,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":16.2,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.6,"Unit":"C","UnitType":17},"DewPoint":{"Value":14.0,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":13.0,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":234,"Localized":"SW","English":"SW"}},"WindGust":{"Speed":{"Value":18.5,"Unit":"km/h","UnitType":7}},"RelativeHumidity":80,"IndoorRelativeHumidity":68,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":2,"UVIndexText":"Niedrig","PrecipitationProbability":47,"ThunderstormProbability":9,"RainProbability":47,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":87,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":5.3,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=12&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=12&unit=c"},{"DateTime":"2021-08-19T13:00:00+02:00","EpochDateTime":1629370800,"WeatherIcon":12,"IconPhrase":"Schauer","HasPrecipitation":true,"PrecipitationType":"Rain","PrecipitationIntensity":"Light","IsDaylight":true,"Temperature":{"Value":18.1,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":16.6,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":15.6,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.6,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.7,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":14.8,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":238,"Localized":"WSW","English":"WSW"}},"WindGust":{"Speed":{"Value":18.5,"Unit":"km/h","UnitType":7}},"RelativeHumidity":75,"IndoorRelativeHumidity":67,"Visibility":{"Value":9.7,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":51,"ThunderstormProbability":10,"RainProbability":51,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.4,"Unit":"mm","UnitType":3},"Rain":{"Value":0.4,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":92,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":4.9,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=13&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=13&unit=c"},{"DateTime":"2021-08-19T14:00:00+02:00","EpochDateTime":1629374400,"WeatherIcon":7,"IconPhrase":"Wolkig","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":18.6,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.8,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":16.9,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.7,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.6,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":14.8,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":243,"Localized":"WSW","English":"WSW"}},"WindGust":{"Speed":{"Value":20.4,"Unit":"km/h","UnitType":7}},"RelativeHumidity":72,"IndoorRelativeHumidity":66,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":44,"ThunderstormProbability":8,"RainProbability":44,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":98,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":4.3,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=14&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=14&unit=c"},{"DateTime":"2021-08-19T15:00:00+02:00","EpochDateTime":1629378000,"WeatherIcon":12,"IconPhrase":"Schauer","HasPrecipitation":true,"PrecipitationType":"Rain","PrecipitationIntensity":"Light","IsDaylight":true,"Temperature":{"Value":18.9,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":16.8,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":16.8,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.7,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.4,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":14.8,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":247,"Localized":"WSW","English":"WSW"}},"WindGust":{"Speed":{"Value":20.4,"Unit":"km/h","UnitType":7}},"RelativeHumidity":70,"IndoorRelativeHumidity":65,"Visibility":{"Value":11.3,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":52,"ThunderstormProbability":10,"RainProbability":52,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.4,"Unit":"mm","UnitType":3},"Rain":{"Value":0.4,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":97,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":4.1,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=15&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=15&unit=c"},{"DateTime":"2021-08-19T16:00:00+02:00","EpochDateTime":1629381600,"WeatherIcon":12,"IconPhrase":"Schauer","HasPrecipitation":true,"PrecipitationType":"Rain","PrecipitationIntensity":"Light","IsDaylight":true,"Temperature":{"Value":19.5,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.4,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":17.4,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":16.1,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.6,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":14.8,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":251,"Localized":"WSW","English":"WSW"}},"WindGust":{"Speed":{"Value":20.4,"Unit":"km/h","UnitType":7}},"RelativeHumidity":68,"IndoorRelativeHumidity":67,"Visibility":{"Value":11.3,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":52,"ThunderstormProbability":10,"RainProbability":52,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.4,"Unit":"mm","UnitType":3},"Rain":{"Value":0.4,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":97,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":3.7,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=16&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=16&unit=c"},{"DateTime":"2021-08-19T17:00:00+02:00","EpochDateTime":1629385200,"WeatherIcon":7,"IconPhrase":"Wolkig","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":18.9,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.8,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":17.8,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.8,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.5,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":13.0,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":254,"Localized":"WSW","English":"WSW"}},"WindGust":{"Speed":{"Value":18.5,"Unit":"km/h","UnitType":7}},"RelativeHumidity":71,"IndoorRelativeHumidity":66,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":1,"UVIndexText":"Niedrig","PrecipitationProbability":40,"ThunderstormProbability":8,"RainProbability":40,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":96,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":3.2,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=17&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=17&unit=c"},{"DateTime":"2021-08-19T18:00:00+02:00","EpochDateTime":1629388800,"WeatherIcon":6,"IconPhrase":"Stark bewölkt","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":18.6,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.5,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":17.5,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.7,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.6,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":11.1,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":260,"Localized":"W","English":"W"}},"WindGust":{"Speed":{"Value":16.7,"Unit":"km/h","UnitType":7}},"RelativeHumidity":73,"IndoorRelativeHumidity":66,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":0,"UVIndexText":"Niedrig","PrecipitationProbability":34,"ThunderstormProbability":6,"RainProbability":34,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":88,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":2.8,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=18&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=18&unit=c"},{"DateTime":"2021-08-19T19:00:00+02:00","EpochDateTime":1629392400,"WeatherIcon":6,"IconPhrase":"Stark bewölkt","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":18.3,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.8,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":17.8,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.8,"Unit":"C","UnitType":17},"DewPoint":{"Value":13.9,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":9.3,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":268,"Localized":"W","English":"W"}},"WindGust":{"Speed":{"Value":14.8,"Unit":"km/h","UnitType":7}},"RelativeHumidity":75,"IndoorRelativeHumidity":68,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":549.0,"Unit":"m","UnitType":5},"UVIndex":0,"UVIndexText":"Niedrig","PrecipitationProbability":37,"ThunderstormProbability":7,"RainProbability":37,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":79,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":1.9,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de?day=1&hbhhour=19&unit=c","Link":"http://www.accuweather.com/de?day=1&hbhhour=19&unit=c"},{"DateTime":"2021-08-19T20:00:00+02:00","EpochDateTime":1629396000,"WeatherIcon":4,"IconPhrase":"Heiter bis wolkig","HasPrecipitation":false,"IsDaylight":true,"Temperature":{"Value":17.8,"Unit":"C","UnitType":17},"RealFeelTemperature":{"Value":17.2,"Unit":"C","UnitType":17},"RealFeelTemperatureShade":{"Value":17.2,"Unit":"C","UnitType":17},"WetBulbTemperature":{"Value":15.8,"Unit":"C","UnitType":17},"DewPoint":{"Value":14.2,"Unit":"C","UnitType":17},"Wind":{"Speed":{"Value":9.3,"Unit":"km/h","UnitType":7},"Direction":{"Degrees":277,"Localized":"W","English":"W"}},"WindGust":{"Speed":{"Value":13.0,"Unit":"km/h","UnitType":7}},"RelativeHumidity":80,"IndoorRelativeHumidity":69,"Visibility":{"Value":16.1,"Unit":"km","UnitType":6},"Ceiling":{"Value":1981.0,"Unit":"m","UnitType":5},"UVIndex":0,"UVIndexText":"Niedrig","PrecipitationProbability":43,"ThunderstormProbability":8,"RainProbability":43,"SnowProbability":0,"IceProbability":0,"TotalLiquid":{"Value":0.0,"Unit":"mm","UnitType":3},"Rain":{"Value":0.0,"Unit":"mm","UnitType":3},"Snow":{"Value":0.0,"Unit":"cm","UnitType":4},"Ice":{"Value":0.0,"Unit":"mm","UnitType":3},"CloudCover":71,"Evapotranspiration":{"Value":0.0,"Unit":"mm","UnitType":3},"SolarIrradiance":{"Value":0.4,"Unit":"W/m²","UnitType":33},"MobileLink":"http://www.accuweather.com/de/","Link":"http://www.accuweather.com/de"}]';
Man kann sich die Testdaten erzeugen, indem man die API im Browser (z.B. Firefox) aufruft und sich die Rohdaten der JSON-Ausgabe anzeigen lässt und in die Zwischenablage kopiert.

Nicht vergessen nach dem Testen die Änderungen wieder rückgängig zu machen und SAVE auf true zu setzen, sonst hat man sehr konstantes Wetter!



Bei Fragen fragen. ABER - ich beantworte keine "geht bei mir nicht" Beiträge. Möglichst viel Input liefern. Läuft die Originalversion? Systemvariablen angelegt? Screenshot! URL im Browser funktioniert? WAS wurde geändert? Als CODE in den Beitrag kopieren! Wie sieht die Ausgabe aus? WAS ist der Fehler: Also was für eine Ausgabe wird erwartet? Welche Ausgabe (STDOUT) erhält man, wenn man es unter "Skript testen" laufen lässt? Als CODE in den Beitrag kopieren!

CODE - was ist das?
CODE.JPG
CODE.JPG (15.58 KiB) 17029 mal betrachtet

Und hier das Skript - und nochmal die Bitte: keine Support-Anfragen ohne die (als CODE formatierte) Ausgabe des Debuggings (STDOUT) und einer Kopie des Deklarationsteils des Skripts.

Code: Alles auswählen

!- aktuelle 12h-Wettervorhersage V1.8 AccuWeather universell (MichaelN 22.08.2021)
!- GPL-3.0-or-later
!- V1.8 Systemvariablen Typ Logik für boolesche Werte möglich
!- V1.7 deutsche Umlaute berücksichtigt
!- V1.6 CuxD/system-exec optional
!- V1.5 Fehlerbehandlung hinzu
!- V1.4 optionale Umrechnung Windgeschwindigkeit hinzu
!- V1.3 verarbeitet auch Stringwerte in den avg-Variablen
!- benötigte Systemvariablen anlegen: siehe Inhalt von NameSVxxx0

!-=== Hier anpassen ===
string OrtsID = "123456";                           !- Hier ID für den Ort eintragen
string APIKey = "AAAAAAABBBBBBBBBBCCCCCCCCCDDDDDD"; !- Hier API-Key eintragen
string CUXD_Device = "CUxD.CUX2801001:1";           !- Hier CUxD-Device eintragen oder leer lassen für system.exec

!-=== Hier anpassen ===
integer AnzahlTags        = 7; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'Temperature,RealFeelTemperature,RelativeHumidity,CloudCover,TotalLiquid,EpochDateTime,IconPhrase';     !-XML-Start-Tag
string xmlTagEnd          = 'RealFeelTemperature,WetBulbTemperature,IndoorRelativeHumidity,MobileLink,Rain,WeatherIcon,Precipitation'; !-XML-End-Tag
string xmlWertStart       = 'Value,Value,:,:,Value,:,:'; !-Suchstring vor dem Wert
string xmlWertEnd         = 'Unit,Unit,",",Unit,",Has';    !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7,1,1,7,1,2";             !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9,9,2,2,9,2,5";             !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0         = "Forecast_Temp_AVG,FC_feel_AVG,Forecast_Feuchte_AVG,FC_Wolken_AVG,FC_Regen_gesamt,,FC_Text_Phrase";      !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0         = "FC_Temp_min,FC_feel_min,FC_Feuchte_min,FC_Wolken_min,FC_Regen_min,FC-Timestamp-von,";	  !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0         = "FC_Temp_max,FC_feel_max,FC_Feuchte_max,FC_Wolken_max,FC_Regen_max,FC-Timestamp-bis,";	  !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 4;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer WindFlag          = 999;    ! Position der Winddaten (zur Umrechnung von km/h in m/s) - auf 999 setzen, wenn keine Umrechnung gewünscht oder kein Wind ausgewertet werden soll
integer Stunden           = 12;     !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
boolean SAVE              = true;   !- in SV speichern: auf false für Testbetrieb, sonst true

!- === ab hier nichts mehr anpassen ===
!- Suchstrings und Offset-Werte zum extrahieren der Zeit
string xmlTimeStart       = "EpochDateTime";
integer xmlSkip           = 100;

!- XML Accuweather
string recXML;
string error;
string func = "wget -q --timeout=2 -O - 'http://dataservice.accuweather.com/forecasts/v1/hourly/12hour/"#OrtsID#"?apikey="#APIKey#"&details=true&metric=true&language=de'";

!- Arbeitsvariablen
string wert1;
string wert2;
time zeit;
integer counter; !- Sicherheitszaehler gegen Endlosschleife
integer StartPos;
integer EndPos;
integer index;
var Wert_avg;
var Wert_min;
var Wert_max;
var Wert_tmp;
object SV;
integer SVTyp = ivtFloat; !- V1.3
string Trenner = "\t";

!- Diese Variablen enthalten am Schluss die Ergebnisse
string Day0_avg = "";


!- ENDE Deklarationen und Initialisierungen
!- ******************************************************************************************

!- Abruf der Daten
if ( !CUXD_Device ) {
! system.exec
system.Exec(func, &recXML, &error);
} else {
! CUxD
dom.GetObject(CUXD_Device#".CMD_SETS").State(func);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
recXML = dom.GetObject(CUXD_Device#".CMD_RETS").State();
}
if(!recXML)
  {
  if ( CUXD_Device ) { (dom.GetObject(ID_DATAPOINTS)).Get(CUXD_Device#".CMD_EXEC").State("logger -t script -p user.debug [MichaelN Script AccuWeather V1.8: keine Antwort vom Wetter-Server!]"); }
  WriteLine("MichaelN Script AccuWeather V1.8: keine Antwort vom Wetter-Server!");
  quit;
  }
if( !recXML.Contains(xmlTimeStart) )
  { ! V1.6 division by Null abfangen
  if (CUXD_Device ) { (dom.GetObject(ID_DATAPOINTS)).Get(CUXD_Device#".CMD_EXEC").State("logger -t script -p user.debug [MichaelN Script AccuWeather V1.8: xmlTimeStart falsch definiert!]"); }
  WriteLine("MichaelN Script AccuWeather V1.8: xmlTimeStart falsch definiert!");
  quit;
  }
!- *** DEBUG recXML = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("xxTest").State();
!- *** DEBUG dom.GetObject (ID_SYSTEM_VARIABLES).Get ("xxTest").State(recXML);
recXML = recXML.ToLatin();
xmlSkip = recXML.Find(xmlTimeStart); !- ersten Block beschneiden
recXML = recXML.Substr(xmlSkip);
  WriteLine(recXML);

!- Werte auslesen
counter = 0;
index = 0;
StartPos = recXML.Find(xmlTagStart.StrValueByIndex(",",0));

while ( (StartPos>=0) && (counter<100) ){

  if (counter < Stunden) {
    index = 0;
    while ( index < AnzahlTags ) {
	StartPos = recXML.Find(xmlTagStart.StrValueByIndex(",",index));
	EndPos = recXML.Substr(StartPos).Find(xmlTagEnd.StrValueByIndex(",",index));
    if ( EndPos == -1 )
      {
      EndPos = 5;
      WriteLine("DEBUG Z96: EndPos nicht gefunden!");
      }
    EndPos = EndPos + StartPos;
	wert2 = recXML.Substr(StartPos, EndPos-StartPos); !- nur das relevante Tag
	 WriteLine("DEBUG TAG: "#wert2);
	StartPos = wert2.Find(xmlWertStart.StrValueByIndex(",",index));
	EndPos = wert2.Substr(StartPos).Find(xmlWertEnd.StrValueByIndex(",",index));
    if ( EndPos == -1 )
      {
      EndPos = 5;
      WriteLine("DEBUG Z106: EndPos nicht gefunden!");
      }
    EndPos = EndPos + StartPos;
	wert2 =  wert2.Substr(StartPos+xmlWertStartOffset.StrValueByIndex(",",index).ToInteger(),(EndPos-StartPos)-xmlWertEndOffset.StrValueByIndex(",",index).ToInteger());
      WriteLine("DEBUG WERT: "#wert2#" --- Start:"#StartPos#" --- End:"#EndPos);
    Day0_avg = Day0_avg # wert2 # ",";  !- V1.3
	!- *** DEBUG
	 WriteLine("c/i/w2:"#counter#"/"#index#"/"#wert2);
	index = index + 1;

     }
  }

  StartPos = recXML.Find(xmlTimeStart);
  xmlSkip = StartPos+xmlTimeStart.Length(); !- abgearbeiteten Block ausschneiden
  recXML = recXML.Substr(xmlSkip);
  StartPos = recXML.Find(xmlTimeStart);
  if ( StartPos > -1 ) { recXML = recXML.Substr(StartPos); }
  !- *** DEBUG
  !- WriteLine("DEBUG SKIP: c"#counter#" --- Start:"#StartPos#" --- "#recXML);
  counter = counter + 1;
}


!- Werte aus Ergebnisliste fischen und wieder richtig zuordnen
counter = 0;
wert1 = "";
while ( counter < AnzahlTags ) {
    SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSVavg0.StrValueByIndex(",",counter)); !- V1.3
    if ( SV ) { SVTyp = SV.ValueType(); WriteLine("===SVTyp==="#SVTyp#"==="#SV.Name());  } else { SVTyp = ivtFloat; }

	index = AnzahlTags;
	Wert_avg = 0.0;
	Wert_min = 3000000000.0;
	Wert_max = -1000.0;
	EndPos = 0;
	foreach(wert2,Day0_avg.Split(",")) {
		if ( (index % AnzahlTags) == counter ) {
			!- jeden x. Eintrag auslesen
            if ( SVTyp == ivtFloat ) {
              !- SV Zahl (V1.3)
              Wert_tmp = wert2.ToFloat();
              ! Wind in m/s umrechnen?
			  if ( WindFlag == counter ) { Wert_tmp = Wert_tmp/3.6;};

	          Wert_avg = Wert_avg + Wert_tmp;
	          EndPos = EndPos + 1;
	          Wert_min = Wert_min.Min(Wert_tmp);
              Wert_max = Wert_max.Max(Wert_tmp);
            } elseif ( SVTyp == ivtString ) {
              !- SV String
              if ( Wert_avg.VarType() == ivtFloat )
              { Wert_avg = Wert_avg # Trenner # wert2; } else
              { Wert_avg = wert2; }
            } elseif ( SVTyp == ivtBinary ) {
              !- SV Boolean
			  if ( wert2 == "true" ) {
                Wert_max = true;
                Wert_avg = Wert_avg + 1;
                }
              if ( wert2 == "false" ) {
              	Wert_min = false;
                }
              EndPos = EndPos + 1;
              !WriteLine("===min/max/avg==="#Wert_min#"/"#Wert_max#"/"#Wert_avg);
            } else {
              !- SV keine Zahl, kein String, keine Ergebnisse
              Wert_avg = 0;
            }
			!- *** DEBUG
			WriteLine("c/i/EP/w:"#counter#"/"#index#"/"#EndPos#"/"#wert2);
		}
		index = index + 1;
	}
	!- Durchschnitt berechnen
	if ( (RegenFlag <> counter) && ( SVTyp == ivtFloat ) ) {
	Wert_avg = Wert_avg/EndPos; }
   	if ( SVTyp == ivtBinary ) {
    	! bei booleschen Werte auf true oder false entscheiden
		Wert_avg = (1.0 * Wert_avg)/EndPos;
		Wert_avg = Wert_avg.Round(0);
    	}
    if ( (SVTyp == ivtBinary) && ( Wert_max < 1 ) ) { Wert_max = false; }
	!- Werte in die SV schieben
	!- *** DEBUG
      WriteLine("*** DEBUG Werte für SV ***");
      WriteLine("--AVG--"#NameSVavg0.StrValueByIndex(",",counter)#": "#Wert_avg);
	  WriteLine("--MIN--"#NameSVmin0.StrValueByIndex(",",counter)#": "#Wert_min);
	  WriteLine("--MAX--"#NameSVmax0.StrValueByIndex(",",counter)#": "#Wert_max);

	if ( SV && SAVE ) {SV.State(Wert_avg);}
	SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSVmin0.StrValueByIndex(",",counter));
	if ( SV && SAVE ) {SV.State(Wert_min);}
	SV = dom.GetObject(ID_SYSTEM_VARIABLES).Get(NameSVmax0.StrValueByIndex(",",counter));
	if ( SV && SAVE ) {SV.State(Wert_max);}
	!- *** DEBUG
	  wert1 = wert1 #"*"# xmlTagStart.StrValueByIndex(",",counter) #"* avg/min/max:"# Wert_avg.ToString(1) #"/"# Wert_min.ToString(1) #"/"# Wert_max.ToString(1) # "\n";

	counter = counter + 1;
}

!- *** DEBUG
WriteLine(wert1);
WriteLine("===ENDE===");
aufgerufen wird das Skript dann von einem einfachen WebUI-Programm mit einem Zeitmodul, das es z.B. täglich um 05:10 startet. Kurz nach 5 Uhr, weil AccuWeather um 5 Uhr morgens den Wetterbericht aktualisiert.
PGM_Wettervorhersage.JPG


Beispiele für Konfigurationsparameter:

Temperatur, gefühlte Temperatur, Luftfeuchte, Bewölkungsgrad, Niederschlag kpl., Windböen

Code: Alles auswählen

integer AnzahlTags        = 6; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'Temperature,RealFeelTemperature,RelativeHumidity,CloudCover,TotalLiquid,WindGust'; !-XML-Start-Tag
string xmlTagEnd          = "RealFeelTemperature,WetBulbTemperature,IndoorRelativeHumidity,MobileLink,Rain,RelativeHumidity"; !-XML-End-Tag
string xmlWertStart       = "Value,Value,:,:,Value,Value"; !-Suchstring vor dem Wert
string xmlWertEnd         = 'Unit,Unit,",",Unit,Unit'; !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7,1,1,7,7"; !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9,9,2,2,9,9"; !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0         = "Forecast_Temp_AVG,,Forecast_Feuchte,,Forecast_Liquid,"; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0         = "Forecast_Temp_min,Forecast_Feel_min,,Wolken,,";				  !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0         = "Forecast_Temp,Forecast_Feel_max,,,,Forecast_Wind";	  !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 4;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
Temperatur, gefühlte Temperatur, Windböen, Regenwahrscheinlichkeit, Regenmenge

Code: Alles auswählen

integer AnzahlTags        = 5; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'Temperature,RealFeelTemperature,WindGust,RainProbability,Rain"';     !-XML-Start-Tag
string xmlTagEnd          = 'RealFeelTemperature,RealFeelTemperatureShade,RelativeHumidity,SnowProbability,Snow"'; !-XML-End-Tag
string xmlWertStart       = 'Value,Value,Value,:,Value'; !-Suchstring vor dem Wert
string xmlWertEnd         = 'Unit,Unit,Unit,",Unit';    !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7,7,1,7";             !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9,9,9,2,9";             !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0         = ",AW_FC_Temp_feel,,AW_FC_Rain_Prob,AW_FC_Rain_all";      !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0         = "AW_FC_Temp_min,,,,";	  !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0         = "AW_FC_Temp_max,,AW_FC_WindGust_max,,";	  !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 4;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
Niederschlag ja/nein, Niederschlags-Art (nur korrekt wenn Niederschlag=true), gefühlte Temperatur, Windböen

Code: Alles auswählen

integer AnzahlTags        = 4; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'HasPrecipitation,PrecipitationType,RealFeelTemperature,WindGust';     !-XML-Start-Tag
string xmlTagEnd          = 'IsDaylight,IsDaylight,RealFeelTemperatureShade,RelativeHumidity'; !-XML-End-Tag
string xmlWertStart       = ':,:,Value,Value'; !-Suchstring vor dem Wert
string xmlWertEnd         = '",PrecipitationIntensity,Unit,Unit';    !-Suchstring nach dem Wert
string xmlWertStartOffset = "1,2,7,7";             !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "2,5,9,9";             !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String  
Nur maximale Windgeschwindigkeit in km/h

Code: Alles auswählen

integer AnzahlTags        = 1; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'WindGust';     !-XML-Start-Tag
string xmlTagEnd          = 'UVIndex'; !-XML-End-Tag
string xmlWertStart       = "Value"; !-Suchstring vor dem Wert
string xmlWertEnd         = 'Unit'; !-Suchstring nach dem Wert
string xmlWertStartOffset = "7"; !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9"; !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0         = ""; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0         = "";				  !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0         = "Forecast_Wind";	  !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 999;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer WindFlag          = 999;    ! Position der Winddaten (zur Umrechnung von km/h in m/s) - auf 999 setzen, wenn keine Umrechnung gewünscht oder kein Wind ausgewertet werden soll
integer Stunden           = 1;     !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
Zuletzt geändert von MichaelN am 13.04.2023, 20:11, insgesamt 50-mal geändert.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von MichaelN » 15.06.2020, 14:51

EckartS hat geschrieben:
15.06.2020, 09:45
Hallo Michael,

besten Dank: Endlich ein gut funktionierender Wetterdatenabruf in HM. Das verwende ich jetzt statt der Datenübertragung von ioBroker.

Eine Frage nur zu Accuweather: Warum hast du da die Windgeschwindigkeit weggelassen? Ist das noch geplant? Sonst hole ich die dann weiter aus Openweathermap.
Du musst diese Parameter anpassen:

integer AnzahlTags = 7; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart = 'Temperature,RealFeelTemperature,RelativeHumidity,CloudCover,TotalLiquid,EpochDateTime,Wind'; !- Oder ,WindGust wenn Dir die Böen wichtiger sind
string xmlTagEnd = "RealFeelTemperature,WetBulbTemperature,IndoorRelativeHumidity,MobileLink,Rain,WeatherIcon,Direction"; !- oder ,RelativeHumidity für die Böen
string xmlWertStart = "Value,Value,:,:,Value,:,Value"; !-Suchstring vor dem Wert
string xmlWertEnd = 'Unit,Unit,",",Unit,",Unit'; !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7,1,1,7,1,7"; !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset = "9,9,2,2,9,2,9"; !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0 = "Forecast_Temp_AVG,FC_feel_AVG,Forecast_Feuchte_AVG,FC_Wolken_AVG,FC_Regen_gesamt,,FC_Wind_AVG"; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0 = "FC_Temp_min,FC_feel_min,FC_Feuchte_min,FC_Wolken_min,FC_Regen_min,FC-Timestamp-von,FC-Wind-min"; !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0 = "FC_Temp_max,FC_feel_max,FC_Feuchte_max,FC_Wolken_max,FC_Regen_max,FC-Timestamp-bis,FC-Wind-max"; !- Namen der Systemvariablen fuer max-Wert
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

EckartS
Beiträge: 243
Registriert: 13.11.2012, 23:11
Wohnort: Nürnberg
Danksagung erhalten: 2 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von EckartS » 16.06.2020, 01:40

Hallo Michael,
was für ein Service. Gerade wollte ich die Parameter aus dem String von Accuweather herausklamüsern, da sehe ich, dass du das schon übernommen hast. Danke!
Viele Grüße,
EckartS
711 Kanäle in 113 Geräten und 134 CUxD-Kanäle in 24 CUxD-Geräten

DrDrosselklappe
Beiträge: 27
Registriert: 21.08.2018, 09:13
Hat sich bedankt: 4 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von DrDrosselklappe » 01.07.2020, 19:45

Hallo Michael,

das ist die erste Variante für AccuWeather die bei mir funktioniert !! Vielen Dank für das Teilen deiner Idee !! Gibt es auch eine Variante mit 24h oder 48h Vorhersage ?

Gruß
Christian

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von MichaelN » 01.07.2020, 19:52

Da das Prinzip das gleiche ist, solltest du die Anpassungen leicht schaffen. Die URL muss natürlich angepasst werden und ggf. die Suchstrings.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

meanwhile
Beiträge: 5
Registriert: 10.07.2020, 09:11
System: CCU
Danksagung erhalten: 1 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von meanwhile » 10.07.2020, 09:20

Hallo Michael,

erstmal vielen Dank für das Script hat bei mir alles gut funktioniert und die Daten werden alle entsprechend eingetragen.
Ich möchte mit den Daten meine Bewässerungsanlage steuern und habe mich an der Accuweather API versucht um die Niederschlagsmenge der letzten 24 Stunden zu bekommen.

Diese können auch abgerufen werden unter
http://dataservice.accuweather.com/curr ... etric=true

Die Werte werden jeweils als Past24Hours, Past18Hours etc. geliefert. Allerdings habe ich gesehen das Accuweather gar kein XML anbietet also nur JSON.
Ich habe Dein Script versucht dazu zu nutzen mit der folgenden Config.

!-=== Hier anpassen ===
integer AnzahlTags = 1; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart = 'Past24Hours'; !-XML-Start-Tag
string xmlTagEnd = "Past24Hours"; !-XML-End-Tag
string xmlWertStart = "Value"; !-Suchstring vor dem Wert
string xmlWertEnd = "Unit'; !-Suchstring nach dem Wert
string xmlWertStartOffset = "7"; !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset = "9"; !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0 = ","; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0 = "FC_Regen_Past24_Min"; !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0 = "FC_Regen_Past24_Max"; !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag = 4; !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer Stunden = 12; !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
boolean SAVE = true; !- in SV speichern: auf false für Testbetrieb, sonst true

Das ganze funktioniert jedoch nicht.

Wenn Du eine Möglichkeit Dir das kurz anzuschauen wäre das super da ich nicht genug Erfahrung mit der Script Sprache hier habe.

Der Anwendungsfall der letzten 24 Stunden auch in Bezug auf Temperatur und Sonne könnten dann nützlich sein für Gartenbewässerung und/oder Pool Pumpensteuerung da bei höherer Temperatur meine Pumpe und meine Salzwasseranlage länger laufen sollen und ich könnte mit der Niederschlagsmenge der letzten 24 und der vorraussichtlichen Menge der nächsten 12 Stunden entscheiden ob und wie lange ich den Garten bewässern muss.

CCU3 3.51.6 CuXD 2.4

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von MichaelN » 10.07.2020, 10:35

Dann poste bitte mal in Code-Tags( </> Button):

1. die Rohdaten, die beim Aufruf der URL geliefert werden

2. die Ausgabe, die erzeugt wird, wenn Du das Skript unter "Skript testen " laufen lässt
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

meanwhile
Beiträge: 5
Registriert: 10.07.2020, 09:11
System: CCU
Danksagung erhalten: 1 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von meanwhile » 10.07.2020, 11:27

Code: Alles auswählen

[{"LocalObservationDateTime":"2020-07-10T08:46:00+02:00","EpochTime":1594363560,"WeatherText":"Mostly cloudy","WeatherIcon":6,"HasPrecipitation":false,"PrecipitationType":null,"IsDayTime":true,"Temperature":{"Metric":{"Value":17.9,"Unit":"C","UnitType":17},"Imperial":{"Value":64.0,"Unit":"F","UnitType":18}},"RealFeelTemperature":{"Metric":{"Value":16.8,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"RealFeelTemperatureShade":{"Metric":{"Value":16.1,"Unit":"C","UnitType":17},"Imperial":{"Value":61.0,"Unit":"F","UnitType":18}},"RelativeHumidity":76,"IndoorRelativeHumidity":66,"DewPoint":{"Metric":{"Value":13.6,"Unit":"C","UnitType":17},"Imperial":{"Value":56.0,"Unit":"F","UnitType":18}},"Wind":{"Direction":{"Degrees":225,"Localized":"SW","English":"SW"},"Speed":{"Metric":{"Value":17.5,"Unit":"km/h","UnitType":7},"Imperial":{"Value":10.9,"Unit":"mi/h","UnitType":9}}},"WindGust":{"Speed":{"Metric":{"Value":29.9,"Unit":"km/h","UnitType":7},"Imperial":{"Value":18.6,"Unit":"mi/h","UnitType":9}}},"UVIndex":1,"UVIndexText":"Low","Visibility":{"Metric":{"Value":16.1,"Unit":"km","UnitType":6},"Imperial":{"Value":10.0,"Unit":"mi","UnitType":2}},"ObstructionsToVisibility":"","CloudCover":90,"Ceiling":{"Metric":{"Value":1311.0,"Unit":"m","UnitType":5},"Imperial":{"Value":4300.0,"Unit":"ft","UnitType":0}},"Pressure":{"Metric":{"Value":1009.0,"Unit":"mb","UnitType":14},"Imperial":{"Value":29.8,"Unit":"inHg","UnitType":12}},"PressureTendency":{"LocalizedText":"Steady","Code":"S"},"Past24HourTemperatureDeparture":{"Metric":{"Value":-0.4,"Unit":"C","UnitType":17},"Imperial":{"Value":-1.0,"Unit":"F","UnitType":18}},"ApparentTemperature":{"Metric":{"Value":18.3,"Unit":"C","UnitType":17},"Imperial":{"Value":65.0,"Unit":"F","UnitType":18}},"WindChillTemperature":{"Metric":{"Value":17.8,"Unit":"C","UnitType":17},"Imperial":{"Value":64.0,"Unit":"F","UnitType":18}},"WetBulbTemperature":{"Metric":{"Value":15.4,"Unit":"C","UnitType":17},"Imperial":{"Value":60.0,"Unit":"F","UnitType":18}},"Precip1hr":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PrecipitationSummary":{"Precipitation":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PastHour":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past3Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past6Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past9Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past12Hours":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past18Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.02,"Unit":"in","UnitType":1}},"Past24Hours":{"Metric":{"Value":1.8,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.07,"Unit":"in","UnitType":1}}},"TemperatureSummary":{"Past6HourRange":{"Minimum":{"Metric":{"Value":16.7,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":17.9,"Unit":"C","UnitType":17},"Imperial":{"Value":64.0,"Unit":"F","UnitType":18}}},"Past12HourRange":{"Minimum":{"Metric":{"Value":16.7,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":20.8,"Unit":"C","UnitType":17},"Imperial":{"Value":69.0,"Unit":"F","UnitType":18}}},"Past24HourRange":{"Minimum":{"Metric":{"Value":16.7,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":25.3,"Unit":"C","UnitType":17},"Imperial":{"Value":78.0,"Unit":"F","UnitType":18}}}},"MobileLink":"http://m.accuweather.com/en/de/cologne/50667/current-weather/180169?lang=en-us","Link":"http://www.accuweather.com/en/de/cologne/50667/current-weather/180169?lang=en-us"}]
Ich habe den xmlTimeSTart auf EpochTime geändert.

Ausgabe ist dann:

Code: Alles auswählen

EpochTime":1594372560,"WeatherText":"Cloudy","WeatherIcon":7,"HasPrecipitation":false,"PrecipitationType":null,"IsDayTime":true,"Temperature":{"Metric":{"Value":18.7,"Unit":"C","UnitType":17},"Imperial":{"Value":66.0,"Unit":"F","UnitType":18}},"RealFeelTemperature":{"Metric":{"Value":17.6,"Unit":"C","UnitType":17},"Imperial":{"Value":64.0,"Unit":"F","UnitType":18}},"RealFeelTemperatureShade":{"Metric":{"Value":16.5,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"RelativeHumidity":71,"IndoorRelativeHumidity":66,"DewPoint":{"Metric":{"Value":13.4,"Unit":"C","UnitType":17},"Imperial":{"Value":56.0,"Unit":"F","UnitType":18}},"Wind":{"Direction":{"Degrees":248,"Localized":"WSW","English":"WSW"},"Speed":{"Metric":{"Value":25.0,"Unit":"km/h","UnitType":7},"Imperial":{"Value":15.5,"Unit":"mi/h","UnitType":9}}},"WindGust":{"Speed":{"Metric":{"Value":39.7,"Unit":"km/h","UnitType":7},"Imperial":{"Value":24.7,"Unit":"mi/h","UnitType":9}}},"UVIndex":2,"UVIndexText":"Low","Visibility":{"Metric":{"Value":16.1,"Unit":"km","UnitType":6},"Imperial":{"Value":10.0,"Unit":"mi","UnitType":2}},"ObstructionsToVisibility":"","CloudCover":98,"Ceiling":{"Metric":{"Value":640.0,"Unit":"m","UnitType":5},"Imperial":{"Value":2100.0,"Unit":"ft","UnitType":0}},"Pressure":{"Metric":{"Value":1010.0,"Unit":"mb","UnitType":14},"Imperial":{"Value":29.83,"Unit":"inHg","UnitType":12}},"PressureTendency":{"LocalizedText":"Steady","Code":"S"},"Past24HourTemperatureDeparture":{"Metric":{"Value":-0.8,"Unit":"C","UnitType":17},"Imperial":{"Value":-1.0,"Unit":"F","UnitType":18}},"ApparentTemperature":{"Metric":{"Value":19.4,"Unit":"C","UnitType":17},"Imperial":{"Value":67.0,"Unit":"F","UnitType":18}},"WindChillTemperature":{"Metric":{"Value":18.9,"Unit":"C","UnitType":17},"Imperial":{"Value":66.0,"Unit":"F","UnitType":18}},"WetBulbTemperature":{"Metric":{"Value":15.6,"Unit":"C","UnitType":17},"Imperial":{"Value":60.0,"Unit":"F","UnitType":18}},"Precip1hr":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PrecipitationSummary":{"Precipitation":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PastHour":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past3Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past6Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past9Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past12Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past18Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past24Hours":{"Metric":{"Value":2.5,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.1,"Unit":"in","UnitType":1}}},"TemperatureSummary":{"Past6HourRange":{"Minimum":{"Metric":{"Value":17.1,"Unit":"C","UnitType":17},"Imperial":{"Value":63.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":18.7,"Unit":"C","UnitType":17},"Imperial":{"Value":66.0,"Unit":"F","UnitType":18}}},"Past12HourRange":{"Minimum":{"Metric":{"Value":16.6,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":18.7,"Unit":"C","UnitType":17},"Imperial":{"Value":66.0,"Unit":"F","UnitType":18}}},"Past24HourRange":{"Minimum":{"Metric":{"Value":16.6,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":24.0,"Unit":"C","UnitType":17},"Imperial":{"Value":75.0,"Unit":"F","UnitType":18}}}},"MobileLink":"http://m.accuweather.com/en/de/pulheim/50259/current-weather/174517?lang=en-us","Link":"http://www.accuweather.com/en/de/pulheim/50259/current-weather/174517?lang=en-us"}]
DEBUG TAG: 
DEBUG Z106: EndPos nicht gefunden!
DEBUG WERT:  --- Start:-1 --- End:4
c/i/w2:0/0/
c/i/EP/w:0/1/1/0.000000
*** DEBUG Werte für SV ***
--AVG--: 0.000000
--MIN--FC_Regen_Past24_Min: 0.000000
--MAX--FC_Regen_Past24_Max: 0.000000
*Past24Hours* avg/min/max:0.0/0.0/0.0

===ENDE===

MichaelN
Beiträge: 9561
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von MichaelN » 10.07.2020, 12:59

Ich habe den xmlTimeSTart auf EpochTime geändert.
Gut mitgedacht.

Aber das:

Code: Alles auswählen

string xmlTagEnd = "Past24Hours"; !-XML-End-Tag
kann natürlich nicht funktionieren, das es nach dem ersten Past24Hours kein 2. Mal im String vorkommt.
Da muss ein Text hin, der den Tag (Tag wie Label, nicht wie Nacht) beendet. Also:

Code: Alles auswählen

string xmlTagEnd = "TemperatureSummary"; !-XML-End-Tag
Dann wird der String zwischen den Tags ausgeschnitten. Es bleibt also:
Past24Hours":{"Metric":{"Value":1.8,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.07,"Unit":"in","UnitType":1}}},"
Und das passt mit deiner Definition von xmlWertStart und xmlWertEnd. Soweit gut.

Da es nur einen Messwert gibt, ist es egal, was Du Dir ausgeben lässt. Min/MAx/AVG macht hier keinen Sinn. Also:

Code: Alles auswählen

string NameSVavg0 = "SV_Regen_Past24,"; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0 = ","; !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0 = ","; !- Namen der Systemvariablen fuer max-Wert
Und zu guter Letzt:
Der Regen steht an Pos 0, und Du willst keinen Durchschnitt, also RegenFlag auf 0
Und Stunden haben wir auch keine, nur einen Wert, also Stunden auf 1

Code: Alles auswählen

integer RegenFlag = 0; !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer Stunden = 1; !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
Bekommst Du das zusammengebastelt?
Du musst natürlich noch eine SysVar namens "SV_Regen_Past24" anlegen oder meinen Vorschlag an deine Gegebenheiten anpassen.

Sollte dann eigentlich laufen. Wenn nicht, nochmal Ausgabe vom Test posten.
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

meanwhile
Beiträge: 5
Registriert: 10.07.2020, 09:11
System: CCU
Danksagung erhalten: 1 Mal

Re: Wettervorhersage über AccuWeather

Beitrag von meanwhile » 10.07.2020, 14:21

Super !!! Das hat geklappt. So langsam komme ich dahinter :-)


Kannst Du mir noch einmal mit dem Wert "Past12HourRange" helfen ? Damit möchte ich die Max Temperatur der letzten 12 Stunden bekommen um die Laufzeit der pool Pumpe zu steuern. Allerdings sind da Max und Min Werte drin und ich verstehe ich noch nicht wie er da nach Value sucht.
Past12HourRange":{"Minimum":{"Metric":{"Value":16.6,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":19.8,"Unit":"C","UnitType":17}
Als config habe ich jetzt:

Code: Alles auswählen

!-=== Hier anpassen ===
integer AnzahlTags        = 2; !-Anzahl der eingetragenen XML-Tags
string xmlTagStart        = 'Past24Hours,Past12HoursRange';     !-XML-Start-Tag
string xmlTagEnd = "TemperatureSummary,Past24HourRange"; !-XML-End-Tag
string xmlWertStart       = 'Value,Maximum":{"Metric":{"Value"'; !-Suchstring vor dem Wert
string xmlWertEnd         = "Unit,Unit";    !-Suchstring nach dem Wert
string xmlWertStartOffset = "7,7";             !-Länge Wert-Suchstring + Anzahl Zeichen bis zum Wert
string xmlWertEndOffset   = "9,9";             !-StartOffset + Anzahl Zeichen zwischen Zahl und Ende-String
string NameSVavg0 = "FC_Regen_Past24,FC_TempPast12Hours_Max"; !- Namen der Systemvariablen fuer Durchschnitt aktueller Tag
string NameSVmin0 = ","; !- Namen der Systemvariablen fuer min-Wert
string NameSVmax0 = ","; !- Namen der Systemvariablen fuer max-Wert
integer RegenFlag         = 0;      !- Position der Regendaten (ab 0 zählen) zur Ausgabe der Gesamtmenge - auf 999 setzen, wenn stattdessen der Tagesdurchschnitt gewünscht ist
integer Stunden           = 1;     !- Anzahl der Stunden, die ausgewertet werden (min 1 / max 12)
boolean SAVE              = true;   !- in SV speichern: auf false für Testbetrieb, sonst true
Output:

Code: Alles auswählen

EpochTime":1594383060,"WeatherText":"Cloudy","WeatherIcon":7,"HasPrecipitation":false,"PrecipitationType":null,"IsDayTime":true,"Temperature":{"Metric":{"Value":20.1,"Unit":"C","UnitType":17},"Imperial":{"Value":68.0,"Unit":"F","UnitType":18}},"RealFeelTemperature":{"Metric":{"Value":18.7,"Unit":"C","UnitType":17},"Imperial":{"Value":66.0,"Unit":"F","UnitType":18}},"RealFeelTemperatureShade":{"Metric":{"Value":17.8,"Unit":"C","UnitType":17},"Imperial":{"Value":64.0,"Unit":"F","UnitType":18}},"RelativeHumidity":72,"IndoorRelativeHumidity":72,"DewPoint":{"Metric":{"Value":15.0,"Unit":"C","UnitType":17},"Imperial":{"Value":59.0,"Unit":"F","UnitType":18}},"Wind":{"Direction":{"Degrees":248,"Localized":"WSW","English":"WSW"},"Speed":{"Metric":{"Value":28.2,"Unit":"km/h","UnitType":7},"Imperial":{"Value":17.5,"Unit":"mi/h","UnitType":9}}},"WindGust":{"Speed":{"Metric":{"Value":43.8,"Unit":"km/h","UnitType":7},"Imperial":{"Value":27.2,"Unit":"mi/h","UnitType":9}}},"UVIndex":2,"UVIndexText":"Low","Visibility":{"Metric":{"Value":16.1,"Unit":"km","UnitType":6},"Imperial":{"Value":10.0,"Unit":"mi","UnitType":2}},"ObstructionsToVisibility":"","CloudCover":91,"Ceiling":{"Metric":{"Value":518.0,"Unit":"m","UnitType":5},"Imperial":{"Value":1700.0,"Unit":"ft","UnitType":0}},"Pressure":{"Metric":{"Value":1013.0,"Unit":"mb","UnitType":14},"Imperial":{"Value":29.91,"Unit":"inHg","UnitType":12}},"PressureTendency":{"LocalizedText":"Rising","Code":"R"},"Past24HourTemperatureDeparture":{"Metric":{"Value":-2.2,"Unit":"C","UnitType":17},"Imperial":{"Value":-4.0,"Unit":"F","UnitType":18}},"ApparentTemperature":{"Metric":{"Value":19.4,"Unit":"C","UnitType":17},"Imperial":{"Value":67.0,"Unit":"F","UnitType":18}},"WindChillTemperature":{"Metric":{"Value":20.0,"Unit":"C","UnitType":17},"Imperial":{"Value":68.0,"Unit":"F","UnitType":18}},"WetBulbTemperature":{"Metric":{"Value":17.1,"Unit":"C","UnitType":17},"Imperial":{"Value":63.0,"Unit":"F","UnitType":18}},"Precip1hr":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PrecipitationSummary":{"Precipitation":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"PastHour":{"Metric":{"Value":0.0,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.0,"Unit":"in","UnitType":1}},"Past3Hours":{"Metric":{"Value":0.4,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.01,"Unit":"in","UnitType":1}},"Past6Hours":{"Metric":{"Value":0.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.03,"Unit":"in","UnitType":1}},"Past9Hours":{"Metric":{"Value":0.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.03,"Unit":"in","UnitType":1}},"Past12Hours":{"Metric":{"Value":0.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.03,"Unit":"in","UnitType":1}},"Past18Hours":{"Metric":{"Value":0.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.03,"Unit":"in","UnitType":1}},"Past24Hours":{"Metric":{"Value":1.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.07,"Unit":"in","UnitType":1}}},"TemperatureSummary":{"Past6HourRange":{"Minimum":{"Metric":{"Value":18.3,"Unit":"C","UnitType":17},"Imperial":{"Value":65.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":20.1,"Unit":"C","UnitType":17},"Imperial":{"Value":68.0,"Unit":"F","UnitType":18}}},"Past12HourRange":{"Minimum":{"Metric":{"Value":16.6,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":20.1,"Unit":"C","UnitType":17},"Imperial":{"Value":68.0,"Unit":"F","UnitType":18}}},"Past24HourRange":{"Minimum":{"Metric":{"Value":16.6,"Unit":"C","UnitType":17},"Imperial":{"Value":62.0,"Unit":"F","UnitType":18}},"Maximum":{"Metric":{"Value":24.0,"Unit":"C","UnitType":17},"Imperial":{"Value":75.0,"Unit":"F","UnitType":18}}}},"MobileLink":"http://m.accuweather.com/en/de/pulheim/50259/current-weather/174517?lang=en-us","Link":"http://www.accuweather.com/en/de/pulheim/50259/current-weather/174517?lang=en-us"}]
DEBUG TAG: Past24Hours":{"Metric":{"Value":1.7,"Unit":"mm","UnitType":3},"Imperial":{"Value":0.07,"Unit":"in","UnitType":1}}},"
DEBUG WERT: 1.7 --- Start:25 --- End:37
c/i/w2:0/0/1.7
DEBUG Z96: EndPos nicht gefunden!
DEBUG TAG: 
DEBUG Z106: EndPos nicht gefunden!
DEBUG WERT:  --- Start:-1 --- End:4
c/i/w2:0/1/
c/i/EP/w:0/2/1/1.700000
*** DEBUG Werte für SV ***
--AVG--FC_Regen_Past24: 1.700000
--MIN--: 1.700000
--MAX--: 1.700000
c/i/EP/w:1/3/1/0.000000
*** DEBUG Werte für SV ***
--AVG--FC_TempPast12Hours_Max: 0.000000
--MIN--: 0.000000
--MAX--: 0.000000
*Past24Hours* avg/min/max:1.7/1.7/1.7
*Past12HoursRange* avg/min/max:0.0/0.0/0.0

===ENDE===
Nochmal vielen Dank für die schnelle Hilfe!! Ich stelle das script anschliessend hier komplett ein.

Antworten

Zurück zu „Projektvorstellungen“