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 » 27.07.2017, 14:37

Hi Alchy,

ich habe die Vermutung, dass wetter.com bei mir doch noch funktioniert, und dass der Fehler irgendwo bei mir liegt. Denn wenn ich den Link im Skript mit meiner API, dem City Code und dem Projektnamen im IE ausführe, bekomme ich eine JSON Datei mit Werten!

In der JSON Datei steht:

Code: Alles auswählen

{"city":{"city_code":"DE00058xx","name":"mein Wohnort","url":"deutschland/mein Wohnort/DE00058xx.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":{"2017-07-27":{"p":"24","w":"2","tx":"20","tn":"13","d":"1501135200","06:00":{"p":"5","w":"60","tx":"15","tn":"13","d":"1501135200","w_txt":"leichter Regen"},"11:00":{"p":"6","w":"2","tx":"20","tn":"15","d":"1501153200","w_txt":"wolkig"},"17:00":{"p":"6","w":"81","tx":"19","tn":"16","d":"1501174800","w_txt":"Regen - Schauer"},"23:00":{"p":"6","w":"95","tx":"16","tn":"15","d":"1501196400","w_txt":"leichtes Gewitter"},"w_txt":"wolkig"}}}}
Ich kann die Zahlen zwar nicht genau deuten, aber das Datum und leichter regen stimmt :D

Hier mein Skript, dass alle 6 Stunden ausgeführt wird.

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 = "DE00058xx";

! 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);
}
Das Programm, welches das Skript ausführt, sieht wie folgt aus:
Wetter Programm.png
Mein Wetter-Programm
Hier die Variablen und deren Inhalt:
Wetter Variablen.png
Meine Wetter-Variablen
Hast Du eine Idee, warum die Variablen nicht vollständig beschrieben werden? :?
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 » 27.07.2017, 14:56

>> Fehlerprotokoll << zum Zeitpunkt des ausführens?

Ich mag diese tmp Scripte und Fremdscripte nicht kontrollieren, :twisted: aber da ist ags. etwas im Argen.
Wenn du unbedingt willst, dann schick mir das Script per PN, allerding komplett mit dem API Key.
Ich habe keinen und lege mir auch keinen an und kann dir nur versprechen ihn nach der versuchten Hilfe nicht mehr zu nutzen.

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 » 28.07.2017, 08:56

Hi Alchy,

ich habe Dir gerade eine PN geschickt. Hier noch mal das Skript ohne tmp Variablen, welches ich auch getestet habe (API und City code gelöscht). Gleiches Ergebnis, geht nicht.

Code: Alles auswählen

!-----------------------------------------------------------------------------
! Hier alle was man verändern kann/muss
! Voraussetzung: CUxD und ein Wetter.com Account
!-----------------------------------------------------------------------------
string apikey = "xxx";
string cityCode = "xxx";
string projectName = "hm";

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

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

!Wetter morgen Variablen-Namen (alles optional)
string Wetter_morgen_zustand = "Wetter_morgen_zustand"; !Zahl 0 - 999
string Wetter_morgen_tempMax = "Wetter_morgen_tempMax"; !Zahl -50 - 50 °C
string Wetter_morgen_tempMin = "Wetter_morgen_tempMin"; !Zahl -50 - 50 °C
string Wetter_morgen_wind = "Wetter_morgen_wind"; !Zahl 0 - 200 km/h
string Wetter_morgen_zustand_txt = "Wetter_morgen_zustand_txt"; !Zeichenkette
string Wetter_morgen_regen = "Wetter_morgen_regen"; !Logikwert
string Wetter_morgen_regen_wahrscheinlichkeit = "Wetter_morgen_regen_proz"; !Zahl 0 - 100 %


!-----------------------------------------------------------------------------
! Ab hier muss man nichts mehr beachten
!-----------------------------------------------------------------------------
    
string weatherUrl = "http://api.wetter.com/forecast/weather/city/" + cityCode +"/project/" + projectName + "/cs/" + apikey + "/output/json";

var stdout;
var posStart;
var posEnd;
var value;
var substring;
var posValueStart;
var posValueEnd;
var posValue;
var cut1 = "\"23:00\"";
var cut2 = "},";

var heute = system.Date("%F");
var t= system.Date("%F ")#"00:00:00";
t = t.ToTime().ToInteger() + 86400;
var morgen = t.ToTime().Format("%F");
t = t.ToTime().ToInteger() + 86400;
var morgen2 = t.ToTime().Format("%F");
    
