HM-Script für virtuelle Wetterstation
Moderator: Co-Administratoren
-
- Beiträge: 7
- Registriert: 21.12.2019, 14:19
Re: HM-Script für virtuelle Wetterstation
Ich habe leider das gleiche Problem. Hast Du es schon gelöst bekommen?
-
- Beiträge: 28
- Registriert: 11.05.2007, 16:21
- System: CCU
- Wohnort: Köln
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Im Script wurde folgendes CUxD Gerät verwendet Einfach mal das verwendete CUxD Gerät im Script eintragen oder entsprechendes CUxD aus dem Script zur Anzeige nehmen. Auf jeden Fall sollten Gerät und Scripteintrag stimmig sein.
Code: Alles auswählen
string cuxCMDName='CUxD.CUX2801001:1';
Ne schöne Jrooß us Kölle,...
- Hartmut -
CCU3 mit raspmatic_rpi3 (min. 3.61.7.20220115) ReGaHss: R1.00.0388.0229
(CCU2 : Version: 2.1.369 | ReGaHss-Version: R1.00.0388.0217)
686 Kanäle in 106 Geräten, sowie 3988 Datenpunkte | 85 SysVars und 70 Programme
und 35 CUxD-Kanäle in 14 CUxD-Geräten
Addons: E-Mail 1.7.2 | CUxD 2.7 | ProgrammeDrucken 2.4 | HomeKit HomeMatic 0.0.14 | Neo Server 2.8.0
Kopplungen: PHILIPS hue (nativ))
Stand 02/2022
- Hartmut -
CCU3 mit raspmatic_rpi3 (min. 3.61.7.20220115) ReGaHss: R1.00.0388.0229
(CCU2 : Version: 2.1.369 | ReGaHss-Version: R1.00.0388.0217)
686 Kanäle in 106 Geräten, sowie 3988 Datenpunkte | 85 SysVars und 70 Programme
und 35 CUxD-Kanäle in 14 CUxD-Geräten
Addons: E-Mail 1.7.2 | CUxD 2.7 | ProgrammeDrucken 2.4 | HomeKit HomeMatic 0.0.14 | Neo Server 2.8.0
Kopplungen: PHILIPS hue (nativ))
Stand 02/2022
-
- Beiträge: 28
- Registriert: 11.05.2007, 16:21
- System: CCU
- Wohnort: Köln
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
So steht es auch im Script:
Ich bin Anfangs selber genau über solche Dinger gespolpert...der Weg ist das Ziel
Code: Alles auswählen
!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;)
Ne schöne Jrooß us Kölle,...
- Hartmut -
CCU3 mit raspmatic_rpi3 (min. 3.61.7.20220115) ReGaHss: R1.00.0388.0229
(CCU2 : Version: 2.1.369 | ReGaHss-Version: R1.00.0388.0217)
686 Kanäle in 106 Geräten, sowie 3988 Datenpunkte | 85 SysVars und 70 Programme
und 35 CUxD-Kanäle in 14 CUxD-Geräten
Addons: E-Mail 1.7.2 | CUxD 2.7 | ProgrammeDrucken 2.4 | HomeKit HomeMatic 0.0.14 | Neo Server 2.8.0
Kopplungen: PHILIPS hue (nativ))
Stand 02/2022
- Hartmut -
CCU3 mit raspmatic_rpi3 (min. 3.61.7.20220115) ReGaHss: R1.00.0388.0229
(CCU2 : Version: 2.1.369 | ReGaHss-Version: R1.00.0388.0217)
686 Kanäle in 106 Geräten, sowie 3988 Datenpunkte | 85 SysVars und 70 Programme
und 35 CUxD-Kanäle in 14 CUxD-Geräten
Addons: E-Mail 1.7.2 | CUxD 2.7 | ProgrammeDrucken 2.4 | HomeKit HomeMatic 0.0.14 | Neo Server 2.8.0
Kopplungen: PHILIPS hue (nativ))
Stand 02/2022
Re: HM-Script für virtuelle Wetterstation
Hallo,
ich habe ein Problem, welches noch nicht beschrieben wurde. Bei mir werden die Umlaute nicht angezeigt. Dadurch wird der Text kryptisch. Gibt es dazu einen Lösungsansatz?
Ansonsten bin ich schon mal vorsichtig begeistert von dem Projekt.
ich habe ein Problem, welches noch nicht beschrieben wurde. Bei mir werden die Umlaute nicht angezeigt. Dadurch wird der Text kryptisch. Gibt es dazu einen Lösungsansatz?
Ansonsten bin ich schon mal vorsichtig begeistert von dem Projekt.
Re: HM-Script für virtuelle Wetterstation
Hallo moellertherm!
Du musst einfach die Systemvariablen unter "Einstellungen" -> "Systemvariablen" -> "Bearbeiten" individuell nachbessern. Problem entsteht durch Umlaute etc. sowie auch durch Copy & Paste. - Viel Erfolg!
DFP
Du musst einfach die Systemvariablen unter "Einstellungen" -> "Systemvariablen" -> "Bearbeiten" individuell nachbessern. Problem entsteht durch Umlaute etc. sowie auch durch Copy & Paste. - Viel Erfolg!
DFP
-
- Beiträge: 7
- Registriert: 21.12.2019, 14:19
Re: HM-Script für virtuelle Wetterstation
Hallo,Hardy hat geschrieben: ↑21.12.2019, 14:40Im Script wurde folgendes CUxD Gerät verwendetEinfach mal das verwendete CUxD Gerät im Script eintragen oder entsprechendes CUxD aus dem Script zur Anzeige nehmen. Auf jeden Fall sollten Gerät und Scripteintrag stimmig sein.Code: Alles auswählen
string cuxCMDName='CUxD.CUX2801001:1';
es ist nicht nur das Gerät im CUxD das falsche Daten anzeigt. Auch die angelegten Systemvariablen zeigen falsche Werte. Die letzten Tage hatte es funktioniert aber seit heute haben wir hier wieder 92°
Re: HM-Script für virtuelle Wetterstation
@DFPROD
Es handelt sich bei der systemvariable um eine Zeichenkette, deren Inhalt ich nicht beeinflussen kann, da sie offenbar direkt von OpenWeather kommt.
Trotzdem danke für den Hinweis.
Es handelt sich bei der systemvariable um eine Zeichenkette, deren Inhalt ich nicht beeinflussen kann, da sie offenbar direkt von OpenWeather kommt.
Trotzdem danke für den Hinweis.
-
- Beiträge: 18
- Registriert: 09.12.2019, 20:37
- Hat sich bedankt: 6 Mal
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Hallo und vielen Dank für eure HilfeHardy hat geschrieben: ↑21.12.2019, 14:40Im Script wurde folgendes CUxD Gerät verwendetEinfach mal das verwendete CUxD Gerät im Script eintragen oder entsprechendes CUxD aus dem Script zur Anzeige nehmen. Auf jeden Fall sollten Gerät und Scripteintrag stimmig sein.Code: Alles auswählen
string cuxCMDName='CUxD.CUX2801001:1';
Das cuxCMD Gerät war wirklich das falsche. Nur leider werden die Systemvariabeln schon falsch bzw garnicht geschrieben.
Hier mal ein Bild wie es bei mir ausschaut.
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='a812de194059a6dad7ace65afa3*****';
!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='**********';
!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';
!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.CUX9002001: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.CUX9002001:1';
!************************************************************
!************************************************************
!BEGIN DES SCRIPTS
!************************************************************
!************************************************************
!Variablendeklaration
!***********************
!OpenWeather-Url mit Defaultwerte
string owLocation='&id=2950159';
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;
!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;
!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';
} 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 = '>';
}
!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)
{
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();
}
}
}
}
}
}
!Ermittelte Werte in Systemvariable schreiben
!**************************************************
!Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen.
!Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html
!Schreiben von svAktualisierung
if(svAktualisierung)
{
!String bzw. Uhrzeit umformatieren
genString1='';genTime1=null;genString2='';
genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11);
genTime1 = genString1.ToTime();
genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
svObject = dom.GetObject(svAktualisierung);
!Wenn noch keine Systemvarible vorhanden, diese anlegen
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svAktualisierung);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Aktualisierung');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString2);
}
!Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);}
}
!Schreiben von svSonnenaufgang
if(svSonnenaufgang)
{
genString1='';genTime1=null;genString2='';
genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
genTime1 = genString1.ToTime();
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);
genTime1 = genString1.ToTime();
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);}
}
Vielen Dank nochmal
Re: HM-Script für virtuelle Wetterstation
Lieb Forenmitglieder,
bekommt man eigentlich tagsüber die graue Wolke (nachts mit Mondsichel), an Sonnentagen mit einer der möglichen Systemvariablen aus dem Skript in HMpocketControl geändert? - Trotz Sonnenschein bleibt sie gemäß angehängter Konfiguration permanent grau.
Mit freundlichen Grüßen
Frank
bekommt man eigentlich tagsüber die graue Wolke (nachts mit Mondsichel), an Sonnentagen mit einer der möglichen Systemvariablen aus dem Skript in HMpocketControl geändert? - Trotz Sonnenschein bleibt sie gemäß angehängter Konfiguration permanent grau.
Mit freundlichen Grüßen
Frank
-
- Beiträge: 7
- Registriert: 21.12.2019, 14:19
Re: HM-Script für virtuelle Wetterstation
Fremo hat geschrieben: ↑29.12.2019, 15:53Hallo und vielen Dank für eure HilfeHardy hat geschrieben: ↑21.12.2019, 14:40Im Script wurde folgendes CUxD Gerät verwendetEinfach mal das verwendete CUxD Gerät im Script eintragen oder entsprechendes CUxD aus dem Script zur Anzeige nehmen. Auf jeden Fall sollten Gerät und Scripteintrag stimmig sein.Code: Alles auswählen
string cuxCMDName='CUxD.CUX2801001:1';
Das cuxCMD Gerät war wirklich das falsche. Nur leider werden die Systemvariabeln schon falsch bzw garnicht geschrieben.
Hier mal ein Bild wie es bei mir ausschaut.
Variablen.png
Wenn ich die URL von OW aufrufe mit meiner Stadt ID und meiner API bekomme ich die richtigen Daten. (Dies habe ich nur mal zum Test probiert. Um zu schauen ob ich überhaupt die Richtigen Daten bekomme)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='a812de194059a6dad7ace65afa3*****'; !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='**********'; !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'; !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.CUX9002001: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.CUX9002001:1'; !************************************************************ !************************************************************ !BEGIN DES SCRIPTS !************************************************************ !************************************************************ !Variablendeklaration !*********************** !OpenWeather-Url mit Defaultwerte string owLocation='&id=2950159'; 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; !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; !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'; } 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 = '>'; } !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) { 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(); } } } } } } !Ermittelte Werte in Systemvariable schreiben !************************************************** !Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen. !Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html !Schreiben von svAktualisierung if(svAktualisierung) { !String bzw. Uhrzeit umformatieren genString1='';genTime1=null;genString2=''; genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11); genTime1 = genString1.ToTime(); genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr"); svObject = dom.GetObject(svAktualisierung); !Wenn noch keine Systemvarible vorhanden, diese anlegen if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svAktualisierung); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Aktualisierung'); svObject.ValueUnit(''); svObject.State(genString2); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(true); } else { svObject.State(genString2); } !Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);} } !Schreiben von svSonnenaufgang if(svSonnenaufgang) { genString1='';genTime1=null;genString2=''; genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11); genTime1 = genString1.ToTime(); 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); genTime1 = genString1.ToTime(); 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);} }
tempsnip.png
Vielen Dank nochmal
Das die Temperatur falsch angezeigt wird liegt unter anderem daran, dass bei Temperatur "humidity" eingetragen ist. Wenn Du das in Temperature änderst, funktioniert zumindest die Temperatur. Für mehr hatte ich noch keine Muse
- Dateianhänge
-
- Unbenannt.PNG (13.72 KiB) 1909 mal betrachtet