HM-Script für virtuelle Wetterstation
Moderator: Co-Administratoren
-
- Beiträge: 9748
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 705 Mal
- Danksagung erhalten: 1645 Mal
Re: HM-Script für virtuelle Wetterstation
Also ein CUxD Universal Wrapper Device (90). Damit kann man auch keine Befehle senden.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 14224
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 593 Mal
- Danksagung erhalten: 1512 Mal
Re: HM-Script für virtuelle Wetterstation
Das ist kein Exec-Gerät. Das muss zwangsweise ein 2801xxx-er Gerät sein.
Gruß Xel66
Gruß Xel66
Zuletzt geändert von uwe111 am 09.06.2021, 11:21, insgesamt 1-mal geändert.
Grund: CUxD Seriennummer korrigiert.
Grund: CUxD Seriennummer korrigiert.
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
- Baxxy
- Beiträge: 10950
- Registriert: 18.12.2018, 15:45
- System: Alternative CCU (auf Basis OCCU)
- Hat sich bedankt: 618 Mal
- Danksagung erhalten: 2257 Mal
Re: HM-Script für virtuelle Wetterstation
Falsches CUxD-Gerät. Das ist ein (90) Universal Wrapper Device - Funktion: Thermostat
Damit geht das nicht.
Edit: MichaelN und Xel66 waren flotter...
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
Re: HM-Script für virtuelle Wetterstation
klappt euer script noch?
bei mir wird gerade mal nur das Datum, der Ort u. Luftdruck aktualisiert.
bei mir wird gerade mal nur das Datum, der Ort u. Luftdruck aktualisiert.
-
- Beiträge: 9748
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 705 Mal
- Danksagung erhalten: 1645 Mal
Re: HM-Script für virtuelle Wetterstation
Und was kommt an Daten wenn du die URL im Browser aufrufst?
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
Re: HM-Script für virtuelle Wetterstation
wo im script finde ich die?
string owUrl='http://api.openweathermap.org/data/2.5/ ... its=metric';
?
string owUrl='http://api.openweathermap.org/data/2.5/ ... its=metric';
?
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
Re: HM-Script für virtuelle Wetterstation
Code: Alles auswählen
current>
<city id="7871541" name="Schützen am Gebirge">
<coord lon="16.6258" lat="47.8523"/>
<country>AT</country>
<timezone>7200</timezone>
<sun rise="2021-06-19T02:54:15" set="2021-06-19T18:55:27"/>
</city>
<temperature value="31.15" min="29.18" max="33.62" unit="celsius"/>
<feels_like value="31.42" unit="celsius"/>
<humidity value="42" unit="%"/>
<pressure value="1014" unit="hPa"/>
<wind>
<speed value="1.6" unit="m/s" name="Light breeze"/>
<gusts value="2.17"/>
<direction value="83" code="E" name="East"/>
</wind>
<clouds value="0" name="clear sky"/>
<visibility value="10000"/>
<precipitation mode="no"/>
<weather number="800" value="clear sky" icon="01d"/>
<lastupdate value="2021-06-19T10:34:55"/>
</current>
-
- Beiträge: 9748
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 705 Mal
- Danksagung erhalten: 1645 Mal
Re: HM-Script für virtuelle Wetterstation
Da steht doch alles drin. Dann sollte es auch funktionieren.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
-
- Beiträge: 66
- Registriert: 06.06.2021, 12:23
- System: sonstige
Re: HM-Script für virtuelle Wetterstation
bei mir jetzt auch! danke !!mbhomie007 hat geschrieben: ↑06.05.2020, 10:57Jetzt läuft das Skript fehlerfrei!
Danke Alchy
Code: Alles auswählen
!OpenWeather-CCU-Script, edited by regedit V1.2, 2019-08-31 !Verwendetes Original: DimMyPrp V1, 2017-02-15, edited by Schalterrei, 2018-07-25 !Edited by Alchy 05-05-2020 !Hier EIGENE OpenWeatherAppID eintragen string owAppid='XXXXXXXXXXXXXXXXXXXXXXXXX'; !Optionale Experteneinstellungen: Angabe der Stadt (über https://openweathermap.org/city/) anstatt Geocoords (=false) string owCityid=false; !Optionale Experteneinstellungen: wget-Command per CUxD oder system.Exec (cuxCMDName='CUxD.<Seriennummer>:1'/false) sowie CUxD logging (true/false) string cuxCMDName=false; boolean useLOGIT=false; !Optionale Experteneinstellungen: OpenWeather-Daten in CUxD Thermostat-Device schreiben (cuxWDSName='CUxD.<Seriennummer>:1'/false) !Achtung: Gerät=("Universal Wrapper Device" (90) als "Thermostat" / Option "WEATHER|USE_HMDATAPT" muss auf false) string cuxWDSName=false; !Systemvariablenbenennung string svAktualisierung='OpenWeatherMap Letzte Aktualisierung'; string svTemperatur='OpenWeatherMap Temperatur'; string svMinimalTemperatur='OpenWeatherMap Temperatur (min.)'; string svMaximalTemperatur='OpenWeatherMap Temperatur (max.)'; string svLuftfeuchtigkeit='OpenWeatherMap Luftfeuchte (rel.)'; string svLuftdruck='OpenWeatherMap Luftdruck'; string svWindGeschwindigkeit='OpenWeatherMap Windgeschwindigkeit'; string svWindRichtung='OpenWeatherMap Windrichtung'; string svWindRichtungInt='OpenWeatherMap WindrichtungInt'; string svWetterstation='OpenWeatherMap Wetterstation'; string svSonnenaufgang='OpenWeatherMap Sonnenaufgang'; string svSonnenuntergang='OpenWeatherMap Sonnenuntergang'; string svWetter='OpenWeatherMap Wetter'; string svNiederschlag='OpenWeatherMap Niederschlag'; string svNiederschlagsart='OpenWeatherMap Niederschlagsart'; string svWolken='OpenWeatherMap Bewölkung'; !************************************************************ !************************************************************ !BEGIN DES SCRIPTS !************************************************************ !************************************************************ !Variablendeklaration !*********************** !OpenWeather-Url mit Defaultwerte string owLocation='&id=INSERT'; string owUrl='http://api.openweathermap.org/data/2.5/weather?mode=xml&units=metric'; !CUxD/Exec und Rückgabe-Variablen (Programmablauf) mit Defaultwerte boolean cuxCMD=false; boolean cuxWDS=false;string recXML; !XML-Parser (Tagnamen) string xmlStartTagName_Aktualisierung;string xmlEndTagName_Aktualisierung; string xmlStartTagName_Temperatur;string xmlEndTagName_Temperatur; string xmlStartTagName_Luftfeuchtigkeit;string xmlEndTagName_Luftfeuchtigkeit; string xmlStartTagName_Luftdruck;string xmlEndTagName_Luftdruck; string xmlStartTagName_Wind;string xmlEndTagName_Wind; string xmlStartTagName_Geschwindigkeit;string xmlEndTagName_Geschwindigkeit; string xmlStartTagName_Windrichtung;string xmlEndTagName_Windrichtung; string xmlStartTagName_Stadt;string xmlEndTagName_Stadt; string xmlStartTagName_Sonnenzeit;string xmlEndTagName_Sonnenzeit; string xmlStartTagName_Wetter;string xmlEndTagName_Wetter; string xmlStartTagName_Niederschlag;string xmlEndTagName_Niederschlag; string xmlStartTagName_Wolken;string xmlEndTagName_Wolken; !XML-Parser (Programmablauf) integer xmlStartTagLenght; integer xmlTagStart;integer xmlTagLength; integer xmlAttributeStart;integer xmlAttributeLength; string xmlTagContent; string xmlAttributeValue; !Zurückgemeldete und aus der XML extrahierte Werte von OpenWeather real owTemperatur;real owMinimalTemperatur;real owMaximalTemperatur; real owLuftfeuchtigkeit; real owLuftdruck; real owWindGeschwindigkeit;real owGradzahl;string owWindRichtung; string owWetterstation; string owAktualisierung; string owSonnenaufgang;string owSonnenuntergang; string owWetter; real owNiederschlag;string owNiederschlagsart; integer owWolken; !Objekte für Systemvariablen (Programmablauf) object svObject; object svObjectlist; !Objekte für Devices (Programmablauf) string dvObjectID; object dvObject; object dvObjectlist; !Generische Variablen (Mehrfachverwendung) string genString1;string genString2;string genString3; time genTime1; integer genInteger1;integer genInteger2; real genReal1; !Url zum Abruf des XML-Strings zusammen sezten !**************************************************** if(owCityid){ owLocation='&id='#owCityid; } else { if(system.Longitude()&&system.Latitude()) { owLocation='&lat='#system.Latitude()#'&lon='#system.Longitude(); } } owUrl = owUrl#'&APPID='#owAppid#owLocation; !Prüfen, ob CUX-Daemon Devices vorhanden sind !*************************************************** if(dom.GetObject(cuxCMDName#'.CMD_SETS')){cuxCMD = true;} if(dom.GetObject(cuxWDSName#'.SET_TEMPERATURE')){cuxWDS=true;} !wget ausführen !***************** if(cuxCMD) { !Website via CUxD und wget aufrufen. dom.GetObject(cuxCMDName#'.CMD_SETS').State("wget -q -O - '"#owUrl#"'"); dom.GetObject(cuxCMDName#'.CMD_QUERY_RET').State(1); recXML = dom.GetObject(cuxCMDName#'.CMD_RETS').State(); } else { !Fallback: Website via system.Exec und wget aufrufen system.Exec("wget -q -O - '"#owUrl#"'", &recXML, &genString1); } !Pruefen, ob XML-String geholt wurde, ansonsten abbrechen !**************************************************************** if(!recXML){quit;} !Tag-Namen-Suche im geholten XML-String vorbereiten !********************************************************* !Je nachdem, ob die Daten via CUxD oder Exex bezogen wurden, haben die XML-Tags ein anderes Format. !Exex liefert einen XML-String mit eckigen Klammern nach dem Schema <tag></tag> oder <tag/> !CUxD enternt eckige Klammern und liefert eine String nach dem Schema "tag /tag" if(cuxCMD) { !Suchstrings für XML-Tags von CUxD festlegen xmlStartTagName_Aktualisierung = 'lastupdate '; xmlEndTagName_Aktualisierung = ' /lastupdate'; xmlStartTagName_Temperatur = 'temperature '; xmlEndTagName_Temperatur = ' /temperature'; xmlStartTagName_Luftfeuchtigkeit = 'humidity '; xmlEndTagName_Luftfeuchtigkeit = ' /humidity'; xmlStartTagName_Luftdruck = 'pressure '; xmlEndTagName_Luftdruck = ' /pressure'; xmlStartTagName_Wind = 'wind '; xmlEndTagName_Wind = ' /wind'; xmlStartTagName_Geschwindigkeit = 'speed '; xmlEndTagName_Geschwindigkeit = ' /speed'; xmlStartTagName_Windrichtung = 'direction '; xmlEndTagName_Windrichtung = ' /direction'; xmlStartTagName_Stadt = 'city '; xmlEndTagName_Stadt = ' /city'; xmlStartTagName_Sonnenzeit = 'sun '; xmlEndTagName_Sonnenzeit = ' /sun'; xmlStartTagName_Wetter = 'weather '; xmlEndTagName_Wetter = ' /weather'; xmlStartTagName_Niederschlag = 'precipitation '; xmlEndTagName_Niederschlag = ' /precipitation'; xmlStartTagName_Wolken = 'clouds '; xmlEndTagName_Wolken = ' /clouds'; } else { !Suchstrings für XML-Tags von Exec festlegen xmlStartTagName_Aktualisierung = '<lastupdate '; xmlEndTagName_Aktualisierung = '>'; xmlStartTagName_Temperatur = '<temperature '; xmlEndTagName_Temperatur = '>'; xmlStartTagName_Luftfeuchtigkeit = '<humidity '; xmlEndTagName_Luftfeuchtigkeit = '>'; xmlStartTagName_Luftdruck = '<pressure '; xmlEndTagName_Luftdruck = '>'; xmlStartTagName_Wind = '<wind>'; xmlEndTagName_Wind = '</wind>'; xmlStartTagName_Geschwindigkeit = '<speed '; xmlEndTagName_Geschwindigkeit = '>'; xmlStartTagName_Windrichtung = '<direction '; xmlEndTagName_Windrichtung = '>'; xmlStartTagName_Stadt = '<city '; xmlEndTagName_Stadt = '</city>'; xmlStartTagName_Sonnenzeit = '<sun '; xmlEndTagName_Sonnenzeit = '>'; xmlStartTagName_Wetter = '<weather '; xmlEndTagName_Wetter = '>'; xmlStartTagName_Niederschlag = '<precipitation '; xmlEndTagName_Niederschlag = '>'; xmlStartTagName_Wolken = '<clouds '; xmlEndTagName_Wolken = '>'; } !Geholten XML-String parsen !****************************** !Parser für svAktualisierung if(svAktualisierung) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Aktualisierung.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Aktualisierung); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Aktualisierung); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Datenabruf-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owAktualisierung = xmlAttributeValue.ToString(); } } } } !Parser für svTemperatur, svMinimalTemperatur, svMaximalTemperatur if(svTemperatur) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Temperatur.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Temperatur); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Temperatur); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Temperatur-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owTemperatur = xmlAttributeValue.ToFloat(); } !MinimalTemperatur-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('min="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owMinimalTemperatur = xmlAttributeValue.ToFloat(); } !MaximalTemperatur-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('max="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owMaximalTemperatur = xmlAttributeValue.ToFloat(); } } } } !Parser für svLuftfeuchtigkeit if(svLuftfeuchtigkeit) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Luftfeuchtigkeit.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Luftfeuchtigkeit); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftfeuchtigkeit); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Luftfeuchtigkeits-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owLuftfeuchtigkeit = xmlAttributeValue.ToFloat(); } } } } !Parser für svLuftdruck if(svLuftdruck) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Luftdruck.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Luftdruck); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Luftdruck); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Luftdruck-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owLuftdruck = xmlAttributeValue.ToFloat(); } } } } !Parser für owWindGeschwindigkeit if(svWindGeschwindigkeit) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Wind.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Wind); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Sub-Parser Geschwindigkeit xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0; xmlStartTagLenght = xmlStartTagName_Geschwindigkeit.Length(); xmlTagStart = xmlTagContent.Find(xmlStartTagName_Geschwindigkeit); if (xmlTagStart>=0) { xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Geschwindigkeit); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Geschwindigkeit-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owWindGeschwindigkeit = xmlAttributeValue.ToFloat(); } } } } } } !Parser für owGradzahl, owWindRichtung if((svWindRichtung)||(svWindRichtungInt)) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Wind.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Wind); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wind); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Sub-Parser Windrichtng xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0; xmlStartTagLenght = xmlStartTagName_Windrichtung.Length(); xmlTagStart = xmlTagContent.Find(xmlStartTagName_Windrichtung); if (xmlTagStart>=0) { xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Windrichtung); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Gradzahl-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owGradzahl = xmlAttributeValue.ToInteger(); } !Himmelsrichtung-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('code="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owWindRichtung = xmlAttributeValue.ToString(); } } else { !QuickAndDirty fallback if no data owGradzahl=-1; } } } } } !Parser für owWetterstation if((svWetterstation)||(svSonnenaufgang)||(svSonnenuntergang)) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Stadt.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Stadt); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Stadt); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Stadtname-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('name="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owWetterstation = xmlAttributeValue.ToString(); } !Sub-Parser Sonnezeit xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0; xmlStartTagLenght = xmlStartTagName_Sonnenzeit.Length(); xmlTagStart = xmlTagContent.Find(xmlStartTagName_Sonnenzeit); if (xmlTagStart>=0) { xmlTagContent = xmlTagContent.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Sonnenzeit); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Sonnenaufgang-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('rise="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owSonnenaufgang = xmlAttributeValue.ToString(); } !Sonnenuntergang-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('set="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+5); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owSonnenuntergang = xmlAttributeValue.ToString(); } } } } } } !Parser für svWetter if(svWetter) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Wetter.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Wetter); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wetter); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Luftfeuchtigkeits-Attribut auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owWetter = xmlAttributeValue.ToString(); } } } } !Parser für owNiederschlag, owNiederschlagTyp -new if((svNiederschlag)||(svNiederschlagsart)) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Niederschlag.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Niederschlag); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Niederschlag); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Niederschlagsart auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('mode="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+6); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owNiederschlagsart = xmlAttributeValue.ToString(); } !Niederschlag auslesen if(owNiederschlagsart=='no') { owNiederschlag = 0; } else { xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owNiederschlag = xmlAttributeValue.ToFloat(); } } } } } !Parser für owWolken -new if(svWolken) { xmlStartTagLenght=0;xmlTagStart=0;xmlTagLength=0;xmlTagContent=''; xmlStartTagLenght = xmlStartTagName_Wolken.Length(); xmlTagStart = recXML.Find(xmlStartTagName_Wolken); if (xmlTagStart>=0) { xmlTagContent = recXML.Substr(xmlTagStart+xmlStartTagLenght); xmlTagLength = xmlTagContent.Find(xmlEndTagName_Wolken); if(xmlTagLength>0) { xmlTagContent = xmlTagContent.Substr(0,xmlTagLength); !Wolken auslesen xmlAttributeStart=0;xmlAttributeLength=0;xmlAttributeValue=''; xmlAttributeStart=xmlTagContent.Find('value="'); if (xmlAttributeStart>=0) { xmlAttributeValue = xmlTagContent.Substr(xmlAttributeStart+7); xmlAttributeLength = xmlAttributeValue.Find('"'); xmlAttributeValue = xmlAttributeValue.Substr(0,xmlAttributeLength); owWolken = xmlAttributeValue.ToInteger(); } } } } !Ermittelte Werte in Systemvariable schreiben !************************************************** !Wenn (noch) keine Systemvariable(n) vorhanden, diese anlegen. !Code zum anlegen von Variablen abgeleitet von Esche's IT-Blog https://www.blogging-it.com/code-snippet-homematic-systemvariablen-ueber-ein-script-automatisch-erzeugen/programmierung/homematic-script.html !Schreiben von svAktualisierung if(svAktualisierung) { !String bzw. Uhrzeit umformatieren genString1='';genTime1=null;genString2=''; genString1 = owAktualisierung.Substr(0,10)#' '#owAktualisierung.Substr(11); integer DST; if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;} else {DST = 3600;} genTime1 = genString1.ToTime()+DST; genString2 = genTime1.Format("%d.%m.%Y %H:%M"#" Uhr"); svObject = dom.GetObject(svAktualisierung); !Wenn noch keine Systemvarible vorhanden, diese anlegen if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svAktualisierung); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Aktualisierung'); svObject.ValueUnit(''); svObject.State(genString2); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(genString2); } !Wenn CUxD-CMD-Device vorhanden und useLOGIT, dann Werte via CUxD loggen if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svAktualisierung#';'#genTime1);} } !Schreiben von svSonnenaufgang if(svSonnenaufgang) { genString1='';genTime1=null;genString2=''; genString1 = owSonnenaufgang.Substr(0,10)#' '#owSonnenaufgang.Substr(11); integer DST; if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;} else {DST = 3600;} genTime1 = genString1.ToTime()+DST; genString2 = genTime1.Format("%H:%M"#" Uhr"); svObject = dom.GetObject(svSonnenaufgang); if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svSonnenaufgang); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Sonnenaufgang'); svObject.ValueUnit(''); svObject.State(genString2); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(genString2); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenaufgang#';'#genTime1);} } !Schreiben von svSonnenuntergang if(svSonnenuntergang) { genString1='';genTime1=null;genString2=''; genString1 = owSonnenuntergang.Substr(0,10)#' '#owSonnenuntergang.Substr(11); integer DST; if (system.Date("%F").ToTime().IsDST() ==1) {DST = 7200;} else {DST = 3600;} genTime1 = genString1.ToTime()+DST; genString2 = genTime1.Format("%H:%M"#" Uhr"); svObject = dom.GetObject(svSonnenuntergang); if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svSonnenuntergang); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Sonnenuntergang'); svObject.ValueUnit(''); svObject.State(genString2); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(genString2); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svSonnenuntergang#';'#genTime1);} } !Schreiben von svWetterstation if(svWetterstation) { genString1='';genString2='';genString3='';genInteger1=0;genInteger2=0; genInteger1=owWetterstation.Length(); foreach(genInteger2,genInteger1) { genString1=owWetterstation.Substr(genInteger2-1,1); if(genString1=='Ã') { genString2=owWetterstation.Substr(genInteger2,1); if(genString2=='¼'){genString1='ü';genInteger2=genInteger2+1;} if(genString2=='¶'){genString1='ö';genInteger2=genInteger2+1;} if(genString2=='¤'){genString1='ä';genInteger2=genInteger2+1;} } genString3=genString3#genString1; } svObject = dom.GetObject(svWetterstation); if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWetterstation); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Wetterstation'); svObject.ValueUnit(''); svObject.State(genString3); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(genString3); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetterstation#';'#genString3);} } !Schreiben von svWindgeschwindigkeit if(svWindGeschwindigkeit) { svObject = dom.GetObject(svWindGeschwindigkeit); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWindGeschwindigkeit); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Windgeschwindigkeit"); svObject.ValueUnit("m/s"); svObject.ValueMin(0.0000); svObject.ValueMax(500.0000); svObject.State(owWindGeschwindigkeit); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owWindGeschwindigkeit); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindGeschwindigkeit#';'#owWindGeschwindigkeit);} } !Schreiben von svLuftdruck if(svLuftdruck) { svObject = dom.GetObject(svLuftdruck); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svLuftdruck); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Luftdruck"); svObject.ValueUnit("hPa"); svObject.ValueMin(500.0000); svObject.ValueMax(1100.0000); svObject.State(owLuftdruck); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owLuftdruck); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftdruck#';'#owLuftdruck);} } !Schreiben von svTemperatur if(svTemperatur) { svObject = dom.GetObject(svTemperatur); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svTemperatur); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Temperatur"); svObject.ValueUnit("°C"); svObject.ValueMin(-50.0000); svObject.ValueMax(50.0000); svObject.State(owTemperatur); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owTemperatur); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svTemperatur#';'#owTemperatur);} if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_TEMPERATURE').State(owTemperatur);} } !Schreiben von svMinimalTemperatur if(svMinimalTemperatur) { svObject = dom.GetObject(svMinimalTemperatur); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svMinimalTemperatur); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Temperatur (min.)"); svObject.ValueUnit("°C"); svObject.ValueMin(-50.0000); svObject.ValueMax(50.0000); svObject.State(owMinimalTemperatur); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owMinimalTemperatur); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMinimalTemperatur#';'#owMinimalTemperatur);} } !Schreiben von svMaximalTemperatur if(svMaximalTemperatur) { svObject = dom.GetObject(svMaximalTemperatur); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svMaximalTemperatur); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Temperatur (max.)"); svObject.ValueUnit("°C"); svObject.ValueMin(-50.0000); svObject.ValueMax(50.0000); svObject.State(owMaximalTemperatur); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owMaximalTemperatur); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svMaximalTemperatur#';'#owMaximalTemperatur);} } !Schreiben von svLuffeuchtigkeit if(svLuftfeuchtigkeit) { svObject = dom.GetObject(svLuftfeuchtigkeit); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svLuftfeuchtigkeit); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Luftfeuchtigkeit"); svObject.ValueUnit("%"); svObject.ValueMin(0.0000); svObject.ValueMax(100.0000); svObject.State(owLuftfeuchtigkeit); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owLuftfeuchtigkeit); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svLuftfeuchtigkeit#';'#owLuftfeuchtigkeit);} if(cuxWDS){dom.GetObject(cuxWDSName#'.SET_HUMIDITY').State(owLuftfeuchtigkeit);} } !Schreiben von svWindrichtung if(svWindRichtung) { !Englische Windrichtungsangaben übersetzen (z.B. N-W-E in Nord-West-Ost) genString1='';genString2='';genString3='';genInteger1=0; genString1 = owWindRichtung; foreach(genInteger1,genString1.Length()) { genString2=genString1.Substr(genInteger1-1,1); if(genString2=='E'){genString3=genString3#'Ost-';} if(genString2=='S'){genString3=genString3#'Süd-';} if(genString2=='W'){genString3=genString3#'West-';} if(genString2=='N'){genString3=genString3#'Nord-';} } genString1=genString3.Substr(0,genString3.Length()-1); if (owGradzahl>=0){genString2=owGradzahl.ToString()#'° '#genString1;} svObject = dom.GetObject(svWindRichtung); if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWindRichtung); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo('OpenWeatherMap - Windrichtung'); svObject.ValueUnit(''); svObject.State(genString2); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(genString2); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtung#';'#genString2);} } !Schreiben von svWetter if(svWetter) { genString1='';genString2='';genString3='';genInteger1=0; genString1 = owWetter; genString2=genString1; !WriteLine(genString2); if(genString2=='thunderstorm with light rain'){genString3=genString3#'Gewitter mit leichtem Regen';} if(genString2=='thunderstorm with rain'){genString3=genString3#'Gewittersturm mit Regen';} if(genString2=='thunderstorm with heavy rain'){genString3=genString3#'Gewitter mit heftigem Regen';} if(genString2=='light thunderstorm'){genString3=genString3#'leichtes Gewitter';} if(genString2=='thunderstorm'){genString3=genString3#'Gewitter';} if(genString2=='heavy thunderstorm'){genString3=genString3#'heftiges Gewitter';} if(genString2=='ragged thunderstorm'){genString3=genString3#'heftiges Gewitter';} if(genString2=='thunderstorm with light drizzle'){genString3=genString3#'Gewitter mit leichtem Nieselregen';} if(genString2=='thunderstorm with drizzle'){genString3=genString3#'Gewitter mit Nieselregen';} if(genString2=='thunderstorm with heavy drizzle'){genString3=genString3#'Gewitter mit starkem Nieselregen';} if(genString2=='light intensity drizzle'){genString3=genString3#'leichter Nieselregen';} if(genString2=='drizzle'){genString3=genString3#'Nieselregen';} if(genString2=='heavy intensity drizzle'){genString3=genString3#'starker Nieselregen';} if(genString2=='light intensity drizzle rain'){genString3=genString3#'leichter Nieselregen';} if(genString2=='drizzle rain'){genString3=genString3#'Nieselregen';} if(genString2=='heavy intensity drizzle rain'){genString3=genString3#'starker Nieselregen';} if(genString2=='shower rain and drizzle'){genString3=genString3#'Regenschauer und Nieselregen';} if(genString2=='heavy shower rain and drizzle'){genString3=genString3#'starker Regenschauer und Nieselregen';} if(genString2=='shower drizzle'){genString3=genString3#'Regenschauer';} if(genString2=='light rain'){genString3=genString3#'leichter Regen';} if(genString2=='moderate rain'){genString3=genString3#'mäßiger Regen';} if(genString2=='heavy intensity rain'){genString3=genString3#'starker Regen';} if(genString2=='very heavy rain'){genString3=genString3#'sehr starker Regen';} if(genString2=='extreme rain'){genString3=genString3#'Extremniederschläge';} if(genString2=='freezing rain'){genString3=genString3#'Eisregen';} if(genString2=='light intensity shower rain'){genString3=genString3#'leichter Regenschauer';} if(genString2=='shower rain'){genString3=genString3#'Regenschauer';} if(genString2=='heavy intensity shower rain'){genString3=genString3#'starker Regenschauer';} if(genString2=='ragged shower rain'){genString3=genString3#'strömender Regen';} if(genString2=='light snow'){genString3=genString3#'leichter Schnee';} if(genString2=='snow'){genString3=genString3#'Schnee';} if(genString2=='heavy snow'){genString3=genString3#'heftiger Schneefall';} if(genString2=='sleet'){genString3=genString3#'Graupel';} if(genString2=='shower sleet'){genString3=genString3#'Schauer';} if(genString2=='light rain and snow'){genString3=genString3#'leichter Regen und Schnee';} if(genString2=='rain and snow'){genString3=genString3#'Schneeregen';} if(genString2=='light shower snow'){genString3=genString3#'leichter Schneeschauer';} if(genString2=='shower snow'){genString3=genString3#'Schneeschauer';} if(genString2=='heavy shower snow'){genString3=genString3#'starker Schneeschauer';} if(genString2=='mist'){genString3=genString3#'Nebel';} if(genString2=='smoke'){genString3=genString3#'Rauch';} if(genString2=='haze'){genString3=genString3#'Dunst';} if(genString2=='sand, dust whirls'){genString3=genString3#'Sand, Staubwirbel';} if(genString2=='fog'){genString3=genString3#'Nebel';} if(genString2=='sand'){genString3=genString3#'Sand';} if(genString2=='dust'){genString3=genString3#'Staub';} if(genString2=='volcanic ash'){genString3=genString3#'Vulkanasche';} if(genString2=='squalls'){genString3=genString3#'Sturmböen';} if(genString2=='tornado'){genString3=genString3#'Tornado';} if(genString2=='clear sky'){genString3=genString3#'klarer Himmel';} if(genString2=='few clouds'){genString3=genString3#'vereinzelte Wolken';} if(genString2=='scattered clouds'){genString3=genString3#'aufgelockerte Bewölkung';} if(genString2=='broken clouds'){genString3=genString3#'durchbrochene Bewölkung';} if(genString2=='overcast clouds'){genString3=genString3#'bedeckt';} genString1=genString3.Substr(0,genString3.Length()); genString2=genString1; svObject = dom.GetObject(svWetter); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWetter); svObject.ValueType(ivtString); svObject.ValueSubType(istChar8859); svObject.DPInfo("OpenWeatherMap - Wetter"); svObject.ValueUnit(''); svObject.State(owWetter); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { !if(dom.GetObject("Tageszeit").Value()==0) if ((((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())>((0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger())) || (((0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger())<((0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger()))) { svObject.State(genString2#' '); } else { svObject.State(genString2); } } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWetter#';'#genString2);} } !Schreiben von svNiederschlag if(svNiederschlag) { svObject = dom.GetObject(svNiederschlag); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svNiederschlag); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Niederschlagsmenge"); svObject.ValueUnit("mm/h"); svObject.ValueMin(0.0); svObject.ValueMax(100.0); svObject.State(owNiederschlag); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owNiederschlag); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlag#';'#owNiederschlag);} } !Schreiben von svNiederschlagsart if(svNiederschlagsart) { if (owNiederschlagsart=='rain'){owNiederschlagsart=1;} if (owNiederschlagsart=='snow'){owNiederschlagsart=2;} if (owNiederschlagsart=='no'){owNiederschlagsart=0;} svObject = dom.GetObject(svNiederschlagsart); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svNiederschlagsart); svObject.ValueType(ivtString); svObject.ValueSubType(istEnum); svObject.ValueList("kein Niederschlag;Regen;Schnee"); svObject.DPInfo("OpenWeatherMap - Niederschlagsart"); svObject.ValueUnit(""); svObject.State(owNiederschlagsart); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owNiederschlagsart); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svNiederschlagsart#';'#owNiederschlagsart);} } !Schreiben von svWolken if(svWolken) { svObject = dom.GetObject(svWolken); if (!svObject){ svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWolken); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Bewölkung"); svObject.ValueUnit("%"); svObject.ValueMin(0); svObject.ValueMax(100); svObject.State(owWolken); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); } else { svObject.State(owWolken); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWolken#';'#owWolken);} } !Schreiben von svWindrichtung if((svWindRichtungInt)&&(owGradzahl>=0)) { svObject = dom.GetObject(svWindRichtungInt); if (!svObject) { svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES); svObject = dom.CreateObject(OT_VARDP); svObjectlist.Add(svObject.ID()); svObject.Name(svWindRichtungInt); svObject.ValueType(ivtFloat); svObject.ValueSubType(istGeneric); svObject.DPInfo("OpenWeatherMap - Windrichtung Integer"); svObject.ValueUnit("°"); svObject.ValueMin(0); svObject.ValueMax(360); svObject.State(owGradzahl); svObject.Internal(false); svObject.Visible(true); dom.RTUpdate(0); WriteLine("Variable erzeugen und schreiben"#owGradzahl #"in: " #svObject.Name()); } else { svObject.State(owGradzahl); WriteLine("Variable nicht erzeugen nur schreiben"#owGradzahl #"in: " #svObject.Name()); } if((cuxCMD)&&(useLOGIT)){dom.GetObject(cuxCMDName#'.LOGIT').State(svWindRichtungInt#';'#owGradzahl);} } WriteLine("Script ganz durch");
-
- Beiträge: 9748
- Registriert: 27.04.2020, 10:34
- System: CCU
- Hat sich bedankt: 705 Mal
- Danksagung erhalten: 1645 Mal
Re: HM-Script für virtuelle Wetterstation
Daraus schließe ich das das Skript bei dir noch nie funktioniert hat.
Naja, ich will ja eigentlich nichts sagen, aber mit meinem Skript aus der Signatur hättest du keinen Ärger mit fehlerhaften Code. Müsstest nur ggf bei der erst Einrichtung etwas mehr mitarbeiten.
Naja, ich will ja eigentlich nichts sagen, aber mit meinem Skript aus der Signatur hättest du keinen Ärger mit fehlerhaften Code. Müsstest nur ggf bei der erst Einrichtung etwas mehr mitarbeiten.
LG, Michael.
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++
Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.
Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++