dom.GetObject(CUxD_Device # ".CMD_SETS").State("wget -q -O - " # weatherUrl);
dom.GetObject(CUxD_Device # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject(CUxD_Device # ".CMD_RETS").State();

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

boolean regen = false;
posStart = "\"" + heute + "\":{";
posEnd = "\"" + morgen + "\":{";
substring = stdout.Substr(stdout.Find(posStart), stdout.Find(posEnd));

!Wetterzustand
posValueStart = "\"w\":\"";
posValueEnd = "\",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
integer valInt = value.ToInteger();
if(dom.GetObject(Wetter_heute_zustand).IsTypeOf(OT_VARDP)){
   dom.GetObject(Wetter_heute_zustand).State(valInt);
}
regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);

!Maximaltemperatur
if(dom.GetObject(Wetter_heute_tempMax).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tx\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_heute_tempMax).State(value.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(Wetter_heute_regen_wahrscheinlichkeit).IsTypeOf(OT_VARDP)){
   posValueStart = "\"pc\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_heute_regen_wahrscheinlichkeit).State(value.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(Wetter_heute_regen).IsTypeOf(OT_VARDP)){
   if(!regen){
      var cutUhr = "\"06:00\"";
      var regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
      posValueStart = "\"w\":\"";
      posValueEnd = "\",";
      posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
      valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
      regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
      if(!regen){
         cutUhr = "\"11:00\"";
         regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
         posValueStart = "\"w\":\"";
         posValueEnd = "\",";
         posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
         valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
         regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
         if(!regen){
            cutUhr = "\"17:00\"";
            regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
            posValueStart = "\"w\":\"";
            posValueEnd = "\",";
            posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
            valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
            regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
            if(!regen){
               cutUhr = "\"23:00\"";
               regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
               posValueStart = "\"w\":\"";
               posValueEnd = "\",";
               posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
               valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
               regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);      
            }
         }
      }
   }
   dom.GetObject(Wetter_heute_regen).State(regen);
}

substring = substring.Substr(substring .Find(cut1), substring.Length());
substring = substring.Substr(substring .Find(cut2), substring.Length());

!Minimaltemperatur
if(dom.GetObject(Wetter_heute_tempMin).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tn\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_heute_tempMin).State(value.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(Wetter_heute_wind).IsTypeOf(OT_VARDP)){
   posValueStart = "\"ws\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_heute_wind).State(value.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(Wetter_heute_zustand_txt).IsTypeOf(OT_VARDP)){
   posValueStart = "\"w_txt\":\"";
   posValueEnd = "\"},";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 20).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_heute_zustand_txt).State(value);
}

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

regen = false;
posStart = "\"" + morgen + "\":{";
posEnd = "\"" + morgen2 + "\":{";
substring = stdout.Substr(stdout.Find(posStart), stdout.Find(posEnd));

!Wetterzustand
posValueStart = "\"w\":\"";
posValueEnd = "\",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
integer valInt = value.ToInteger();
if(dom.GetObject(Wetter_morgen_zustand).IsTypeOf(OT_VARDP)){
   dom.GetObject(Wetter_morgen_zustand).State(valInt);
}
regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);

!Maximaltemperatur
if(dom.GetObject(Wetter_morgen_tempMax).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tx\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen_tempMax).State(value.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(Wetter_morgen_regen_wahrscheinlichkeit).IsTypeOf(OT_VARDP)){
   posValueStart = "\"pc\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen_regen_wahrscheinlichkeit).State(value.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(Wetter_morgen_regen).IsTypeOf(OT_VARDP)){
   if(!regen){
      var cutUhr = "\"06:00\"";
      var regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
      posValueStart = "\"w\":\"";
      posValueEnd = "\",";
      posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
      valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
      regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
      if(!regen){
         cutUhr = "\"11:00\"";
         regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
         posValueStart = "\"w\":\"";
         posValueEnd = "\",";
         posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
         valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
         regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
         if(!regen){
            cutUhr = "\"17:00\"";
            regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
            posValueStart = "\"w\":\"";
            posValueEnd = "\",";
            posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
            valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
            regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
            if(!regen){
               cutUhr = "\"23:00\"";
               regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
               posValueStart = "\"w\":\"";
               posValueEnd = "\",";
               posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
               valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
               regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);      
            }
         }
      }
   }
   dom.GetObject(Wetter_morgen_regen).State(regen);
}

