v1.8.3 , fix importante a media e correzione

This commit is contained in:
marco.locatelli@steamware.net
2023-06-29 15:17:54 +02:00
parent 98d4e5e3f4
commit da12979c6a
+19 -37
View File
@@ -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