Wrapper/Transform Vorschläge für Erweiterungen

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

PeterAC
Beiträge: 113
Registriert: 19.12.2014, 14:07
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von PeterAC » 02.04.2025, 12:06

Bei der Verwendung des Wrapper/Transform-Devices sind mir noch einige (für mich ganz interessante) Ideen gekommen:

Abfrage der Nutzung des History Buffers, z.B. Datenpunkt "BUFFER_USED"
Der History-Buffer ist als Ringpuffer ausgeführt, der im Prinzip nicht überlaufen kann und nach einer enstpechenden Anzahl von Daten voll belegt ist. Bei der Erzeugung von Mittelwerten über feste Zeitbereiche nach einem vorherigen Reset ist es aber wichtig, dass alle Daten aus diesem Bereich hineinpassen und so groß muss der Puffer dann sein. Die tatsächliche Anzahl der genutzten Speicherplätze lässt sich derzeit aber nur mit einem Hilfsprogramm ermitteln, dass nach einem Reset die Daten mitzählt.

Mittelwertbildung mit Gewichtung des Zeitabstandes
Bei unregelmäßig eintreffenden Daten spielt der Zeitabstand zwischen den Daten eine Rolle. Viele Sensoren liefern bei hoher Prozessdynamik schneller neue Daten, sonst seltener, um die Belastung des Systems und die Datenmenge zu optimieren, etwa Leistungsdaten eine PV-Anlage bei wolkigem Himmel. Die daraus entstehenden Mittelwerte sind physikalisch wenig aussagekräftig. Das ließe sich verbessern, wenn im History Buffer nicht die Messwerte selbst sondern Produkt aus Messwert und zeitlichem Abstand zum vorangegangenen Messwert abgelegt wird. Der MEAN-Wert wird dann aus dem Quotienten der Summe der gültigen Buffer-Daten und dem Zeitabstand zwischen ältestem und neuestem Messwert gebildet. Es lässt sich dabei wohl nicht vermeiden, dass parallel zum Datenpuffer auch einer für die Zeitstempel nötig ist, da bei einer Verwendung als Ringpuffer der Zeitpunkz des ältesten Messwertes fortlaufend korrigiert werden muss.

Zusätzliche Datenpunkte "SUM", "TS_FIRST", "TS_LAST"
Ein Zwischensschritt oder eine Erweiterung zum vorigen Vorschlag könnte die Einrichtung zusätzlich Datenpunkte sein_
  • SUM: Summer aller gültigen Werte im History Buffer
  • TS_FIRST: Zeitstempel des ältesten gültigen Wertes
  • TS_LAST: Zeitsempel des neuesten gültigen Wertes

Benutzeravatar
uwe111
Beiträge: 4900
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von uwe111 » 03.04.2025, 00:02

Das klingt interessant. Ich schaue mir das mal in Ruhe an und melde mich.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.12, SSH KeyDir

Benutzeravatar
uwe111
Beiträge: 4900
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von uwe111 » 04.04.2025, 21:49

Hallo Peter,

1) Anzahl der Daten im History Buffer
das werde ich einbauen.

2) Mittelwertbildung mit Gewichtung des Zeitabstandes
sowas könnte ich implementieren.

3) Zusätzliche Datenpunkte ...
Wenn ich 2) implementiert habe, dann sehe ich jetzt keine Anwendung für diese Datenpunkte.
Wenn Du z.B. 10 Werte im Buffer hast, wozu benötigst Du die Summe aller Werte inkl. der Zeitstempel von Wert1 und Wert10? Was kann man damit anfangen? Der MEAN Wert wird ja bereits errechnet.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.12, SSH KeyDir

PeterAC
Beiträge: 113
Registriert: 19.12.2014, 14:07
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von PeterAC » 06.04.2025, 15:23

Hallo Uwe,

