Wettervorhersage über AccuWeather
Moderator: Co-Administratoren
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Wettervorhersage über AccuWeather
Wie geschrieben einen free API-Key beantragen. Ich werde keine Anleitung für deren Website schreiben. Da musst du dich halt mal durchwühlen.
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 +++
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 +++
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Wettervorhersage über AccuWeather
Wenn Du Dich eingeloggt hast, probier es mal mit My Apps / Add a new App
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 +++
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 +++
-
- Beiträge: 519
- Registriert: 11.01.2015, 19:16
- System: CCU
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Wettervorhersage über AccuWeather
In My Ap habe ich ein API bekommen.
Dort kann ich als Ort aber nur Vienna Auswählen. Das ist einige Hundert KM von mir Enfernt.??
Dort kann ich als Ort aber nur Vienna Auswählen. Das ist einige Hundert KM von mir Enfernt.??
CCU3 mit Cul stick,dazu Intertechno Steckosen.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Wettervorhersage über AccuWeather
Sorry das ich das so hart sagen muss, aber in Beitrag 1 ist alles beschrieben. Wenn ich Dir jetzt jeden einzelnen Schritt nochmal vorlesen muss, dann wird das eine harte Zeit für uns beide. Vielleicht solltest Du diesen Teil deines Projekts einfach verschieben bis Du mehr Erfahrung mit IT gesammelt hast.
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 +++
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 +++
-
- Beiträge: 519
- Registriert: 11.01.2015, 19:16
- System: CCU
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Wettervorhersage über AccuWeather
Punkt 1 habe ich ja schon.
Eine APi habe ich und die Nummer auch,findet man über google.
Eine APi habe ich und die Nummer auch,findet man über google.
CCU3 mit Cul stick,dazu Intertechno Steckosen.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
- shartelt
- Beiträge: 7421
- Registriert: 14.01.2015, 14:59
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 524 Mal
- Danksagung erhalten: 753 Mal
Re: Wettervorhersage über AccuWeather
also um Dir das mal vorzulesen, was Michael meint:
Du gehst auf die Seite und gibts rechts oben Deinen Ort ein:
dann bekommst Du hinten die ID.
Ich habe extra Knittelfeld genommen, da ich natürlich keine Ahnung habe, wo aus Österreich Du kommst....allerdings als Beweis, dass es mehr als Wien gibt.
Ist es WIRKLICH so schwer?
Du gehst auf die Seite und gibts rechts oben Deinen Ort ein:
dann bekommst Du hinten die ID.
Ich habe extra Knittelfeld genommen, da ich natürlich keine Ahnung habe, wo aus Österreich Du kommst....allerdings als Beweis, dass es mehr als Wien gibt.
Ist es WIRKLICH so schwer?
Ich schließe mich Michael an. Wenn Du mehrere Posts und Hinweise benötigst um einen simplen Ort in eine Sucheingabe einer Website zu schreiben und dann eine Zahl am Ende des Browserlinks herauszufinden...wie soll das erst weiter gehen?
-
- Beiträge: 519
- Registriert: 11.01.2015, 19:16
- System: CCU
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Wettervorhersage über AccuWeather
Ich habe doch schon meinen Ort gefunden! Einige Poste vorher und da steht auch die Nummer!
https://www.accuweather.com/de/at/stain ... ast/25523
https://www.accuweather.com/de/at/stain ... ast/25523
CCU3 mit Cul stick,dazu Intertechno Steckosen.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
- shartelt
- Beiträge: 7421
- Registriert: 14.01.2015, 14:59
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 524 Mal
- Danksagung erhalten: 753 Mal
Re: Wettervorhersage über AccuWeather
ja und den hast Du in Dein script eingefügt und der bringt Dir nun in dem Script nicht Deine Werte sondern die von Wien?
-
- Beiträge: 519
- Registriert: 11.01.2015, 19:16
- System: CCU
- Hat sich bedankt: 11 Mal
- Danksagung erhalten: 4 Mal
Re: Wettervorhersage über AccuWeather
So ich habe mich jetzt mal an dem Skript Versucht.
SV Variablen als Test Angelegt/ SV-Temperatur, ,SV-CloudCover.
Die beiden habe ich unter string xmlTagStart eingetragen.
Die Anzahl habe ich auf 2 gesetzt. Habe ja nur 2 Variablen derzeit.
Ist das die richtige Richtung??
Beim Skript Test bekomme viele Werte Angezeigt,also nehme ich an das Läuft.
SV Variablen als Test Angelegt/ SV-Temperatur, ,SV-CloudCover.
Die beiden habe ich unter string xmlTagStart eingetragen.
Die Anzahl habe ich auf 2 gesetzt. Habe ja nur 2 Variablen derzeit.
Ist das die richtige Richtung??
Beim Skript Test bekomme viele Werte Angezeigt,also nehme ich an das Läuft.
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 = "25523"; !- Hier ID für den Ort eintragen
string APIKey = "u3FpAJ6uEDp7C1iNAM00yfkYSYzJBQtC"; !- 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,SV-Temperature,SV-Wind"; !- 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.6: keine Antwort vom Wetter-Server!]"); }
WriteLine("MichaelN Script AccuWeather V1.6: 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.6: xmlTimeStart falsch definiert!]"); }
WriteLine("MichaelN Script AccuWeather V1.6: 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===");
Zuletzt geändert von Tripplex am 13.04.2023, 16:23, insgesamt 1-mal geändert.
CCU3 mit Cul stick,dazu Intertechno Steckosen.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
HM Steuert. Das Haus/Heizung inkl Pool und Robomow RC.
-
- Beiträge: 9681
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 700 Mal
- Danksagung erhalten: 1626 Mal
Re: Wettervorhersage über AccuWeather
Welche Ausgabe (STDOUT) erhält man, wenn man es unter "Skript testen" laufen lässt? Als CODE in den Beitrag kopieren!
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 +++
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 +++