HM-Script für virtuelle Wetterstation

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

luPaN
Beiträge: 8
Registriert: 08.05.2020, 19:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wetzlar

Re: HM-Script für virtuelle Wetterstation

Beitrag von luPaN » 27.05.2020, 15:05

Hm. Na gut. Dann dafür auch Danke. Wundert mich halt nur, dass er mir beim manuellen Ausführen die Variablen nicht automatisch anlegt. Und auch nicht den Hinweis „Script ganz durch“ ausgibt.
Werde wohl noch ein wenig probieren müssen.

Benutzeravatar
Baxxy
Beiträge: 11080
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 637 Mal
Danksagung erhalten: 2299 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 27.05.2020, 15:35

luPaN hat geschrieben:
27.05.2020, 15:05
Werde wohl noch ein wenig probieren müssen.
Dann stimmt bei deinem Setup irgendetwas nicht.
Habe das vollständige Script gerade auf einer komplett frisch aufgesetzten virtuellen RaspberryMatic getestet und da lief es sauber durch und alle SysVars wurden angelegt. Und ja, mach braucht im "Script testen" Fenster gefühlt 1 Minute Geduld bis eine Ausgabe erscheint.
WeatherScript.JPG
Grüße
Baxxy

luPaN
Beiträge: 8
Registriert: 08.05.2020, 19:14
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wetzlar

Re: HM-Script für virtuelle Wetterstation

Beitrag von luPaN » 27.05.2020, 19:27

Kann jetzt nicht sagen warum, aber jetzt hat es funktioniert. Vielleicht war ich doch zu ungeduldig. Vielen lieben Dank für die aktuellen Hilfen und natürlich ein großes Danke an all diejenigen, welche das Script zum erfolgreichen Abschluss gebracht haben.

Bargosh
Beiträge: 1
Registriert: 28.05.2020, 09:51
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Bargosh » 28.05.2020, 10:06

Vielen Dank für deine tolle Arbeit, funktioniert bestens.

loewe.242
Beiträge: 23
Registriert: 01.08.2018, 10:59

Re: HM-Script für virtuelle Wetterstation

Beitrag von loewe.242 » 28.05.2020, 21:11

Hallo Leute, ich habe auch einen Fehler und finde ihn nicht.

Hier das Skript mit dem Fehler...

Habt ihr eine Idee??
Danke Alex

Code: Alles auswählen

Error 1 at row 1154 col 22 near ^)&&(owGradzahl>=0))
{
	svObject = dom.GetObject(svWindRichtungInt);
	if (!svObje
Parse following code failed:

Code: Alles auswählen

!OpenWeather-CCU-Script, Version 1, 15.02.2017


string owAppid='2761e6c5efe3c72fc697faba63586676';
string owCityid=2952372;

string svAktualisierung='OpenWeather Letzte Aktualisierung';
string svTemperatur='OpenWeather Temperatur';
string svMinimalTemperatur='OpenWeather Temperatur (min.)';
string svMaximalTemperatur='OpenWeather Temperatur (max.)';
string svLuftfeuchtigkeit='OpenWeather Luftfeuchte (rel.)';
string svLuftdruck='OpenWeather Luftdruck';
string svWindGeschwindigkeit='OpenWeather Windgeschwindigkeit';
string svWindRichtung='OpenWeather Windrichtung';
string svWetterstation='OpenWeather Wetterstation';
string svSonnenaufgang='OpenWeather Sonnenaufgang';
string svSonnenuntergang='OpenWeather Sonnenuntergang';
string svWetter='OpenWeather Wetter';
string svNiederschlag='OpenWeather Niederschlag';
string svNiederschlagsart='OpenWeather Niederschlagsart';
string svWolken='OpenWeather Bewölkung';


!Optionale Experteneinstellungen: OpenWeather-Daten per CUxD abrufen
!Falls Sie in Ihrer Homematic die Software CUX-Daemon installiert haben, setzt dieses Script den wget-Command standardmäßig per
!CUxD "System-Devices" (28) bzw. Device CUxD.CUX2803001:1 ab. Hier gegebenenfalls den Namen des Devices nach dem Schema "CUxD.<Seriennummer>:1" ändern.
!Falls Sie nicht möchten, dass der wget-Gommand per CUxD sondern per system.Exec erfolgt, setzen Sie diese Variable auf false (string cuxCMDName=false;)

string cuxCMDName=false;


!Optionale Experteneinstellungen: OpenWeather-Daten bzw. Systemvariblen per CUxD Logit aufzeichnen
!Falls der CUX-Daemon installiert ist, werden die Messdaten der o.g. Systemvariablen dieses Scripts standardmäßig zusätzlich per CUxD LOGIT aufgezeichnet
!Falls Sie keine Aufzeichnng der Messdaten wünschen, ändern Sie diese Variable auf false (string cuxCMDName=false;)

boolean useLOGIT=true;


!Optionale Experteneinstellungen: OpenWeather-Daten in CUxD Thermostat-Device schreiben
!Falls der CUX-Daemon installiert ist und Sie ein "Universal Wrapper Device" (90) mit der Funktion "Thermostat" angelgt haben, kann dieses Script einige
!der abgerufenen Messwerte direkt in das Device schreiben (das ist der eigentliche Sinn dieses Scripts).
!Wichtig: Damit dies funktioniert, muss in den Einstellungen des Devices, im Kanal 1 die Option "WEATHER|USE_HMDATAPT" deaktiviert sein (nicht angehakt).
!Hier gegebenenfalls den Namen des Devices nach dem Schema "CUxD.<Seriennummer>:1" ändern.
!Falls Sie nicht möchten, dass Messwerte in das Device geschrieben werden, setzen Sie diese Variable auf false (string cuxWDSName=false;)

string cuxWDSName='CUxD.CUX9002001:1';


!************************************************************
!************************************************************
!BEGIN DES SCRIPTS
!************************************************************
!************************************************************

!Variablendeklaration
!***********************
!OpenWeather-Url mit Defaultwerte
string owLocation='&id=INSERT';
string owUrl='http://api.openweathermap.org/data/2.5/weather?mode=xml&units=metric';
!CUxD/Exec und Rückgabe-Variablen (Programmablauf) mit Defaultwerte
boolean cuxCMD=false; boolean cuxWDS=false;string recXML;
!XML-Parser (Tagnamen)
string xmlStartTagName_Aktualisierung;string xmlEndTagName_Aktualisierung;
string xmlStartTagName_Temperatur;string xmlEndTagName_Temperatur;
string xmlStartTagName_Luftfeuchtigkeit;string xmlEndTagName_Luftfeuchtigkeit;
string xmlStartTagName_Luftdruck;string xmlEndTagName_Luftdruck;
string xmlStartTagName_Wind;string xmlEndTagName_Wind;
string xmlStartTagName_Geschwindigkeit;string xmlEndTagName_Geschwindigkeit;
string xmlStartTagName_Windrichtung;string xmlEndTagName_Windrichtung;
string xmlStartTagName_Stadt;string xmlEndTagName_Stadt;
string xmlStartTagName_Sonnenzeit;string xmlEndTagName_Sonnenzeit;
string xmlStartTagName_Wetter;string xmlEndTagName_Wetter;
string xmlStartTagName_Niederschlag;string xmlEndTagName_Niederschlag;
string xmlStartTagName_Wolken;string xmlEndTagName_Wolken;
!XML-Parser (Programmablauf)
integer xmlStartTagLenght;
integer xmlTagStart;integer xmlTagLength;
integer xmlAttributeStart;integer xmlAttributeLength;
string xmlTagContent;
string xmlAttributeValue;
!Zurückgemeldete und aus der XML extrahierte Werte von OpenWeather
real owTemperatur;real owMinimalTemperatur;real owMaximalTemperatur;
real owLuftfeuchtigkeit;
real owLuftdruck;
real owWindGeschwindigkeit;real owGradzahl;string owWindRichtung;
string owWetterstation;
string owAktualisierung;
string owSonnenaufgang;string owSonnenuntergang;
string owWetter;
real owNiederschlag;string owNiederschlagsart;
integer owWolken;
!Objekte für Systemvariablen (Programmablauf)
object svObject;
object svObjectlist;
!Objekte für Devices (Programmablauf)
string dvObjectID;
object dvObject;
object dvObjectlist;
!Generische Variablen (Mehrfachverwendung)
string genString1;string genString2;string genString3;
time genTime1;
integer genInteger1;integer genInteger2;
real genReal1;

!Url zum Abruf des XML-Strings zusammen sezten
!****************************************************
if(owCityid){
   owLocation='&id='#owCityid;
} else {
   if(system.Longitude()&&system.Latitude())
   {
      owLocation='&lat='#system.Latitude()#'&lon='#system.Longitude();
   }
}
owUrl = owUrl#'&APPID='#owAppid#owLocation;

!Prüfen, ob CUX-Daemon Devices vorhanden sind
!***************************************************
if(dom.GetObject(cuxCMDName#'.CMD_SETS')){cuxCMD = true;}
if(dom.GetObject(cuxWDSName#'.SET_TEMPERATURE')){cuxWDS=true;}

!wget ausführen
!*****************
if(cuxCMD)
{
   !Website via CUxD und wget aufrufen.
   dom.GetObject(cuxCMDName#'.CMD_SETS').State("wget -q -O - '"#owUrl#"'");
   dom.GetObject(cuxCMDName#'.CMD_QUERY_RET').State(1);
   recXML = dom.GetObject(cuxCMDName#'.CMD_RETS').State();
} else {
   !Fallback: Website via system.Exec und wget aufrufen
   system.Exec("wget -q -O - '"#owUrl#"'", &recXML, &genString1); 
}

!Pruefen, ob XML-String geholt wurde, ansonsten abbrechen
!****************************************************************
if(!recXML){quit;}






!Tag-Namen-Suche im geholten XML-String vorbereiten
!*********************************************************
!Je nachdem, ob die Daten via CUxD oder Exex bezogen wurden, haben die XML-Tags ein anderes Format.
!Exex liefert einen XML-String mit eckigen Klammern nach dem Schema <tag></tag> oder <tag/>
!CUxD enternt eckige Klammern und liefert eine String nach dem Schema "tag /tag"
if(cuxCMD)
{
  !Suchstrings für XML-Tags von CUxD festlegen
  xmlStartTagName_Aktualisierung = 'lastupdate ';
  xmlEndTagName_Aktualisierung = '  /lastupdate';
  xmlStartTagName_Temperatur = 'temperature ';
  xmlEndTagName_Temperatur = '  /temperature';
  xmlStartTagName_Luftfeuchtigkeit = 'humidity ';
  xmlEndTagName_Luftfeuchtigkeit = '  /humidity';
  xmlStartTagName_Luftdruck = 'pressure ';
  xmlEndTagName_Luftdruck = '  /pressure';
  xmlStartTagName_Wind = 'wind ';
  xmlEndTagName_Wind = '  /wind';
  xmlStartTagName_Geschwindigkeit = 'speed ';
  xmlEndTagName_Geschwindigkeit = '  /speed';
  xmlStartTagName_Windrichtung = 'direction ';
  xmlEndTagName_Windrichtung = '  /direction';
  xmlStartTagName_Stadt = 'city ';
  xmlEndTagName_Stadt = '  /city';
  xmlStartTagName_Sonnenzeit = 'sun ';
  xmlEndTagName_Sonnenzeit = '  /sun';
  xmlStartTagName_Wetter = 'weather ';
  xmlEndTagName_Wetter = '  /weather';
  xmlStartTagName_Niederschlag = 'precipitation ';
	xmlEndTagName_Niederschlag = '  /precipitation';
	xmlStartTagName_Wolken = 'clouds ';
	xmlEndTagName_Wolken = '  /clouds';
} else {
  !Suchstrings für XML-Tags von Exec festlegen
  xmlStartTagName_Aktualisierung = '<lastupdate ';
  xmlEndTagName_Aktualisierung = '>';
  xmlStartTagName_Temperatur = '<temperature ';
  xmlEndTagName_Temperatur = '>';
  xmlStartTagName_Luftfeuchtigkeit = '<humidity ';
  xmlEndTagName_Luftfeuchtigkeit = '>';
  xmlStartTagName_Luftdruck = '<pressure ';
  xmlEndTagName_Luftdruck = '>';
  xmlStartTagName_Wind = '<wind>';
  xmlEndTagName_Wind = '</wind>';
  xmlStartTagName_Geschwindigkeit = '<speed ';
  xmlEndTagName_Geschwindigkeit = '>';
  xmlStartTagName_Windrichtung = '<direction ';
  xmlEndTagName_Windrichtung = '>';
  xmlStartTagName_Stadt = '<city ';
  xmlEndTagName_Stadt = '</city>';
  xmlStartTagName_Sonnenzeit = '<sun ';
  xmlEndTagName_Sonnenzeit = '>';
  xmlStartTagName_Wetter = '<weather ';
  xmlEndTagName_Wetter = '>';
  xmlStartTagName_Niederschlag = '<precipitation ';
	xmlEndTagName_Niederschlag = '>';
	xmlStartTagName_Wolken = '<clouds ';
	xmlEndTagName_Wolken = '>';
}

!Geholten XML-String parsen
!******************************

!Parser für svAktualisierung
if(svAktualisierung)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Aktualisierung.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Aktualisierung);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Aktualisierung);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
         !Datenabruf-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('value="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owAktualisierung = xmlAttributeValue.ToString();
         }
      }
   }
}



!Parser für svTemperatur, svMinimalTemperatur, svMaximalTemperatur
if(svTemperatur)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Temperatur.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Temperatur);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Temperatur);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
         !Temperatur-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('value="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owTemperatur = xmlAttributeValue.ToFloat();
         }   
      
         !MinimalTemperatur-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('min="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owMinimalTemperatur = xmlAttributeValue.ToFloat();
         }   
      
         !MaximalTemperatur-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('max="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owMaximalTemperatur = xmlAttributeValue.ToFloat();
         }
      
      }
   }
}



