Code: Alles auswählen
Mar 14 08:00:01 homematic-ccu2 cron.info crond[94]: crond: USER root pid 9285 cmd /usr/local/addons/hm-watchdog/bin/hm-watchdog.sh 2>&1 >/dev/null
Könnte es daran liegen?
Gesendet von meinem PLK-L01 mit Tapatalk
Moderator: Co-Administratoren
Code: Alles auswählen
Mar 14 08:00:01 homematic-ccu2 cron.info crond[94]: crond: USER root pid 9285 cmd /usr/local/addons/hm-watchdog/bin/hm-watchdog.sh 2>&1 >/dev/null
Code: Alles auswählen
! Temperaturvorhersage (min, max, Durchschnitt) 3 Tage über OpenWeatherMap, Mike42, 20.05.2017
! Abfrage der Daten über CUxD
! Das Skript sollte höchstens alle 3 Stunden laufen, da OpenWeathermaps den Forecast in 3 Stunden Intervalle aufteilt
! verwendet Skript-Fragmente von OpenWeather-CCU-Script, Version 1, 15.02.2017, von dimmyprp
! ******************************************************************************************
! Deklarationen und Initialisierungen
! in "func" bitte unter "&id=" die Ortskennung und unter "&APPID=" den API-Schlüssel eintragen
! CUxD "System-Devices" (28) muss installiert sein
! in "CUXD_Device bitte die Kennung des Gerätes eintragen
string func = "wget -q -O - 'http://api.openweathermap.org/data/2.5/forecast?mode=xml&units=metric&id=xxxxxxx&APPID=xxxxxxxxxxxxxxxxxxxxxxxxxxxxx'";
string CUXD_Device = "CUxD.CUX2801001:1";
! Suchstrings und Offset-Werte zum extrahieren der Temperaturwerte
string xmlTimeStart = "time from=";
string xmlTimeEnd = " to=";
integer xmlTimeStartOffset = 11;
integer xmlTimeEndOffset = 21;
string xmlTemperatureStart = "temperature unit=";
string xmlTemperatureEnd = "min=";
integer xmlTemperatureStartOffset = 34;
integer xmlTemperatureEndOffset = 36;
integer xmlSkip = 100;
! XML-Antwort von OpenWeatherMaps
string recXML;
! Arbeitsvariablen
string wert1;
string wert2;
time zeit;
! Datumswerte
string Day0;
string Day1;
string Day2;
string Day3;
! Diese Variablen enthalten am Schluss die Ergebnisse
real Day1_avg=0.0; ! Durchschnittswert für morgen
real Day1_min=100.0; ! Min-Wert für morgen
real Day1_max=-100.0; ! Max-Wert für morgen
real Day2_avg=0.0;
real Day2_min=100.0;
real Day2_max=-100.0;
real Day3_avg=0.0;
real Day3_min=100.0;
real Day3_max=-100.0;
! ENDE Deklarationen und Initialisierungen
! ******************************************************************************************
! Datum als String für die nächsten 3 Tage zum suchen
Day0 = system.Date("%F"); !Day0 = heute, wird im Skript nicht ausgewertet
zeit = Day0.ToTime()+24*3600;
Day1= zeit.Format("%F"); !Day1 = Datumsstring für morgen
zeit = zeit+24*3600;
Day2= zeit.Format("%F"); !Day2 = Datumsstring für übermorgen
zeit = zeit+24*3600;
Day3= zeit.Format("%F"); !Day3 = Datumsstring für überübermorgen :o)
! Abruf der Daten
dom.GetObject(CUXD_Device#".CMD_SETS").State(func);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
recXML = dom.GetObject(CUXD_Device#".CMD_RETS").State();
if(!recXML){quit;}
! Temperaturwerte ausfiltern
while (recXML.Find(xmlTemperatureStart)>=0){
wert1 = recXML.Substr(recXML.Find(xmlTimeStart)+xmlTimeStartOffset, recXML.Find(xmlTimeEnd)-recXML.Find(xmlTimeStart)+xmlTimeEndOffset);
wert2 = recXML.Substr(recXML.Find(xmlTemperatureStart)+xmlTemperatureStartOffset,recXML.Find(xmlTemperatureEnd)-recXML.Find
(xmlTemperatureStart)+xmlTemperatureEndOffset);
if (wert1==Day1) {
Day1_avg = Day1_avg + wert2.ToFloat();
if (Day1_min>wert2.ToFloat()) {Day1_min=wert2.ToFloat();}
if (Day1_max<wert2.ToFloat()) {Day1_max=wert2.ToFloat();}
}
if (wert1==Day2) {
Day2_avg = Day2_avg + wert2.ToFloat();
if (Day2_min>wert2.ToFloat()) {Day2_min=wert2.ToFloat();}
if (Day2_max<wert2.ToFloat()) {Day2_max=wert2.ToFloat();}
}
if (wert1==Day3) {
Day3_avg = Day3_avg + wert2.ToFloat();
if (Day3_min>wert2.ToFloat()) {Day3_min=wert2.ToFloat();}
if (Day3_max<wert2.ToFloat()) {Day3_max=wert2.ToFloat();}
}
recXML=recXML.Substr(recXML.Find(xmlTemperatureStart)+xmlSkip,recXML.Length());
}
! Durchschnitt errechnen
Day1_avg=Day1_avg/8;
Day2_avg=Day2_avg/8;
Day3_avg=Day3_avg/8;
! Hier nur als Beispiel die Ausgabe der Ergebniswerte
! Die Werte von Interesse kann man nun in eine Systemvariable schreiben
WriteLine(Day1#": min "#Day1_min.ToString(2)#" / max "#Day1_max.ToString(2)#" / avg "#Day1_avg.ToString(2));
WriteLine(Day2#": min "#Day2_min.ToString(2)#" / max "#Day2_max.ToString(2)#" / avg "#Day2_avg.ToString(2));
WriteLine(Day3#": min "#Day3_min.ToString(2)#" / max "#Day3_max.ToString(2)#" / avg "#Day3_avg.ToString(2));
! ******************************************************************************************
Du kannst eine beliebige Systemvariable im Skript heranziehen:Wenn ich das richtig gesehen habe, müsste ich meine variablen in der CCU mit dem Namen "Day1_avg", etc. anlegen? Leider werden diese nicht befüllt.
Welchen Wert willst du dann als Auslöser nehmen? Das Maximum des aktuellen Tages? Oder vielleicht die Temperatur, die in 3 Stunden erwartet wird?Ich würde gerne, jetzt wo es wieder so heiß ist, die Wettervorhersage nutzen, um unsere Rollos an der Sonnenseite proaktiv herunterfahren wenn eine bestimmte Temperatur für den tag erwartet
Code: Alles auswählen
! Temperaturvorhersage 3 Stunden über OpenWeatherMap, Mika, 30.05.2017
! Abfrage der Daten über CUXD
! Das Skript sollte höchstens alle 3 Stunden laufen, da OpenWeathermaps den Forecast in 3 Stunden Intervalle aufteilt
! verwendet Skript-Fragmente von OpenWeather-CCU-Script, Version 1, 15.02.2017, von dimmyprp
! ******************************************************************************************
! Deklarationen und Initialisierungen
! in "func" bitte unter "&id=" die Ortskennung und unter "&APPID=" den API-Schlüssel eintragen
! CUxD "System-Devices" (28) muss installiert sein
! in "CUXD_Device bitte die Kennung des Gerätes eintragen
! hier Systemvariable deklarieren (Typ Zahl)
! var SysVar_Temp = dom.GetObject("AussenTemp_Forecast"); ! oder einen eigenen Namen verwenden
string func = "wget -q -O - 'http://api.openweathermap.org/data/2.5/forecast?mode=xml&units=metric&id=xxxxxx&APPID=xxxxxxxxxxxxxxxxx'";
string CUXD_Device = "CUxD.CUX2801001:1";
! Suchstrings und Offset-Werte zum extrahieren der Temperaturwerte
string xmlTimeStart = "time from=";
string xmlTimeEnd = " to=";
integer xmlTimeStartOffset = 11;
integer xmlTimeEndOffset = 11;
string xmlTemperatureStart = "temperature unit=";
string xmlTemperatureEnd = "min=";
integer xmlTemperatureStartOffset = 34;
integer xmlTemperatureEndOffset = 36;
integer xmlSkip = 100;
! TimeAdder:
! 0... angebrochenes 3h-Segment wird nicht berücksichtigt
! 5400... 3h-Segment wird berücksichtigt, wenn es zu weniger als der Hälfte abgelaufen ist
! 10800... angebrochenes 3h-Segment wird berücksichtigt
integer TimeAdder = 0;
! XML-Antwort von OpenWeatherMaps
string recXML;
! Arbeitsvariablen
string wert1;
string wert2;
time jetzt;
integer counter = 1;
! ENDE Deklarationen und Initialisierungen
! ******************************************************************************************
jetzt = system.Date("%F %X");
! Abruf der Daten
dom.GetObject(CUXD_Device#".CMD_SETS").State(func);
dom.GetObject(CUXD_Device#".CMD_QUERY_RET").State(1);
recXML = dom.GetObject(CUXD_Device#".CMD_RETS").State();
if(!recXML){quit;}
! Temperaturwerte ausfiltern
while (counter<2){
wert1 = recXML.Substr(recXML.Find(xmlTimeStart)+xmlTimeStartOffset, recXML.Find(xmlTimeEnd)-recXML.Find
(xmlTimeStart)+xmlTimeEndOffset);
wert2 = recXML.Substr(recXML.Find(xmlTemperatureStart)+xmlTemperatureStartOffset,recXML.Find(xmlTemperatureEnd)-recXML.Find
(xmlTemperatureStart)+xmlTemperatureEndOffset);
wert1=wert1.Substr(0,10)#" "#wert1.Substr(11,8);
if ((wert1.ToTime()+TimeAdder)>jetzt) {
WriteLine(wert1#" " # wert2);
counter = counter + 1;
}
recXML=recXML.Substr(recXML.Find(xmlTemperatureStart)+xmlSkip,recXML.Length());
}
! wert2 enthält die Temperatur im nächsten 3h-Segment
! Systemvariable schreiben:
! SysVar_Temp.State(wert2.ToFloat());