*gelöst* Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

*gelöst* Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 18:11

Hallo,

ich gucke ja immer wieder sporadisch durch /var/log/messages.
Zufällig viel mir unten stehende folgende Meldung auf.
Kann mir da jemand etwas zu sagen? Warum macht der ReGaHss das? Bei mir ist Zeile 34 eine Leerzeile

Code: Alles auswählen

Mar 31 19:08:47 ccu3 local0.err ReGaHss: ERROR: SyntaxError: Error 1 at row 34 col 787 near ^ --no-check-certificate -q -O - '" # url # "'",  & stdout,  & stderr);     !folg^M  [SyntaxError():iseESP.cpp:1149]

Mar 31 19:08:47 ccu3 local0.err ReGaHss: ERROR: SyntaxError:  --no-check-certificate -q -O - '" # url # "'",  & stdout,  & stderr);     !folgende Zeile muss im Echtbetrieb weg.     !stdout = "ret=OK,curr_day_heat=0/0/0/0/0/13/9/8/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_heat=0/0/0/0/0/19/14/11/5/0/0/0/0/0/0/0/0/0/0/0/0/3/7/0,curr_day_cool=2/2/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_cool=0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0";     !WriteLine(stdout);     !WriteLine(stderr);      !Empfangene Daten verarbeiten / aufsummieren     if (stdout.StartsWith("ret=OK")) {         string elems;         string day;         string hourval;         real day_total = 0;         foreach(elems, stdout.Split(",")) {             !WriteLine(elems.StrValueByIndex("=", 0));             !links vom Gleichheitszeichen             if ((elems.StrValueByIndex("=", 0) == "curr_day_cool") || (elems.StrValueByIndex("=", 0) == "curr_day_heat")) {                 day = elems.StrValueByIndex("=", 1);                 !rechts vom Gl
Überprüfe ich das Script jetzt mit der eingebauten Test Funktion, erscheint kein Fehler und kein Logeintrag.

Anbei das komplette Script:

Code: Alles auswählen

!Script zu Abfrage des Stromverbrauchs einer Daikin Klimaanlage
!2.Version

!Daikin Stromverbrauchszahlen
string url_cmd =  "/aircon/get_day_power_ex";
string url_beg =  "http://192.168.99.";
!IP-Adressen und  in der selben Reihenfolge   - Semikolon getrennt
string ip_arr = "36;33;28;27;35;187;185";
string room_arr = "Lara;Greta;Eltern;Wohnzimmer;Wintergarten;Wintergarten2;Flur";
!SystemVariablenname setzt sich zusammen aus SysVar_beg  + room + SysVar_end
string SysVar_beg ="Tagesverbrauch ";
string SysVar_end ="";
string SysVarTotal ="Tagesgesamtverbrauch Daikin Total";  !

!**********************************************
!ab hier nichts mehr zu ändern
!**********************************************
integer Tagesgesamtverbrauch=0;
string url = "";
string SysVarName="";
string index;
string stdout;
string stderr;
integer divisor;

string sysVarNameLara = "Tagesverbrauch Lara";
string sysVarNameGreta = "Tagesverbrauch Greta";
string sysVarNameEltern = "Tagesverbrauch Eltern";
string sysVarNameWohnzimmer = "Tagesverbrauch Wohnzimmer";
string sysVarNameWintergarten = "Tagesverbrauch Wintergarten";
string sysVarNameWintergarten2 = "Tagesverbrauch Wintergarten2";
string sysVarNameFlur = "Tagesverbrauch Flur";
string sysVarNameTagesgesamtverbrauch = "Tagesgesamtverbrauch Daikin Total";

!IP - Adressen nacheinander verarbeiten