!Parser für svLuftfeuchtigkeit
if(svLuftfeuchtigkeit)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Luftfeuchtigkeit.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Luftfeuchtigkeit);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftfeuchtigkeit);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
         !Luftfeuchtigkeits-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('value="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owLuftfeuchtigkeit = xmlAttributeValue.ToFloat();
         }   
   
      }
   }
}


!Parser für svLuftdruck
if(svLuftdruck)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Luftdruck.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Luftdruck);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftdruck);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
         !Luftdruck-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('value="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owLuftdruck = xmlAttributeValue.ToFloat();
         }   
   
      }
   }
}


!Parser für owWindGeschwindigkeit
if(svWindGeschwindigkeit)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Wind.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Wind);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
         
         !Sub-Parser Geschwindigkeit
         xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
         xmlStartTagLenght = xmlStartTagName_Geschwindigkeit.Length();
         xmlTagStart = xmlTagContent.Find(xmlStartTagName_Geschwindigkeit);
         if (xmlTagStart>=0) 
         {
            xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); 
            xmlTagLength = xmlTagContent.Find(xmlEndTagName_Geschwindigkeit);
            if(xmlTagLength>0)
            {
               xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
               !Geschwindigkeit-Attribut auslesen
               xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
               xmlAttributeStart=xmlTagContent.Find('value="');
               if (xmlAttributeStart>=0) 
               {
                  xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
                  xmlAttributeLength = xmlAttributeValue.Find('"');
                  xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
                  owWindGeschwindigkeit = xmlAttributeValue.ToFloat()*3.6;
               }   
   
            }
         }
         
      }
   }
}



!Parser für owGradzahl, owWindRichtung
if(svWindRichtung)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Wind.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Wind);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
         
         !Sub-Parser Windrichtng
         xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
         xmlStartTagLenght = xmlStartTagName_Windrichtung.Length();
         xmlTagStart = xmlTagContent.Find(xmlStartTagName_Windrichtung);
         if (xmlTagStart>=0) 
         {
            xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); 
            xmlTagLength = xmlTagContent.Find(xmlEndTagName_Windrichtung);
            if(xmlTagLength>0)
            {
               xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
               !Gradzahl-Attribut auslesen
               xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
               xmlAttributeStart=xmlTagContent.Find('value="');
               if (xmlAttributeStart>=0) 
               {
                  xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
                  xmlAttributeLength = xmlAttributeValue.Find('"');
                  xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
                  owGradzahl = xmlAttributeValue.ToInteger();
               }   
               
               !Himmelsrichtung-Attribut auslesen
               xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
               xmlAttributeStart=xmlTagContent.Find('code="');
               if (xmlAttributeStart>=0) 
               {
                  xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
                  xmlAttributeLength = xmlAttributeValue.Find('"');
                  xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
                  owWindRichtung = xmlAttributeValue.ToString();
               }   
   
            }
         }
      }
   }
}



