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

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

Beitrag von PeterAC » 05.05.2025, 19:15

Nachtrag 2:
Ich hatte bislang angenommen, dass der 1-Minuten-Zeitraum stets vom letzten Eingangswert zurückgerechnet wird. Das frühere Testsignal war daher durch die Triggerperiode von 8 s auch so konstruiert, dass innerhalb des Zyklus kein Eingangswert genau auf eine Minutengrenze fallen konnte, bzw. der längste Abstand innerhalb einer Minute vor dem letzten Signal 56 Sekunden betrug (7*8) und das nächstfrühere Signal 64 Sekunden vor dem letzten Signal lag.

Nun ist mir die Vermutung gekommen, dass der Minutenzeitraum dasselbe Minutenraster wie die Systemzeit hat. Um daraus möglicherweise enstehende Abtastprobleme testweise auszuschließen, habe ich das Testsignal so modifiziert, dass ein neuer Wert niemals auf eine Minutengrenze der Systemzeit fällt. Außerdem habe ich die Signalwerte so modifiziert, dass die Werte für den Mittelwert stets maximal zwei Nachkommastellen haben.
Das modifizierte Testsignal wird nun erzeugt, indem das Zeitmodul alle 6 Sekunden triggert (also genau 10/min), das Skript für die Signalerzeugung aber noch mit 3 Sekunden Verzögerung ausgeführt wird, d.h. bei 3,9,15,21, ..., 57, ..., 117 Sekunden.

Code: Alles auswählen

object o = dom.GetObject("Test:1").DPByHssDP("SET_STATE");
object o1 = dom.GetObject("Test:1").DPByHssDP("STATE");
real rVal;
integer iLT = ((localtime.ToInteger() % 84600) % 120) / 6;

if (iLT == 5) {rVal = 0.555;}
else {rVal = 1.005+iLT.ToFloat()/100.0;} 

