Wettervorhersage mit wetter.com

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
BausatzFan
Beiträge: 106
Registriert: 05.10.2015, 21:36
Wohnort: Bayern

Re: Wettervorhersage mit wetter.com

Beitrag von BausatzFan » 29.08.2016, 12:24

Hallo Andi,

das mit den "SV_..." Variablen betraf einen anderen Beitrag von mir (http://homematic-forum.de/forum/viewtop ... 50#p302617). Normalerweise achte ich schon darauf, dass die in vor übernommenen Skripten angesprochenen Variablen auch existieren bzw. richtig angepasst sind.

Sorry wenn ich hier noch mal nachhake, aber ich sehe den Wald vor lauter Bäumen nicht...

Ich nutze das Skript mit den Tmp-Variablen ohne "SC_...". Die SysVars stimmen mit den Skript Deklarationen überein. Die Wetter_heute_tempMin und ...Max Werte, die das Skript abholt stimmen auch. Das Skript funktioniert also teilweise.

Code: Alles auswählen

! Idtittmar entwickelt 
! von AndiN auf tmp-Variablen umgeschrieben v2.0.0 (Stand: 25.11.2015)

!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD und ein Wetter.com Account
!-----------------------------------------------------------------------------

! Hier die MD5 Checksumme aus ProjektName APIKey CityCode eintragen
string tmpA = "a469b8ef5ce208cabee5f7f8b9c262f6";

! Hier der City Code
string tmpB = "DE0005842";

! Meine Projektnummer
string tmpC = "hm";

var tmpD = "CUxD.CUX2801001:10"; !CUxD Virtuelles Gerät

!Wetter heute Variablen-Namen (alles optional)
string tmpH = "Wetter_heute_zustand"; !Zahl 0 - 999
string tmpI = "Wetter_heute_tempMax"; !Zahl -50 - 50 °C
string tmpJ = "Wetter_heute_tempMin"; !Zahl -50 - 50 °C
string tmpK = "Wetter_heute_wind"; !Zahl 0 - 200 km/h
string tmpL = "Wetter_heute_zustand_txt"; !Zeichenkette
string tmpM = "Wetter_heute_regen"; !Logikwert
string tmpN = "Wetter_heute_regen_proz"; !Zahl 0 - 100 %

string tmpO = "Wetter_morgen_zustand"; !Zahl 0 - 999
string tmpS = "Wetter_morgen_tempMax"; !Zahl -50 - 50 °C
string tmpT = "Wetter_morgen_tempMin"; !Zahl -50 - 50 °C
string tmpU = "Wetter_morgen_wind"; !Zahl 0 - 200 km/h
string tmpV = "Wetter_morgen_zustand_txt"; !Zeichenkette
string tmpW = "Wetter_morgen_regen"; !Logikwert
string tmpX = "Wetter_morgen_regen_proz"; !Zahl 0 - 100 %

!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
   
string tmpE = "http://api.wetter.com/forecast/weather/city/" + tmpB +"/project/" + tmpC + "/cs/" + tmpA + "/output/json";

var stdout;
var tmpPosStart;
var tmpPosEnd;
var tmpL1;
var tmpF;
var tmpG;
var tmpY;
var tmpZ;
var tmpA1 = "\"23:00\"";
var tmpB1 = "},";

var tmpC1 = system.Date("%F");
var tmpK1= system.Date("%F ")#"00:00:00";
tmpK1 = tmpK1.ToTime().ToInteger() + 86400;
var tmpE1 = tmpK1.ToTime().Format("%F");
tmpK1 = tmpK1.ToTime().ToInteger() + 86400;
var tmpD1 = tmpK1.ToTime().Format("%F");
   
dom.GetObject(tmpD # ".CMD_SETS").State("wget -q -O - " # tmpE);
dom.GetObject(tmpD # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(tmpD # ".CMD_RETS").State();

!-----------------------------------------------------------------------------
! Dekodierung der Umlaute
!-----------------------------------------------------------------------------
   
string tmpF1;
string tmpG1;
foreach(tmpG1, stdout.Split("Ã")){
   tmpF1 = tmpF1+ tmpG1 + "";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¤")){
   tmpF1 = tmpF1 + tmpG1 + "ä";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¶")){
   tmpF1 = tmpF1 + tmpG1 + "ö";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¼")){
   tmpF1 = tmpF1 + tmpG1 + "ü";
}
stdout = tmpF1;
tmpF1 = "";

!-----------------------------------------------------------------------------
! HEUTE
!-----------------------------------------------------------------------------

boolean tmpH1 = false;
tmpPosStart = "\"" + tmpC1 + "\":{";
tmpPosEnd = "\"" + tmpE1 + "\":{";
tmpF = stdout.Substr(stdout.Find(tmpPosStart), stdout.Find(tmpPosEnd));

!Wetterzustand
tmpG = "\"w\":\"";
tmpY = "\",";
tmpZ = tmpF.Find(tmpG) + tmpG.Length();
tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
integer tmpE = tmpL1.ToInteger();
if(dom.GetObject(tmpH).IsTypeOf(OT_VARDP)){
   dom.GetObject(tmpH).State(tmpE);
}
tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);

!Maximaltemperatur
if(dom.GetObject(tmpI).IsTypeOf(OT_VARDP)){
   tmpG = "\"tx\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpI).State(tmpL1.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(tmpN).IsTypeOf(OT_VARDP)){
   tmpG = "\"pc\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpN).State(tmpL1.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(tmpM).IsTypeOf(OT_VARDP)){
   if(!tmpH1){
      var tmpJ1 = "\"06:00\"";
      var tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
      tmpG = "\"w\":\"";
      tmpY = "\",";
      tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
      tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
      tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
      if(!tmpH1){
         tmpJ1 = "\"11:00\"";
         tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
         tmpG = "\"w\":\"";
         tmpY = "\",";
         tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
         tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
         tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
         if(!tmpH1){
            tmpJ1 = "\"17:00\"";
            tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
            tmpG = "\"w\":\"";
            tmpY = "\",";
            tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
            tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
            tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
            if(!tmpH1){
               tmpJ1 = "\"23:00\"";
               tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
               tmpG = "\"w\":\"";
               tmpY = "\",";
               tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
               tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
               tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);      
            }
         }
      }
   }
   dom.GetObject(tmpM).State(tmpH1);
}

tmpF = tmpF.Substr(tmpF .Find(tmpA1), tmpF.Length());
tmpF = tmpF.Substr(tmpF .Find(tmpB1), tmpF.Length());

!Minimaltemperatur
if(dom.GetObject(tmpJ).IsTypeOf(OT_VARDP)){
   tmpG = "\"tn\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpJ).State(tmpL1.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(tmpK).IsTypeOf(OT_VARDP)){
   tmpG = "\"ws\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpK).State(tmpL1.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(tmpL).IsTypeOf(OT_VARDP)){
   tmpG = "\"w_txt\":\"";
   tmpY = "\"},";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 20).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpL).State(tmpL1);
}


