HM-Script für virtuelle Wetterstation

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

TheFrank
Beiträge: 64
Registriert: 03.09.2019, 19:51
Hat sich bedankt: 14 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von TheFrank » 03.09.2019, 19:55

Mrt1976 hat geschrieben:
31.08.2019, 14:14
Vielen Dank, ich hatte einen Fehler im Programm.
Ich hab jetzt das script von regedit auch ausprobiert, bekomme aber eine Fehlermeldung
REGEDIT kannst du mir sagen was falsch ist?! Ausserdem steht bei letzte Akualisierung immer die falsche Zeit.Statt 19 Uhr z.B. 17Uhr.
Immer 2h Differenz
Error 1 at row 392 col 41 near ^))
{

das ist die Zeile 392
if((svWindRichtung)||(svWindRichtungInt))
{
Guten Abend zusammen,

Mrt1976, darf ich Fragen wie du den Fehler den ich auch habe, beseitigen konntest ?
würde dieses Tolle Script auch gerne nutzen, komme aber leider an dieser Fehlerstelle nicht weiter, würde aber gerne die Regenmenge etc. nutzen können.

Vielen dank für eure Unterstützung

Gruß
Frank

Benutzeravatar
Mrt1976
Beiträge: 18
Registriert: 30.08.2019, 21:52
Hat sich bedankt: 6 Mal
Danksagung erhalten: 3 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Mrt1976 » 03.09.2019, 20:32

ich habe das ursprüngliche Programme von Seite 1 genommen und nach und nach alle Modifikationen aller Seiten hinzugefügt.
Das Programm von regedit hab ich nicht zum laufen bekommen .

ich kann dir das Programm ja per pn schicken. Du must dann nur deine OW, Aktoren und Ort Nummer ändern

Malu2104
Beiträge: 1
Registriert: 04.09.2019, 19:18
Hat sich bedankt: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Malu2104 » 04.09.2019, 19:24

Hallo,

Mrt1976,
würde das Script der neuen Version auch gerne nutzen, komme aber leider an dieser Fehlerstelle mit der Windrichtung nicht weiter. Kannst Du Dein Script nicht bereitstellen

Vielen dank für eure Unterstützung

Larson-SEI180LX
Beiträge: 112
Registriert: 10.12.2014, 07:24
Hat sich bedankt: 14 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Larson-SEI180LX » 05.09.2019, 08:17

Den Fehler hatte ich auch :

Error 1 at row 392 col 41 near ^))
{

das ist die Zeile 392
if((svWindRichtung)||(svWindRichtungInt))
{




Lösung: Schaut mal in Zeile 30. Dort ist vorne vermutlich aus versehen ein ! gerutscht. Wenn ich es entferne, funktioniert das Script.


Andy

Benutzeravatar
Mrt1976
Beiträge: 18
Registriert: 30.08.2019, 21:52
Hat sich bedankt: 6 Mal
Danksagung erhalten: 3 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Mrt1976 » 05.09.2019, 17:15

hier mein Programm. ihr müsst nur die OW Nummer, Nummer des Ortes und evtl. die Bezeichnung eurer beiden HM Geräte ändern

Code: Alles auswählen

!OpenWeather-CCU-Script, Version 1, 15.02.2017, dimmyprp

!Hier den API-Key von OpenWeather eintragen bzw. den vorhanden Key austauschen.
!Dieser Key wird benötigt, um die Wetterdaten abrufen zu können.
!Der hier bereits hinterlegte Key funktioniert zwar, es können jedoch nur zeitlich begrenzt Wetterdaten abgerufen werden.
!Erstellung eines eigenen Keys unter http://openweathermap.org/appid

string owAppid='335cbd798911f0dceed04ecxxxxxxxx';


!Hier die ID der Wetterstation bzw. Stadt eitragen bzw. austauschen, von der die Wetterdaten abgerufen werden sollen.
!Eine Liste aller Stationen finden Sie unter http://bulk.openweathermap.org/sample/city.list.json.gz
!Die aktuell hinterlegte Station bzw. ID 6556765 gibt das Wetter für Berlin aus.
!Wenn Sie keine ID angeben UND in Ihrer Homematic unter "Einstellungen" > "Zeit-/Positionseinstellungen" unter dem Punkt "Positionsangabe"
!Ihre Koordinaten hinterlegt haben, können Sie von OpenWeather auch eine Wetterstation in Ihrer Nähe suchen lassen und deren Werte abrufen.
!Beispiele
!string owCityid='2950159'; Ruft die Wetterdaten für Berlin ab
!string owCityid='6556765'; Ruft die Wetterdaten für Pegnitz ab
!string owCityid=''; Ruft die Wetterdaten in Ihrer Nähe ab (wenn Positionsangaben in den Einstellungen hinterlegt wurden)
!string owCityid=false; Ruft die Wetterdaten in Ihrer Nähe ab (wenn Positionsangaben in den Einstellungen hinterlegt wurden)

string owCityid='2956438';


!Optional: Im Folgenden die Namen der Systemvariablen ändern/vorgeben.
!Die abgerufenen Wetterdaten werden in mehreren Systemvariablen gespeichert und angezeigt (sie müssen vorab keine Variablen anlegen. Dies erledigt diese Script gegebenenfalls automatisch).
!Im Folgenden können Sie die Namen der Systemvariablen (so, wie Sie Ihnen in Ihrer Homematic später unter "Status und Bedienung" > "Systemvariable" angezeigt
!werden, ändern. Möchten Sie, dass ein bestimmter Messwert nicht angezeigt bzw. abgerufen wird, lassen Sie den Namen leer ''.
!Beispiele
!string svLuftdruck='ow Luftdruck'; Die Systemvariable für den Luftdruck soll "ow Lufdruck" heißen
!string svLuftdruck='Luftdr.'; Die Systemvariable für den Luftdruck soll "Luftdr." heißen
!string svLuftdruck=''; Es soll überhaupt kein Luftdruck angezeigt bzw. abgerufen werden
!string svLuftdruck=false; Es soll überhaupt kein Luftdruck angezeigt bzw. abgerufen werden

string svAktualisierung='ow Letzte Aktualisierung';
string svTemperatur='ow Temperatur';
string svMinimalTemperatur='ow Temperatur (min.)';
string svMaximalTemperatur='ow Temperatur (max.)';
string svLuftfeuchtigkeit='ow Luftfeuchte (rel.)';
string svLuftdruck='ow Luftdruck';
string svWindGeschwindigkeit='ow Windgeschwindigkeit';
string svWindRichtung='ow Windrichtung';
string svWetterstation='ow Wetterstation';
string svSonnenaufgang='ow Sonnenaufgang';
string svSonnenuntergang='ow 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.CUX2801001: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='CUxD.CUX2801001:1';


!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.CUX9002002:1';





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

!Variablendeklaration
!***********************
!OpenWeather-Url mit Defaultwerte
string owLocation='&id=2950159';
string owUrl='http://api.openweathermap.org/data/2.5/ ... its=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 = '<humidity ';
xmlEndTagName_Temperatur = '>';
xmlStartTagName_Luftfeuchtigkeit = '<humidity ';
xmlEndTagName_Luftfeuchtigkeit = '>';
xmlStartTagName_Luftdruck = '<pressure ';
xmlEndTagName_Luftdruck = '>';
xmlStartTagName_Wind = '<wind ';
xmlEndTagName_Wind = '>';
xmlStartTagName_Geschwindigkeit = '<speed ';
xmlEndTagName_Geschwindigkeit = '>';
xmlStartTagName_Windrichtung = '<direction ';
xmlEndTagName_Windrichtung = '>';
xmlStartTagName_Stadt = '<city ';
xmlEndTagName_Stadt = '>';
xmlStartTagName_Sonnezeit = '<sun ';
xmlEndTagName_Sonnenzeit = '>';
xmlStartTagName_Wetter = 'weather ';
xmlEndTagName_Wetter = ' /weather';
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-snippe ... cript.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(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("%d.%m.%Y %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("%d.%m.%Y %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("km/h");
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(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(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(ivtInteger);
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);}

}

TheFrank
Beiträge: 64
Registriert: 03.09.2019, 19:51
Hat sich bedankt: 14 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von TheFrank » 08.09.2019, 18:08

Hallo zusammen,

vielen dank für die Unterstützung, speziell 8) von Mrt1978

Hier meine Frage bzw. Problem:

Script funktioniert soweit 1A, heute morgen hat es 2,4 mm Niederschlag gegeben, die auch Perfekt angezeigt wurden.
Nach 1-2 Std, Stand bei Regenmenge wieder 0,00 mm was ja auch so wahr. Es war Trocken.

Da ich damit meine Bewässerung Steuern möchte und z.b über den Tag bis zu 5 mm fallen können, bevor die Regner nicht angehen,
macht das Programm ja nach Rücksetzten der Regenmenge den Zähler auf 0, so das ich bei 20 mm immer noch die Regner anmachen würde :)

Gibt es einen Trick oder Lösung auf 1 Tag die Regenmenge zu Addieren und Nachts z.b 0:00 Uhr zu Reseten auf 0 ?

Danke für eure Unterstützung im voraus.

Grüße
Frank

Benutzeravatar
Mrt1976
Beiträge: 18
Registriert: 30.08.2019, 21:52
Hat sich bedankt: 6 Mal
Danksagung erhalten: 3 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Mrt1976 » 08.09.2019, 19:42

TheFrank hat geschrieben:
08.09.2019, 18:08
Hallo zusammen,

vielen dank für die Unterstützung, speziell 8) von Mrt1978

Hier meine Frage bzw. Problem:

Script funktioniert soweit 1A, heute morgen hat es 2,4 mm Niederschlag gegeben, die auch Perfekt angezeigt wurden.
Nach 1-2 Std, Stand bei Regenmenge wieder 0,00 mm was ja auch so wahr. Es war Trocken.

Da ich damit meine Bewässerung Steuern möchte und z.b über den Tag bis zu 5 mm fallen können, bevor die Regner nicht angehen,
macht das Programm ja nach Rücksetzten der Regenmenge den Zähler auf 0, so das ich bei 20 mm immer noch die Regner anmachen würde :)