im Prinzip richtig. Es gäbe aber noch andere flexible Möglichkeiten, wenn etwa spezielle Gewichtungen oder die Bildung von Intgegralen erfolgen sollen könnte man selbst gewichtete Daten per SET_STATE dem Transform-Device zuführen. Das kann dann alles Mögliche sein, Zeit, oder etwas Nichtlineares. Das Device würde dann nur noch die Summe bilden, die man dann weiter verarbeiten kann.
Im Prinzip bin ich auch so darauf gestoßen, weil ich zeitlich gewichtete Daten ans Device senden wollte, dann aber feststellen musste, dass mir der reine Mittelwert davon danach nicht mehr weiterhelfen würden.

VG,
Peter

Benutzeravatar
uwe111
Beiträge: 4900
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von uwe111 » 06.04.2025, 21:20

Hallo Peter,

das hier ist mir noch nicht ganz klar...
PeterAC hat geschrieben:
02.04.2025, 12:06
Das ließe sich verbessern, wenn im History Buffer nicht die Messwerte selbst sondern Produkt aus Messwert und zeitlichem Abstand zum vorangegangenen Messwert abgelegt wird.
Hier sollte dann m.E. aber das Produkt aus vorausgehendem Messwert und zeitlichem Abstand des aktuellen zu diesem Messwert abgelegt werden.
Dann würde aber der aktuelle Messwert nicht im Buffer und somit nicht in der MEAN/MEDIAN Berechnung auftauchen.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.12, SSH KeyDir

PeterAC
Beiträge: 113
Registriert: 19.12.2014, 14:07
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von PeterAC » 20.04.2025, 13:26

Sorry für die Verzögerung.

Das Ergebnis im Buffer wäre dann das (Euler-)Integral über den Messwert. Das könnten man entweder sofort weiterverwenden (z.B zur Bildung von kWh-Werten) oder selber mit Division durch die Integrationsdauer in einen Zeitmittelwert umrechnen, der unempfindlich gegenüber variierenden Aktualisierungsraten wäre. Wenn Sensoren ihre Rate an die Dynamik des Messwertes anpassen, führt das zu Verzerrungen beim gewöhnlichen Mittelwert.

VG,
Peter

Benutzeravatar
uwe111
Beiträge: 4900
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von uwe111 » 24.04.2025, 21:47

Hallo Peter,

ich habe unter https://cuxd.de/download/ eine neue CUxD Testversion bereitgestellt.

Das CUxD Gerät (9000) Wrapper.Transform kann jetzt gewichtete Mittelwerte berechnen und hat dafür 3 neue Geräteparameter mit folgender Bedeutung:
  • WRAPPER|HISTORY_WEIGHTED [x] gewichtete Daten für die Satistikberechnung abspeichern
  • WRAPPER|HISTORY_LEN abgespeicherten Zeitraum für die Statistikberechnung in Minuten begrenzen (0..beliebiger Zeitraum, 1..1440 Minuten)
  • WRAPPER|HISTORY_UPDATE automatische Aktualisierung der Statistikwerte nach mindestens x Minuten (0..keine Aktualisierung, 1..1440 Minuten)
und 2 neue Datenpunkte:
  • HISTORY_FILL gibt an, wie viel Speicher vom History Buffer aktuell gefüllt ist
  • HISTORY_SEC gibt an, wie viele Sekunden aktuell im History Buffer gespeichert sind
Außerdem wird der History-Buffer nach einem Reset jetzt komplett gelöscht.
Du kannst es gerne mal testen und mir dann eine Rückmeldung geben.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.12, SSH KeyDir

PeterAC
Beiträge: 113
Registriert: 19.12.2014, 14:07
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von PeterAC » 27.04.2025, 18:15

hallo Uwe,