!-----------------------------------------------------------------------------
! MORGEN
!-----------------------------------------------------------------------------

tmpH1 = false;
tmpPosStart = "\"" + tmpE1 + "\":{";
tmpPosEnd = "\"" + tmpD1 + "\":{";
tmpF = stdout.Substr(stdout.Find(tmpPosStart), stdout.Find(tmpPosEnd));

!Wetterzustand
tmpG = "\"w\":\"";
tmpY = "\",";
tmpZ = tmpF.Find(tmpG) + tmpG.Length();
tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
integer tmpE = tmpL1.ToInteger();
if(dom.GetObject(tmpO).IsTypeOf(OT_VARDP)){
   dom.GetObject(tmpO).State(tmpE);
}
tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);

!Maximaltemperatur
if(dom.GetObject(tmpS).IsTypeOf(OT_VARDP)){
   tmpG = "\"tx\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpS).State(tmpL1.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(tmpX).IsTypeOf(OT_VARDP)){
   tmpG = "\"pc\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpX).State(tmpL1.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(tmpW).IsTypeOf(OT_VARDP)){
   if(!tmpH1){
      var tmpJ1 = "\"06:00\"";
      var tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
      tmpG = "\"w\":\"";
      tmpY = "\",";
      tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
      tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
      tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
      if(!tmpH1){
         tmpJ1 = "\"11:00\"";
         tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
         tmpG = "\"w\":\"";
         tmpY = "\",";
         tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
         tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
         tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
         if(!tmpH1){
            tmpJ1 = "\"17:00\"";
            tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
            tmpG = "\"w\":\"";
            tmpY = "\",";
            tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
            tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
            tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
            if(!tmpH1){
               tmpJ1 = "\"23:00\"";
               tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
               tmpG = "\"w\":\"";
               tmpY = "\",";
               tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
               tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
               tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);      
            }
         }
      }
   }
   dom.GetObject(tmpW).State(tmpH1);
}