!Parser für owWetterstation
if(svWetterstation)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Stadt.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Stadt);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Stadt);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
         
         !Stadtname-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('name="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owWetterstation = xmlAttributeValue.ToString();
         }   
         
         !Sub-Parser Sonnezeit
         xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
         xmlStartTagLenght = xmlStartTagName_Sonnenzeit.Length();
         xmlTagStart = xmlTagContent.Find(xmlStartTagName_Sonnenzeit);
         if (xmlTagStart>=0) 
         {
            xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); 
            xmlTagLength = xmlTagContent.Find(xmlEndTagName_Sonnenzeit);
            if(xmlTagLength>0)
            {
               xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
               !Sonnenaufgang-Attribut auslesen
               xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
               xmlAttributeStart=xmlTagContent.Find('rise="');
               if (xmlAttributeStart>=0) 
               {
                  xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
                  xmlAttributeLength = xmlAttributeValue.Find('"');
                  xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
                  owSonnenaufgang = xmlAttributeValue.ToString();
               }   
               
               !Sonnenuntergang-Attribut auslesen
               xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
               xmlAttributeStart=xmlTagContent.Find('set="');
               if (xmlAttributeStart>=0) 
               {
                  xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
                  xmlAttributeLength = xmlAttributeValue.Find('"');
                  xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
                  owSonnenuntergang = xmlAttributeValue.ToString();
               }   
   
            }
         }
      }
   }
}


!Parser für svWetter
if(svWetter)
{
   xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
   xmlStartTagLenght = xmlStartTagName_Wetter.Length();
   xmlTagStart = recXML.Find(xmlStartTagName_Wetter);
   if (xmlTagStart>=0) 
   {
      xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); 
      xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wetter);
      if(xmlTagLength>0)
      {
         xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
      
         !Luftfeuchtigkeits-Attribut auslesen
         xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
         xmlAttributeStart=xmlTagContent.Find('value="');
         if (xmlAttributeStart>=0) 
         {
            xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
            xmlAttributeLength = xmlAttributeValue.Find('"');
            xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
            owWetter = xmlAttributeValue.ToString();
         }   
   
      }
   }
}


!Parser für owNiederschlag, owNiederschlagTyp  -new
if((svNiederschlag)||(svNiederschlagsart))
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Niederschlag.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Niederschlag);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Niederschlag);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Niederschlagsart auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('mode="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owNiederschlagsart = xmlAttributeValue.ToString();
			}

			!Niederschlag auslesen
			if(owNiederschlagsart=='no')
			{
				owNiederschlag = 0;
			}
			else
			{
				xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
				xmlAttributeStart=xmlTagContent.Find('value="');
				if (xmlAttributeStart>=0)
				{
					xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
					xmlAttributeLength = xmlAttributeValue.Find('"');
					xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
					owNiederschlag = xmlAttributeValue.ToFloat();
				}
			}

		}
	}
}


!Parser für owWolken  -new
if(svWolken)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Wolken.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Wolken);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wolken);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Wolken auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owWolken = xmlAttributeValue.ToInteger();
			}

		}
	}
}


!Ermittelte Werte in Systemvariable schreiben
!**************************************************
!Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen.
!Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html

!Schreiben von svAktualisierung
if(svAktualisierung)
{
   !String bzw. Uhrzeit umformatieren
   genString1='';genTime1=null;genString2='';
   genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11);
   genTime1 = genString1.ToTime();
   genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
   svObject = dom.GetObject(svAktualisierung);
   !Wenn noch keine Systemvarible vorhanden, diese anlegen
   if (!svObject)
   {   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svAktualisierung);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo('OpenWeatherMap - Aktualisierung');
       svObject.ValueUnit('');
       svObject.State(genString2);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(genString2);
   }
   !Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);}
}



!Schreiben von svSonnenaufgang
if(svSonnenaufgang)
{
   genString1='';genTime1=null;genString2='';
   genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
   integer DST;
   if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
   else {DST = 3600;}
   genTime1 = genString1.ToTime()+DST;
   genString2 = genTime1.Format("%H:%M"#" Uhr");
   svObject = dom.GetObject(svSonnenaufgang);
   if (!svObject)
   {   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svSonnenaufgang);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo('OpenWeatherMap - Sonnenaufgang');
       svObject.ValueUnit('');
       svObject.State(genString2);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(genString2);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);}
}



!Schreiben von svSonnenuntergang
if(svSonnenuntergang)
{
   genString1='';genTime1=null;genString2='';
   genString1 = owSonnenuntergang.Substr(0,10)#' '#owSonnenuntergang.Substr(11);
   integer DST;
   if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
   else {DST = 3600;}
   genTime1 = genString1.ToTime()+DST;
   genString2 = genTime1.Format("%H:%M"#" Uhr");
   svObject = dom.GetObject(svSonnenuntergang);
   if (!svObject)
   {   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svSonnenuntergang);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo('OpenWeatherMap - Sonnenuntergang');
       svObject.ValueUnit('');
       svObject.State(genString2);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(genString2);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenuntergang#';'#genTime1);}
}



!Schreiben von svWetterstation
if(svWetterstation)
{
   genString1='';genString2='';genString3='';genInteger1=0;genInteger2=0;
   genInteger1=owWetterstation.Length();
   foreach(genInteger2,genInteger1)
   {
      genString1=owWetterstation.Substr(genInteger2-1,1);
      if(genString1=='Ã')
      {
         genString2=owWetterstation.Substr(genInteger2,1);
         if(genString2=='¼'){genString1='ü';genInteger2=genInteger2+1;}
         if(genString2=='¶'){genString1='ö';genInteger2=genInteger2+1;}
         if(genString2=='¤'){genString1='ä';genInteger2=genInteger2+1;}
      }
      genString3=genString3#genString1;
   }
   
   svObject = dom.GetObject(svWetterstation);
   if (!svObject)
   {   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svWetterstation);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo('OpenWeatherMap - Wetterstation');
       svObject.ValueUnit('');
       svObject.State(genString3);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(genString3);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetterstation#';'#genString3);}
}



!Schreiben von svWindgeschwindigkeit
if(svWindGeschwindigkeit)
{
   svObject = dom.GetObject(svWindGeschwindigkeit);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svWindGeschwindigkeit);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Windgeschwindigkeit");
       svObject.ValueUnit("m/s");
       svObject.ValueMin(0.0000);
       svObject.ValueMax(500.0000);
       svObject.State(owWindGeschwindigkeit);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owWindGeschwindigkeit);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindGeschwindigkeit#';'#owWindGeschwindigkeit);}
}

   

!Schreiben von svLuftdruck
if(svLuftdruck)
{
   svObject = dom.GetObject(svLuftdruck);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svLuftdruck);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Luftdruck");
       svObject.ValueUnit("hPa");
       svObject.ValueMin(500.0000);
       svObject.ValueMax(1100.0000);
       svObject.State(owLuftdruck);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owLuftdruck);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftdruck#';'#owLuftdruck);}
}

   

!Schreiben von svTemperatur
if(svTemperatur)
{
   svObject = dom.GetObject(svTemperatur);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svTemperatur);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Temperatur");
       svObject.ValueUnit("°C");
       svObject.ValueMin(-50.0000);
       svObject.ValueMax(50.0000);
       svObject.State(owTemperatur);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owTemperatur);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svTemperatur#';'#owTemperatur);}
   if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_TEMPERATURE').State(owTemperatur);}
}



!Schreiben von svMinimalTemperatur
if(svMinimalTemperatur)
{
   svObject = dom.GetObject(svMinimalTemperatur);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svMinimalTemperatur);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Temperatur (min.)");
       svObject.ValueUnit("°C");
       svObject.ValueMin(-50.0000);
       svObject.ValueMax(50.0000);
       svObject.State(owMinimalTemperatur);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owMinimalTemperatur);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMinimalTemperatur#';'#owMinimalTemperatur);}
}



!Schreiben von svMaximalTemperatur
if(svMaximalTemperatur)
{
   svObject = dom.GetObject(svMaximalTemperatur);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svMaximalTemperatur);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Temperatur (max.)");
       svObject.ValueUnit("°C");
       svObject.ValueMin(-50.0000);
       svObject.ValueMax(50.0000);
       svObject.State(owMaximalTemperatur);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owMaximalTemperatur);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMaximalTemperatur#';'#owMaximalTemperatur);}
}



!Schreiben von svLuffeuchtigkeit
if(svLuftfeuchtigkeit)
{
   svObject = dom.GetObject(svLuftfeuchtigkeit);
   if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svLuftfeuchtigkeit);   
       svObject.ValueType(ivtFloat);
       svObject.ValueSubType(istGeneric);
       svObject.DPInfo("OpenWeatherMap - Luftfeuchtigkeit");
       svObject.ValueUnit("%");
       svObject.ValueMin(0.0000);
       svObject.ValueMax(100.0000);
       svObject.State(owLuftfeuchtigkeit);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(owLuftfeuchtigkeit);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftfeuchtigkeit#';'#owLuftfeuchtigkeit);}
   if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_HUMIDITY').State(owLuftfeuchtigkeit);}
}