der erste Eindruck ist perfekt.
Der gewichtete Mittelwert funktioniert auf Anhieb. Den zeitlich gewichteten Mittelwert direkt auszugeben und nicht (wie ich ursprünglich im Sinn hatte) die Summe über die zeitlich gewichteten Eingangsgrößen ist auf jeden Fall die bessere Wahl gewesen. So muss ich die Division durch das Zeitintervall gar nicht mehr selber ausführen. Dadurch konnte ich meine bisherigen Routinen 1:1 belassen. Die einzige nötige Änderung war, das Rücksetzen des Buffers direkt auszuführen und nicht bis zum nächstfolgenden Eingangswert zu verzögern, aber das war ja genauso gewünscht.
Das Integral kann man aber immer noch erhalten, indem der ausgegebene Mittelwert mit dem aufgelaufenen Zeitintervall HISTORY_SEC multipliziert wird, also alles optimal für Rückwärts-Kompatibilität bei gleichzeitiger Flexibilität.
Die Wirkung von HISTORY_LEN und HISTORY_UPDATE habe ich noch nicht ausprobiert, ist mir aber auch noch nicht ganz klar. Bedeutet HISTORY_LEN, dass nach Ablauf der Zeit (max. 1440 Minuten = 1 Tag) ein automatischer RESET erfolgt und HISTORY_UPDATE, dass vor Ablauf des Intervalls die Datenpunkte gar nicht aktualisiert werden? Beides zusammen hieße dann, dass meine zeitgesteuerte Abfrage und Reset der Statistik nicht mehr nötig wären und das Transform-Device den Ablauf komplett alleine abarbeitet und man nur noch auf die Aktualisierung der Datenpunkte triggern müsste (z.B. fürs Logging). Was wäre dann der Startzeitpunkt dafür, der letzte manuelle oder automatische Reset?
Im Moment habe ich in beiden Parametern noch 0 stehen. Die Datenpunkte bilden aber weiterhin den fortlaufenden Mittelwert seit dem letzten Reset ab. Das wäre ok in Bezug auf HISTORY_LEN aber bei HISTORY_UPDATE steht "0..keine Aktualisierung". Oder soll "0" bedeuten, dass eben keine Verzögerung bei der Aktualisierung erfolgt und die Statistik-Werte fortlaufend aktualisiert werden?
Ich probier's mal aus,
Was ist nun die Bedeutung von HISTORY_BUFFER? Ist der Parameter für den "gewichteten" Modus noch relevant, oder nur für den Standard-Modus? Im Verlauf eines Tages könnten ja leicht sehr viel mehr Messwerte eintreffen als 255.

Benutzeravatar
uwe111
Beiträge: 4900
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 262 Mal
Kontaktdaten:

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von uwe111 » 27.04.2025, 20:41

Hallo Peter,
PeterAC hat geschrieben:
27.04.2025, 18:15
Was ist nun die Bedeutung von HISTORY_BUFFER? Ist der Parameter für den "gewichteten" Modus noch relevant, oder nur für den Standard-Modus? Im Verlauf eines Tages könnten ja leicht sehr viel mehr Messwerte eintreffen als 255.
Ja, auch im gewichteten Modus gibt er die Anzahl der maximal abgespeicherten Werte im Ringbuffer an. Mit einer kleinen Ausnahme. Bei aufeinanderfolgenden gleichen Werten, wird einfach die abgespeicherte Wichtung (Sekunden) des letzten Wertes erhöht.
Zum Beispiel benötigt man im gewichteten Modus für die Speicherung dieser 7 Messwerte: "1.0 2.0 3.0 3.0 3.0 2.0 2.0" nur 4 Speicherzellen im Ringbuffer.
Mit HISTORY_LEN kannst Du den Buffer zusätzlich zeitlich begrenzen. Also bei HISTORY_LEN=15 werden ältere gespeicherte Statistikwerte im Ringbuffer mit jeder Aktualisierung gelöscht. Der HISTORY_BUFFER muss natürlich groß genug sein, dass die Werte auch reinpassen. Sonst wird das Intervall ja bereits durch dessen Größe begrenzt. Also HISTORY_LEN=1440 und HISTORY_BUFFER=5 werden wahrscheinlich keinen Sinn machen und in diesem Fall das gleiche Ergebnis wie HISTORY_LEN=0 liefern.
Mit HISTORY_UPDATE wir die Aktualisierung der Statistikwerte zusätzlich mindestens alle X Minuten ausgeführt. Also wenn Du z.B. alle 5 Minuten Updates vom Sensor bekommst und HISTORY_LEN=15 und HISTORY_UPDATE=2 setzt, dann werden die Statistikwerte zusätzlich 2 und 4 Minuten nach jedem Sensor-Update berechnet und auf der CCU aktualisiert. (inkl. Einkürzung des Ringbuffers auf 15 Minuten vor jeder Berechnung)

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.12, SSH KeyDir

