From 774966bc03b2a5bf393a61462e731887a352c4cd Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 27 Jun 2023 10:30:23 +0200 Subject: [PATCH] Gestione parametro EWMA --- sampler/FTSampler.py | 9 +++++++-- server/FTServer.py | 10 ++++++++++ server/templates/settings.html | 16 ++++++++++++++-- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 61b9aa8..a26293d 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -68,6 +68,8 @@ if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 0) if redSrv0.get('SETTINGS:SMOOTHING:FACTOR') is None: redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 10) +if redSrv0.get('SETTINGS:SMOOTHING:EFACT') is None: + redSrv0.set('SETTINGS:SMOOTHING:EFACT', 3) if redSrv0.get('SETTINGS:PASSWORD:CURRENT') is None: redSrv0.set('SETTINGS:PASSWORD:CURRENT',"-") if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: @@ -183,6 +185,11 @@ def calculateValue(): k1 = getRedisVal('RTDATA:VALUE:K1CONST') k2 = getRedisVal('RTDATA:VALUE:K2CONST') offset = getRedisVal('RTDATA:VALUE:OFFSET') + eFact = getRedisVal('RTDATA:SMOOTHING:EFACT') + # check val min di 1 x denom EWMA... + if(eFact < 1): + eFact = 1 + den = abs(float(v1)-float(v2)) if(den < 0.05): den = 0.05 @@ -199,7 +206,6 @@ def calculateValue(): # se variazione < 50% smooth, altrimenti usa il valore nuovo if((abs(XVal - oldValRaw) / oldValRaw) < 0.5): # effettuo smoothing valore - eFact = 3 strValInRaw = (XVal/eFact) + (oldValRaw * (eFact-1) / eFact) redSrv0.set('RTDATA:VALUE:SMRAW',round(strValInRaw,decimalsCount)) @@ -221,7 +227,6 @@ def calculateValue(): # se variazione < 50% smooth, altrimenti usa il valore nuovo if((abs(newValue - oldVal) / oldVal) < 0.5): # effettuo smoothing valore - eFact = 3 strValIn = (newValue/eFact) + (oldVal * (eFact-1) / eFact) redSrv0.set('RTDATA:VALUE:SMOOTHED',round(strValIn,decimalsCount)) diff --git a/server/FTServer.py b/server/FTServer.py index 2016517..494a256 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -129,6 +129,7 @@ def api_channels_all(): 'RealDateStatus' : getRedisVal('SETTINGS:TIME:REAL'), 'SelPowerChannel' : getRedisVal('SETTINGS:POWER:CH'), 'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'), + 'EFact' : getRedisVal('SETTINGS:SMOOTHING:EFACT'), 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'), 'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'), @@ -165,6 +166,7 @@ def api_channels_current(): 'Offset' : getRedisVal('RTDATA:VALUE:OFFSET'), 'CalcUMeasure' : getRedisVal('RTDATA:VALUE:UMEASURE'), 'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'), + 'EFact' : getRedisVal('SETTINGS:SMOOTHING:EFACT'), 'ChanThresh' : getRedisVal('SETTINGS:POWER:THRESH'), 'timeSrv' : getRedisVal('RTDATA:TIME:SRV'), 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), @@ -417,6 +419,14 @@ def setSmoothFact(): # rimando in settings return redirect("/settings") +@flaskApp.route("/api/v1/eFact", methods=['POST']) +def setSmoothFact(): + eFactor = request.form['EFact'] + redSrv0.set('SETTINGS:SMOOTHING:EFACT', eFactor) + redSrv0.save() + # rimando in settings + return redirect("/settings") + @flaskApp.route("/api/v1/frequency", methods=['POST']) def setWriteFrequency(): #funzione set frequenza scrive su redis LOG:FREQ prendendolo dall'input in pagina html con nome LogFreq diff --git a/server/templates/settings.html b/server/templates/settings.html index da56242..b278d21 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -39,6 +39,7 @@ $("#UniMisura").val(result.UniMisura); $("#ChanThresh").val(result.ChanThresh); $("#SmoothFact").val(result.SmoothFact); + $("#EFact").val(result.EFact); $("#CalcUMeasure").val(result.CalcUMeasure); $("#MinUptime").val(result.MinUptime); // inizio nascondendo div2 e div3 @@ -417,7 +418,7 @@ @@ -429,7 +430,18 @@
- + +
+ + +
+
+
+ Valore per EWMA:   +
+ +
+