Script zur Ermittlung eines gleitenden Mittelwertes

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

MichaelN
Beiträge: 9771
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 707 Mal
Danksagung erhalten: 1647 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von MichaelN » 13.05.2024, 07:19

Systemvariable des Typ Werteliste fragt man mit .ValueList() ab.

Siehe auch undokumentierte Skript Befehle in meiner Signatur
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 +++

Tyfys
Beiträge: 577
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 133 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Tyfys » 13.05.2024, 11:44

Ich hatte mir das Skript aus dem allerersten Post gar nicht angesehen.
Darum hatte ich gar nicht erwartet, daß da eine Systemvariable vom Typ Werteliste
als Datenspeicher genutzt wurde. Ich dachte eine Werteliste wäre für andere Zwecke gedacht.

Aufgrund der gezeigten, durch Pipe getrennten Werte, war ich von einer Variablen vom Typ Zeichenkette ausgegangen.

Nundem - jetzt bin ich schlauer.

Jetzt wird die ganze Wertelistenvariable eingelesen
und im Element Nr 0 dann die ersten AnzWerteErsetzen Werte durch den Ersatzwert ersetzt.

Danach die gesamte Werte Liste neu zusammengesetzt und wieder zurück gespeichert.:

Code: Alles auswählen

 !Auslesen über Variable für Systemvariablennamen
string SysVarName = "Stromzaehler_Schaltschrank_ZwSp";
if (dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName)) {
    string GanzeWerteliste = dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName).ValueList();
} else {
    WriteLine("Variablenname ist falsch");
    quit;
}
WriteLine(GanzeWerteliste);
string WertListe = GanzeWerteliste.StrValueByIndex(";", 0);
WriteLine(WertListe);
string neueWertliste;
string index;
integer AnzWerteErsetzen = 10;
string Ersatzwert ="-150";
integer von = 0;
integer bis = 19;
foreach(index, system.GenerateEnum(von, bis)) {
    if (index.ToInteger() < AnzWerteErsetzen) {
        neueWertliste = neueWertliste # Ersatzwert # "|";
    } else {
        neueWertliste = neueWertliste # (WertListe.StrValueByIndex("|", index.ToInteger())) # "|";
    }
}
neueWertliste = neueWertliste.RTrim("|");
!zum Testen
WriteLine(neueWertliste);

!jetz die SystemVariable neu zusammensetzen
string NeueValueList = "";
integer len = web.webGetValueListCount(GanzeWerteliste).ToInteger() - 1;

foreach(index, system.GenerateEnum(0, len)) {
    if (index.ToInteger() == 0) {
        NeueValueList = NeueValueList # neueWertliste # ";";
    } else {
        NeueValueList = NeueValueList # (GanzeWerteliste.StrValueByIndex(";", index.ToInteger())) # ";";
    }
}
NeueValueList = NeueValueList.RTrim(";");
WriteLine(NeueValueList);

!ganze Werteliste mit geänderten Werten zurückschreiben.
dom.GetObject(ID_SYSTEM_VARIABLES).Get(SysVarName).ValueList(NeueValueList);
Die WriteLine() - Statements sind nur zur Kontrolle und können auskommentiert oder gelöscht werden
Neu berechnet wird in dem Skript aber nichts.

MichaelN hat geschrieben:
13.05.2024, 07:19
Systemvariable des Typ Werteliste fragt man mit .ValueList() ab.
Je nachdem was man will :wink:

EDIT: im Skript die fehlenden Klammerpaare nachgesetzt.
Zuletzt geändert von Tyfys am 14.05.2024, 10:24, insgesamt 1-mal geändert.
Gruß
Harry

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

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Baxxy » 13.05.2024, 12:28

Eine SysVar Typ: Werteliste die als Listenelement wiederum eine Werteliste enthält hab ich so auch noch nicht gesehen.

Man lernt nie aus. :)

Persönlich wäre mir das "Doppel-Moppel" viel zu umständlich.

Tyfys
Beiträge: 577
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 133 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Tyfys » 13.05.2024, 12:33

Baxxy hat geschrieben:
13.05.2024, 12:28
Eine SysVar Typ: Werteliste die als Listenelement wiederum eine Werteliste enthält hab ich so auch noch nicht gesehen.
Fällt ja schon unter Wer weiß eeeeeeee macht denn sowas? :mrgreen:
Gruß
Harry

