diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 7ce3a45..0d9e2db 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -7,6 +7,8 @@ import os import os.path import FTL.FTLog +from os.path import exists + FTL.FTLog.Write(" FTLogger started") #configurazione per lavorare su server redis locale @@ -58,8 +60,10 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: #funzione salva time+data e otto valori letti su file SE LOG è 1 def fileSave(): - resultValue = getRedisVal('RTDATA:VALUE:REAL') - smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED') + rawIstant = getRedisVal('RTDATA:VALUE:RAW') + fixedIstant = getRedisVal('RTDATA:VALUE:REAL') + rawAverage = getRedisVal('RTDATA:VALUE:SMRAW') + fixedAverage = getRedisVal('RTDATA:VALUE:SMOOTHED') currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') workingDirectory = (DATA_path+currentFolder) #dò un nome al nuovo file @@ -68,10 +72,24 @@ def fileSave(): rawLastLog = datetime.datetime.now() #format date e time con strftime() lastLog = rawLastLog.strftime(dateFormat) - try: + + # filepath completo + filePath = workingDirectory+"/"+dataFileName + + # verifico se file esista + if(exists(filePath)): outFile = open(workingDirectory+"/"+dataFileName, "a") - except FileNotFoundError: + else: outFile = open(workingDirectory+"/"+dataFileName, "w+") + firstRow = "Data Ora;" + firstRow += "Ch A;" + firstRow += "Ch B;" + firstRow += "Istant Grezzo;" + firstRow += "Istant Corretto;" + firstRow += "Mediato Grezzo;" + firstRow += "Mediato Corretto" + outFile.write(firstRow+"\r\n") + # dichiaro una stringa in cui accumulo i valori csvRow = str(lastLog) +";" # scrivo le letture del canale A @@ -82,10 +100,14 @@ def fileSave(): chB = getRedisVal('SETTINGS:CHANNEL:B') chBOut = getRedisVal('RTDATA:OUT:'+str(chB)) csvRow += chBOut+";" - #aggiungo il valore risultante calcolato V1/(V2-V1) - csvRow += resultValue+";" - #aggiungo il valore risultante MEDIATO - csvRow += smoothedValue + #aggiungo il valore istant raw + csvRow += rawIstant+";" + #aggiungo il valore istant fixed + csvRow += fixedIstant+";" + #aggiungo il valore average raw + csvRow += rawAverage+";" + #aggiungo il valore average fixed + csvRow += fixedAverage # scrivo in blocco la riga dei valori outFile.write(csvRow +"\r\n") outFile.close() diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index a7524cb..9533ceb 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -56,8 +56,12 @@ if redSrv0.get('SETTINGS:LOG:EXETIME') is None: redSrv0.set('SETTINGS:LOG:EXETIME', 1) if redSrv0.get('RTDATA:VALUE:SMOOTHED') is None: redSrv0.set('RTDATA:VALUE:SMOOTHED', 1) +if redSrv0.get('RTDATA:VALUE:RAW') is None: + redSrv0.set('RTDATA:VALUE:RAW', 1) if redSrv0.get('RTDATA:VALUE:REAL') is None: redSrv0.set('RTDATA:VALUE:REAL', 1) +if redSrv0.get('RTDATA:VALUE:SMRAW') is None: + redSrv0.set('RTDATA:VALUE:SMRAW', 1) if redSrv0.get('SETTINGS:POWER:THRESH') is None: redSrv0.set('SETTINGS:POWER:THRESH', 0) if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: @@ -182,22 +186,41 @@ def calculateValue(): den = abs(float(v1)-float(v2)) if(den < 0.01): den = 0.01 + # calcolo il valore risultante pulito (senza correzioni) XVal = (float(v2)/float(den)) - # applicare costanti k1*x^2, k2*x e offset + 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.01 + # 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)) + + # applicazione correzioni (costanti k1*x^2, k2*x e offset) newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) + + # Smoothing EWMA valori corretti (fattori k1 k2) strValIn = newValue - # EWMA: RILEGGO DA REDIS vecchio valore + # EWMA: RILEGGO DA REDIS vecchio valore oldVal = float(redSrv0.get('RTDATA:VALUE:SMOOTHED')) if(oldVal == 0): oldVal = 0.01 - # se variazione < 50% smooth + # 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)) + # init array smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) initArray = [0.0] * 8 @@ -223,7 +246,7 @@ try: for counter in range(0,smoothFact,+1): # leggo gli 8 valori CHvalue = CH.ADS1256_GetAll() - floatArray = np.array(CHvalue, dtype=np.float) + floatArray = np.array(CHvalue, dtype=float) dataBox[counter] = floatArray*float(5.0/0x7fffff) # calcolo e scrittura ogni NUM PERIOD cicli if counter == (smoothFact-1): @@ -241,8 +264,6 @@ try: delta = endExec - now # attesa viene fatta sempre waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000 - #redSrv0.set('SETTINGS:MONITOR:WAITIME',waitTime) - #redSrv0.set('SETTINGS:MONITOR:DELTATIME',str(delta.microseconds/1000)) if(waitTime < 0.0): redSrv0.set('SETTINGS:WARNING:EXETIME',1) else: diff --git a/server/FTServer.py b/server/FTServer.py index 438370b..dcda749 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -26,6 +26,7 @@ led = LED(26) #assegno ipv4 statico ipv4 = '10.10.10.210' +#ipv4 = '10.74.82.210' #definisco directory /data dataDir='/home/pi/data/' @@ -131,7 +132,7 @@ def api_channels_all(): 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'), 'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'), - 'RealValue' : getRedisVal('RTDATA:VALUE:REAL'), + 'RealValue' : getRedisVal('RTDATA:VALUE:SMRAW'), 'Crono' : getRedisVal('SETTINGS:LOG:CRONO'), 'DisplayAlert' : displayWarning } diff --git a/server/templates/about.html b/server/templates/about.html index b119da5..754f803 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -25,11 +25,11 @@