OpenWeather Systemvariable nicht gefunden...

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Antworten
Wichtelmann
Beiträge: 134
Registriert: 13.11.2008, 21:30

OpenWeather Systemvariable nicht gefunden...

Beitrag von Wichtelmann » 12.04.2018, 07:06

Ich nutze OpenWeather, hauptsächlich für die Ausgabe der Temperatur in meinem "Fenster-offen-Script". Nun wollte ich die Warnungen temperaturabhängig steuern - also draußen warm keine oder späte Erinnerung usw.
Dazu möchte ich eine "Wenn-Abfrage der Temperatur machen und entsprechend Variablen setzen.
Ich glaube aber, dass ich das irgendwie viel zu kompliziert angehe. Falls da jemand einen eleganteren Weg weiß - ...

Zunächst scheiter ich jedoch schon daran, dass die Variable "SvTemperatur" gar nicht im Programm zu finden ist.?

Anbei ein paar Screenshots.

Code: Alles auswählen

string stdout;
string stderr;
string message;
var sv_temp = dom.GetObject("ow Temperatur");
message = "Badfenster offen!!  \r\n" #  "Aussentemperatur: " # (sv_temp).Value().ToString(1) # " °C ";
system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=XXX&application=Achtung:&priority=1\&description=" # message # "' ", &stdout, &stderr);
system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=XXX&application=Achtung:&priority=1\&description=" # message # "# ", &stdout, &stderr);

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='XXX';


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


    !Optionale Experteneinstellungen: OpenWeather-Daten bzw. Systemvariblen per CUxD Logit aufzeichnen
    !Falls der CUX-Daemon installiert ist, werden die Messdaten der o.g. Systemvariablen dieses Scripts standardmäßig zusätzlich per CUxD LOGIT aufgezeichnet
    !Falls Sie keine Aufzeichnng der Messdaten wünschen, ändern Sie diese Variable auf false (string cuxCMDName=false;)

    boolean useLOGIT=true;


    !Optionale Experteneinstellungen: OpenWeather-Daten in CUxD Thermostat-Device schreiben
    !Falls der CUX-Daemon installiert ist und Sie ein "Universal Wrapper Device" (90) mit der Funktion "Thermostat" angelgt haben, kann dieses Script einige
    !der abgerufenen Messwerte direkt in das Device schreiben (das ist der eigentliche Sinn dieses Scripts).
    !Wichtig: Damit dies funktioniert, muss in den Einstellungen des Devices, im Kanal 1 die Option "WEATHER|USE_HMDATAPT" deaktiviert sein (nicht angehakt).
    !Hier gegebenenfalls den Namen des Devices nach dem Schema "CUxD.<Seriennummer>:1" ändern.
    !Falls Sie nicht möchten, dass Messwerte in das Device geschrieben werden, setzen Sie diese Variable auf false (string cuxWDSName=false;)

    string cuxWDSName='CUxD.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 = '<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 = '>';
    }

    !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("m/s");
           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);}
    }   
Dateianhänge
Screen Shot 04-12-18 at 07.02 AM.JPG
Screen Shot 04-12-18 at 07.01 AM.JPG
Screen Shot 04-12-18 at 06.58 AM.JPG
Screen Shot 04-12-18 at 06.57 AM.JPG

Wichtelmann
Beiträge: 134
Registriert: 13.11.2008, 21:30

Re: OpenWeather Systemvariable nicht gefunden...

Beitrag von Wichtelmann » 20.04.2018, 13:15

nochmal schieben... hat keiner eine Idee, warum die Variable Temperatur nicht zur Auswahl im Programm angezeigt wird? Sie existiert doch... :?:

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: OpenWeather Systemvariable nicht gefunden...

Beitrag von alchy » 20.04.2018, 13:56

Kanalverknüpfung der Syremvariable mit Rot Devices aufheben.

Die wirst du nicht selber angelegt haben, nehme ich mal an, aber eine Verknüpfung einer Variable mit einem Kanal, verschiebt die Variable zum Kanal in der Programmansicht.


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.

Wichtelmann
Beiträge: 134
Registriert: 13.11.2008, 21:30

Re: OpenWeather Systemvariable nicht gefunden...

Beitrag von Wichtelmann » 21.04.2018, 14:12

Hm, ok. Wenn ich die Verknüpfung löse, dann finde ich sie in der tat beim Programm als Variable und kann sie einsetzen. Jedoch wird die aktuelle Temperatur nun als -50 angegeben. Offenbar ist muss ich noch was ändern?

Die Temperatur kommt von einem OpenWeather-Script

Edit. Habe das Script manuell nochmal gestartet danach, dann ist die Tamp wieder korrekt. Muss ic hmal beobachten.

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: OpenWeather Systemvariable nicht gefunden...

Beitrag von alchy » 23.04.2018, 17:00

Ich hätte wetten können, das du keinen Kanal Root devices genannt hast. Respekt.

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.

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“