! WriteLine(iLT);
! WriteLine(rVal);
o.State(rVal);
! WriteLine(o1.State());
object oLogit = dom.GetObject("CUxD.CUX2801001:1.LOGIT");
oLogit.State("Wrapper"#";"#rVal);
Die Zykluslänge ist wie zuvor 120 Sekunden. Das Signal durchläuft nun die Werte 1.005, 1.105, ..., 1.195, wobei er 6. Wert nicht 1.155 sondern 0.555 ist. Der Mittelwert über beliebige zehn aufeinanderfolgenden Wert hat dadurch immer maximal zwei Dezimalstellen.


Das Ergebnis im Log-File sieht dann so aus:
Screenshot 2025-05-05 at 18-36-37 CUxD-Highcharts.png
Dementsprechend habe ich die Analyse mittels Excel (Tabelle1_4) ebenfalls angepasst. Nun stimmt (mit Verschiebung) alles exakt überein:
MEAN Check-3.png
VG,
Peter
Dateianhänge
Statistik Test.xlsx
(29.85 KiB) 10-mal heruntergeladen

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 » 05.05.2025, 20:52

Hallo Peter,
PeterAC hat geschrieben:
04.05.2025, 15:27
Das Test-Skript ist dasselbe wie zuvor. Die Daten aus von MEAN habe ich aus dem Log-File herausgelesen, wobei ich mich frage ob die Ausgabe auf zwei Dezimalstellen begrenzt ist.
Das CUxD Transform Device begrenzt die Dezimalstellen auf 3. Falls Du nur 2 Dezimalstellen bekommst, wird das vermutlich durch die WebUI begrenzt.
PeterAC hat geschrieben:
05.05.2025, 19:15
Nun ist mir die Vermutung gekommen, dass der Minutenzeitraum dasselbe Minutenraster wie die Systemzeit hat.
Keine Ahnung, was Du damit meinst. Der Minutenzeitraum beim Update wird vom letzten Eingangswert in Sekunden berechnet und der Minutenzeitraum bei der Pufferlänge vom aktuellen Ausgabewert in Sekunden zurück.
Falls Dich die Daten hinter der Berechnung interessieren, dann kannst Du sie Dir gerne im CUxD Logfile ansehen.
Dazu kannst Du im CUxD-Setup z.B.:

Code: Alles auswählen

LOGFILE=/tmp/cuxdlog.txt
LOGSIZE=5000000
eintragen.

wenn Dein CUxD Gerät die Seriennummer CUX9000001 hat, kannst Du Dir dann über den OS-Befehl:

Code: Alles auswählen

grep "DBG: CUX9000001" /tmp/cuxdlog.txt
ein paar Werte und den Ringpuffer bei jeder Statistik-Berechnung anzeigen lassen.

So sieht das z.B. dann bei HISTORY_SIZE=5 aus:

Code: Alles auswählen

05.05.2025 20:30:47 [4461] {540312} DBG: CUX9000001 - (7.000) f(5) s(5) li(0) i(1) d(31) 9.000:31 6.000:0 7.000:0 1.000:239 8.000:30
Die Werte hinter dem Gerät haben folgende Bedeutung:
(Eingabewert) f(Werte im Puffer) s(HISTORY_SIZE) li(last_index) i(next index) d(Wichtung in Sekunden) Wert0:Wichtung0 ... WertN:WichtungN
Bei abgelaufenen (HISTORY_LEN in Minuten) Werten wird die Wichtung im Puffer auf 0 gesetzt.

Ein Eingabwert landet erst beim folgenden Eingabewert oder nach Ablauf von HISTORY_UPDATE im Puffer, da ja dann erst die Wichtung bekannt ist. Daraus ergibt sich auch die Verschiebung bei der Statistikberechnung mit gewichteten Werten.

Vielleicht hilft Dir das bei der Analyse und weiteren Tests weiter.

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 » 05.05.2025, 23:13

Hallo Uwe,
Das CUxD Transform Device begrenzt die Dezimalstellen auf 3. Falls Du nur 2 Dezimalstellen bekommst, wird das vermutlich durch die WebUI begrenzt.
Ich habe die Zahlenwerte meist aus den CUX-Highcharts mithilfe des Tooltips gesammelt. Allerdings sind sie auch im CUX-Devlog nur mit zwei Dezimalstellen abgelegt. Ich schreibe sie nach einer Aktualisierung des Datenpunktes (hier "MEAN") mit

Code: Alles auswählen

oLogit.State(o_Name#";"#o.Value()+3.0);
da hinein. "o" ist das triggernde Objekt (hier Test:1.MEAN). Die "+3.0" dient der Staffelung im Diagramm. Da sind bei "MEAN" nur 2 Dezimalstellen zu sehen.

Hier ist noch ein Beispiel aus CUX-Devlog:

Code: Alles auswählen

2025-05-05T19:45:57 Wrapper 1.195000			: generierter Input
2025-05-05T19:45:57 Test:1_STATE 2.195000		: STATE + 1.0 ins CUX-Devlog geschrieben (hier sind tatsächlich 3 Dezimalstellen!)
2025-05-05T19:45:57 Test:1_MAX 6.200000			: MAX + 5.0 im CUX-Devlog (sollte eigentlich 1.195 + 5.0 = 6.195 sein)
Das Logfile sehe ich mir morgen an, jetzt ist es zu spät. Das mit dem Minutenraster schaffe ich heute auch nicht mehr, ich gucke mir erst einmal auch das CUXD-Log an.

VG,
Peter

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.05.2025, 07:16

Hallo Uwe,

zunächst noch ein kurzes Update zu den Dezimalstellen. Ich schreibe nun immer denselben Wert 1.005 mit SET_STATE. Während STATE das korrekt mit drei Dezimalstellen wiedergibt, liefern alle Statistik-Datenpunkte nur den Wert 1.000. CUXDLOG.TXT zeigt aber, dass die Werte im Buffer die korrekten drei Dezimalstellen haben:

06.05.2025 06:35:51.12 [13814] DBG: CUX9000011 - (1.005) f(2) s(12) li(1) i(2) d(6) 1.185:0 1.005:60

Hier sieht alles ok aus, der ursprüngliche Eingangswert (1.185) steht zwar noch drin wird aber mit Wichtung 0 nicht mehr berücksichtigt. Der seither immer wiederholte Eingangswert (1.005) ist in seiner Wichtung auf 60 begrenzt.

Um Fehler beim Daten-Logging in devlog.txt auszuschließen habe ich das mit SDV überprüft:
SDV.png
SDV.png (21.27 KiB) 229 mal betrachtet
HQ WebUI liefert das gleiche Resultat
HQ WebUI.png
Der HISTORY_SEC-Datenpunkt läuft übrigens immer weiter und ist inzwischen bei 1550.

Ich stelle mir später wieder den ursprünglichen Test-Fall ein und schaue mir an, was dazu das CUXDLOG sagt. Vielleicht bekomme ich damit heraus, wie der Wert 1,07 entsteht.

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.05.2025, 10:23

Hallo Peter,

mit der neuen CUxD Testversion sollten jetzt 3 Dezimalstellen für MEAN, MEDIAN, MIN und MAX ausgegeben werden.

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.05.2025, 12:33

Hallo Uwe,

im Archiv scheint die voerherige Version zu stecken. Sie meldet sich mit 2.12.5 und "cuxd" ist vom 02.05.25.

Jedenfalls hat der Blick in CUXDLOG.TXT das Aha-Erlebnis gebracht. Mir war nicht bewusst, dass der älteste Eingangswert, der schon vor dem Beginn des aktuellen Minutenintervalls eingetroffen ist und dessen Messintervall typischerweise nur teilweise in das Minutenintervall fällt auch noch beiträgt und mit der Dauer gewichtet wird, die zwischen Beginn des Minutenintervall und dem Eintreffen des ersten darin liegenden Eingangswert liegt.

Ich hatte dagegen nur ja/nein ausgewertet, d.h. wenn der Eingangswert noch im Minutenintervall lag, wurde er mit seinem ganzen Abstand zum nachfolgenden Eingangswert berücksichtigt. Lag er nicht mehr darin, dann überhaupt nicht.

Damit kann ich nun die Ausgabe von MEAN mit der entsprechenden Offline-Berechnung in reproduizeren. Zunächst der ursprüngliche Testfall mit dem Wert 0.5 beim 8. Schritt:
MEAN Check-4.png
Nun noch eine Abwandlung davon, mit dem Wert 0.5 beim 6. Schritt:
MEAN Check-5.png
Kommt beides fast genau hin, der verbliebene minimale Unterschied resultiert aus der (noch) fehlenden 3. Dezimalstelle.

Danach bleibe aus meiner Sicht nur noch die Frage, ob HISTORY_SEC noch geändert werden sollte, so dass es den tatsächlich ausgewerteten Zeitraum angibt, auch wenn sich der Eingangswert immer wiederholt, oder ob der Wert eventuell anders interpretiert werden sollte.

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.05.2025, 12:53

PeterAC hat geschrieben:
06.05.2025, 12:33
im Archiv scheint die voerherige Version zu stecken. Sie meldet sich mit 2.12.5 und "cuxd" ist vom 02.05.25.
Oh, das war mein Fehler. Jetzt bitte nochmal.
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 » 06.05.2025, 13:07

Hallo Peter,
PeterAC hat geschrieben:
06.05.2025, 12:33
Danach bleibe aus meiner Sicht nur noch die Frage, ob HISTORY_SEC noch geändert werden sollte, so dass es den tatsächlich ausgewerteten Zeitraum angibt, auch wenn sich der Eingangswert immer wiederholt, oder ob der Wert eventuell anders interpretiert werden sollte.
Wenn im Buffer nur 1 Wert für die Berechnung vorhanden ist (HISTORY_FILL=1), dann werden als HISTORY_SEC die Sekunden ausgegeben, seit wann dieser Wert im Buffer steht. Erst wenn ein zweiter (unterschiedlicher) Wert einläuft, dann kürzt HISTORY_LEN den Puffer für die Statistik-Berechnung ein. Auf die Statistik-Berechnung hat dieser Wert ja keinen Einfluss, man könnte ihn aber in so einem Fall für andere Anwendungen nutzen.

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.05.2025, 20:09

Hallo Uwe,

das klärt es. Es gibt ja immer viele Möglichkeiten solche Konzepte zu implementieren, da kann man schon mal etwas falsch verstehen. Und so gibt es noch mehr Anwendungsmöglichkeiten.

Auf jeden Fall läuft jetzt alles perfekt (mit der "echten" 2.12.6) , super Sache geworden!

Vielen Dank für die tolle Erweiterung und viele Grüße,
Peter

Antworten

Zurück zu „CUxD“