substring = substring .Substr(substring .Find(cut1), substring.Length());
substring = substring .Substr(substring .Find(cut2), substring.Length());

!Minimaltemperatur
if(dom.GetObject(Wetter_morgen_tempMin).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tn\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen_tempMin).State(value.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(Wetter_morgen_wind).IsTypeOf(OT_VARDP)){
   posValueStart = "\"ws\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen_wind).State(value.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(Wetter_morgen_zustand_txt).IsTypeOf(OT_VARDP)){
   posValueStart = "\"w_txt\":\"";
   posValueEnd = "\"},";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 20).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen_zustand_txt).State(value);
}

!-----------------------------------------------------------------------------
! ÜBERMORGEN
!-----------------------------------------------------------------------------

regen = false;
posStart = "\"" + morgen2 + "\":{";
posEnd = "}}";
substring = stdout.Substr(stdout.Find(posStart), stdout.Find(posEnd));

!Wetterzustand
posValueStart = "\"w\":\"";
posValueEnd = "\",";
posValue = substring.Find(posValueStart) + posValueStart.Length();
value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
integer valInt = value.ToInteger();
if(dom.GetObject(Wetter_morgen2_zustand).IsTypeOf(OT_VARDP)){
   dom.GetObject(Wetter_morgen2_zustand).State(valInt);
}
regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);

!Maximaltemperatur
if(dom.GetObject(Wetter_morgen2_tempMax).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tx\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen2_tempMax).State(value.ToInteger());
}

!Regenwahrscheinlichkeit
if(dom.GetObject(Wetter_morgen2_regen_wahrscheinlichkeit).IsTypeOf(OT_VARDP)){
   posValueStart = "\"pc\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen2_regen_wahrscheinlichkeit).State(value.ToInteger());
}

!Wird überhaupt regnen
if(dom.GetObject(Wetter_morgen2_regen).IsTypeOf(OT_VARDP)){
   if(!regen){
      var cutUhr = "\"06:00\"";
      var regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
      posValueStart = "\"w\":\"";
      posValueEnd = "\",";
      posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
      valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
      regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
      if(!regen){
         cutUhr = "\"11:00\"";
         regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
         posValueStart = "\"w\":\"";
         posValueEnd = "\",";
         posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
         valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
         regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
         if(!regen){
            cutUhr = "\"17:00\"";
            regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
            posValueStart = "\"w\":\"";
            posValueEnd = "\",";
            posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
            valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
            regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
            if(!regen){
               cutUhr = "\"23:00\"";
               regenSuche = substring.Substr(substring.Find(cutUhr), substring.Length());
               posValueStart = "\"w\":\"";
               posValueEnd = "\",";
               posValue = regenSuche.Find(posValueStart) + posValueStart.Length();
               valInt = regenSuche.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0).ToInteger();
               regen = ((valInt > 5) && (valInt < 10)) || (valInt > 59);
            }
         }
      }
   }
   dom.GetObject(Wetter_morgen2_regen).State(regen);
}

substring = substring.Substr(substring.Find(cut1), substring.Length());
substring = substring.Substr(substring.Find(cut2), substring.Length());

!Minimaltemperatur
if(dom.GetObject(Wetter_morgen2_tempMin).IsTypeOf(OT_VARDP)){
   posValueStart = "\"tn\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen2_tempMin).State(value.ToInteger());
}

!Windgeschwindigkeit
if(dom.GetObject(Wetter_morgen2_wind).IsTypeOf(OT_VARDP)){
   posValueStart = "\"ws\":\"";
   posValueEnd = "\",";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 5).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen2_wind).State(value.ToInteger());
}

!Wetterzustand Text
if(dom.GetObject(Wetter_morgen2_zustand_txt).IsTypeOf(OT_VARDP)){
   posValueStart = "\"w_txt\":\"";
   posValueEnd = "\"}";
   posValue = substring.Find(posValueStart) + posValueStart.Length();
   value = substring.Substr(posValue, 20).StrValueByIndex(posValueEnd, 0);
   dom.GetObject(Wetter_morgen2_zustand_txt).State(value);
}
Das ganze hat schon mal funktioniert. Ich habe einige Funktionen, die den Wert von Temperatur_heute_Max und Regen_heute/morgen benötigen.

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 » 28.07.2017, 11:09

Was ich schon mal sagen kann, die Rückgabe passt nicht mehr zu dem Script und dadurch funktioniert es natürlich so nicht mehr.
Vielleicht liest ja der Urheber des Scriptes mit und mag sein Script anpassen.

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 » 02.08.2017, 11:50