tmpF = tmpF .Substr(tmpF .Find(tmpA1), tmpF.Length());
tmpF = tmpF .Substr(tmpF .Find(tmpB1), tmpF.Length());

!Minimaltemperatur
if(dom.GetObject(tmpT).IsTypeOf(OT_VARDP)){
   tmpG = "\"tn\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpT).State(tmpL1.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(tmpU).IsTypeOf(OT_VARDP)){
   tmpG = "\"ws\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpU).State(tmpL1.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(tmpV).IsTypeOf(OT_VARDP)){
   tmpG = "\"w_txt\":\"";
   tmpY = "\"},";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 20).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpV).State(tmpL1);
}
Dateianhänge
Wetter.com Variablen.png
CUxD Wetter.png
CCU3 - Firmwareversion: 3.41.11; 243 Kanaele in 84 Geraeten und 49 CUxD-Kanaele in 4 CUxD-Geraeten

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von AndiN » 29.08.2016, 13:43

Hallo,

denke in der Tat, dass es nicht mit dem tmp zusammenhängt (würde sonst als Programmierer am Rad drehen, wenn jemand in "meinem" Post Probleme schildert die evtl. mit einem Umschreiben zustande gekommen sind).

Wenn ich Deine URL eingebe kommt folgendes Ergebnis:

Code: Alles auswählen

{"city":{"city_code":"DE0005842","name":"Kunreuth","url":"deutschland/kunreuth/DE0005842.html","credit":{"info":"In order to use the free weather data from wetter.com you HAVE TO display at least two out of three of the following possibilities: text, link, logo","text":"Powered by wetter.com","link":"http:\/\/www.wetter.com","logo":"Download at http:\/\/www.wetter.com\/api\/downloads\/#logos"},"forecast":{"2016-08-29":{"w":"1","tx":"26","06:00":{"w":"80","tx":"22","tn":"18","p":"5","d":"1472450400","w_txt":"leichter Regen - Schauer"},"11:00":{"w":"1","tx":"26","tn":"22","p":"6","d":"1472468400","w_txt":"leicht bewölkt"},"17:00":{"w":"1","tx":"26","tn":"18","p":"6","d":"1472490000","w_txt":"leicht bewölkt"},"23:00":{"w":"1","tx":"18","tn":"15","p":"6","d":"1472511600","w_txt":"leicht bewölkt"},"d":"1472450400","tn":"18","p":"24","w_txt":"leicht bewölkt"}}}}
Was hatte er sich jetzt nicht gezogen? Die Systemvariablen wurden ja scheinbar alle durch das Srkipt befüllt. Aber welche Systemariable vermisst Du jetzt? Was mir noch auffällt ist, dass bei Dir "leicht bewölkt mit "}" und ä in den Wetterbindungen steht. Irgendwas ist da noch krumm. Aber vielleicht hat einer noch eine Idee anhand des URL - Ergebnisses kombiniert mit dem von Dir geposteten Skript.