!Schreiben von svWindrichtung
if(svWindRichtung)
{
   !Englische Windrichtungsangaben übersetzen (z.B. N-W-E in Nord-West-Ost)
   genString1='';genString2='';genString3='';genInteger1=0;
   genString1 = owWindRichtung;
   foreach(genInteger1,genString1.Length())
   {
      genString2=genString1.Substr(genInteger1-1,1);
      if(genString2=='E'){genString3=genString3#'Ost-';}
      if(genString2=='S'){genString3=genString3#'Süd-';}
      if(genString2=='W'){genString3=genString3#'West-';}
      if(genString2=='N'){genString3=genString3#'Nord-';}
   }
   genString1=genString3.Substr(0,genString3.Length()-1);
   genString2=owGradzahl.ToString()#'° '#genString1;
   svObject = dom.GetObject(svWindRichtung);
   if (!svObject)
   {   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svWindRichtung);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo('OpenWeatherMap - Windrichtung');
       svObject.ValueUnit('');
       svObject.State(genString2);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
      svObject.State(genString2);
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtung#';'#genString2);}
}



!Schreiben von svWetter
if(svWetter)
{
   genString1='';genString2='';genString3='';genInteger1=0;
   genString1 = owWetter;
   genString2=genString1;

!WriteLine(genString2);
   
	if(genString2=='thunderstorm with light rain'){genString3=genString3#'Gewitter mit leichtem Regen';}
	if(genString2=='thunderstorm with rain'){genString3=genString3#'Gewittersturm mit Regen';}
	if(genString2=='thunderstorm with heavy rain'){genString3=genString3#'Gewitter mit heftigem Regen';}
	if(genString2=='light thunderstorm'){genString3=genString3#'leichtes Gewitter';}
	if(genString2=='thunderstorm'){genString3=genString3#'Gewitter';}
	if(genString2=='heavy thunderstorm'){genString3=genString3#'heftiges Gewitter';}
	if(genString2=='ragged thunderstorm'){genString3=genString3#'heftiges Gewitter';}
	if(genString2=='thunderstorm with light drizzle'){genString3=genString3#'Gewitter mit leichtem Nieselregen';}
	if(genString2=='thunderstorm with drizzle'){genString3=genString3#'Gewitter mit Nieselregen';}
	if(genString2=='thunderstorm with heavy drizzle'){genString3=genString3#'Gewitter mit starkem Nieselregen';}
	if(genString2=='light intensity drizzle'){genString3=genString3#'leichter Nieselregen';}
	if(genString2=='drizzle'){genString3=genString3#'Nieselregen';}
	if(genString2=='heavy intensity drizzle'){genString3=genString3#'starker Nieselregen';}
	if(genString2=='light intensity drizzle rain'){genString3=genString3#'leichter Nieselregen';}
	if(genString2=='drizzle rain'){genString3=genString3#'Nieselregen';}
	if(genString2=='heavy intensity drizzle rain'){genString3=genString3#'starker Nieselregen';}
	if(genString2=='shower rain and drizzle'){genString3=genString3#'Regenschauer und Nieselregen';}
	if(genString2=='heavy shower rain and drizzle'){genString3=genString3#'starker Regenschauer und Nieselregen';}
	if(genString2=='shower drizzle'){genString3=genString3#'Regenschauer';}
	if(genString2=='light rain'){genString3=genString3#'leichter Regen';}
	if(genString2=='moderate rain'){genString3=genString3#'mäßiger Regen';}
	if(genString2=='heavy intensity rain'){genString3=genString3#'starker Regen';}
	if(genString2=='very heavy rain'){genString3=genString3#'sehr starker Regen';}
	if(genString2=='extreme rain'){genString3=genString3#'Extremniederschläge';}
	if(genString2=='freezing rain'){genString3=genString3#'Eisregen';}
	if(genString2=='light intensity shower rain'){genString3=genString3#'leichter Regenschauer';}
	if(genString2=='shower rain'){genString3=genString3#'Regenschauer';}
	if(genString2=='heavy intensity shower rain'){genString3=genString3#'starker Regenschauer';}
	if(genString2=='ragged shower rain'){genString3=genString3#'strömender Regen';}
	if(genString2=='light snow'){genString3=genString3#'leichter Schnee';}
	if(genString2=='snow'){genString3=genString3#'Schnee';}
	if(genString2=='heavy snow'){genString3=genString3#'heftiger Schneefall';}
	if(genString2=='sleet'){genString3=genString3#'Graupel';}
	if(genString2=='shower sleet'){genString3=genString3#'Schauer';}
	if(genString2=='light rain and snow'){genString3=genString3#'leichter Regen und Schnee';}
	if(genString2=='rain and snow'){genString3=genString3#'Schneeregen';}
	if(genString2=='light shower snow'){genString3=genString3#'leichter Schneeschauer';}
	if(genString2=='shower snow'){genString3=genString3#'Schneeschauer';}
	if(genString2=='heavy shower snow'){genString3=genString3#'starker Schneeschauer';}
	if(genString2=='mist'){genString3=genString3#'Nebel';}
	if(genString2=='smoke'){genString3=genString3#'Rauch';}
	if(genString2=='haze'){genString3=genString3#'Dunst';}
	if(genString2=='sand, dust whirls'){genString3=genString3#'Sand, Staubwirbel';}
	if(genString2=='fog'){genString3=genString3#'Nebel';}
	if(genString2=='sand'){genString3=genString3#'Sand';}
	if(genString2=='dust'){genString3=genString3#'Staub';}
	if(genString2=='volcanic ash'){genString3=genString3#'Vulkanasche';}
	if(genString2=='squalls'){genString3=genString3#'Sturmböen';}
	if(genString2=='tornado'){genString3=genString3#'Tornado';}
	if(genString2=='clear sky'){genString3=genString3#'klarer Himmel';}
	if(genString2=='few clouds'){genString3=genString3#'vereinzelte Wolken';}
	if(genString2=='scattered clouds'){genString3=genString3#'aufgelockerte Bewölkung';}
	if(genString2=='broken clouds'){genString3=genString3#'durchbrochene Bewölkung';}
	if(genString2=='overcast clouds'){genString3=genString3#'bedeckt';}

   genString1=genString3.Substr(0,genString3.Length());
   genString2=genString1;

   svObject = dom.GetObject(svWetter);
  if (!svObject){   
       svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
       svObject = dom.CreateObject(OT_VARDP);
       svObjectlist.Add(svObject.ID());
       svObject.Name(svWetter);   
       svObject.ValueType(ivtString);
       svObject.ValueSubType(istChar8859);
       svObject.DPInfo("OpenWeatherMap - Wetter");
       svObject.ValueUnit('');
       svObject.State(owWetter);
       svObject.Internal(false);
       svObject.Visible(true);
       dom.RTUpdate(true);
   } else {
!if(dom.GetObject("Tageszeit").Value()==0)
if ((((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())>((0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger()))
|| (((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())<((0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger())))
{
      svObject.State(genString2#' ');
}
else 
{
      svObject.State(genString2);
}
   }
   if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetter#';'#genString2);}
} 



!Schreiben von svNiederschlag
if(svNiederschlag)
{
	svObject = dom.GetObject(svNiederschlag);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svNiederschlag);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Niederschlagsmenge");
		svObject.ValueUnit("mm/h");
		svObject.ValueMin(0.0);
		svObject.ValueMax(100.0);
		svObject.State(owNiederschlag);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(true);
	} else {
		svObject.State(owNiederschlag);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlag#';'#owNiederschlag);}
}
!Schreiben von svNiederschlagsart
if(svNiederschlagsart)
{
	if (owNiederschlagsart=='rain'){owNiederschlagsart=1;}
	if (owNiederschlagsart=='snow'){owNiederschlagsart=2;}
	if (owNiederschlagsart=='no'){owNiederschlagsart=0;}

	svObject = dom.GetObject(svNiederschlagsart);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svNiederschlagsart);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istEnum);
		svObject.ValueList("kein Niederschlag;Regen;Schnee");
		svObject.DPInfo("OpenWeatherMap - Niederschlagsart");
		svObject.ValueUnit("");
		svObject.State(owNiederschlagsart);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(true);
	} else {
		svObject.State(owNiederschlagsart);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlagsart#';'#owNiederschlagsart);}
}



!Schreiben von svWolken
if(svWolken)
{
	svObject = dom.GetObject(svWolken);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWolken);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Bewölkung");
		svObject.ValueUnit("%");
		svObject.ValueMin(0);
		svObject.ValueMax(100);
		svObject.State(owWolken);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(true);
	} else {
		svObject.State(owWolken);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWolken#';'#owWolken);}
}



!Schreiben von svWindrichtung
if((svWindRichtungInt)&&(owGradzahl>=0))
{
	svObject = dom.GetObject(svWindRichtungInt);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWindRichtungInt);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Windrichtung Integer");
		svObject.ValueUnit("°");
		svObject.ValueMin(0);
		svObject.ValueMax(360);
		svObject.State(owGradzahl);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(true);
	} else {
		svObject.State(owGradzahl);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtungInt#';'#owGradzahl);}
}
Zuletzt geändert von alchy am 28.05.2020, 21:58, insgesamt 1-mal geändert.
Grund: Code in Codetags posten

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

Re: HM-Script für virtuelle Wetterstation

Beitrag von alchy » 28.05.2020, 22:07

Deklarationsfehler der Variable svWindRichtungInt

Zusätzlich noch
viewtopic.php?f=18&t=35702&p=580304&hil ... hy#p580304
lesen

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.

loewe.242
Beiträge: 23
Registriert: 01.08.2018, 10:59

Re: HM-Script für virtuelle Wetterstation

Beitrag von loewe.242 » 31.05.2020, 19:44

Hallo Achly, was bedeutet Deklarationsfehler? Ich habe dein Skript ausgeführt und die Systemvariable wurde auch angelegt. Leider bekomme ich immer noch den Fehler.

Danke für deine Hilfe!! :D

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

Re: HM-Script für virtuelle Wetterstation

Beitrag von alchy » 31.05.2020, 20:20

Dein Script ruft in der Zeile 1154

...
if((svWindRichtungInt)&&(owGradzahl>=0))
....

auf.
Die Scriptvariable svWindRichtungInt wird aber im Script vorher nicht deklariert. Das solltest du mindestens vor dem Aufruf tun. :wink:
Somit wird ein Fehler erzeugt und das Script bricht ab.

Keine Ahnung, welches der hier angebotenen Scripte korrekt ist. Ich hatte damals nur mal schnell hier geholfen, weil mich der verlinkte Fehler interessiert hat. Deine verwendete Version ist es augenscheinlich nicht, da musst du mal im Thread suchen.....

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.

mskrause
Beiträge: 167
Registriert: 13.10.2018, 20:02
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 13 Mal
Danksagung erhalten: 19 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von mskrause » 31.05.2020, 20:39

alchy hat geschrieben:
31.05.2020, 20:20
da musst du mal im Thread suchen.....
nimm am besten das hier:

Code: Alles auswählen

https://homematic-forum.de/forum/viewtopic.php?f=18&t=35702&start=190#p580737
Gruß Marco

Vato24
Beiträge: 19
Registriert: 01.06.2020, 01:34
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Vato24 » 01.06.2020, 01:40

Hallo Leute,

ich versuche schon den ganzen Tag die Wetterstation hinzubekommen und habe den kompletten Thread durchgelesen. Nachdem ich verschiedene Varianten des Skripts vergeblich versucht habe bin ich ratlos. Könnt ihr mal drüber schauen ob ich einen Fehler im Skript hab? Das Problem ist, dass mir keinerlei Werte angezeigt werden.

Code: Alles auswählen

!OpenWeather-CCU-Script, edited by regedit V1.2, 2019-08-31
!Verwendetes Original: DimMyPrp V1, 2017-02-15, edited by Schalterrei, 2018-07-25
!Edited by Alchy 05-05-2020

!Hier EIGENE OpenWeatherAppID eintragen

string owAppid='d2b1957bd6dc627dbbcXXX';

!Optionale Experteneinstellungen: Angabe der Stadt (über https://openweathermap.org/city/) anstatt Geocoords (=false)
string owCityid=false;

!Optionale Experteneinstellungen: wget-Command per CUxD oder system.Exec (cuxCMDName='CUxD.<Seriennummer>:1'/false) sowie CUxD logging (true/false)
string cuxCMDName=false;
boolean useLOGIT=false;

!Optionale Experteneinstellungen: OpenWeather-Daten in CUxD Thermostat-Device schreiben (cuxWDSName='CUxD.<Seriennummer>:1'/false)
!Achtung: Gerät=("Universal Wrapper Device" (90) als "Thermostat" / Option "WEATHER|USE_HMDATAPT" muss auf false)
string cuxWDSName=false;


!Systemvariablenbenennung
string svAktualisierung='OpenWeatherMap Letzte Aktualisierung';
string svTemperatur='OpenWeatherMap Temperatur';
string svMinimalTemperatur='OpenWeatherMap Temperatur (min.)';
string svMaximalTemperatur='OpenWeatherMap Temperatur (max.)';
string svLuftfeuchtigkeit='OpenWeatherMap Luftfeuchte (rel.)';
string svLuftdruck='OpenWeatherMap Luftdruck';
string svWindGeschwindigkeit='OpenWeatherMap Windgeschwindigkeit';
string svWindRichtung='OpenWeatherMap Windrichtung';
string svWindRichtungInt='OpenWeatherMap WindrichtungInt';
string svWetterstation='OpenWeatherMap Wetterstation';
string svSonnenaufgang='OpenWeatherMap Sonnenaufgang';
string svSonnenuntergang='OpenWeatherMap Sonnenuntergang';
string svWetter='OpenWeatherMap Wetter';
string svNiederschlag='OpenWeatherMap Niederschlag';
string svNiederschlagsart='OpenWeatherMap Niederschlagsart';
string svWolken='OpenWeatherMap Bewölkung';

!************************************************************
!************************************************************
!BEGIN DES SCRIPTS
!************************************************************
!************************************************************

!Variablendeklaration
!***********************
!OpenWeather-Url mit Defaultwerte
string owLocation='&id=INSERT';
string owUrl='http://api.openweathermap.org/data/2.5/weather?mode=xml&units=metric';
!CUxD/Exec und Rückgabe-Variablen (Programmablauf) mit Defaultwerte
boolean cuxCMD=false; boolean cuxWDS=false;string recXML;
!XML-Parser (Tagnamen)
string xmlStartTagName_Aktualisierung;string xmlEndTagName_Aktualisierung;
string xmlStartTagName_Temperatur;string xmlEndTagName_Temperatur;
string xmlStartTagName_Luftfeuchtigkeit;string xmlEndTagName_Luftfeuchtigkeit;
string xmlStartTagName_Luftdruck;string xmlEndTagName_Luftdruck;
string xmlStartTagName_Wind;string xmlEndTagName_Wind;
string xmlStartTagName_Geschwindigkeit;string xmlEndTagName_Geschwindigkeit;
string xmlStartTagName_Windrichtung;string xmlEndTagName_Windrichtung;
string xmlStartTagName_Stadt;string xmlEndTagName_Stadt;
string xmlStartTagName_Sonnenzeit;string xmlEndTagName_Sonnenzeit;
string xmlStartTagName_Wetter;string xmlEndTagName_Wetter;
string xmlStartTagName_Niederschlag;string xmlEndTagName_Niederschlag;
string xmlStartTagName_Wolken;string xmlEndTagName_Wolken;
!XML-Parser (Programmablauf)
integer xmlStartTagLenght;
integer xmlTagStart;integer xmlTagLength;
integer xmlAttributeStart;integer xmlAttributeLength;
string xmlTagContent;
string xmlAttributeValue;
!Zurückgemeldete und aus der XML extrahierte Werte von OpenWeather
real owTemperatur;real owMinimalTemperatur;real owMaximalTemperatur;
real owLuftfeuchtigkeit;
real owLuftdruck;
real owWindGeschwindigkeit;real owGradzahl;string owWindRichtung;
string owWetterstation;
string owAktualisierung;
string owSonnenaufgang;string owSonnenuntergang;
string owWetter;
real owNiederschlag;string owNiederschlagsart;
integer owWolken;
!Objekte für Systemvariablen (Programmablauf)
object svObject;
object svObjectlist;
!Objekte für Devices (Programmablauf)
string dvObjectID;
object dvObject;
object dvObjectlist;
!Generische Variablen (Mehrfachverwendung)
string genString1;string genString2;string genString3;
time genTime1;
integer genInteger1;integer genInteger2;
real genReal1;

!Url zum Abruf des XML-Strings zusammen sezten
!****************************************************
if(owCityid){
	owLocation='&id='#owCityid;
} else {
	if(system.Longitude()&&system.Latitude())
	{
		owLocation='&lat='#system.Latitude()#'&lon='#system.Longitude();
	}
}
owUrl = owUrl#'&APPID='#owAppid#owLocation;

!Prüfen, ob CUX-Daemon Devices vorhanden sind
!***************************************************
if(dom.GetObject(cuxCMDName#'.CMD_SETS')){cuxCMD = true;}
if(dom.GetObject(cuxWDSName#'.SET_TEMPERATURE')){cuxWDS=true;}

!wget ausführen
!*****************
if(cuxCMD)
{
	!Website via CUxD und wget aufrufen.
	dom.GetObject(cuxCMDName#'.CMD_SETS').State("wget -q -O - '"#owUrl#"'");
	dom.GetObject(cuxCMDName#'.CMD_QUERY_RET').State(1);
	recXML = dom.GetObject(cuxCMDName#'.CMD_RETS').State();
} else {
	!Fallback: Website via system.Exec und wget aufrufen
	system.Exec("wget -q -O - '"#owUrl#"'", &recXML, &genString1);
}

!Pruefen, ob XML-String geholt wurde, ansonsten abbrechen
!****************************************************************
if(!recXML){quit;}

!Tag-Namen-Suche im geholten XML-String vorbereiten
!*********************************************************
!Je nachdem, ob die Daten via CUxD oder Exex bezogen wurden, haben die XML-Tags ein anderes Format.
!Exex liefert einen XML-String mit eckigen Klammern nach dem Schema <tag></tag> oder <tag/>
!CUxD enternt eckige Klammern und liefert eine String nach dem Schema "tag /tag"
if(cuxCMD)
{
	!Suchstrings für XML-Tags von CUxD festlegen
	xmlStartTagName_Aktualisierung = 'lastupdate ';
	xmlEndTagName_Aktualisierung = '  /lastupdate';
	xmlStartTagName_Temperatur = 'temperature ';
	xmlEndTagName_Temperatur = '  /temperature';
	xmlStartTagName_Luftfeuchtigkeit = 'humidity ';
	xmlEndTagName_Luftfeuchtigkeit = '  /humidity';
	xmlStartTagName_Luftdruck = 'pressure ';
	xmlEndTagName_Luftdruck = '  /pressure';
	xmlStartTagName_Wind = 'wind ';
	xmlEndTagName_Wind = '  /wind';
	xmlStartTagName_Geschwindigkeit = 'speed ';
	xmlEndTagName_Geschwindigkeit = '  /speed';
	xmlStartTagName_Windrichtung = 'direction ';
	xmlEndTagName_Windrichtung = '  /direction';
	xmlStartTagName_Stadt = 'city ';
	xmlEndTagName_Stadt = '  /city';
	xmlStartTagName_Sonnenzeit = 'sun ';
	xmlEndTagName_Sonnenzeit = '  /sun';
	xmlStartTagName_Wetter = 'weather ';
	xmlEndTagName_Wetter = '  /weather';
	xmlStartTagName_Niederschlag = 'precipitation ';
	xmlEndTagName_Niederschlag = '  /precipitation';
	xmlStartTagName_Wolken = 'clouds ';
	xmlEndTagName_Wolken = '  /clouds';
} else {
	!Suchstrings für XML-Tags von Exec festlegen
	xmlStartTagName_Aktualisierung = '<lastupdate ';
	xmlEndTagName_Aktualisierung = '>';
	xmlStartTagName_Temperatur = '<temperature ';
	xmlEndTagName_Temperatur = '>';
	xmlStartTagName_Luftfeuchtigkeit = '<humidity ';
	xmlEndTagName_Luftfeuchtigkeit = '>';
	xmlStartTagName_Luftdruck = '<pressure ';
	xmlEndTagName_Luftdruck = '>';
	xmlStartTagName_Wind = '<wind>';
	xmlEndTagName_Wind = '</wind>';
	xmlStartTagName_Geschwindigkeit = '<speed ';
	xmlEndTagName_Geschwindigkeit = '>';
	xmlStartTagName_Windrichtung = '<direction ';
	xmlEndTagName_Windrichtung = '>';
	xmlStartTagName_Stadt = '<city ';
	xmlEndTagName_Stadt = '</city>';
	xmlStartTagName_Sonnenzeit = '<sun ';
	xmlEndTagName_Sonnenzeit = '>';
	xmlStartTagName_Wetter = '<weather ';
	xmlEndTagName_Wetter = '>';
	xmlStartTagName_Niederschlag = '<precipitation ';
	xmlEndTagName_Niederschlag = '>';
	xmlStartTagName_Wolken = '<clouds ';
	xmlEndTagName_Wolken = '>';

}

!Geholten XML-String parsen
!******************************

!Parser für svAktualisierung
if(svAktualisierung)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Aktualisierung.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Aktualisierung);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Aktualisierung);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Datenabruf-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owAktualisierung = xmlAttributeValue.ToString();
			}
		}
	}
}



!Parser für svTemperatur, svMinimalTemperatur, svMaximalTemperatur
if(svTemperatur)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Temperatur.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Temperatur);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Temperatur);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Temperatur-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owTemperatur = xmlAttributeValue.ToFloat();
			}

			!MinimalTemperatur-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('min="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owMinimalTemperatur = xmlAttributeValue.ToFloat();
			}

			!MaximalTemperatur-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('max="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owMaximalTemperatur = xmlAttributeValue.ToFloat();
			}

		}
	}
}



!Parser für svLuftfeuchtigkeit
if(svLuftfeuchtigkeit)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Luftfeuchtigkeit.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Luftfeuchtigkeit);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftfeuchtigkeit);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Luftfeuchtigkeits-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owLuftfeuchtigkeit = xmlAttributeValue.ToFloat();
			}

		}
	}
}


!Parser für svLuftdruck
if(svLuftdruck)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Luftdruck.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Luftdruck);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftdruck);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Luftdruck-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owLuftdruck = xmlAttributeValue.ToFloat();
			}

		}
	}
}


!Parser für owWindGeschwindigkeit
if(svWindGeschwindigkeit)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Wind.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Wind);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Sub-Parser Geschwindigkeit
			xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
			xmlStartTagLenght = xmlStartTagName_Geschwindigkeit.Length();
			xmlTagStart = xmlTagContent.Find(xmlStartTagName_Geschwindigkeit);
			if (xmlTagStart>=0)
			{
				xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
				xmlTagLength = xmlTagContent.Find(xmlEndTagName_Geschwindigkeit);
				if(xmlTagLength>0)
				{
					xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

					!Geschwindigkeit-Attribut auslesen
					xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
					xmlAttributeStart=xmlTagContent.Find('value="');
					if (xmlAttributeStart>=0)
					{
						xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
						xmlAttributeLength = xmlAttributeValue.Find('"');
						xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
						owWindGeschwindigkeit = xmlAttributeValue.ToFloat();
					}

				}
			}

		}
	}
}



!Parser für owGradzahl, owWindRichtung
if((svWindRichtung)||(svWindRichtungInt))
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Wind.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Wind);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Sub-Parser Windrichtng
			xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
			xmlStartTagLenght = xmlStartTagName_Windrichtung.Length();
			xmlTagStart = xmlTagContent.Find(xmlStartTagName_Windrichtung);
			if (xmlTagStart>=0)
			{
				xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
				xmlTagLength = xmlTagContent.Find(xmlEndTagName_Windrichtung);
				if(xmlTagLength>0)
				{
					xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

					!Gradzahl-Attribut auslesen
					xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
					xmlAttributeStart=xmlTagContent.Find('value="');
					if (xmlAttributeStart>=0)
					{
						xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
						xmlAttributeLength = xmlAttributeValue.Find('"');
						xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
						owGradzahl = xmlAttributeValue.ToInteger();
					}

					!Himmelsrichtung-Attribut auslesen
					xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
					xmlAttributeStart=xmlTagContent.Find('code="');
					if (xmlAttributeStart>=0)
					{
						xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
						xmlAttributeLength = xmlAttributeValue.Find('"');
						xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
						owWindRichtung = xmlAttributeValue.ToString();
					}

				}
				else
				{
					
					!QuickAndDirty fallback if no data
					owGradzahl=-1;
				}
			}
		}
	}
}



!Parser für owWetterstation
if((svWetterstation)||(svSonnenaufgang)||(svSonnenuntergang))
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Stadt.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Stadt);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Stadt);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Stadtname-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('name="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owWetterstation = xmlAttributeValue.ToString();
			}

			!Sub-Parser Sonnezeit
			xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
			xmlStartTagLenght = xmlStartTagName_Sonnenzeit.Length();
			xmlTagStart = xmlTagContent.Find(xmlStartTagName_Sonnenzeit);
			if (xmlTagStart>=0)
			{
				xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
				xmlTagLength = xmlTagContent.Find(xmlEndTagName_Sonnenzeit);
				if(xmlTagLength>0)
				{
					xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

					!Sonnenaufgang-Attribut auslesen
					xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
					xmlAttributeStart=xmlTagContent.Find('rise="');
					if (xmlAttributeStart>=0)
					{
						xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
						xmlAttributeLength = xmlAttributeValue.Find('"');
						xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
						owSonnenaufgang = xmlAttributeValue.ToString();
					}

					!Sonnenuntergang-Attribut auslesen
					xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
					xmlAttributeStart=xmlTagContent.Find('set="');
					if (xmlAttributeStart>=0)
					{
						xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
						xmlAttributeLength = xmlAttributeValue.Find('"');
						xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
						owSonnenuntergang = xmlAttributeValue.ToString();
					}

				}
			}
		}
	}
}


!Parser für svWetter
if(svWetter)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Wetter.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Wetter);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wetter);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Luftfeuchtigkeits-Attribut auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owWetter = xmlAttributeValue.ToString();
			}

		}
	}
}


!Parser für owNiederschlag, owNiederschlagTyp  -new
if((svNiederschlag)||(svNiederschlagsart))
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Niederschlag.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Niederschlag);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Niederschlag);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Niederschlagsart auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('mode="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owNiederschlagsart = xmlAttributeValue.ToString();
			}

			!Niederschlag auslesen
			if(owNiederschlagsart=='no')
			{
				owNiederschlag = 0;
			}
			else
			{
				xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
				xmlAttributeStart=xmlTagContent.Find('value="');
				if (xmlAttributeStart>=0)
				{
					xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
					xmlAttributeLength = xmlAttributeValue.Find('"');
					xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
					owNiederschlag = xmlAttributeValue.ToFloat();
				}
			}

		}
	}
}


!Parser für owWolken  -new
if(svWolken)
{
	xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
	xmlStartTagLenght = xmlStartTagName_Wolken.Length();
	xmlTagStart = recXML.Find(xmlStartTagName_Wolken);
	if (xmlTagStart>=0)
	{
		xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
		xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wolken);
		if(xmlTagLength>0)
		{
			xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);

			!Wolken auslesen
			xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
			xmlAttributeStart=xmlTagContent.Find('value="');
			if (xmlAttributeStart>=0)
			{
				xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
				xmlAttributeLength = xmlAttributeValue.Find('"');
				xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
				owWolken = xmlAttributeValue.ToInteger();
			}

		}
	}
}



!Ermittelte Werte in Systemvariable schreiben
!**************************************************
!Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen.
!Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html

!Schreiben von svAktualisierung
if(svAktualisierung)
{
	!String bzw. Uhrzeit umformatieren
	genString1='';genTime1=null;genString2='';
	genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11);
	integer DST;
	if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
	else {DST = 3600;}
	genTime1 = genString1.ToTime()+DST;
	genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
	svObject = dom.GetObject(svAktualisierung);
	!Wenn noch keine Systemvarible vorhanden, diese anlegen
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svAktualisierung);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo('OpenWeatherMap - Aktualisierung');
		svObject.ValueUnit('');
		svObject.State(genString2);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(genString2);
	}
	!Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);}
}



!Schreiben von svSonnenaufgang
if(svSonnenaufgang)
{
	genString1='';genTime1=null;genString2='';
	genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
	integer DST;
	if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
	else {DST = 3600;}
	genTime1 = genString1.ToTime()+DST;
	genString2 = genTime1.Format("%H:%M"#" Uhr");
	svObject = dom.GetObject(svSonnenaufgang);
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svSonnenaufgang);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo('OpenWeatherMap - Sonnenaufgang');
		svObject.ValueUnit('');
		svObject.State(genString2);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(genString2);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);}
}



!Schreiben von svSonnenuntergang
if(svSonnenuntergang)
{
	genString1='';genTime1=null;genString2='';
	genString1 = owSonnenuntergang.Substr(0,10)#' '#owSonnenuntergang.Substr(11);
	integer DST;
	if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
	else {DST = 3600;}
	genTime1 = genString1.ToTime()+DST;
	genString2 = genTime1.Format("%H:%M"#" Uhr");
	svObject = dom.GetObject(svSonnenuntergang);
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svSonnenuntergang);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo('OpenWeatherMap - Sonnenuntergang');
		svObject.ValueUnit('');
		svObject.State(genString2);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(genString2);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenuntergang#';'#genTime1);}
}



!Schreiben von svWetterstation
if(svWetterstation)
{
	genString1='';genString2='';genString3='';genInteger1=0;genInteger2=0;
	genInteger1=owWetterstation.Length();
	foreach(genInteger2,genInteger1)
	{
		genString1=owWetterstation.Substr(genInteger2-1,1);
		if(genString1=='Ã')
		{
			genString2=owWetterstation.Substr(genInteger2,1);
			if(genString2=='¼'){genString1='ü';genInteger2=genInteger2+1;}
			if(genString2=='¶'){genString1='ö';genInteger2=genInteger2+1;}
			if(genString2=='¤'){genString1='ä';genInteger2=genInteger2+1;}
		}
		genString3=genString3#genString1;
	}

	svObject = dom.GetObject(svWetterstation);
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWetterstation);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo('OpenWeatherMap - Wetterstation');
		svObject.ValueUnit('');
		svObject.State(genString3);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(genString3);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetterstation#';'#genString3);}
}



!Schreiben von svWindgeschwindigkeit
if(svWindGeschwindigkeit)
{
	svObject = dom.GetObject(svWindGeschwindigkeit);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWindGeschwindigkeit);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Windgeschwindigkeit");
		svObject.ValueUnit("m/s");
		svObject.ValueMin(0.0000);
		svObject.ValueMax(500.0000);
		svObject.State(owWindGeschwindigkeit);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owWindGeschwindigkeit);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindGeschwindigkeit#';'#owWindGeschwindigkeit);}
}



!Schreiben von svLuftdruck
if(svLuftdruck)
{
	svObject = dom.GetObject(svLuftdruck);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svLuftdruck);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Luftdruck");
		svObject.ValueUnit("hPa");
		svObject.ValueMin(500.0000);
		svObject.ValueMax(1100.0000);
		svObject.State(owLuftdruck);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owLuftdruck);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftdruck#';'#owLuftdruck);}
}



!Schreiben von svTemperatur
if(svTemperatur)
{
	svObject = dom.GetObject(svTemperatur);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svTemperatur);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Temperatur");
		svObject.ValueUnit("°C");
		svObject.ValueMin(-50.0000);
		svObject.ValueMax(50.0000);
		svObject.State(owTemperatur);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owTemperatur);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svTemperatur#';'#owTemperatur);}
	if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_TEMPERATURE').State(owTemperatur);}
}



!Schreiben von svMinimalTemperatur
if(svMinimalTemperatur)
{
	svObject = dom.GetObject(svMinimalTemperatur);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svMinimalTemperatur);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Temperatur (min.)");
		svObject.ValueUnit("°C");
		svObject.ValueMin(-50.0000);
		svObject.ValueMax(50.0000);
		svObject.State(owMinimalTemperatur);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owMinimalTemperatur);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMinimalTemperatur#';'#owMinimalTemperatur);}
}



!Schreiben von svMaximalTemperatur
if(svMaximalTemperatur)
{
	svObject = dom.GetObject(svMaximalTemperatur);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svMaximalTemperatur);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Temperatur (max.)");
		svObject.ValueUnit("°C");
		svObject.ValueMin(-50.0000);
		svObject.ValueMax(50.0000);
		svObject.State(owMaximalTemperatur);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owMaximalTemperatur);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMaximalTemperatur#';'#owMaximalTemperatur);}
}



