HM-Script für virtuelle Wetterstation
Moderator: Co-Administratoren
Re: HM-Script für Wetterstation
Hallo,
gibt es ein Script zum Daten in Homematic auszuwerten für eine der aktuellen Wetterstaionen.
z.B. Ventus W980 oder W835 oder W830.
Oder hat jemand für eine andere Wetterstation ein Script zum Auslesen bzw. Auswerten der Datenprotokolle ?
Wäre schön, da ich mir eine Wetterstation zulegen möchte mit der ich in Homematic was anfangen kann
Danke
Cosi
gibt es ein Script zum Daten in Homematic auszuwerten für eine der aktuellen Wetterstaionen.
z.B. Ventus W980 oder W835 oder W830.
Oder hat jemand für eine andere Wetterstation ein Script zum Auslesen bzw. Auswerten der Datenprotokolle ?
Wäre schön, da ich mir eine Wetterstation zulegen möchte mit der ich in Homematic was anfangen kann
Danke
Cosi
Re: HM-Script für virtuelle Wetterstation
Hallo Zusammen,
bin blutiger Anfänger mit Skripten, aber mit der Anleitung lief alles auf Anhieb. Trotzdem passen leider die Min und Max Temperaturen seit zwei Tagen nicht mehr. Alle 3 Temperaturen sind identisch (Min/Aktuell/MAx), siehe Anhang. Um den Fehler einzugrenzen, wüsste ich gerne, ob das Problem nur bei mir ist. Könnt ihr mir sagen, ob die drei Werte bei euch auch identisch sind?
Worauf bezieht sichteigentlich min/max? Auf die erwarteten Tageshöchstwerte oder die gemessenen für diesen Tag?
Danke und Grüße
Dominik
bin blutiger Anfänger mit Skripten, aber mit der Anleitung lief alles auf Anhieb. Trotzdem passen leider die Min und Max Temperaturen seit zwei Tagen nicht mehr. Alle 3 Temperaturen sind identisch (Min/Aktuell/MAx), siehe Anhang. Um den Fehler einzugrenzen, wüsste ich gerne, ob das Problem nur bei mir ist. Könnt ihr mir sagen, ob die drei Werte bei euch auch identisch sind?
Worauf bezieht sichteigentlich min/max? Auf die erwarteten Tageshöchstwerte oder die gemessenen für diesen Tag?
Danke und Grüße
Dominik
-
- Beiträge: 10752
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 672 Mal
Re: HM-Script für virtuelle Wetterstation
Wäre ja kurios. Ich benutze zwar nicht dieses Script, habe aber andere mit OpenWeather
Entweder es werden keine unterschiedlichen Werte geliefert wie hier
Code: Alles auswählen
<city id="3513090" name="Willemstad">
<coord lon="-68.93" lat="12.11"/>
<country>CW</country>
<timezone>-14400</timezone>
<sun rise="2020-03-27T10:34:57" set="2020-03-27T22:46:40"/>
</city>
<temperature value="31" min="31" max="31" unit="celsius"/>
<feels_like value="30.69" unit="celsius"/>
<humidity value="52" unit="%"/>
<pressure value="1011" unit="hPa"/>
<wind>
<speed value="5.7" unit="m/s" name="Moderate breeze"/>
<gusts/>
<direction value="90" code="E" name="East"/>
</wind>
<clouds value="20" name="few clouds"/>
<visibility value="10000"/>
<precipitation mode="no"/>
<weather number="801" value="few clouds" icon="02d"/>
<lastupdate value="2020-03-27T18:50:11"/>
</current>
.extraClassAs
Also einfach mal eine Nachbarstadt wählen.
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
Re: HM-Script für virtuelle Wetterstation
ich habe das Script mal bei mir eingebunden da ich Wetterdaten für meine Bewässerung benötige.
Wie schaut es aus mit Regen oder wann es das letzte mal geregnet hat?
Kann man diese Daten auch von openweather abrufen ?
Wie schaut es aus mit Regen oder wann es das letzte mal geregnet hat?
Kann man diese Daten auch von openweather abrufen ?
-
- Beiträge: 10752
- Registriert: 24.02.2011, 01:34
- System: CCU
- Hat sich bedankt: 65 Mal
- Danksagung erhalten: 672 Mal
Re: HM-Script für virtuelle Wetterstation
Mal bei Openweather nachgeschaut?
Oberhalb deines Post ist eine typische Rückgabe ohne Regen. Mag sein weil es hier nicht regnet.
Dann gibt es noch den forecast, ich dächte aber auch ohne Regen.
Irgendwo dächte ich auch die Niederschlagsmenge mal gesehen zu haben, aber wenn ich mich Recht erinnere bei einem anderen Anbieter.
Alchy
Oberhalb deines Post ist eine typische Rückgabe ohne Regen. Mag sein weil es hier nicht regnet.
Dann gibt es noch den forecast, ich dächte aber auch ohne Regen.
Irgendwo dächte ich auch die Niederschlagsmenge mal gesehen zu haben, aber wenn ich mich Recht erinnere bei einem anderen Anbieter.
Alchy
Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.
© Sandra Pulsfort (*1974)
Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.
Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.
-
- Beiträge: 80
- Registriert: 19.01.2017, 08:16
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Hallo Leute,
ich habe leider doch noch ein Problem mit meinem befüllen der Wetterbedingungen.
Die Variable bleibt einfach leer.
Mein Code sieht wie folgt aus:
Vielleicht sieht jemand ja meinen Fehler ???
Wobei ich sagen muss, dass beim Aufruf der URL.. die Wetterbedingungen in DEUTSCH angezeigt werden.. dann kann die Übersetzung ja nicht funktionieren .. würde ich sagen..
Vielleicht lässt sich der Code ja so anpassen, dass er die Übersetzung einfach weg lässt.. und den Text direkt in die Variable schreibt...
Leider bin ich nicht so gut im scripting...
Vielleicht könnte ja jemand helfen...
Wäre für jede Hilfe Dankbar.
Alles Gute an Alle und bleibt gesund..
MfG
HA_Beginner
ich habe leider doch noch ein Problem mit meinem befüllen der Wetterbedingungen.
Die Variable bleibt einfach leer.
Mein Code sieht wie folgt aus:
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.
!Erstellung eines eigenen Keys unter http://openweathermap.org/appid
string owAppid='1da09ad38322405ba29a3f2404cf8d47';
!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='2941062';
!Optional: Im Folgenden die Namen der Systemvariablen ändern/vorgeben.
!Die abgerufenen Wetterdaten werden in mehreren Systemvariablen gespeichert und angezeigt (sie müssen vorab keine Variablen anlegen. Dies erledigt diese Script gegebenenfalls automatisch).
!Im Folgenden können Sie die Namen der Systemvariablen (so, wie Sie Ihnen in Ihrer Homematic später unter "Status und Bedienung" > "Systemvariable" angezeigt
!werden, ändern. Möchten Sie, dass ein bestimmter Messwert nicht angezeigt bzw. abgerufen wird, lassen Sie den Namen leer ''.
!Beispiele
!string svLuftdruck='ow Luftdruck'; Die Systemvariable für den Luftdruck soll "ow Lufdruck" heißen
!string svLuftdruck='Luftdr.'; Die Systemvariable für den Luftdruck soll "Luftdr." heißen
!string svLuftdruck=''; Es soll überhaupt kein Luftdruck angezeigt bzw. abgerufen werden
!string svLuftdruck=false; Es soll überhaupt kein Luftdruck angezeigt bzw. abgerufen werden
string svAktualisierung='ow Letzte Aktualisierung';
string svTemperatur='ow Temperatur';
string svMinimalTemperatur='ow Temperatur (min.)';
string svMaximalTemperatur='ow Temperatur (max.)';
string svLuftfeuchtigkeit='ow Luftfeuchte (rel.)';
string svLuftdruck='ow Luftdruck';
string svWindGeschwindigkeit='ow Windgeschwindigkeit';
string svWindRichtung='ow Windrichtung';
string svWetterstation='ow Wetterstation';
string svSonnenaufgang='ow Sonnenaufgang';
string svSonnenuntergang='ow Sonnenuntergang';
string svWetter='ow Wetter';
!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=false;
!Optionale Experteneinstellungen: OpenWeather-Daten bzw. Systemvariblen per CUxD Logit aufzeichnen
!Falls der CUX-Daemon installiert ist, werden die Messdaten der o.g. Systemvariablen dieses Scripts standardmäßig zusätzlich per CUxD LOGIT aufgezeichnet
!Falls Sie keine Aufzeichnng der Messdaten wünschen, ändern Sie diese Variable auf false (string cuxCMDName=false;)
boolean useLOGIT=false;
!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=false;
!************************************************************
!************************************************************
!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;
string xmlStartTagName_Wetter;string xmlEndTagName_Wetter;
!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;
!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';
} 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 = '>';
}
!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);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
svObject = dom.GetObject(svAktualisierung);
!Wenn noch keine Systemvarible vorhanden, diese anlegen
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svAktualisierung);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Aktualisierung');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString2);
}
!Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);}
}
!Schreiben von svSonnenaufgang
if(svSonnenaufgang)
{
genString1='';genTime1=null;genString2='';
genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
svObject = dom.GetObject(svSonnenaufgang);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svSonnenaufgang);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Sonnenaufgang');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);}
}
!Schreiben von svSonnenuntergang
if(svSonnenuntergang)
{
genString1='';genTime1=null;genString2='';
genString1 = owSonnenuntergang.Substr(0,10)#' '#owSonnenuntergang.Substr(11);
integer DST;
if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;}
else {DST = 3600;}
genTime1 = genString1.ToTime()+DST;
genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr");
svObject = dom.GetObject(svSonnenuntergang);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svSonnenuntergang);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Sonnenuntergang');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenuntergang#';'#genTime1);}
}
!Schreiben von svWetterstation
if(svWetterstation)
{
genString1='';genString2='';genString3='';genInteger1=0;genInteger2=0;
genInteger1=owWetterstation.Length();
foreach(genInteger2,genInteger1)
{
genString1=owWetterstation.Substr(genInteger2-1,1);
if(genString1=='Ã')
{
genString2=owWetterstation.Substr(genInteger2,1);
if(genString2=='¼'){genString1='ü';genInteger2=genInteger2+1;}
if(genString2=='¶'){genString1='ö';genInteger2=genInteger2+1;}
if(genString2=='¤'){genString1='ä';genInteger2=genInteger2+1;}
}
genString3=genString3#genString1;
}
svObject = dom.GetObject(svWetterstation);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWetterstation);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Wetterstation');
svObject.ValueUnit('');
svObject.State(genString3);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString3);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetterstation#';'#genString3);}
}
!Schreiben von svWindgeschwindigkeit
if(svWindGeschwindigkeit)
{
svObject = dom.GetObject(svWindGeschwindigkeit);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindGeschwindigkeit);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Windgeschwindigkeit");
svObject.ValueUnit("km/h");
svObject.ValueMin(0.0000);
svObject.ValueMax(500.0000);
svObject.State(owWindGeschwindigkeit);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owWindGeschwindigkeit);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindGeschwindigkeit#';'#owWindGeschwindigkeit);}
}
!Schreiben von svLuftdruck
if(svLuftdruck)
{
svObject = dom.GetObject(svLuftdruck);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svLuftdruck);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Luftdruck");
svObject.ValueUnit("hPa");
svObject.ValueMin(500.0000);
svObject.ValueMax(1100.0000);
svObject.State(owLuftdruck);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owLuftdruck);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftdruck#';'#owLuftdruck);}
}
!Schreiben von svTemperatur
if(svTemperatur)
{
svObject = dom.GetObject(svTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svTemperatur#';'#owTemperatur);}
if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_TEMPERATURE').State(owTemperatur);}
}
!Schreiben von svMinimalTemperatur
if(svMinimalTemperatur)
{
svObject = dom.GetObject(svMinimalTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svMinimalTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur (min.)");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owMinimalTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owMinimalTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMinimalTemperatur#';'#owMinimalTemperatur);}
}
!Schreiben von svMaximalTemperatur
if(svMaximalTemperatur)
{
svObject = dom.GetObject(svMaximalTemperatur);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svMaximalTemperatur);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Temperatur (max.)");
svObject.ValueUnit("°C");
svObject.ValueMin(-50.0000);
svObject.ValueMax(50.0000);
svObject.State(owMaximalTemperatur);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owMaximalTemperatur);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMaximalTemperatur#';'#owMaximalTemperatur);}
}
!Schreiben von svLuffeuchtigkeit
if(svLuftfeuchtigkeit)
{
svObject = dom.GetObject(svLuftfeuchtigkeit);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svLuftfeuchtigkeit);
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.DPInfo("OpenWeatherMap - Luftfeuchtigkeit");
svObject.ValueUnit("%");
svObject.ValueMin(0.0000);
svObject.ValueMax(100.0000);
svObject.State(owLuftfeuchtigkeit);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(owLuftfeuchtigkeit);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftfeuchtigkeit#';'#owLuftfeuchtigkeit);}
if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_HUMIDITY').State(owLuftfeuchtigkeit);}
}
!Schreiben von svWindrichtung
if(svWindRichtung)
{
!Englische Windrichtungsangaben übersetzen (z.B. N-W-E in Nord-West-Ost)
genString1='';genString2='';genString3='';genInteger1=0;
genString1 = owWindRichtung;
foreach(genInteger1,genString1.Length())
{
genString2=genString1.Substr(genInteger1-1,1);
if(genString2=='E'){genString3=genString3#'Ost-';}
if(genString2=='S'){genString3=genString3#'Süd-';}
if(genString2=='W'){genString3=genString3#'West-';}
if(genString2=='N'){genString3=genString3#'Nord-';}
}
genString1=genString3.Substr(0,genString3.Length()-1);
genString2=owGradzahl.ToString()#'° '#genString1;
svObject = dom.GetObject(svWindRichtung);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWindRichtung);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo('OpenWeatherMap - Windrichtung');
svObject.ValueUnit('');
svObject.State(genString2);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else {
svObject.State(genString2);
}
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtung#';'#genString2);}
}
!Schreiben von svWetter
if(svWetter)
{
genString1='';genString2='';genString3='';genInteger1=0;
genString1 = owWetter;
genString2=genString1;
if(genString2=='thunderstorm with light rain'){genString3=genString3#'Gewitter mit leichtem Regen';}
if(genString2=='thunderstorm with rain'){genString3=genString3#'Gewittersturm mit Regen';}
if(genString2=='thunderstorm with heavy rain'){genString3=genString3#'Gewitter mit heftigem Regen';}
if(genString2=='light thunderstorm'){genString3=genString3#'leichtes Gewitter';}
if(genString2=='thunderstorm'){genString3=genString3#'Gewitter';}
if(genString2=='heavy thunderstorm'){genString3=genString3#'heftiges Gewitter';}
if(genString2=='ragged thunderstorm'){genString3=genString3#'heftiges Gewitter';}
if(genString2=='thunderstorm with light drizzle'){genString3=genString3#'Gewitter mit leichtem Nieselregen';}
if(genString2=='thunderstorm with drizzle'){genString3=genString3#'Gewitter mit Nieselregen';}
if(genString2=='thunderstorm with heavy drizzle'){genString3=genString3#'Gewitter mit starkem Nieselregen';}
if(genString2=='light intensity drizzle'){genString3=genString3#'leichter Nieselregen';}
if(genString2=='drizzle'){genString3=genString3#'Nieselregen';}
if(genString2=='heavy intensity drizzle'){genString3=genString3#'starker Nieselregen';}
if(genString2=='light intensity drizzle rain'){genString3=genString3#'leichter Nieselregen';}
if(genString2=='drizzle rain'){genString3=genString3#'Nieselregen';}
if(genString2=='heavy intensity drizzle rain'){genString3=genString3#'starker Nieselregen';}
if(genString2=='shower rain and drizzle'){genString3=genString3#'Regenschauer und Nieselregen';}
if(genString2=='heavy shower rain and drizzle'){genString3=genString3#'starker Regenschauer und Nieselregen';}
if(genString2=='shower drizzle'){genString3=genString3#'Regenschauer';}
if(genString2=='light rain'){genString3=genString3#'leichter Regen';}
if(genString2=='moderate rain'){genString3=genString3#'mäßiger Regen';}
if(genString2=='heavy intensity rain'){genString3=genString3#'starker Regen';}
if(genString2=='very heavy rain'){genString3=genString3#'sehr starker Regen';}
if(genString2=='extreme rain'){genString3=genString3#'Extremniederschläge';}
if(genString2=='freezing rain'){genString3=genString3#'Eisregen';}
if(genString2=='light intensity shower rain'){genString3=genString3#'leichter Regenschauer';}
if(genString2=='shower rain'){genString3=genString3#'Regenschauer';}
if(genString2=='heavy intensity shower rain'){genString3=genString3#'starker Regenschauer';}
if(genString2=='ragged shower rain'){genString3=genString3#'strömender Regen';}
if(genString2=='light snow'){genString3=genString3#'leichter Schnee';}
if(genString2=='snow'){genString3=genString3#'Schnee';}
if(genString2=='heavy snow'){genString3=genString3#'heftiger Schneefall';}
if(genString2=='sleet'){genString3=genString3#'Graupel';}
if(genString2=='shower sleet'){genString3=genString3#'Schauer';}
if(genString2=='light rain and snow'){genString3=genString3#'leichter Regen und Schnee';}
if(genString2=='rain and snow'){genString3=genString3#'Schneeregen';}
if(genString2=='light shower snow'){genString3=genString3#'leichter Schneeschauer';}
if(genString2=='shower snow'){genString3=genString3#'Schneeschauer';}
if(genString2=='heavy shower snow'){genString3=genString3#'starker Schneeschauer';}
if(genString2=='mist'){genString3=genString3#'Nebel';}
if(genString2=='smoke'){genString3=genString3#'Rauch';}
if(genString2=='haze'){genString3=genString3#'Dunst';}
if(genString2=='sand, dust whirls'){genString3=genString3#'Sand, Staubwirbel';}
if(genString2=='fog'){genString3=genString3#'Nebel';}
if(genString2=='sand'){genString3=genString3#'Sand';}
if(genString2=='dust'){genString3=genString3#'Staub';}
if(genString2=='volcanic ash'){genString3=genString3#'Vulkanasche';}
if(genString2=='squalls'){genString3=genString3#'Sturmböen';}
if(genString2=='tornado'){genString3=genString3#'Tornado';}
if(genString2=='clear sky'){genString3=genString3#'klarer Himmel';}
if(genString2=='few clouds'){genString3=genString3#'vereinzelte Wolken';}
if(genString2=='scattered clouds'){genString3=genString3#'aufgelockerte Bewölkung';}
if(genString2=='broken clouds'){genString3=genString3#'durchbrochene Bewölkung';}
if(genString2=='overcast clouds'){genString3=genString3#'bedeckt';}
genString1=genString3.Substr(0,genString3.Length());
genString2=genString1;
svObject = dom.GetObject(svWetter);
if (!svObject){
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(svWetter);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo("OpenWeatherMap - Wetter");
svObject.ValueUnit('');
svObject.State(owWetter);
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(true);
} else { }
if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetter#';'#genString2);}
}
Wobei ich sagen muss, dass beim Aufruf der URL.. die Wetterbedingungen in DEUTSCH angezeigt werden.. dann kann die Übersetzung ja nicht funktionieren .. würde ich sagen..
Vielleicht lässt sich der Code ja so anpassen, dass er die Übersetzung einfach weg lässt.. und den Text direkt in die Variable schreibt...
Leider bin ich nicht so gut im scripting...
Vielleicht könnte ja jemand helfen...
Wäre für jede Hilfe Dankbar.
Alles Gute an Alle und bleibt gesund..
MfG
HA_Beginner
Re: HM-Script für virtuelle Wetterstation
Danke für die Rückmeldung. Keine Ahnung warum, aber es geht wieder. Da ich am Script nichts weiter rumprobiert habe, muss es ein Problem mit OpenWeather gewesen sein.
-
- Beiträge: 80
- Registriert: 19.01.2017, 08:16
- Danksagung erhalten: 1 Mal
Re: HM-Script für virtuelle Wetterstation
Hallo Leute,
nur kurz... hat mir ja keine Ruhe gelassen...
Habe meinen Fehler wieso es nicht funktionierte... jetzt selber gefunden....
Es fehlte in meine Code der passende Parser...
Jetzt funktioniert es wie gewünscht...
Euch allen noch einen schönen Sonntag....
MfG
HA_Beginner
nur kurz... hat mir ja keine Ruhe gelassen...
Habe meinen Fehler wieso es nicht funktionierte... jetzt selber gefunden....
Es fehlte in meine Code der passende Parser...
Code: Alles auswählen
!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();
}
}
}
}
Euch allen noch einen schönen Sonntag....
MfG
HA_Beginner
Re: HM-Script für virtuelle Wetterstation
Hallo,
Vielen Dank für das tolle Script zur Erfassung der Wetterdaten für die Homematic. Ich habe alles nach Anleitung erledigt, es hat auf Anhieb geklappt.
Seit kurzer Zeit (eventuell Zeitumstellung) erhalte ich aber immer die Daten mit einem um 2 Stunden verzögerten Zeitstempel. Ich rufe z.B die Daten um 14:10 Uhr ab. Die Variablenänderung zieht 14:10 Uhr, der Variableninhalt zeigt Stand 12:10 Uhr.
Ich bin da etwas ratlos. Ruft das Script einen falschen Stand ab, gibt es keine frischen Daten mehr... Keine Ahnung was ich tun soll, schließlich hat es ja mal geklappt.
Für einen Tip wäre ich dankbar.
Grüße
Vielen Dank für das tolle Script zur Erfassung der Wetterdaten für die Homematic. Ich habe alles nach Anleitung erledigt, es hat auf Anhieb geklappt.
Seit kurzer Zeit (eventuell Zeitumstellung) erhalte ich aber immer die Daten mit einem um 2 Stunden verzögerten Zeitstempel. Ich rufe z.B die Daten um 14:10 Uhr ab. Die Variablenänderung zieht 14:10 Uhr, der Variableninhalt zeigt Stand 12:10 Uhr.
Ich bin da etwas ratlos. Ruft das Script einen falschen Stand ab, gibt es keine frischen Daten mehr... Keine Ahnung was ich tun soll, schließlich hat es ja mal geklappt.
Für einen Tip wäre ich dankbar.
Grüße
Re: HM-Script für virtuelle Wetterstation
Hallo,
auch von mir vielen Dank für das Script!
Ich habe den neuesten Stand des Skripts eingebunden, jedoch werden mir leider die folgenden Variablen / Werte nicht angezeigt:
string svNiederschlag='OpenWeather Niederschlag';
string svNiederschlagsart='OpenWeather Niederschlagsart';
string svWolken='OpenWeather Bewölkung';
Kann mir hierbei jmd. weiterhelfen bzw. am Besten nochmal ein vollständiges Script veröffentlichen, das diese Variablen beinhaltet?
Danke euch vorab!
auch von mir vielen Dank für das Script!
Ich habe den neuesten Stand des Skripts eingebunden, jedoch werden mir leider die folgenden Variablen / Werte nicht angezeigt:
string svNiederschlag='OpenWeather Niederschlag';
string svNiederschlagsart='OpenWeather Niederschlagsart';
string svWolken='OpenWeather Bewölkung';
Kann mir hierbei jmd. weiterhelfen bzw. am Besten nochmal ein vollständiges Script veröffentlichen, das diese Variablen beinhaltet?
Danke euch vorab!