Gibt es einen Trick oder Lösung auf 1 Tag die Regenmenge zu Addieren und Nachts z.b 0:00 Uhr zu Reseten auf 0 ?

Danke für eure Unterstützung im voraus.

Grüße
Frank
das würde mich auch interessieren

TheFrank
Beiträge: 64
Registriert: 03.09.2019, 19:51
Hat sich bedankt: 14 Mal
Danksagung erhalten: 1 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von TheFrank » 12.09.2019, 19:20

Guten Abend zusammen,

nicht zufällig jemand ne Idee, wie man als Anfänger weiter kommen könnte mit der Frage ?
Tante Googel ist da nicht wirklich hilfreich.

Schönen Abend

Gruß
Frank

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

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 14.09.2019, 00:34

TheFrank hat geschrieben:
08.09.2019, 18:08
Gibt es einen Trick oder Lösung auf 1 Tag die Regenmenge zu Addieren und Nachts z.b 0:00 Uhr zu Reseten auf 0 ?
Klar gibt's da was. z.B. so...
Neue SysVar anlegen Typ Zahl, Einheit mm
OW_SysVar_Regen_gesamt.JPG
neues Programm anlegen...
OW_PRG_Regen_gesamt.JPG
mit folgendem Script...

Code: Alles auswählen