Muss gerade raus und kann nicht genauer schauen.

Andi
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

Benutzeravatar
BausatzFan
Beiträge: 106
Registriert: 05.10.2015, 21:36
Wohnort: Bayern

Re: Wettervorhersage mit wetter.com

Beitrag von BausatzFan » 29.08.2016, 14:25

:roll: Sorry, dass ich mich hier dran gehängt, bzw. unklar ausgedrück habe. Ich hätte einen neuen Thread aufmachen sollen.
Die Systemvariablen wurden ja scheinbar alle durch das Srkipt befüllt. Aber welche Systemariable vermisst Du jetzt?
Bis auf "Wetter-morgen_zustand-txt" sind tatsächlich alle Variablen irgend wann mal befüllt worden. Aber wie ich schon geschildert habe, werden nur Wetter_heute-tempMax und MIN regelmäßig aktualisiert. Die Werte in den übrigen Systemvariablen sind unverändert und meist mit 0 gefüllt.

Mit dem Original Skript (ohne Tmp Varablen) habe ich übrigens den gleichen Fehler. Es liegt wohl also nicht am Skript - es liefert ja auch ein Ergebnis. Ich vermute auch das der Fehler bei mir liegt. Aber wo :?: Ich habe mal gelesen, dass das Löschen und neu Anlegen helfen soll - das kann sich aber auch auf Gewerke bezogen haben...
CCU3 - Firmwareversion: 3.41.11; 243 Kanaele in 84 Geraeten und 49 CUxD-Kanaele in 4 CUxD-Geraeten

oekomat
Beiträge: 518
Registriert: 05.09.2012, 07:12

Re: Wettervorhersage mit wetter.com

Beitrag von oekomat » 07.09.2016, 13:36

Also bei mir lässt sich ebenfalls kein Projekt anlegen. Die verlinkte Seite konnte nicht gefunden werden. Heisst ja quasi, dass nur einige bestehende noch funktionieren, aber keine neuen Projekte angelegt werden können.
Gruß

oekomat

Benutzeravatar
AndiN
Beiträge: 2621
Registriert: 10.06.2015, 08:54
Wohnort: Hennef
Hat sich bedankt: 10 Mal
Danksagung erhalten: 28 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von AndiN » 07.09.2016, 18:38

Hallo,

Code: Alles auswählen

Diese Seite befindet sich noch im Umbau.
Wir freuen uns Ihnen zeitnah den vollen Funktionsumfang anbieten zu können.
interpretiere ich genauso. Also wohl in Geduld üben ;-)

Andi
Andi (Greenhorn)

Letzter Reboot: 17.03.24 => FW Update (Uptime:Rekord:153 Tage)
Systeminfos: Raspberry Pi3 Firmware: 3.75.6.20240316 142 Geräte
System angebunden: 3 Roomba 650 - Sprachausgabe via Home24 Media - Pocket Control
- Zentrale: Asus TF103 mit Home24 Tablet
Addons: Drucken 2.5 - HQ WebUI 2.5.9 - XML-API 1.22 - CUx-Daemon 2.9.3 - E-Mail 1.7.4 - hm_pdetect 1.11 - VPN cloudmatic
Diverse Links

Benutzeravatar
Wortmann30
Beiträge: 1353
Registriert: 21.03.2014, 21:39
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 7 Mal
Danksagung erhalten: 11 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von Wortmann30 » 07.09.2016, 19:05

Hi

aber nur Zur Info bereits bestehende Projekte funktionieren.

Zumindest bei mir.
Grüsse


To be continued...

Benutzeravatar
BausatzFan
Beiträge: 106
Registriert: 05.10.2015, 21:36
Wohnort: Bayern

Re: Wettervorhersage mit wetter.com

Beitrag von BausatzFan » 21.07.2017, 11:34