foreach(index, (system.GenerateEnum(0, web.webGetValueListCount(ip_arr) - 1))) {
    url = url_beg # web.webGetValueFromList(ip_arr, index) # url_cmd;
    !WriteLine(url);
    SysVarName = SysVar_beg # web.webGetValueFromList(room_arr, index) # SysVar_end;
    !WriteLine(SysVarName);

    system.Exec("wget --no-check-certificate -q -O - '" # url # "'",  & stdout,  & stderr);
    !folgende Zeile muss im Echtbetrieb weg.
    !stdout = "ret=OK,curr_day_heat=0/0/0/0/0/13/9/8/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_heat=0/0/0/0/0/19/14/11/5/0/0/0/0/0/0/0/0/0/0/0/0/3/7/0,curr_day_cool=2/2/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_cool=0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0";
    !WriteLine(stdout);
    !WriteLine(stderr);

    !Empfangene Daten verarbeiten / aufsummieren
    if (stdout.StartsWith("ret=OK")) {
        string elems;
        string day;
        string hourval;
        real day_total = 0;
        foreach(elems, stdout.Split(",")) {
            !WriteLine(elems.StrValueByIndex("=", 0));
            !links vom Gleichheitszeichen
            if ((elems.StrValueByIndex("=", 0) == "curr_day_cool") || (elems.StrValueByIndex("=", 0) == "curr_day_heat")) {
                day = elems.StrValueByIndex("=", 1);
                !rechts vom Gleichheitszeichen
                divisor = (web.webGetValueFromList("1;10", (elems.StrValueByIndex("=", 0) == "curr_day_cool").ToInteger())).ToInteger();
                !WriteLine(day);
                foreach(hourval, day.Split("/")) {
!                    day_total = (day_total + (hourval.ToFloat()) / divisor);
                     day_total = (day_total + hourval);
                }
            }
        };
        day_total = (day_total * 100);
        Tagesgesamtverbrauch = Tagesgesamtverbrauch + day_total;
        WriteLine(SysVarName  # ":  " # day_total);
    }

    object SVObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName);
    if (SVObj) {
        SVObj.State(day_total);
    } else {
        WriteLine('Variablenname "'#SysVarName #'" ist falsch oder Systemvariable nicht angelegt ');
    }

}

!zum Schluss die Summe aller Verbräuche ausgeben
WriteLine(SysVarTotal # ": " # Tagesgesamtverbrauch);
object SVObj = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarTotal);
if (SVObj) {
    SVObj.State(Tagesgesamtverbrauch);
} else {
    WriteLine('Variablenname "'#SysVarTotal #'" ist falsch oder Systemvariable nicht angelegt ');
}
object o = dom.GetObject(sysVarNameLara);
object p = dom.GetObject(sysVarNameGreta);
object q = dom.GetObject(sysVarNameEltern);
object r = dom.GetObject(sysVarNameWohnzimmer);
object s = dom.GetObject(sysVarNameWintergarten);
object t = dom.GetObject(sysVarNameWintergarten2);
object u = dom.GetObject(sysVarNameFlur);
object v = dom.GetObject(sysVarNameTagesgesamtverbrauch);

dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(o.Name()#";"#o.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(p.Name()#";"#p.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(q.Name()#";"#q.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(r.Name()#";"#r.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(s.Name()#";"#s.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(t.Name()#";"#t.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(u.Name()#";"#u.Value());
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State(v.Name()#";"#v.Value());

Zuletzt geändert von Tomiliy am 02.04.2024, 14:08, insgesamt 2-mal geändert.
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

jp112sdl
Beiträge: 12119
Registriert: 20.11.2016, 20:01
Hat sich bedankt: 849 Mal
Danksagung erhalten: 2152 Mal
Kontaktdaten:

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von jp112sdl » 31.03.2024, 18:31

Die
Tomiliy hat geschrieben:
31.03.2024, 18:11
Test Funktion
prüft nur auf syntaktische Richtigkeit und nicht, ob z.B. deine Systemvariablen, Räume etc. richtig geschrieben sind.
Das tritt erst zur Laufzeit auf.

VG,
Jérôme ☕️

---
Support for my Homebrew-Devices: Download JP-HB-Devices Addon

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 18:38

Danke für den Hinweis.
Aber wie kann ich das Feststellen oder Testen, WO da ein Fehler ist?
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 19:16

Ich hab das Script jetzt noch einmal angepasst, da unten eine Variable für ddas Schreiben ins log nicht korrekt gesetzt war. Jetzt ist sie es, aber ReGaHss hat immer noch etwas zu meckern.

Oben ist schon das angepasste Script

Code: Alles auswählen

Mar 31 19:08:47 ccu3 local0.err ReGaHss: ERROR: SyntaxError: Error 1 at row 34 col 787 near ^ --no-check-certificate -q -O - '" # url # "'",  & stdout,  & stderr);     !folg^M  [SyntaxError():iseESP.cpp:1149]

Mar 31 19:08:47 ccu3 local0.err ReGaHss: ERROR: SyntaxError:  --no-check-certificate -q -O - '" # url # "'",  & stdout,  & stderr);     !folgende Zeile muss im Echtbetrieb weg.     !stdout = "ret=OK,curr_day_heat=0/0/0/0/0/13/9/8/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_heat=0/0/0/0/0/19/14/11/5/0/0/0/0/0/0/0/0/0/0/0/0/3/7/0,curr_day_cool=2/2/2/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0,prev_1day_cool=0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0/0";     !WriteLine(stdout);     !WriteLine(stderr);      !Empfangene Daten verarbeiten / aufsummieren     if (stdout.StartsWith("ret=OK")) {         string elems;         string day;         string hourval;         real day_total = 0;         foreach(elems, stdout.Split(",")) {             !WriteLine(elems.StrValueByIndex("=", 0));             !links vom Gleichheitszeichen             if ((elems.StrValueByIndex("=", 0) == "curr_day_cool") || (elems.StrValueByIndex("=", 0) == "curr_day_heat")) {                 day = elems.StrValueByIndex("=", 1);                 !rechts vom Gl

--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

mademyday
Beiträge: 273
Registriert: 03.10.2014, 12:46
System: CCU
Wohnort: Enzkreis
Hat sich bedankt: 3 Mal
Danksagung erhalten: 43 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von mademyday » 31.03.2024, 19:27

dürfen da echt diese Leerzeichen zws & und stdout/stderr stehen?

Code: Alles auswählen

& stdout,  & stderr

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 19:29

Gute Frage..
Leider hat das Script jemand für mich geschrieben, ich weiß es nicht.
Ist das Konform? Kann das jemand verifizieren?
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Tyfys
Beiträge: 551
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 27 Mal
Danksagung erhalten: 125 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tyfys » 31.03.2024, 20:02

Tomiliy hat geschrieben:
31.03.2024, 19:29
Leider hat das Script jemand für mich geschrieben
Das ist natürlich keine nette Aussage, zu jemanden (ich) der das für dich gemacht hat.

Wenn das Script ansonsten läuft, ist wieder so ein merkwürdiger Fehler im HM Script.
Alles ausführen aber in im Log rummeckern.
Hatte ich aber auch schon mal so eine Geschichte.

Ändere mal

Code: Alles auswählen

 & stdout,  & stderr)
zu

Code: Alles auswählen

 &stdout,  &stderr
Gibt es dann immer noch den Log Eintrag ?

Ich weiss auch nicht, wie die Leerzeichen dazwischen geraten sind - in meinen Scripts habe ich die nicht drin.
Gruß
Harry

Matthias K.
Beiträge: 1173
Registriert: 14.02.2016, 12:32
System: Alternative CCU (auf Basis OCCU)
Wohnort: Heidenheim
Hat sich bedankt: 57 Mal
Danksagung erhalten: 227 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Matthias K. » 31.03.2024, 20:17

Bei dem Script musst du die dauerhafte, ununterbrochene Verfügbarkeit aller Klimaanlagen in deinem Netz unbedingt sicherstellen.
Wenn auch nur eine davon nicht auf die Anfragen reagiert (aus, Netzwerkproblem, etc.), liegt deine CCU mindestens für 15 Minuten auf dem Rücken und strampelt mit den Beinen... :lol:
Dann haben wir in ein paar Wochen oder Monaten die nächste Anfrage "Hilfe meine CCU reagiert sehr langsam" oder "Keine Programme werden mehr ausgeführt"...

Tipp: Da du auf Rückgabewerte aus den system.Exec angewiesen bist unbedingt für die wgets sehr niedrige Timeouts setzen.

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 20:22

On nein, @Harry. So war das nicht gemeint.
Ich bin dir super dankbar, den ich hätte das Script nicht schreiben können.
Ich wusste nur nicht, ob ich hier Namen nennen darf / soll....

Was die Leerzeichen angeht, das kann ich leider auch nicht mehr nachvollziehen.
Ich mache mal, was du vorgeschlagen hast und entferne die Leerzeichen.

Frage:
Kann man das Script so umschreiben, das er vorher überprüft ob die Anlagen Online sind und das Script NUR ausführt, wenn alle Anlagen Online sind? Bzw. kann man es so schreiben, das er jede Anlage einzeln überprüft und nur die aus lässt, die gerade jetzt nicht Online ist. Ich gehe nicht davonj aus, das irgendwelche Anlagen Offline sind, aber man weiß ja nie.

Vielen Dank
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Tomiliy
Beiträge: 158
Registriert: 03.12.2014, 19:28
Hat sich bedankt: 12 Mal
Danksagung erhalten: 1 Mal

Re: Script OK, aber: local0.err ReGaHss: ERROR: ScriptRuntimeError:

Beitrag von Tomiliy » 31.03.2024, 20:27

ich habe die Leerzeichen entfernt, das Script gestartet und zumindest in /var/log/messages taucht nichts mehr auf.
Super, vielen Dank :-)

Können wir noch das Thema mit der Abfrage besprechen? Kann man sowas inkludieren?
--------------------------------------------
4 Kanäle in 42 Geräten:
1x HM-LC-Dim1T-FM, 1x HM-RC-8, 12x HM-Sec-SCo, 3x HM-LC-Sw1-Pl-2, 1x HM-PBI-4-FM, 1x HM-OU-CFM-Pl, 3x HM-Sen-EP, 1x HM-CC-VG-1, 1x HM-Sec-MDIR-2, 12x HM-CC-RT-DN, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-RD-O, 2x HM-PB-2-WM55-2, 1x HM-TC-IT-WM-W-EU, 1x 10000
--------------------------------------------

Antworten

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