!- Regenmenge von OpenWeather Tageszähler
var owRegen = dom.GetObject(ID_SYSTEM_VARIABLES).Get("ow Niederschlag").Value();
var owRegenTag = dom.GetObject(ID_SYSTEM_VARIABLES).Get("ow Niederschlag Tag gesamt").Value();
dom.GetObject(ID_SYSTEM_VARIABLES).Get("ow Niederschlag Tag gesamt").State(owRegen + owRegenTag);
WriteLine("Regenmenge von OpenWeather: " # owRegen.ToString(0) #" mm/h
Regenmenge gesamt akt. Tag: " # owRegenTag.ToString(0) # " mm
Errechnete Tagesmenge:      " # (owRegen + owRegenTag).ToString(0) # " mm");

if(system.Date("%H:%M") == "00:02")
{dom.GetObject(ID_SYSTEM_VARIABLES).Get("ow Niederschlag Tag gesamt").State(0);
WriteLine("Es ist " # system.Date("%H:%M") # "Uhr, der Tageszähler wurde auf 0 gesetzt.")}    
Es addiert bei jeder Aktualisierung deiner SysVar "ow Niederschlag" (wenn der Niederschlag größer 0mm/h ist) den Wert der SysVar "ow NIederschlag" zum Wert der SysVar "ow Niederschlag Tag gesamt" und setzt ihn um 00:02Uhr auf 0 zurück.
Du kannst natürlich die Uhrzeit zum zurücksetzen anpassen. Im Beispiel ist es täglich 00:02Uhr. Der Wert im Zeitmodul und der Wert im Script müssen übereinstimmen.
Sollte funktionieren, ich konnte aber mangels Regen nicht ausgiebig testen.
Die Genauigkeit hängt natürlich stark davon ab wie oft du die Daten von OpenWeather holst.
Ob das ganze sinnvoll ist musst du selbst entscheiden.

Beste Grüße
Baxxy

moellerherm
Beiträge: 3
Registriert: 15.09.2019, 11:01

Re: HM-Script für virtuelle Wetterstation

Beitrag von moellerherm » 15.09.2019, 11:04

Hi,
klasse Script....läuft ohne Probleme...das einzige was ich noch nicht hinbekommen habe ist dir Uhrzeit (Sonnenauf- und -untergang) auf lokale Zeit umzuschreiben....ich weiß das das hier schon mal besprochen wurde, bin da aber nicht durchgestiegen. Kann mir da jemand helfen?
VG
Chris

Antworten

Zurück zu „Projektvorstellungen“