Über den Link
http://www.wetter.com/apps_und_mehr/website/api/
liefert Wetter.com liefert immer noch "Diese Seite ist noch nicht verfügbar". Seitdem die Seite down ist habe ich keine Wettervorhersage mehr. Hat jemand einen Vorschlag für mich, wie man den Fehler beheben/umgehen kann, oder ob es eine Alternative zu Wetter.com gibt?

Das Programm, mit dem Wetter.com Skript hat mal funktioniert:

Code: Alles auswählen

! Idtittmar entwickelt 
! von AndiN auf tmp-Variablen umgeschrieben v2.0.0 (Stand: 25.11.2015)

!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD und ein Wetter.com Account
!-----------------------------------------------------------------------------

! Hier die MD5 Checksumme aus ProjektName APIKey CityCode eintragen
string tmpA = "xxx";

! Hier der City Code
string tmpB = "xxx";

! Meine Projektnummer
string tmpC = "hm";

var tmpD = "CUxD.CUX2801001:10"; !CUxD Virtuelles Gerät

!Wetter heute Variablen-Namen (alles optional)
string tmpH = "Wetter_heute_zustand"; !Zahl 0 - 999
string tmpI = "Wetter_heute_tempMax"; !Zahl -50 - 50 °C
string tmpJ = "Wetter_heute_tempMin"; !Zahl -50 - 50 °C
string tmpK = "Wetter_heute_wind"; !Zahl 0 - 200 km/h
string tmpL = "Wetter_heute_zustand_txt"; !Zeichenkette
string tmpM = "Wetter_heute_regen"; !Logikwert
string tmpN = "Wetter_heute_regen_proz"; !Zahl 0 - 100 %

string tmpO = "Wetter_morgen_zustand"; !Zahl 0 - 999
string tmpS = "Wetter_morgen_tempMax"; !Zahl -50 - 50 °C
string tmpT = "Wetter_morgen_tempMin"; !Zahl -50 - 50 °C
string tmpU = "Wetter_morgen_wind"; !Zahl 0 - 200 km/h
string tmpV = "Wetter_morgen_zustand_txt"; !Zeichenkette
string tmpW = "Wetter_morgen_regen"; !Logikwert
string tmpX = "Wetter_morgen_regen_proz"; !Zahl 0 - 100 %

!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
   
string tmpE = "http://api.wetter.com/forecast/weather/city/" + tmpB +"/project/" + tmpC + "/cs/" + tmpA + "/output/json";

var stdout;
var tmpPosStart;
var tmpPosEnd;
var tmpL1;
var tmpF;
var tmpG;
var tmpY;
var tmpZ;
var tmpA1 = "\"23:00\"";
var tmpB1 = "},";

var tmpC1 = system.Date("%F");
var tmpK1= system.Date("%F ")#"00:00:00";
tmpK1 = tmpK1.ToTime().ToInteger() + 86400;
var tmpE1 = tmpK1.ToTime().Format("%F");
tmpK1 = tmpK1.ToTime().ToInteger() + 86400;
var tmpD1 = tmpK1.ToTime().Format("%F");
   