MarKiesCo
Beiträge: 80
Registriert: 11.04.2023, 21:07
System: CCU
Hat sich bedankt: 34 Mal
Danksagung erhalten: 4 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von MarKiesCo » 13.05.2024, 12:34

MichaelN hat geschrieben:
13.05.2024, 07:19
Systemvariable des Typ Werteliste fragt man mit .ValueList() ab.
Siehe auch undokumentierte Skript Befehle in meiner Signatur
Ha.... DAS wars :idea:
vielen Dank Michael, muss gestehen das das tatsächlich ne Wissenslücke bei mir war. Die Doku zur undokumentierten Scripten war mir sogar bekannt, wäre aber im Traum nicht darauf gekommen da zu recherchieren, ich gelobe Besserung :mrgreen:

Tyfys hat geschrieben:
13.05.2024, 11:44
...Danach die gesamte Werte Liste neu zusammengesetzt und wieder zurück gespeichert.:......
Thx Tyfys, damit lässt sich arbeiten :+1:


MarKiesCo

MichaelN
Beiträge: 9771
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 707 Mal
Danksagung erhalten: 1647 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von MichaelN » 13.05.2024, 12:39

Tyfys hat geschrieben:
13.05.2024, 11:44
Aufgrund der gezeigten, durch Pipe getrennten Werte, war ich von einer Variablen vom Typ Zeichenkette ausgegangen.
Ich auch.
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: 10982
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 624 Mal
Danksagung erhalten: 2271 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Baxxy » 13.05.2024, 17:21

Ja, da wurden wir wohl alle "reingelegt...". :shock:

Der de facto Standard für eigene Wertelisten (für die Script-Weiterverarbeitung) ist ja auch eine Text-SysVar.

Tyfys
Beiträge: 577
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 29 Mal
Danksagung erhalten: 133 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Tyfys » 13.05.2024, 18:27

Speziell @MarKiesCo

oh shit ......

sehe eben, dass in meinen Skript zwei wichtige Klammernpaare fehlen,
wo ich erst dachte, die wären überflüssig.(hatte ich erst noch drin) :

Code: Alles auswählen


!alte Zeile
neueWertliste = neueWertliste # WertListe.StrValueByIndex("|", index.ToInteger()) # "|";
!ändern in
neueWertliste = neueWertliste # (WertListe.StrValueByIndex("|", index.ToInteger())) # "|";


!und  alte Zeile
NeueValueList = NeueValueList # GanzeWerteliste.StrValueByIndex(";", index.ToInteger()) # ";";
!ändern in
NeueValueList = NeueValueList # (GanzeWerteliste.StrValueByIndex(";", index.ToInteger())) # ";
Die fehlenden Klammernpaare sorgten jedenfalls auf (m)einer CCU2 dafür, dass die Trennzeichen fehlten.

Ist mir leider eben erst aufgefallen, als ich gucken wollte, wie sich diese Werteliste im WebUI Programm darstellt. :(
Gruß
Harry

MarKiesCo
Beiträge: 80
Registriert: 11.04.2023, 21:07
System: CCU
Hat sich bedankt: 34 Mal
Danksagung erhalten: 4 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von MarKiesCo » 13.05.2024, 18:44

Tyfys hat geschrieben:
13.05.2024, 18:27
Speziell @MarKiesCo

oh shit ......

keine Sorge Tyfys, ich habs schon beim testen gemerkt und wollt mich morgen dran machen. Vielen Dank fürs "nachlegen" :D

Matsch
Beiträge: 5538
Registriert: 30.05.2019, 11:37
System: Alternative CCU (auf Basis OCCU)
Wohnort: Chemnitz
Hat sich bedankt: 120 Mal
Danksagung erhalten: 759 Mal

Re: Script zur Ermittlung eines gleitenden Mittelwertes

Beitrag von Matsch » 13.05.2024, 18:48

Tyfys hat geschrieben:
13.05.2024, 18:27
sehe eben, dass in meinen Skript zwei wichtige Klammernpaare fehlen,
wo ich erst dachte, die wären überflüssig.
Ich habe mir angewöhnt, IMMER massiv Klammern zu setzen, damit ich nicht mehr in solche Fallen laufe - auch wenn sie vielleicht im Einzelfall entbehrlich sind. Aber es erspart mir viel Fehlersuchzeit.

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“