doch! aber gestern system neu aufgesetzt, jetzt klappt script von seite1 nicht mehr. das von seite 19 passt jetztMichaelN hat geschrieben: ↑19.06.2021, 13:32Daraus schließe ich das das Skript bei dir noch nie funktioniert hat.
Naja, ich will ja eigentlich nichts sagen, aber mit meinem Skript aus der Signatur hättest du keinen Ärger mit fehlerhaften Code. Müsstest nur ggf bei der erst Einrichtung etwas mehr mitarbeiten.
HM-Script für virtuelle Wetterstation
Moderator: Co-Administratoren
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
Re: HM-Script für virtuelle Wetterstation
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
-
- Beiträge: 1152
- Registriert: 30.11.2013, 16:35
- Wohnort: Mordor
- Hat sich bedankt: 23 Mal
- Danksagung erhalten: 56 Mal
Re: HM-Script für virtuelle Wetterstation
Ich würde deine Frage besser hier stellen: https://forum.easy-smarthome.de/drive_electric hat geschrieben: ↑19.06.2021, 19:04wie bringt man die Kanäle in Smartha sichtbar?
photo_2021-06-19_19-02-02.jpg
Re: HM-Script für virtuelle Wetterstation
Nach längerem Suchen und Ausprobieren verschiedener Scripte, bin ich mit der auf Seite 35 genannten Version dann auch fündig geworden.
Danke an den Ersteller und die Editoren!
Den Code füge ich der Einfachheit unten nochmal ein.
Grüße
Daniel
Danke an den Ersteller und die Editoren!
Den Code füge ich der Einfachheit unten nochmal ein.
Grüße
Daniel
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='XXXXXXXXXXXXXXXXXXXXXXXXX';
!Optionale Experteneinstellungen: Angabe der Stadt (über https://openweathermap.org/city/) anstatt Geocoords (=false)
string owCityid=false;
!Optionale Experteneinstellungen: wget-Command per CUxD oder system.Exec (cuxCMDName='CUxD.<Seriennummer>:1'/false) sowie CUxD logging (true/false)
string cuxCMDName=false;
boolean useLOGIT=false;
!Optionale Experteneinstellungen: OpenWeather-Daten in CUxD Thermostat-Device schreiben (cuxWDSName='CUxD.<Seriennummer>:1'/false)
!Achtung: Gerät=("Universal Wrapper Device" (90) als "Thermostat" / Option "WEATHER|USE_HMDATAPT" muss auf false)
string cuxWDSName=false;
!Systemvariablenbenennung
string svAktualisierung='OpenWeatherMap Letzte Aktualisierung';
string svTemperatur='OpenWeatherMap Temperatur';
string svMinimalTemperatur='OpenWeatherMap Temperatur (min.)';
string svMaximalTemperatur='OpenWeatherMap Temperatur (max.)';
string svLuftfeuchtigkeit='OpenWeatherMap Luftfeuchte (rel.)';
string svLuftdruck='OpenWeatherMap Luftdruck';
string svWindGeschwindigkeit='OpenWeatherMap Windgeschwindigkeit';
string svWindRichtung='OpenWeatherMap Windrichtung';
string svWindRichtungInt='OpenWeatherMap WindrichtungInt';
string svWetterstation='OpenWeatherMap Wetterstation';
string svSonnenaufgang='OpenWeatherMap Sonnenaufgang';
string svSonnenuntergang='OpenWeatherMap Sonnenuntergang';
string svWetter='OpenWeatherMap Wetter';
string svNiederschlag='OpenWeatherMap Niederschlag';
string svNiederschlagsart='OpenWeatherMap Niederschlagsart';
string svWolken='OpenWeatherMap Bewölkung';
!************************************************************
!************************************************************
!BEGIN DES SCRIPTS
!************************************************************
!************************************************************
!Variablendeklaration
!***********************
!OpenWeather-Url mit Defaultwerte
string owLocation='&id=INSERT';
string owUrl='http://api.openweathermap.org/data/2.5/weather?mode=xml&units=metric';
!CUxD/Exec und Rückgabe-Variablen (Programmablauf) mit Defaultwerte
boolean cuxCMD=false; boolean cuxWDS=false;string recXML;
!XML-Parser (Tagnamen)
string xmlStartTagName_Aktualisierung;string xmlEndTagName_Aktualisierung;
string xmlStartTagName_Temperatur;string xmlEndTagName_Temperatur;
string xmlStartTagName_Luftfeuchtigkeit;string xmlEndTagName_Luftfeuchtigkeit;
string xmlStartTagName_Luftdruck;string xmlEndTagName_Luftdruck;
string xmlStartTagName_Wind;string xmlEndTagName_Wind;
string xmlStartTagName_Geschwindigkeit;string xmlEndTagName_Geschwindigkeit;
string xmlStartTagName_Windrichtung;string xmlEndTagName_Windrichtung;
string xmlStartTagName_Stadt;string xmlEndTagName_Stadt;
string xmlStartTagName_Sonnenzeit;string xmlEndTagName_Sonnenzeit;
string xmlStartTagName_Wetter;string xmlEndTagName_Wetter;
string xmlStartTagName_Niederschlag;string xmlEndTagName_Niederschlag;
string xmlStartTagName_Wolken;string xmlEndTagName_Wolken;
!XML-Parser (Programmablauf)
integer xmlStartTagLenght;
integer xmlTagStart;integer xmlTagLength;
integer xmlAttributeStart;integer xmlAttributeLength;
string xmlTagContent;
string xmlAttributeValue;
!Zurückgemeldete und aus der XML extrahierte Werte von OpenWeather
real owTemperatur;real owMinimalTemperatur;real owMaximalTemperatur;
real owLuftfeuchtigkeit;
real owLuftdruck;
real owWindGeschwindigkeit;real owGradzahl;string owWindRichtung;
string owWetterstation;
string owAktualisierung;
string owSonnenaufgang;string owSonnenuntergang;
string owWetter;
real owNiederschlag;string owNiederschlagsart;
integer owWolken;
!Objekte für Systemvariablen (Programmablauf)
object svObject;
object svObjectlist;
!Objekte für Devices (Programmablauf)
string dvObjectID;
object dvObject;
object dvObjectlist;
!Generische Variablen (Mehrfachverwendung)
string genString1;string genString2;string genString3;
time genTime1;
integer genInteger1;integer genInteger2;
real genReal1;
!Url zum Abruf des XML-Strings zusammen sezten
!****************************************************
if(owCityid){
owLocation='&id='#owCityid;
} else {
if(system.Longitude()&&system.Latitude())
{
owLocation='&lat='#system.Latitude()#'&lon='#system.Longitude();
}
}
owUrl = owUrl#'&APPID='#owAppid#owLocation;
!Prüfen, ob CUX-Daemon Devices vorhanden sind
!***************************************************
if(dom.GetObject(cuxCMDName#'.CMD_SETS')){cuxCMD = true;}
if(dom.GetObject(cuxWDSName#'.SET_TEMPERATURE')){cuxWDS=true;}
!wget ausführen
!*****************
if(cuxCMD)
{
!Website via CUxD und wget aufrufen.
dom.GetObject(cuxCMDName#'.CMD_SETS').State("wget -q -O - '"#owUrl#"'");
dom.GetObject(cuxCMDName#'.CMD_QUERY_RET').State(1);
recXML = dom.GetObject(cuxCMDName#'.CMD_RETS').State();
} else {
!Fallback: Website via system.Exec und wget aufrufen
system.Exec("wget -q -O - '"#owUrl#"'", &recXML, &genString1);
}
!Pruefen, ob XML-String geholt wurde, ansonsten abbrechen
!****************************************************************
if(!recXML){quit;}
!Tag-Namen-Suche im geholten XML-String vorbereiten
!*********************************************************
!Je nachdem, ob die Daten via CUxD oder Exex bezogen wurden, haben die XML-Tags ein anderes Format.
!Exex liefert einen XML-String mit eckigen Klammern nach dem Schema <tag></tag> oder <tag/>
!CUxD enternt eckige Klammern und liefert eine String nach dem Schema "tag /tag"
if(cuxCMD)
{
!Suchstrings für XML-Tags von CUxD festlegen
xmlStartTagName_Aktualisierung = 'lastupdate ';
xmlEndTagName_Aktualisierung = ' /lastupdate';
xmlStartTagName_Temperatur = 'temperature ';
xmlEndTagName_Temperatur = ' /temperature';
xmlStartTagName_Luftfeuchtigkeit = 'humidity ';
xmlEndTagName_Luftfeuchtigkeit = ' /humidity';
xmlStartTagName_Luftdruck = 'pressure ';
xmlEndTagName_Luftdruck = ' /pressure';
xmlStartTagName_Wind = 'wind ';
xmlEndTagName_Wind = ' /wind';
xmlStartTagName_Geschwindigkeit = 'speed ';
xmlEndTagName_Geschwindigkeit = ' /speed';
xmlStartTagName_Windrichtung = 'direction ';
xmlEndTagName_Windrichtung = ' /direction';
xmlStartTagName_Stadt = 'city ';
xmlEndTagName_Stadt = ' /city';
xmlStartTagName_Sonnenzeit = 'sun ';
xmlEndTagName_Sonnenzeit = ' /sun';
xmlStartTagName_Wetter = 'weather ';
xmlEndTagName_Wetter = ' /weather';
xmlStartTagName_Niederschlag = 'precipitation ';
xmlEndTagName_Niederschlag = ' /precipitation';
xmlStartTagName_Wolken = 'clouds ';
xmlEndTagName_Wolken = ' /clouds';
} else {
!Suchstrings für XML-Tags von Exec festlegen
xmlStartTagName_Aktualisierung = '<lastupdate ';
xmlEndTagName_Aktualisierung = '>';
xmlStartTagName_Temperatur = '<temperature ';
xmlEndTagName_Temperatur = '>';
xmlStartTagName_Luftfeuchtigkeit = '<humidity ';
xmlEndTagName_Luftfeuchtigkeit = '>';
xmlStartTagName_Luftdruck = '<pressure ';
xmlEndTagName_Luftdruck = '>';
xmlStartTagName_Wind = '<wind>';
xmlEndTagName_Wind = '</wind>';
xmlStartTagName_Geschwindigkeit = '<speed ';
xmlEndTagName_Geschwindigkeit = '>';
xmlStartTagName_Windrichtung = '<direction ';
xmlEndTagName_Windrichtung = '>';
xmlStartTagName_Stadt = '<city ';
xmlEndTagName_Stadt = '</city>';
xmlStartTagName_Sonnenzeit = '<sun ';
xmlEndTagName_Sonnenzeit = '>';
xmlStartTagName_Wetter = '<weather ';
xmlEndTagName_Wetter = '>';
xmlStartTagName_Niederschlag = '<precipitation ';
xmlEndTagName_Niederschlag = '>';
xmlStartTagName_Wolken = '<clouds ';
xmlEndTagName_Wolken = '>';
}
!Geholten XML-String parsen
!******************************
!Parser für svAktualisierung
if(svAktualisierung)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Aktualisierung.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Aktualisierung);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Aktualisierung);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Datenabruf-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owAktualisierung = xmlAttributeValue.ToString();
}
}
}
}
!Parser für svTemperatur, svMinimalTemperatur, svMaximalTemperatur
if(svTemperatur)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Temperatur.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Temperatur);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Temperatur);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Temperatur-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owTemperatur = xmlAttributeValue.ToFloat();
}
!MinimalTemperatur-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('min="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owMinimalTemperatur = xmlAttributeValue.ToFloat();
}
!MaximalTemperatur-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('max="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owMaximalTemperatur = xmlAttributeValue.ToFloat();
}
}
}
}
!Parser für svLuftfeuchtigkeit
if(svLuftfeuchtigkeit)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Luftfeuchtigkeit.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Luftfeuchtigkeit);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftfeuchtigkeit);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Luftfeuchtigkeits-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owLuftfeuchtigkeit = xmlAttributeValue.ToFloat();
}
}
}
}
!Parser für svLuftdruck
if(svLuftdruck)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Luftdruck.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Luftdruck);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftdruck);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Luftdruck-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owLuftdruck = xmlAttributeValue.ToFloat();
}
}
}
}
!Parser für owWindGeschwindigkeit
if(svWindGeschwindigkeit)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Wind.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Wind);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Sub-Parser Geschwindigkeit
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
xmlStartTagLenght = xmlStartTagName_Geschwindigkeit.Length();
xmlTagStart = xmlTagContent.Find(xmlStartTagName_Geschwindigkeit);
if (xmlTagStart>=0)
{
xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Geschwindigkeit);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Geschwindigkeit-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owWindGeschwindigkeit = xmlAttributeValue.ToFloat();
}
}
}
}
}
}
!Parser für owGradzahl, owWindRichtung
if((svWindRichtung)||(svWindRichtungInt))
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Wind.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Wind);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Sub-Parser Windrichtng
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
xmlStartTagLenght = xmlStartTagName_Windrichtung.Length();
xmlTagStart = xmlTagContent.Find(xmlStartTagName_Windrichtung);
if (xmlTagStart>=0)
{
xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Windrichtung);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Gradzahl-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owGradzahl = xmlAttributeValue.ToInteger();
}
!Himmelsrichtung-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('code="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owWindRichtung = xmlAttributeValue.ToString();
}
}
else
{
!QuickAndDirty fallback if no data
owGradzahl=-1;
}
}
}
}
}
!Parser für owWetterstation
if((svWetterstation)||(svSonnenaufgang)||(svSonnenuntergang))
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Stadt.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Stadt);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Stadt);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Stadtname-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('name="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owWetterstation = xmlAttributeValue.ToString();
}
!Sub-Parser Sonnezeit
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;
xmlStartTagLenght = xmlStartTagName_Sonnenzeit.Length();
xmlTagStart = xmlTagContent.Find(xmlStartTagName_Sonnenzeit);
if (xmlTagStart>=0)
{
xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Sonnenzeit);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Sonnenaufgang-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('rise="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owSonnenaufgang = xmlAttributeValue.ToString();
}
!Sonnenuntergang-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('set="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owSonnenuntergang = xmlAttributeValue.ToString();
}
}
}
}
}
}
!Parser für svWetter
if(svWetter)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Wetter.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Wetter);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wetter);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Luftfeuchtigkeits-Attribut auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owWetter = xmlAttributeValue.ToString();
}
}
}
}
!Parser für owNiederschlag, owNiederschlagTyp -new
if((svNiederschlag)||(svNiederschlagsart))
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Niederschlag.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Niederschlag);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Niederschlag);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Niederschlagsart auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('mode="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owNiederschlagsart = xmlAttributeValue.ToString();
}
!Niederschlag auslesen
if(owNiederschlagsart=='no')
{
owNiederschlag = 0;
}
else
{
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owNiederschlag = xmlAttributeValue.ToFloat();
}
}
}
}
}
!Parser für owWolken -new
if(svWolken)
{
xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent='';
xmlStartTagLenght = xmlStartTagName_Wolken.Length();
xmlTagStart = recXML.Find(xmlStartTagName_Wolken);
if (xmlTagStart>=0)
{
xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght);
xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wolken);
if(xmlTagLength>0)
{
xmlTagContent = xmlTagContent.Substr(0,xmlTagLength);
!Wolken auslesen
xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue='';
xmlAttributeStart=xmlTagContent.Find('value="');
if (xmlAttributeStart>=0)
{
xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7);
xmlAttributeLength = xmlAttributeValue.Find('"');
xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength);
owWolken = xmlAttributeValue.ToInteger();
}
}
}
}
!Ermittelte Werte in Systemvariable schreiben
!**************************************************
!Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen.
!Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html
!Schreiben von svAktualisierung
if(svAktualisierung)
{
!String bzw. Uhrzeit umformatieren
genString1='';genTime1=null;genString2='';
genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
svObject = dom.GetObject(svAktualisierung);
!Wenn noch keine Systemvarible vorhanden, diese anlegen
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svAktualisierung);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Aktualisierung');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(genString2);
}
!Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);}
}
!Schreiben von svSonnenaufgang
if(svSonnenaufgang)
{
genString1='';genTime1=null;genString2='';
genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%H:%M"#" Uhr");
svObject = dom.GetObject(svSonnenaufgang);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svSonnenaufgang);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Sonnenaufgang');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);}
}
!Schreiben von svSonnenuntergang
if(svSonnenuntergang)
{
genString1='';genTime1=null;genString2='';
genString1 = owSonnenuntergang.Substr(0,10)#' '#owSonnenuntergang.Substr(11);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%H:%M"#" Uhr");
svObject = dom.GetObject(svSonnenuntergang);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svSonnenuntergang);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Sonnenuntergang');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenuntergang#';'#genTime1);}
}
!Schreiben von svWetterstation
if(svWetterstation)
{
genString1='';genString2='';genString3='';genInteger1=0;genInteger2=0;
genInteger1=owWetterstation.Length();
foreach(genInteger2,genInteger1)
{
genString1=owWetterstation.Substr(genInteger2-1,1);
if(genString1=='Ã')
{
genString2=owWetterstation.Substr(genInteger2,1);
if(genString2=='¼'){genString1='ü';genInteger2=genInteger2+1;}
if(genString2=='¶'){genString1='ö';genInteger2=genInteger2+1;}
if(genString2=='¤'){genString1='ä';genInteger2=genInteger2+1;}
}
genString3=genString3#genString1;
}
svObject = dom.GetObject(svWetterstation);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWetterstation);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Wetterstation');
svObject.ValueUnit('');
svObject.State(genString3);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(genString3);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetterstation#';'#genString3);}
}
!Schreiben von svWindgeschwindigkeit
if(svWindGeschwindigkeit)
{
svObject = dom.GetObject(svWindGeschwindigkeit);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindGeschwindigkeit);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Windgeschwindigkeit");
svObject.ValueUnit("m/s");
svObject.ValueMin(0.0000);
svObject.ValueMax(500.0000);
svObject.State(owWindGeschwindigkeit);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owWindGeschwindigkeit);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindGeschwindigkeit#';'#owWindGeschwindigkeit);}
}
!Schreiben von svLuftdruck
if(svLuftdruck)
{
svObject = dom.GetObject(svLuftdruck);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svLuftdruck);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Luftdruck");
svObject.ValueUnit("hPa");
svObject.ValueMin(500.0000);
svObject.ValueMax(1100.0000);
svObject.State(owLuftdruck);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owLuftdruck);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftdruck#';'#owLuftdruck);}
}
!Schreiben von svTemperatur
if(svTemperatur)
{
svObject = dom.GetObject(svTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svTemperatur#';'#owTemperatur);}
if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_TEMPERATURE').State(owTemperatur);}
}
!Schreiben von svMinimalTemperatur
if(svMinimalTemperatur)
{
svObject = dom.GetObject(svMinimalTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svMinimalTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur (min.)");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owMinimalTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owMinimalTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMinimalTemperatur#';'#owMinimalTemperatur);}
}
!Schreiben von svMaximalTemperatur
if(svMaximalTemperatur)
{
svObject = dom.GetObject(svMaximalTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svMaximalTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur (max.)");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owMaximalTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owMaximalTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMaximalTemperatur#';'#owMaximalTemperatur);}
}
!Schreiben von svLuffeuchtigkeit
if(svLuftfeuchtigkeit)
{
svObject = dom.GetObject(svLuftfeuchtigkeit);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svLuftfeuchtigkeit);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Luftfeuchtigkeit");
svObject.ValueUnit("%");
svObject.ValueMin(0.0000);
svObject.ValueMax(100.0000);
svObject.State(owLuftfeuchtigkeit);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owLuftfeuchtigkeit);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftfeuchtigkeit#';'#owLuftfeuchtigkeit);}
if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_HUMIDITY').State(owLuftfeuchtigkeit);}
}
!Schreiben von svWindrichtung
if(svWindRichtung)
{
!Englische Windrichtungsangaben übersetzen (z.B. N-W-E in Nord-West-Ost)
genString1='';genString2='';genString3='';genInteger1=0;
genString1 = owWindRichtung;
foreach(genInteger1,genString1.Length())
{
genString2=genString1.Substr(genInteger1-1,1);
if(genString2=='E'){genString3=genString3#'Ost-';}
if(genString2=='S'){genString3=genString3#'Süd-';}
if(genString2=='W'){genString3=genString3#'West-';}
if(genString2=='N'){genString3=genString3#'Nord-';}
}
genString1=genString3.Substr(0,genString3.Length()-1);
if (owGradzahl>=0){genString2=owGradzahl.ToString()#'° '#genString1;}
svObject = dom.GetObject(svWindRichtung);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindRichtung);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Windrichtung');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtung#';'#genString2);}
}
!Schreiben von svWetter
if(svWetter)
{
genString1='';genString2='';genString3='';genInteger1=0;
genString1 = owWetter;
genString2=genString1;
!WriteLine(genString2);
if(genString2=='thunderstorm with light rain'){genString3=genString3#'Gewitter mit leichtem Regen';}
if(genString2=='thunderstorm with rain'){genString3=genString3#'Gewittersturm mit Regen';}
if(genString2=='thunderstorm with heavy rain'){genString3=genString3#'Gewitter mit heftigem Regen';}
if(genString2=='light thunderstorm'){genString3=genString3#'leichtes Gewitter';}
if(genString2=='thunderstorm'){genString3=genString3#'Gewitter';}
if(genString2=='heavy thunderstorm'){genString3=genString3#'heftiges Gewitter';}
if(genString2=='ragged thunderstorm'){genString3=genString3#'heftiges Gewitter';}
if(genString2=='thunderstorm with light drizzle'){genString3=genString3#'Gewitter mit leichtem Nieselregen';}
if(genString2=='thunderstorm with drizzle'){genString3=genString3#'Gewitter mit Nieselregen';}
if(genString2=='thunderstorm with heavy drizzle'){genString3=genString3#'Gewitter mit starkem Nieselregen';}
if(genString2=='light intensity drizzle'){genString3=genString3#'leichter Nieselregen';}
if(genString2=='drizzle'){genString3=genString3#'Nieselregen';}
if(genString2=='heavy intensity drizzle'){genString3=genString3#'starker Nieselregen';}
if(genString2=='light intensity drizzle rain'){genString3=genString3#'leichter Nieselregen';}
if(genString2=='drizzle rain'){genString3=genString3#'Nieselregen';}
if(genString2=='heavy intensity drizzle rain'){genString3=genString3#'starker Nieselregen';}
if(genString2=='shower rain and drizzle'){genString3=genString3#'Regenschauer und Nieselregen';}
if(genString2=='heavy shower rain and drizzle'){genString3=genString3#'starker Regenschauer und Nieselregen';}
if(genString2=='shower drizzle'){genString3=genString3#'Regenschauer';}
if(genString2=='light rain'){genString3=genString3#'leichter Regen';}
if(genString2=='moderate rain'){genString3=genString3#'mäßiger Regen';}
if(genString2=='heavy intensity rain'){genString3=genString3#'starker Regen';}
if(genString2=='very heavy rain'){genString3=genString3#'sehr starker Regen';}
if(genString2=='extreme rain'){genString3=genString3#'Extremniederschläge';}
if(genString2=='freezing rain'){genString3=genString3#'Eisregen';}
if(genString2=='light intensity shower rain'){genString3=genString3#'leichter Regenschauer';}
if(genString2=='shower rain'){genString3=genString3#'Regenschauer';}
if(genString2=='heavy intensity shower rain'){genString3=genString3#'starker Regenschauer';}
if(genString2=='ragged shower rain'){genString3=genString3#'strömender Regen';}
if(genString2=='light snow'){genString3=genString3#'leichter Schnee';}
if(genString2=='snow'){genString3=genString3#'Schnee';}
if(genString2=='heavy snow'){genString3=genString3#'heftiger Schneefall';}
if(genString2=='sleet'){genString3=genString3#'Graupel';}
if(genString2=='shower sleet'){genString3=genString3#'Schauer';}
if(genString2=='light rain and snow'){genString3=genString3#'leichter Regen und Schnee';}
if(genString2=='rain and snow'){genString3=genString3#'Schneeregen';}
if(genString2=='light shower snow'){genString3=genString3#'leichter Schneeschauer';}
if(genString2=='shower snow'){genString3=genString3#'Schneeschauer';}
if(genString2=='heavy shower snow'){genString3=genString3#'starker Schneeschauer';}
if(genString2=='mist'){genString3=genString3#'Nebel';}
if(genString2=='smoke'){genString3=genString3#'Rauch';}
if(genString2=='haze'){genString3=genString3#'Dunst';}
if(genString2=='sand, dust whirls'){genString3=genString3#'Sand, Staubwirbel';}
if(genString2=='fog'){genString3=genString3#'Nebel';}
if(genString2=='sand'){genString3=genString3#'Sand';}
if(genString2=='dust'){genString3=genString3#'Staub';}
if(genString2=='volcanic ash'){genString3=genString3#'Vulkanasche';}
if(genString2=='squalls'){genString3=genString3#'Sturmböen';}
if(genString2=='tornado'){genString3=genString3#'Tornado';}
if(genString2=='clear sky'){genString3=genString3#'klarer Himmel';}
if(genString2=='few clouds'){genString3=genString3#'vereinzelte Wolken';}
if(genString2=='scattered clouds'){genString3=genString3#'aufgelockerte Bewölkung';}
if(genString2=='broken clouds'){genString3=genString3#'durchbrochene Bewölkung';}
if(genString2=='overcast clouds'){genString3=genString3#'bedeckt';}
genString1=genString3.Substr(0,genString3.Length());
genString2=genString1;
svObject = dom.GetObject(svWetter);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWetter);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo("OpenWeatherMap - Wetter");
svObject.ValueUnit('');
svObject.State(owWetter);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
!if(dom.GetObject("Tageszeit").Value()==0)
if ((((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())>((0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger()))
|| (((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())<((0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger())))
{
svObject.State(genString2#' ');
}
else
{
svObject.State(genString2);
}
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetter#';'#genString2);}
}
!Schreiben von svNiederschlag
if(svNiederschlag)
{
svObject = dom.GetObject(svNiederschlag);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svNiederschlag);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Niederschlagsmenge");
svObject.ValueUnit("mm/h");
svObject.ValueMin(0.0);
svObject.ValueMax(100.0);
svObject.State(owNiederschlag);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owNiederschlag);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlag#';'#owNiederschlag);}
}
!Schreiben von svNiederschlagsart
if(svNiederschlagsart)
{
if (owNiederschlagsart=='rain'){owNiederschlagsart=1;}
if (owNiederschlagsart=='snow'){owNiederschlagsart=2;}
if (owNiederschlagsart=='no'){owNiederschlagsart=0;}
svObject = dom.GetObject(svNiederschlagsart);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svNiederschlagsart);
svObject.ValueType(ivtString);
svObject.ValueSubType(istEnum);
svObject.ValueList("kein Niederschlag;Regen;Schnee");
svObject.DPInfo("OpenWeatherMap - Niederschlagsart");
svObject.ValueUnit("");
svObject.State(owNiederschlagsart);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owNiederschlagsart);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlagsart#';'#owNiederschlagsart);}
}
!Schreiben von svWolken
if(svWolken)
{
svObject = dom.GetObject(svWolken);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWolken);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Bewölkung");
svObject.ValueUnit("%");
svObject.ValueMin(0);
svObject.ValueMax(100);
svObject.State(owWolken);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
} else {
svObject.State(owWolken);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWolken#';'#owWolken);}
}
!Schreiben von svWindrichtung
if((svWindRichtungInt)&&(owGradzahl>=0))
{
svObject = dom.GetObject(svWindRichtungInt);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindRichtungInt);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Windrichtung Integer");
svObject.ValueUnit("°");
svObject.ValueMin(0);
svObject.ValueMax(360);
svObject.State(owGradzahl);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
WriteLine("Variable erzeugen und schreiben"#owGradzahl #"in: " #svObject.Name());
} else {
svObject.State(owGradzahl);
WriteLine("Variable nicht erzeugen nur schreiben"#owGradzahl #"in: " #svObject.Name());
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtungInt#';'#owGradzahl);}
}
WriteLine("Script ganz durch");
-
- Beiträge: 26
- Registriert: 27.09.2015, 01:59
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Und auch noch 4 Jahre später ein übreraagendens Skript.
Besten Dank
So kann ich meine Rollläden präzise auf das Wetter abstimmen. Im Sommer kann ich jetzt auch gegen die Hitze die Rollos bewegen.
Weiter SO.
Besten Dank
So kann ich meine Rollläden präzise auf das Wetter abstimmen. Im Sommer kann ich jetzt auch gegen die Hitze die Rollos bewegen.
Weiter SO.
-
- Beiträge: 410
- Registriert: 26.08.2016, 19:26
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Erding
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 31 Mal
Re: HM-Script für virtuelle Wetterstation
Hallo,
ich habe den (unwesentlichen) Beitrag gelöscht. Ich ging von einer falschen Annahme aus.
Grüße
schlichi
ich habe den (unwesentlichen) Beitrag gelöscht. Ich ging von einer falschen Annahme aus.
Grüße
schlichi
Zuletzt geändert von schlichi am 01.11.2021, 22:19, insgesamt 3-mal geändert.
... inzwischen autodidakter, fortgeschrittener Anfänger mit bestandener Einstiegsprüfung für den Expertenmodus Teil 3 (erfahrener Anwender)
-
- Beiträge: 9764
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 707 Mal
- Danksagung erhalten: 1646 Mal
Re: HM-Script für virtuelle Wetterstation
Ich finde die Daten von OWM eh chronisch ungenau, aber das ist evt. Standortabhängig
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 +++
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 +++
-
- Beiträge: 2
- Registriert: 03.05.2021, 17:57
- System: CCU und Access Point
- Hat sich bedankt: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Hallo, ich bin völllig unbeleckt in der Skripterstellung. Ich habe mal mit dem Script probiert. Die Daten kommen alle, nur Uhrzeit Aktualisierung, Sonnenauf- und Sonnenuntergang sind 2 Stunden zu früh. Kann ich im Skript etwas ändern?
Das HM-Script ist auf jeden Fall super.
Das HM-Script ist auf jeden Fall super.
-
- 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
Mal eine Frage. Das sieht so aus, also ihrer teilweise den Niederschlag für gestern und heute über die OpenWeather API bekommst. Sehe ich das richtig?
Ich bin nämlich schon länger auf der Suche nach einer Steuerung der Gartenbewässerung. Ich habe schon vor langer Zeit die virtuelle Wetterstation mit Script ausprobiert aber damals bekam ich nur Vorhersagen des Niederschlags für heute und die nächsten Tage. Ist schon eine Weile her, dass ich das eingerichtet habe. Eventuell hat sich da ja was anderes API und am Skript getan.
Die Vorhersagen haben leider bei mir nicht gut funktioniert weil sie leider zu ungenau waren. Zu häufig meinte die Vorhersage, dass es heute regnen sollte und hat es dann doch nicht (oder eben nicht über unserem Dorf) und das im Sommer mehrere Tage in Folge. So dass ich dann doch wieder auf manuelle Entscheidung gewechselt bin.
Ich suche also händeringend nach einer Möglichkeit die tatsächlich gemessene Niederschlagsmenge des Tages über eine API auszulesen. Idealerweise auch der letzten Tage - aber das kann ich notfalls auch durch speichern in einer Variable lösen. Wichtig wäre mir, dass es sich um gemessene und nicht vorhergesagte Werte handelt.
Ich bin nämlich schon länger auf der Suche nach einer Steuerung der Gartenbewässerung. Ich habe schon vor langer Zeit die virtuelle Wetterstation mit Script ausprobiert aber damals bekam ich nur Vorhersagen des Niederschlags für heute und die nächsten Tage. Ist schon eine Weile her, dass ich das eingerichtet habe. Eventuell hat sich da ja was anderes API und am Skript getan.
Die Vorhersagen haben leider bei mir nicht gut funktioniert weil sie leider zu ungenau waren. Zu häufig meinte die Vorhersage, dass es heute regnen sollte und hat es dann doch nicht (oder eben nicht über unserem Dorf) und das im Sommer mehrere Tage in Folge. So dass ich dann doch wieder auf manuelle Entscheidung gewechselt bin.
Ich suche also händeringend nach einer Möglichkeit die tatsächlich gemessene Niederschlagsmenge des Tages über eine API auszulesen. Idealerweise auch der letzten Tage - aber das kann ich notfalls auch durch speichern in einer Variable lösen. Wichtig wäre mir, dass es sich um gemessene und nicht vorhergesagte Werte handelt.
-
- Beiträge: 9764
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 707 Mal
- Danksagung erhalten: 1646 Mal
Re: HM-Script für virtuelle Wetterstation
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
viewtopic.php?f=31&t=70502&p=698181#p698184
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 +++
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 +++