HM-Script für virtuelle Wetterstation

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

Tinko
Beiträge: 190
Registriert: 23.10.2016, 10:15
Hat sich bedankt: 53 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Tinko » 03.01.2022, 13:11

MichaelN hat geschrieben:
03.01.2022, 13:09
Bevor Du jetzt alle möglichen Wetter-Skript-Threads abklapperst - les doch erstmal, was man Dir schreibt:
viewtopic.php?f=31&t=70502&p=698181#p698184
Danke. Schaue ich mir an

MarioH
Beiträge: 1
Registriert: 17.01.2022, 19:25
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von MarioH » 17.01.2022, 19:33

Hallo, ich muss das Thema jetzt nochmal aufgreifen, da ich versuche die Wetterstation via Openweathermap in meine CCU einzubinden.
Das Skript läuft soweit und zeigt auch Werte an.
Meine Frage ist welche Geräte ich jetzt in CuxD anlegen soll/muss.
Ich habe verstanden dass ich um das Skript auszuführen ein 28er System-Gerät erstellen muss. Die Funktion muss auf Exec laufen, aber welche Funktion muss ich hier eintragen, damit die Werte auch in der Cloudmagic-Oberfläche angezeigt werden.
In Status und Bedienung - Systemvariablen und in Geräte werden mir die Werte angezeigt.
Wenn ich das Gerät als Schalter einbinde zeigt mir die CM-Oberfläche nur den Ein/Aus-Schalter an aber nicht die Werte die mir in der CCU angezeigt werden.

Zero2Cool
Beiträge: 36
Registriert: 23.11.2016, 07:13
Hat sich bedankt: 2 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Zero2Cool » 10.03.2022, 13:51

Hallo,

ich habe jetzt die letzten 2 Stunden damit verbracht das Script bei mir einzubinden und habe auch ein paar Parameter (wie Wolken, Niederschlag) in das Script der Startseite erweitert.
Meine virtuelle Wetterstation per CUxD zeigt Temperatur und Luftfeuchtigkeit von Openweathermap auch an.

In pocketControl auf dem iPhone habe ich die Wetterstation für die Haus Ansicht hinzugefügt.
Aktuell bekomme ich dort allerdings immer eine graue Wolke, die Info "windstill" und die Temperatur von aktuell 14 Grad angezeigt.

Mich stört jetzt diese graue Wolke etwas, da Openweathermap hier "clear sky" bzw. klare Sicht ausgibt.

Die Frage ist also wie bekomme ich jetzt diese graue Wolke weg.
Hat da jemand eine Idee woran das liegen könnte? Muss ich an der virtuellen Wetterstation etwas anpassen?

Über eure Hilfe wäre ich wirklich dankbar.

schlichi
Beiträge: 387
Registriert: 26.08.2016, 19:26
System: Alternative CCU (auf Basis OCCU)
Wohnort: Erding
Hat sich bedankt: 60 Mal
Danksagung erhalten: 28 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von schlichi » 28.03.2022, 17:58

Hallo Zusammen,

das Script

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
enthält Fehler, die sich bei der Zeitumstellung bemerkbar machen.

Code: Alles auswählen

if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
	else {DST = 3600;}
verwendet bei Aktualisierung, Sonnenauf- und Sonnenuntergang;

ersetzen, durch

Code: Alles auswählen

if (system.Date("%Z") == "CEST") {DST = 7200;}
	else {DST = 3600;}
oder durch

Code: Alles auswählen

if (system.Date().ToTime().IsDST() ==1) {DST = 7200;}
	else {DST = 3600;}
Das "%F" bewirkt, daß nur auf den Tag abgefragt wird (Danke Harry).

Gruß
schlichi
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender) :roll:

NilsB
Beiträge: 3
Registriert: 22.04.2022, 16:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von NilsB » 22.04.2022, 16:26

Guten Tag,

ich bin absoluter Neuling und möchte gerne mit den Script meine Raffstore Steuern. Das Script habe ich bereits eingeflegt, nur leider aktuellisiert sich dieses nicht in regelmäßigen Abständen. Ich bräuchte einen stündlichen Intervall. Wo muss ich was ändern?

Über Hilfe würde ich mich freuen.

Danke


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='habe ich entfernt im Forum';

!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=2830866';
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
Bildschirmfoto 2022-04-22 um 16.25.12.png

MichaelN
Beiträge: 9639
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1614 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von MichaelN » 22.04.2022, 17:54

Wo rein hast du das denn gepflegt?
LG, Michael.

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

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

NilsB
Beiträge: 3
Registriert: 22.04.2022, 16:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von NilsB » 22.04.2022, 18:24

Hallo Michael,

ich habe es auf der HomeMatic WebUI durch den StripTest laufen lassen (vgl. Bild 2). Danach konnte ich den Status der Systemvariablen abrufen. Und dieser aktualisiert sich nicht (vgl. Bild 1).

Kannst du mir hier helfen?
Dateianhänge
Bildschirmfoto 2022-04-22 um 18.22.26.png
Bild 1
Bildschirmfoto 2022-04-22 um 18.19.45.png
Bild 2

MichaelN
Beiträge: 9639
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 697 Mal
Danksagung erhalten: 1614 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von MichaelN » 22.04.2022, 19:01

Siehe Seite 1 Beitrag 2. Lesen und anwenden. Du hast das Skript bisher nur 1x ausgeführt und ich vermute du möchtest es nicht stündlich manuell im Skript test ausführen.
LG, Michael.

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

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

NilsB
Beiträge: 3
Registriert: 22.04.2022, 16:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von NilsB » 22.04.2022, 19:06

Ja genau, es soll sich am besten jede halbe Stunde von selbst aktualisieren.

chillje
Beiträge: 4
Registriert: 03.06.2022, 11:03
System: CCU
Hat sich bedankt: 2 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von chillje » 03.06.2022, 11:24

Moin,
ich bin neu im HMIP Game (mehr oder weniger).
Zumindest beschäftige ich mich erst seit kurzem mit mehr als nur ein paar Automationen ala "Wenn Fenster auf, dann Heizung aus" etc pp.

Ich brauchte für eine Metricen-Analyse einen Gegenwert im Form von Wetterdaten meines Ortes, da ich derzeit kein Geld in eine eigene Wetterstation investieren will (ist mir derzeit zu teuer).
Deine Lösung fand ich super und so muss ich mich nicht erst selbst in die HMIP Scriptsprache (scheint mir was Java-Script artiges zu sein?) einarbeiten.

Lange Rede kurzer Sinn, ich hatte nach der Einbindung des Scriptes (aus dem Codeblock) nach der Anleitung in Beitrag 2 merkwürdige Werte in der Temperatur Systemvariable in meiner CCU, nach kurzem Vergleich ist mir aufgefallen, dass die Luftfeuchtigkeit auch in der Temperatur abgelegt wird.
Folgender (vermutlich C/P Fehler) hat sich in dein Script eingefunden:

Code: Alles auswählen

Zeile 195: xmlStartTagName_Temperatur = '<humidity ';
und muss wie folgt angepasst werden:

Code: Alles auswählen

Zeile 195: xmlStartTagName_Temperatur = '<temperature ';
Dann sieht das ganze auch für die Systemvariable "ow Temperatur" korrekt aus.

Danke noch mal für deine Arbeit :)

PS: Mein erster Post hier, also bitte nicht hauen wenn ich irgendwelche Foren-Gepflogenheiten missachten sollte.

Antworten

Zurück zu „Projektvorstellungen“