Vielleicht liest ja der Urheber des Scriptes mit und mag sein Script anpassen.
Das fände ich super klasse! Nutzt sonst noch wer das Skript?
CCU3 - Firmwareversion: 3.41.11; 243 Kanaele in 84 Geraeten und 49 CUxD-Kanaele in 4 CUxD-Geraeten

fischmir
Beiträge: 972
Registriert: 03.02.2014, 18:04
Wohnort: Münsterland
Hat sich bedankt: 27 Mal
Danksagung erhalten: 8 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von fischmir » 02.08.2017, 14:09

Ich würde es gerne wieder nutzen.

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 » 04.08.2017, 16:19

Hi

Ich nutze das Skript auch und bei mir geht es aber.
Unbenannt.PNG
Das ist das Skript:

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 = "c2aaf1a8548a22b";

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

! Meine Projektnummer
string tmpC = "meinProjekt";

var tmpD = "CUxD.CUX2801002: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);
}
Den teil mit der "string tmpA = "c2aaf1a85122b";" an Anfang habe ich verändert da muss eurer rein.

Wie auch hier "string tmpB = "DE000";" da muss eure Kennung rein.
Zuletzt geändert von Wortmann30 am 12.03.2018, 14:16, insgesamt 2-mal geändert.
Grüsse


To be continued...

tubu
Beiträge: 38
Registriert: 24.09.2016, 08:53
Wohnort: Oberbayern
Hat sich bedankt: 4 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von tubu » 06.03.2018, 14:58

ldittmar hat geschrieben:

:!: :!: :!: Da wetter.com seine Seiten gerade neu programmiert, ist die Möglichkeit diese API zu nutzen auch down. Sobald die API wieder verfügbar ist, werde ich den Skript entsprechend anpassen. :!: :!: :!:

Hallo,

nachdem im ersten Post noch der Hinweis drin ist, eine Verständnisfrage von mir. Kann man das Script trotzdem nutzen oder gibt es Probleme damit ?

Gruß aus Oberbayern
Thomas
Grüße aus Oberbayern
Thomas

Slice
Beiträge: 1200
Registriert: 03.02.2016, 14:44
System: Alternative CCU (auf Basis OCCU)
Wohnort: irgendwo aus Süd BaWü
Hat sich bedankt: 139 Mal
Danksagung erhalten: 85 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von Slice » 09.03.2018, 20:49

Hallo tubu,

die API-Seite bei Wetter.com ist immer noch im Umbau:
https://www.wetter.com/apps_und_mehr/website/api/

Code: Alles auswählen

Diese Seite ist noch nicht verfügbar
 
Diese Seite befindet sich noch im Umbau. 
Wir freuen uns Ihnen zeitnah den vollen Funktionsumfang anbieten zu können.
Von der Startseite aus geht es wieder weiter

Falls Sie auf der Suche nach Wetterdaten zu einem bestimmten Ort waren, können Sie auch die Suchfunktion oben verwenden.
Ohne diese Funktion geht soweit mir bekannt ist das Script hier leider nicht.

Grüße,
Slice
----------------------------------------------------------------------------------------
Raspi3B+ Bullseye mit HB-RF-ETH und RPI-RF-MOD auf piVCCU-FW 3.75.7 / Addons: CuxD v2.11 - E-Mail v1.7.6 - Patcher v1.0.0 - Philips Hue v3.2.5 - Programme drucken v2.6 - Scriptparser v1.11 - XML-API v2.3
Geräte: 141 / Kanäle: 791 / Datenpunkte: 6080 / SysVars: 275 / Programme: 161 / Regadom IDs: 14010 / 48 CUxD-Kanäle in 3 CUxD-Geräten
Intel NUC i3-5010U @ 2,1 GHz mit 16 GB RAM & 512 GB SSD für Proxmox mit ioBroker VM und CCU-Historian/InfluxDB/Grafana VM
----------------------------------------------------------------------------------------
Projekte im Forum: HomeHub v4.1 / Fritzbox-Anruferliste für HomeHub
----------------------------------------------------------------------------------------

tubu
Beiträge: 38
Registriert: 24.09.2016, 08:53
Wohnort: Oberbayern
Hat sich bedankt: 4 Mal

Re: Wettervorhersage mit wetter.com

Beitrag von tubu » 14.03.2018, 08:58

Guten Morgen,

danke für die Info.
Grüße aus Oberbayern
Thomas

Antworten

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