Script zur Ermittlung eines gleitenden Mittelwertes
Moderator: Co-Administratoren
-
- 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
Systemvariable des Typ Werteliste fragt man mit .ValueList() ab.
Siehe auch undokumentierte Skript Befehle in meiner Signatur
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 +++
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 +++
-
- 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
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.:
Die WriteLine() - Statements sind nur zur Kontrolle und können auskommentiert oder gelöscht werden
Neu berechnet wird in dem Skript aber nichts.
EDIT: im Skript die fehlenden Klammerpaare nachgesetzt.
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);
Neu berechnet wird in dem Skript aber nichts.
Je nachdem was man will
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
Harry
- 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
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.
Man lernt nie aus.
Persönlich wäre mir das "Doppel-Moppel" viel zu umständlich.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- 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
Fällt ja schon unter Wer weiß eeeeeeee macht denn sowas?
Gruß
Harry
Harry
-
- 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
Ha.... DAS wars
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
Thx Tyfys, damit lässt sich arbeiten
MarKiesCo
-
- 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
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 +++
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 +++
- 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
Ja, da wurden wir wohl alle "reingelegt...".
Der de facto Standard für eigene Wertelisten (für die Script-Weiterverarbeitung) ist ja auch eine Text-SysVar.
Der de facto Standard für eigene Wertelisten (für die Script-Weiterverarbeitung) ist ja auch eine Text-SysVar.
Grüße... Baxxy
- Raspberry Pi 4 als Homematic-Zentrale - Tipps und Informationen
- Analysescript für genutzte Funk-Adressen, Funkmodul-Hardware und Zentralen Hardware
- NANO CUL 868MHz - Stick zum AskSin Analyzer XS umflashen (Anleitung für ArduinoIDE unter Windows)
- Firmware Updates für IP-Aktoren / Sensoren... Info's, Tipps und Sonstiges
- CCU funkt nicht - CarrierSense (CS) Probleme erkennen und lösen
-
- 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
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) :
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.
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())) # ";
Ist mir leider eben erst aufgefallen, als ich gucken wollte, wie sich diese Werteliste im WebUI Programm darstellt.
Gruß
Harry
Harry
-
- 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
keine Sorge Tyfys, ich habs schon beim testen gemerkt und wollt mich morgen dran machen. Vielen Dank fürs "nachlegen"
-
- 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
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.