HM-Script für virtuelle Wetterstation

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von MichaelN » 08.09.2020, 22:29

Ist es das einzige Objekt mit diesem Namen? Dann sollte es so gehen.

Aber mal eine doofe Frage, wenn ich mir den Werte Bereich anschaue, misst du dort die Oberflächen Temperatur der Sonne?
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 +++

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 08.09.2020, 23:36

ache hat geschrieben:
08.09.2020, 22:23
Muss ich hier noch das "SysVar_Temp" ergänzen, wenn ja, wo?
Sieht ok aus. Wenn du in Deutschland lebst sollten -30 bis 60 °C reichen.
Habe das Script mal ein klein wenig aufgebohrt. Im Script testen ausführen (vorher die korrekte APPID eintragen), dann solltest du sehen woran es scheitert.

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, enhanced by Baxxy 08.09.20

! ******************************************************************************************
! 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)
object SysVar_Temp = dom.GetObject (ID_SYSTEM_VARIABLES).Get ("AussenTemp_Forecast");

string func = "wget -q -O - 'http://api.openweathermap.org/data/2.5/forecast?mode=xml&units=metric&id=3220832&APPID=53fbcbf8a5e23459be86907ab308849a'";
string CUXD_Device = "CUxD.CUX2801001:1";

if (SysVar_Temp){
WriteLine("Speicher-Systemvariable namens: "# SysVar_Temp.Name() #" ist vorhanden.");
! 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
object cuxdevice = dom.GetObject(CUXD_Device#".CMD_SETS");
if (cuxdevice){
WriteLine("CUxD-Gerät wurde gefunden und benutzt.");
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){
WriteLine("Keine gültigen Daten von OpenWeatherMap erhalten. id und APPID überprüfen!")
quit;}
!WriteLine("RecXML: "#recXML);
! 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);
WriteLine("Script durchgelaufen, "# wert2 # "°C in SysVar: "# SysVar_Temp.Name() #" geschrieben.");}
else {
WriteLine("CUxD-Gerät nicht gefunden!");}}
else {
WriteLine("Systemvariable zum speichern der Daten nicht gefunden!");
}
Zuletzt geändert von Baxxy am 17.09.2020, 22:49, insgesamt 1-mal geändert.

ache
Beiträge: 9
Registriert: 07.09.2020, 07:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von ache » 09.09.2020, 21:24

Cool, danke für die Mühe!
Den Wertebereich habe ich angepasst. Da habe ich wohl nicht mitgedacht im Eifer des Gefechts...
Habe es jetzt getestet und bekomme die Rückmeldung, dass das CUxD-Gerät nicht gefunden werden kann.
Ich habe es aber wie zu sehen installiert und verstehe nicht wieso es nicht funktioniert mit der Seriennummer, wenn ich: CUXD_Device = "CUxD.CUX2800001:1" verwende.
2020-09-09 21_20_25-Window.png
Woran könnte es denn liegen, dass das Gerät nicht gefunden wird?
PS.: Einen Neustart der CCU habe ich schon durchgeführt

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 09.09.2020, 22:21

ache hat geschrieben:
09.09.2020, 21:24
Woran könnte es denn liegen, dass das Gerät nicht gefunden wird?
Du hast nicht das richtige CUxD-Gerät angelegt!
Es muss CUxD Gerätetyp: (28) System --> Funktion: Exec sein. Die Funktion ist hier ausschlaggebend.
Deines hat die Funktion "Timer" und funktioniert daher für das Script nicht.

ache
Beiträge: 9
Registriert: 07.09.2020, 07:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von ache » 10.09.2020, 07:18

Super, danke! Sch... , was für ein ärgerlicher Fehler.
Habe jetzt das Problem, dass der API Key nicht funktioniert.
Wisst ihr, ob die Verwendung hier die kostenlose API Key Nutzung von OWM überschreitet?
Bzw. funktioniert es bei euch mit kostenlosem API Key?

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von MichaelN » 10.09.2020, 08:42

Wahrscheinlich ist der jetzt temporär gesperrt, da Du zu oft abgerufen hast. Warte mal 2 Tage in denen Du keine Daten abrufst.
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 +++

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 10.09.2020, 08:48

ache hat geschrieben:
10.09.2020, 07:18
Bzw. funktioniert es bei euch mit kostenlosem API Key?
Ja, problemlos. Ich komme auf ca. 60 Abrufe per Tag.
Wenn dein API Key der aus dem Script ist (und nicht verändert wurde), dann ist der einfach ungültig. Kann man gut sehen wenn man die url direkt im Browser eingibt. http://api.openweathermap.org/data/2.5/ ... 7ab308849a

Code: Alles auswählen

{"cod":401, "message": "Invalid API key. Please see http://openweathermap.org/faq#error401 for more info."}
Generiere dir einfach einen neuen, setze ihn in das Script ein und behalte ihn für dich. :wink:

ache
Beiträge: 9
Registriert: 07.09.2020, 07:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von ache » 13.09.2020, 08:36

Danke für euere Nachrichten!
von MichaelN » 10.09.2020, 08:42
Wahrscheinlich ist der jetzt temporär gesperrt, da Du zu oft abgerufen hast. Warte mal 2 Tage in denen Du keine Daten abrufst.
Das könnte gut sein. ;)

Habe jetzt gewartet und außerdem einen neuen API Key generiert, es funktioniert trotzdem noch nicht.
Ich bekomme aber die korrekte XML wenn ich die url direkt im Browser eingebe. Also sollte doch API Key und APPID funktionieren oder?
Bei "Skript testen" erhalte ich immer noch die Meldung "Keine gültigen Daten von OpenWeatherMap erhalten. id und APPID überprüfen!"

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: HM-Script für virtuelle Wetterstation

Beitrag von Baxxy » 13.09.2020, 09:42

ache hat geschrieben:
13.09.2020, 08:36
es funktioniert trotzdem noch nicht
Hab mein angepasstes Script jetzt nochmal kurz getestet. Tatsächlich scheint die Rückgabe der Daten von OpenWeatherMap manchmal nicht zu funktionieren obwohl im Browser die Werte korrekt ausgegeben werden.

Die letzten Versuche waren bei mir aber erfolgreich.

ache
Beiträge: 9
Registriert: 07.09.2020, 07:17
System: CCU

Re: HM-Script für virtuelle Wetterstation

Beitrag von ache » 13.09.2020, 10:29

Ok, gut bedeutet das, dass einfaches Warten helfen kann?
Oder kann ich irgendendetwas anpassen, damit es besser funktioniert?

Antworten

Zurück zu „Projektvorstellungen“