dom.GetObject(tmpD # ".CMD_SETS").State("wget -q -O - " # tmpE);
dom.GetObject(tmpD # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(tmpD # ".CMD_RETS").State();

!-----------------------------------------------------------------------------
! Dekodierung der Umlaute
!-----------------------------------------------------------------------------
   
string tmpF1;
string tmpG1;
foreach(tmpG1, stdout.Split("Ã")){
   tmpF1 = tmpF1+ tmpG1 + "";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¤")){
   tmpF1 = tmpF1 + tmpG1 + "ä";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¶")){
   tmpF1 = tmpF1 + tmpG1 + "ö";
}
stdout = tmpF1;
tmpF1 = "";
foreach(tmpG1, stdout.Split("¼")){
   tmpF1 = tmpF1 + tmpG1 + "ü";
}
stdout = tmpF1;
tmpF1 = "";

!-----------------------------------------------------------------------------
! HEUTE
!-----------------------------------------------------------------------------

boolean tmpH1 = false;
tmpPosStart = "\"" + tmpC1 + "\":{";
tmpPosEnd = "\"" + tmpE1 + "\":{";
tmpF = stdout.Substr(stdout.Find(tmpPosStart), stdout.Find(tmpPosEnd));

!Wetterzustand
tmpG = "\"w\":\"";
tmpY = "\",";
tmpZ = tmpF.Find(tmpG) + tmpG.Length();
tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
integer tmpE = tmpL1.ToInteger();
if(dom.GetObject(tmpH).IsTypeOf(OT_VARDP)){
   dom.GetObject(tmpH).State(tmpE);
}
tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);

!Maximaltemperatur
if(dom.GetObject(tmpI).IsTypeOf(OT_VARDP)){
   tmpG = "\"tx\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpI).State(tmpL1.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(tmpN).IsTypeOf(OT_VARDP)){
   tmpG = "\"pc\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpN).State(tmpL1.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(tmpM).IsTypeOf(OT_VARDP)){
   if(!tmpH1){
      var tmpJ1 = "\"06:00\"";
      var tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
      tmpG = "\"w\":\"";
      tmpY = "\",";
      tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
      tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
      tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
      if(!tmpH1){
         tmpJ1 = "\"11:00\"";
         tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
         tmpG = "\"w\":\"";
         tmpY = "\",";
         tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
         tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
         tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
         if(!tmpH1){
            tmpJ1 = "\"17:00\"";
            tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
            tmpG = "\"w\":\"";
            tmpY = "\",";
            tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
            tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
            tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
            if(!tmpH1){
               tmpJ1 = "\"23:00\"";
               tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
               tmpG = "\"w\":\"";
               tmpY = "\",";
               tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
               tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
               tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);      
            }
         }
      }
   }
   dom.GetObject(tmpM).State(tmpH1);
}

tmpF = tmpF.Substr(tmpF .Find(tmpA1), tmpF.Length());
tmpF = tmpF.Substr(tmpF .Find(tmpB1), tmpF.Length());

!Minimaltemperatur
if(dom.GetObject(tmpJ).IsTypeOf(OT_VARDP)){
   tmpG = "\"tn\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpJ).State(tmpL1.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(tmpK).IsTypeOf(OT_VARDP)){
   tmpG = "\"ws\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpK).State(tmpL1.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(tmpL).IsTypeOf(OT_VARDP)){
   tmpG = "\"w_txt\":\"";
   tmpY = "\"},";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 20).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpL).State(tmpL1);
}


!-----------------------------------------------------------------------------
! MORGEN
!-----------------------------------------------------------------------------

tmpH1 = false;
tmpPosStart = "\"" + tmpE1 + "\":{";
tmpPosEnd = "\"" + tmpD1 + "\":{";
tmpF = stdout.Substr(stdout.Find(tmpPosStart), stdout.Find(tmpPosEnd));

!Wetterzustand
tmpG = "\"w\":\"";
tmpY = "\",";
tmpZ = tmpF.Find(tmpG) + tmpG.Length();
tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
integer tmpE = tmpL1.ToInteger();
if(dom.GetObject(tmpO).IsTypeOf(OT_VARDP)){
   dom.GetObject(tmpO).State(tmpE);
}
tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);