PeterAC
Beiträge: 113
Registriert: 19.12.2014, 14:07
Hat sich bedankt: 7 Mal
Danksagung erhalten: 9 Mal

Re: Wrapper/Transform Vorschläge für Erweiterungen

Beitrag von PeterAC » 28.04.2025, 17:43

Hallo Uwe,

vielen Dank für die Erklärung, das mit der Ausnutzung der Redundanz habe ich verstanden.

Für HISTORY_LEN habe ich mir einen Test gebastelt und glaube, es nun auch zu verstehen. Ich habe ein neues Wrapper-Device mit HISTORY_LEN=1 und HISTORY_BUFFER=100 kreiert und lasse ein Gerät, dass alle 5-30 Sekunden einen Wert erzeugt, an das Wrapper-Device senden. Normalerweise würde der Buffer sich immer weiter füllen, bis die 100 erreicht sind. Mit HISTORY_LEN=1 stagniert die Angabe HISTORY_SEC nach 1 Minute auf dem Wert 60 sec. Die Anzeige HISTORY_FILL geht ab dann mal etwas rauf bzw. runter und spiegelt dabei die Anzahl der Daten wieder, die während der letzten 60 sec eingetroffen sind, d.h. aller früheren Werte im Buffer werden verworfen.

HISTORY_UPDATE glaube ich nun auch zu verstehen. Normalerweise würde ein neuer MEAN-Wert nur mit einem neu eintreffenden Wert vom speisenden Datenpunkt entstehen. Mit HISTORY_UPDATE wird aber ein neuer MEAN-Werte nach der eingestellten Zeitspanne in jedem Fall erzeugt, selbst wenn kein neuer Input eingetroffen ist. Dieser neue MEAN-Wert wäre vielleicht erst einmal identisch mit dem letzten, würde sich aber ändern, wenn ältere Daten aus dem Puffer rutschen (iA. von HISTORY_LEN) , bis zuletzt nur noch der letzte echte Messwert wiederholt würde. Ich verstehe, dass man damit das Problem lösen kann, das manchmal Sensoren tagelang keine neuen Werte liefern.

Was ich noch nicht verstanden habe, ist wie mit nur 255 Einträgen im Puffer ein ganzer Tag mit korrekter Wichtung erfasst werden kann. Einige meiner Sensoren produzieren alle paar Sekunden schon wieder einen neuen Wert, wenn genügend Action in den Messungen ist. Da bin ich im Moment schon froh, dass die 255 so gerade noch die 5 Minuten abdecken.

Oder machst du es etwa so, dass beim Überlauf des Ringpuffers der bis dahin ermittelte gewichtete Mittelwert mit der bisherigen Gesamtzeit neu gewichtet wird, wenn der Zeitraum im Puffer die HISTORY_LEN noch nicht ausgeschöpft hat, und dann nur noch eine Speicherstelle belegt? Das könnte man ja beliebig lange so fortsetzen. Wenn neue Messwerte kommen und der Geamtzeitraum irgendwann über HISTORY_LEN hinausgehen würde, könnte die Wichtung dieses ersten Wertes wieder reduziert werden, so dass die Gesamtzeit wieder mit der HISTORY_LEN übereinstimmt. Allerdings ist es nicht ganz dasselbe wie ein gleitender Mittelwert, da dabei die Dynamik der Vorgeschichte verlorengeht.

VG

Antworten

Zurück zu „CUxD“