!Schreiben von svLuffeuchtigkeit
if(svLuftfeuchtigkeit)
{
	svObject = dom.GetObject(svLuftfeuchtigkeit);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svLuftfeuchtigkeit);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Luftfeuchtigkeit");
		svObject.ValueUnit("%");
		svObject.ValueMin(0.0000);
		svObject.ValueMax(100.0000);
		svObject.State(owLuftfeuchtigkeit);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owLuftfeuchtigkeit);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftfeuchtigkeit#';'#owLuftfeuchtigkeit);}
	if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_HUMIDITY').State(owLuftfeuchtigkeit);}
}



!Schreiben von svWindrichtung
if(svWindRichtung)
{
	!Englische Windrichtungsangaben übersetzen (z.B. N-W-E in Nord-West-Ost)
	genString1='';genString2='';genString3='';genInteger1=0;
	genString1 = owWindRichtung;
	foreach(genInteger1,genString1.Length())
	{
		genString2=genString1.Substr(genInteger1-1,1);
		if(genString2=='E'){genString3=genString3#'Ost-';}
		if(genString2=='S'){genString3=genString3#'Süd-';}
		if(genString2=='W'){genString3=genString3#'West-';}
		if(genString2=='N'){genString3=genString3#'Nord-';}
	}
	genString1=genString3.Substr(0,genString3.Length()-1);
	if (owGradzahl>=0){genString2=owGradzahl.ToString()#'° '#genString1;}
	
	svObject = dom.GetObject(svWindRichtung);
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWindRichtung);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo('OpenWeatherMap - Windrichtung');
		svObject.ValueUnit('');
		svObject.State(genString2);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(genString2);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtung#';'#genString2);}

}



!Schreiben von svWetter
if(svWetter)
{
	genString1='';genString2='';genString3='';genInteger1=0;
	genString1 = owWetter;
	genString2=genString1;

	!WriteLine(genString2);

	if(genString2=='thunderstorm with light rain'){genString3=genString3#'Gewitter mit leichtem Regen';}
	if(genString2=='thunderstorm with rain'){genString3=genString3#'Gewittersturm mit Regen';}
	if(genString2=='thunderstorm with heavy rain'){genString3=genString3#'Gewitter mit heftigem Regen';}
	if(genString2=='light thunderstorm'){genString3=genString3#'leichtes Gewitter';}
	if(genString2=='thunderstorm'){genString3=genString3#'Gewitter';}
	if(genString2=='heavy thunderstorm'){genString3=genString3#'heftiges Gewitter';}
	if(genString2=='ragged thunderstorm'){genString3=genString3#'heftiges Gewitter';}
	if(genString2=='thunderstorm with light drizzle'){genString3=genString3#'Gewitter mit leichtem Nieselregen';}
	if(genString2=='thunderstorm with drizzle'){genString3=genString3#'Gewitter mit Nieselregen';}
	if(genString2=='thunderstorm with heavy drizzle'){genString3=genString3#'Gewitter mit starkem Nieselregen';}
	if(genString2=='light intensity drizzle'){genString3=genString3#'leichter Nieselregen';}
	if(genString2=='drizzle'){genString3=genString3#'Nieselregen';}
	if(genString2=='heavy intensity drizzle'){genString3=genString3#'starker Nieselregen';}
	if(genString2=='light intensity drizzle rain'){genString3=genString3#'leichter Nieselregen';}
	if(genString2=='drizzle rain'){genString3=genString3#'Nieselregen';}
	if(genString2=='heavy intensity drizzle rain'){genString3=genString3#'starker Nieselregen';}
	if(genString2=='shower rain and drizzle'){genString3=genString3#'Regenschauer und Nieselregen';}
	if(genString2=='heavy shower rain and drizzle'){genString3=genString3#'starker Regenschauer und Nieselregen';}
	if(genString2=='shower drizzle'){genString3=genString3#'Regenschauer';}
	if(genString2=='light rain'){genString3=genString3#'leichter Regen';}
	if(genString2=='moderate rain'){genString3=genString3#'mäßiger Regen';}
	if(genString2=='heavy intensity rain'){genString3=genString3#'starker Regen';}
	if(genString2=='very heavy rain'){genString3=genString3#'sehr starker Regen';}
	if(genString2=='extreme rain'){genString3=genString3#'Extremniederschläge';}
	if(genString2=='freezing rain'){genString3=genString3#'Eisregen';}
	if(genString2=='light intensity shower rain'){genString3=genString3#'leichter Regenschauer';}
	if(genString2=='shower rain'){genString3=genString3#'Regenschauer';}
	if(genString2=='heavy intensity shower rain'){genString3=genString3#'starker Regenschauer';}
	if(genString2=='ragged shower rain'){genString3=genString3#'strömender Regen';}
	if(genString2=='light snow'){genString3=genString3#'leichter Schnee';}
	if(genString2=='snow'){genString3=genString3#'Schnee';}
	if(genString2=='heavy snow'){genString3=genString3#'heftiger Schneefall';}
	if(genString2=='sleet'){genString3=genString3#'Graupel';}
	if(genString2=='shower sleet'){genString3=genString3#'Schauer';}
	if(genString2=='light rain and snow'){genString3=genString3#'leichter Regen und Schnee';}
	if(genString2=='rain and snow'){genString3=genString3#'Schneeregen';}
	if(genString2=='light shower snow'){genString3=genString3#'leichter Schneeschauer';}
	if(genString2=='shower snow'){genString3=genString3#'Schneeschauer';}
	if(genString2=='heavy shower snow'){genString3=genString3#'starker Schneeschauer';}
	if(genString2=='mist'){genString3=genString3#'Nebel';}
	if(genString2=='smoke'){genString3=genString3#'Rauch';}
	if(genString2=='haze'){genString3=genString3#'Dunst';}
	if(genString2=='sand, dust whirls'){genString3=genString3#'Sand, Staubwirbel';}
	if(genString2=='fog'){genString3=genString3#'Nebel';}
	if(genString2=='sand'){genString3=genString3#'Sand';}
	if(genString2=='dust'){genString3=genString3#'Staub';}
	if(genString2=='volcanic ash'){genString3=genString3#'Vulkanasche';}
	if(genString2=='squalls'){genString3=genString3#'Sturmböen';}
	if(genString2=='tornado'){genString3=genString3#'Tornado';}
	if(genString2=='clear sky'){genString3=genString3#'klarer Himmel';}
	if(genString2=='few clouds'){genString3=genString3#'vereinzelte Wolken';}
	if(genString2=='scattered clouds'){genString3=genString3#'aufgelockerte Bewölkung';}
	if(genString2=='broken clouds'){genString3=genString3#'durchbrochene Bewölkung';}
	if(genString2=='overcast clouds'){genString3=genString3#'bedeckt';}

	genString1=genString3.Substr(0,genString3.Length());
	genString2=genString1;

	svObject = dom.GetObject(svWetter);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWetter);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istChar8859);
		svObject.DPInfo("OpenWeatherMap - Wetter");
		svObject.ValueUnit('');
		svObject.State(owWetter);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		!if(dom.GetObject("Tageszeit").Value()==0)
		if ((((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())>((0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger()))
		|| (((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())<((0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger())))
		{
			svObject.State(genString2#' ');
		}
		else
		{
			svObject.State(genString2);
		}
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetter#';'#genString2);}
}



!Schreiben von svNiederschlag
if(svNiederschlag)
{
	svObject = dom.GetObject(svNiederschlag);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svNiederschlag);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Niederschlagsmenge");
		svObject.ValueUnit("mm/h");
		svObject.ValueMin(0.0);
		svObject.ValueMax(100.0);
		svObject.State(owNiederschlag);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owNiederschlag);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlag#';'#owNiederschlag);}
}
!Schreiben von svNiederschlagsart
if(svNiederschlagsart)
{
	if (owNiederschlagsart=='rain'){owNiederschlagsart=1;}
	if (owNiederschlagsart=='snow'){owNiederschlagsart=2;}
	if (owNiederschlagsart=='no'){owNiederschlagsart=0;}

	svObject = dom.GetObject(svNiederschlagsart);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svNiederschlagsart);
		svObject.ValueType(ivtString);
		svObject.ValueSubType(istEnum);
		svObject.ValueList("kein Niederschlag;Regen;Schnee");
		svObject.DPInfo("OpenWeatherMap - Niederschlagsart");
		svObject.ValueUnit("");
		svObject.State(owNiederschlagsart);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owNiederschlagsart);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlagsart#';'#owNiederschlagsart);}
}
!Schreiben von svWolken
if(svWolken)
{
	svObject = dom.GetObject(svWolken);
	if (!svObject){
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWolken);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Bewölkung");
		svObject.ValueUnit("%");
		svObject.ValueMin(0);
		svObject.ValueMax(100);
		svObject.State(owWolken);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
	} else {
		svObject.State(owWolken);
	}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWolken#';'#owWolken);}
}
!Schreiben von svWindrichtung
if((svWindRichtungInt)&&(owGradzahl>=0))
{
	svObject = dom.GetObject(svWindRichtungInt);
	if (!svObject)
	{
		svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
		svObject = dom.CreateObject(OT_VARDP);
		svObjectlist.Add(svObject.ID());
		svObject.Name(svWindRichtungInt);
		svObject.ValueType(ivtFloat);
		svObject.ValueSubType(istGeneric);
		svObject.DPInfo("OpenWeatherMap - Windrichtung Integer");
		svObject.ValueUnit("°");
		svObject.ValueMin(0);
		svObject.ValueMax(360);
		svObject.State(owGradzahl);
		svObject.Internal(false);
		svObject.Visible(true);
		dom.RTUpdate(0);
WriteLine("Variable erzeugen und schreiben"#owGradzahl #"in: " #svObject.Name());
	} else {
svObject.State(owGradzahl);
WriteLine("Variable nicht erzeugen nur schreiben"#owGradzahl #"in: " #svObject.Name());
}
	if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtungInt#';'#owGradzahl);}
}
WriteLine("Script ganz durch");
Dateianhänge
Skript.png
Skript.png (21.48 KiB) 1262 mal betrachtet

Antworten

Zurück zu „Projektvorstellungen“