From da12979c6a64dfc23fed2cecc78ba5bcd89ad6db Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Thu, 29 Jun 2023 15:17:54 +0200 Subject: [PATCH] v1.8.3 , fix importante a media e correzione --- sampler/FTSampler.py | 56 +++++++++++++++----------------------------- 1 file changed, 19 insertions(+), 37 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index ae9b600..00789f8 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -193,48 +193,30 @@ def calculateValue(): den = abs(float(v1)-float(v2)) if(den < 0.05): den = 0.05 - # calcolo il valore risultante pulito (senza correzioni) + # calcolo il valore risultante RealTime pulito (senza correzioni) XVal = (float(v2)/float(den)) redSrv0.set('RTDATA:VALUE:RAW',round(XVal,decimalsCount)) - # Smoothing EWMA valori "grezzi" - strValInRaw = XVal - # EWMAx RAW RILEGGO DA REDIS vecchio valore - oldValRaw = float(redSrv0.get('RTDATA:VALUE:SMRAW')) - #if(oldValRaw == 0): - # oldValRaw = 0.001 - # se variazione < 50% smooth, altrimenti usa il valore nuovo - #if((abs(XVal - oldValRaw) / oldValRaw) < 0.9): - # # effettuo smoothing valore - strValInRaw = (XVal/eFact) + (oldValRaw * (eFact-1) / eFact) - redSrv0.set('RTDATA:VALUE:SMRAW',round(strValInRaw,decimalsCount)) + # # correzione fattore di scala K2 su cifre significative + # corrDecCount = decimalsCount - int(round(math.log(float(k2),10),0)) + # if (corrDecCount < 0): + # corrDecCount = 0 + # applicazione correzioni (costanti k1*x^2, k2*x e offset) in RT + YVal = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) + # redSrv0.set('RTDATA:VALUE:REAL',round(YVal,corrDecCount)) + redSrv0.set('RTDATA:VALUE:REAL',round(YVal,decimalsCount)) - # applicazione correzioni (costanti k1*x^2, k2*x e offset) - newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) - # correzione fattore di scala K2 su cifre significative - corrDecCount = decimalsCount - int(round(math.log(float(k2),10),0)) - if (corrDecCount < 0): - corrDecCount = 0 - #redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) - redSrv0.set('RTDATA:VALUE:REAL',round(newValue,corrDecCount)) - #if(newValue > 0): - # redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) - #else: - # newValue = 300 - # redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) - - # Smoothing EWMA valori corretti (fattori k1 k2) - strValIn = newValue - # EWMA: RILEGGO DA REDIS vecchio valore - oldVal = float(redSrv0.get('RTDATA:VALUE:SMOOTHED')) - #if(oldVal == 0): - # oldVal = 0.001 * float(k2) - ## se variazione < 50% smooth, altrimenti usa il valore nuovo - #if((abs(newValue - oldVal) / oldVal) < 0.9): - # # effettuo smoothing valore - strValIn = (newValue/eFact) + (oldVal * (eFact-1) / eFact) - redSrv0.set('RTDATA:VALUE:SMOOTHED',round(strValIn,decimalsCount)) + # Smoothing EWMA valori "grezzi" (= medio sul passato) --> ottengo valori "X filtrati" + # RILEGGO DA REDIS vecchio valore + XValOld = float(redSrv0.get('RTDATA:VALUE:SMRAW')) + XValEwma = (XVal/eFact) + (XValOld * (eFact-1) / eFact) + redSrv0.set('RTDATA:VALUE:SMRAW',round(XValEwma,decimalsCount)) + # applicazione correzioni (costanti k1*x^2, k2*x e offset) sul valore "X filtrato" + YValEwma = (float(k1)*float(XValEwma)*float(XValEwma))+(float(k2)*float(XValEwma))+float(offset) + # redSrv0.set('RTDATA:VALUE:SMOOTHED',round(YValEwma,corrDecCount)) + redSrv0.set('RTDATA:VALUE:SMOOTHED',round(YValEwma,decimalsCount)) + # init array smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) initArray = [0.0] * 8