!Maximaltemperatur
if(dom.GetObject(tmpS).IsTypeOf(OT_VARDP)){
   tmpG = "\"tx\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpS).State(tmpL1.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(tmpX).IsTypeOf(OT_VARDP)){
   tmpG = "\"pc\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpX).State(tmpL1.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(tmpW).IsTypeOf(OT_VARDP)){
   if(!tmpH1){
      var tmpJ1 = "\"06:00\"";
      var tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
      tmpG = "\"w\":\"";
      tmpY = "\",";
      tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
      tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
      tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
      if(!tmpH1){
         tmpJ1 = "\"11:00\"";
         tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
         tmpG = "\"w\":\"";
         tmpY = "\",";
         tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
         tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
         tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
         if(!tmpH1){
            tmpJ1 = "\"17:00\"";
            tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
            tmpG = "\"w\":\"";
            tmpY = "\",";
            tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
            tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
            tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);
            if(!tmpH1){
               tmpJ1 = "\"23:00\"";
               tmpI1 = tmpF.Substr(tmpF.Find(tmpJ1), tmpF.Length());
               tmpG = "\"w\":\"";
               tmpY = "\",";
               tmpZ = tmpI1.Find(tmpG) + tmpG.Length();
               tmpE = tmpI1.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0).ToInteger();
               tmpH1 = ((tmpE > 5) && (tmpE < 10)) || (tmpE > 59);      
            }
         }
      }
   }
   dom.GetObject(tmpW).State(tmpH1);
}

tmpF = tmpF .Substr(tmpF .Find(tmpA1), tmpF.Length());
tmpF = tmpF .Substr(tmpF .Find(tmpB1), tmpF.Length());

!Minimaltemperatur
if(dom.GetObject(tmpT).IsTypeOf(OT_VARDP)){
   tmpG = "\"tn\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpT).State(tmpL1.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(tmpU).IsTypeOf(OT_VARDP)){
   tmpG = "\"ws\":\"";
   tmpY = "\",";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 5).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpU).State(tmpL1.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(tmpV).IsTypeOf(OT_VARDP)){
   tmpG = "\"w_txt\":\"";
   tmpY = "\"},";
   tmpZ = tmpF.Find(tmpG) + tmpG.Length();
   tmpL1 = tmpF.Substr(tmpZ, 20).StrValueByIndex(tmpY, 0);
   dom.GetObject(tmpV).State(tmpL1);
}
Danke!
CCU3 - Firmwareversion: 3.41.11; 243 Kanaele in 84 Geraeten und 49 CUxD-Kanaele in 4 CUxD-Geraeten

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von alchy » 21.07.2017, 11:52

Kommt ja darauf an, was daran dir so wichtig ist. :?:
Wetterwarnung DWD v2.70

oder diverses Auslesen von Daten bei Wunderground oder vielleicht auch Stationen bei >meteomedia< usw.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
BausatzFan
Beiträge: 106
Registriert: 05.10.2015, 21:36
Wohnort: Bayern

Re: Wettervorhersage mit wetter.com

Beitrag von BausatzFan » 21.07.2017, 12:44

Ich habe von wetter.com die Tageshöchsttemperaturen vom aktuellen und nächsten Tag genutzt:
  • - Im Winter und in der Übergangszeit zur Heizungssteuerung: Wenn es tagsüber recht warm wird, soll die Heizung morgens nicht so stark hochheizen.
    - Im Sommer: Als weitere Bedingung um rechtzeitig die Rollläden zu Beschatten, damit es in den Räumen nicht so heiß wird.
Die Tageshöchsttemperaturen habe ich bei Wetterwarnung vom DWD und bei Wunderground nicht gefunden. Meteomedia scheint diese zu haben, nur gibt es keine Wetterstation bei mir in direkter nähe :? Aber es wäre ein Anfang. Bei meiner Suche habe ich aber keine Beiträge gefunden, wie ich die Tageshöchsttemperatur von Meteomedia in eine Varable bekomme.

Alchy, erinnerst Du Dich an einen Beitrag den Du mir verlinken könntest?
CCU3 - Firmwareversion: 3.41.11; 243 Kanaele in 84 Geraeten und 49 CUxD-Kanaele in 4 CUxD-Geraeten

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von alchy » 21.07.2017, 21:59

BausatzFan hat geschrieben: Alchy, erinnerst Du Dich an einen Beitrag den Du mir verlinken könntest?
Ich kann mich nur daran erinnern, letztens per PN ein Script für jemanden geschrieben zu haben. Da ging es um http://wetter.mpg-ge.de/
Was sagt denn die Suche?

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“