From e0c2ac5c29f0bfdcd3539741620972746e358e06 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Mon, 7 Jun 2021 10:59:17 +0200 Subject: [PATCH 01/17] fix --- server/FTL/__pycache__/FTLog.cpython-37.pyc | Bin 665 -> 665 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/server/FTL/__pycache__/FTLog.cpython-37.pyc b/server/FTL/__pycache__/FTLog.cpython-37.pyc index 4519b7c05501576ef6de6688c041c787eae8d2c0..8a15c09256d8c4bf987ab2187384d7c036507bda 100644 GIT binary patch delta 19 ZcmbQqI+K;liI Date: Mon, 7 Jun 2021 14:18:03 +0200 Subject: [PATCH 02/17] update gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38389e3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyo +*.pyc \ No newline at end of file From 63af70a9df698940b03d75404021b5300f67adf2 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Mon, 7 Jun 2021 14:39:26 +0200 Subject: [PATCH 03/17] media mobile risultante --- sampler/FTSampler.py | 9 ++++++++- server/templates/logger.html | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index ff8fd12..1099e1f 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -194,6 +194,8 @@ def checkPowerOff(): redSrv0.set('SETTINGS:POWER:OFF',1) def calculateValue(): + decimalsCount = int(getRedisVal('SETTINGS:DECIMALS:COUNT')) + smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) ch1 = getRedisVal('SETTINGS:CHANNEL:A') ch2 = getRedisVal('SETTINGS:CHANNEL:B') v1 = getRedisVal('RTDATA:OUT:' + ch1) @@ -203,7 +205,12 @@ def calculateValue(): if(den < 0.001): den = 0.001 newValue = float(k)*(float(v2)/float(den)) - redSrv0.set('RTDATA:VALUE',round(newValue,3)) + strValIn = newValue + # EWMA: RILEGGO DA REDIS vecchio valore + oldVal = float(redSrv0.get('RTDATA:VALUE')) + # effettuo smoothing valore + strValIn = (newValue/smoothFact) + (oldVal * (smoothFact-1) / smoothFact) + redSrv0.set('RTDATA:VALUE',round(strValIn,decimalsCount)) # init oggetto lettura da try: diff --git a/server/templates/logger.html b/server/templates/logger.html index cfb429a..044f76c 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -5,7 +5,7 @@ diff --git a/server/templates/logger.html b/server/templates/logger.html index 044f76c..8bc1612 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -5,13 +5,16 @@ @@ -30,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.1.1 + V 1.2.0 diff --git a/server/templates/logger.html b/server/templates/logger.html index f3f37d9..6f392c4 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -30,13 +30,11 @@ // compilo i dati scaricati $("#SelChannelA").html(result.ChA); $("#OutputA").html(fixFloat(result.Outs[result.ChA],numCount)); - // $("#OutputA").html(result.Outs[result.ChA]); setGaugeA(divWidth,result.Outs[result.ChA],result.Outmin[result.ChA],result.Outmax[result.ChA]); $("#SelChannelB").html(result.ChB); $("#OutputB").html(fixFloat(result.Outs[result.ChB],numCount)); - // $("#OutputB").html(result.Outs[result.ChB]); setGaugeB(divWidth,result.Outs[result.ChB],result.Outmin[result.ChB],result.Outmax[result.ChB]); @@ -98,17 +96,13 @@ $("#CalcMeasure1").html(result.CalcUMeasure); $("#CalcMeasure2").html(result.CalcUMeasure); }}); - // A ogni giro di data refresh fix di tabella cartelle e tabella file - //timeoutFast = setTimeout(dataRefresh, intTime); }; function fixTables(){ fixFileTable(); fixFolderTable(); - // A ogni giro di data refresh fix di tabella cartelle e tabella file - //timeoutSlow = setTimeout(fixTables, intTimeSlow); } function setGaugeA(divWidth,chValA,outMinA,outMaxA){ diff --git a/server/templates/settings.html b/server/templates/settings.html index bec8ea1..b87b92c 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -24,6 +24,7 @@ $("#CurrOut").html(fixFloat(result.CurrOut, numCount)); $("#LogFreq").val(result.LogFreq); $("#WriteFreq").val(result.WriteFreq); + $("#TimeBeforeWrite").val(result.TimeBeforeWrite); $("#DecimalsCount").val(result.DecimalsCount); $("#ServerTime").html(result.timeSrv); $("#ddlChannels").val(result.numCh); @@ -64,8 +65,6 @@ $("#MinIn").html(result.MinIn); $("#MaxIn").html(result.MaxIn); }}); - - // timeoutSetting = setTimeout(refreshSettings, intTime); } function dataRefresh() { @@ -93,8 +92,6 @@ $("#ChanRealMax").html(result.ChRealMax); $("#LastSessionName").html(result.LastSessionName); }}); - - // timeout = setTimeout(dataRefresh, intTime); }; function saveMin(){ @@ -495,15 +492,20 @@
-
+
Periodo di campionamento (ms):  
-
+
Periodo di scrittura su file (ms):  
+
+ Ritardo prima scrittura su file (s):   + +
+
From 3a302fae04fa3e4b803f7307375345cab7266fbd Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Mon, 14 Jun 2021 11:58:57 +0200 Subject: [PATCH 10/17] calcolo parabola resistenze 1.2.1 --- sampler/FTSampler.py | 14 ++++++++------ server/FTServer.py | 9 ++++++--- server/templates/about.html | 2 +- server/templates/settings.html | 15 +++++++++++---- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index b607237..83dbe67 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -43,7 +43,6 @@ def getRmsVal(redisKey, numVal): # leggo lista da redis currList = redSrv0.lrange(redisKey, 0, numVal) numVal= len(currList) - # print (len(currList)) sumSquare=0 # per ogni elemento calcolo quadrato for curVal in range(0,numVal,+1): @@ -67,8 +66,10 @@ redSrv0.set('SETTINGS:LOG:STATUS',0) redSrv0.set('SETTINGS:POWER:OFF',0) if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None: redSrv0.set('SETTINGS:DECIMALS:COUNT',1) -if redSrv0.get('RTDATA:VALUE:KCONST') is None: - redSrv0.set('RTDATA:VALUE:KCONST', 1) +if redSrv0.get('RTDATA:VALUE:K1CONST') is None: + redSrv0.set('RTDATA:VALUE:K1CONST', 1) +if redSrv0.get('RTDATA:VALUE:K2CONST') is None: + redSrv0.set('RTDATA:VALUE:K2CONST', 1) if redSrv0.get('RTDATA:VALUE:OFFSET') is None: redSrv0.set('RTDATA:VALUE:OFFSET', 0) if redSrv0.get('SETTINGS:POWER:UPTIME') is None: @@ -203,13 +204,14 @@ def calculateValue(): ch2 = getRedisVal('SETTINGS:CHANNEL:B') v1 = getRedisVal('RTDATA:OUT:' + ch1) v2 = getRedisVal('RTDATA:OUT:' + ch2) - k = getRedisVal('RTDATA:VALUE:KCONST') + k1 = getRedisVal('RTDATA:VALUE:K1CONST') + k2 = getRedisVal('RTDATA:VALUE:K2CONST') offset = getRedisVal('RTDATA:VALUE:OFFSET') den = (float(v1)-float(v2)) if(den < 0.001): den = 0.001 - preOffset = float(k)*(float(v2)/float(den)) - newValue = float(preOffset)+float(offset) + XVal = (float(v2)/float(den)) + newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) strValIn = newValue # EWMA: RILEGGO DA REDIS vecchio valore diff --git a/server/FTServer.py b/server/FTServer.py index afa79dd..0e6819b 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -149,7 +149,8 @@ def api_channels_current(): #funzione api_channels_all: legge direttamente da redis, ritorna jsonify result = { 'numCh' : numCh, - 'CostanteK' : getRedisVal('RTDATA:VALUE:KCONST'), + 'CostanteK1' : getRedisVal('RTDATA:VALUE:K1CONST'), + 'CostanteK2' : getRedisVal('RTDATA:VALUE:K2CONST'), 'Offset' : getRedisVal('RTDATA:VALUE:OFFSET'), 'CalcUMeasure' : getRedisVal('RTDATA:VALUE:UMEASURE'), 'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'), @@ -430,8 +431,10 @@ def setDecimalsCount(): @flaskApp.route("/api/v1/kconst", methods=['POST']) def setKConst(): #scrive su redis la costante K - newKConst = request.form['KConst'] - redSrv0.set('RTDATA:VALUE:KCONST', newKConst) + newK1Const = request.form['K1Const'] + redSrv0.set('RTDATA:VALUE:K1CONST', newK1Const) + newK2Const = request.form['K2Const'] + redSrv0.set('RTDATA:VALUE:K2CONST', newK2Const) newOffset = request.form['Offset'] redSrv0.set('RTDATA:VALUE:OFFSET', newOffset) redSrv0.save() diff --git a/server/templates/about.html b/server/templates/about.html index b3b84ec..c35261b 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.2.0 + V 1.2.1
diff --git a/server/templates/settings.html b/server/templates/settings.html index b87b92c..23d82a8 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -32,7 +32,8 @@ $("#MaxOut").val(result.MaxOut); $("#MinIn").val(result.MinIn); $("#MaxIn").val(result.MaxIn); - $("#KConst").val(result.CostanteK); + $("#K1Const").val(result.CostanteK1); + $("#K2Const").val(result.CostanteK2); $("#Offset").val(result.Offset); $("#CurrentFolder").html(result.CurrentWorkFolder); $("#UniMisura").val(result.UniMisura); @@ -350,15 +351,21 @@
- Valori per calcolo (k & offset) + Valori per calcolo risultante = k1*x^2 + k2*x + offset
- Costante k:   + Costante k1:  
- + +
+
+
+ Costante k2:   +
+
From eff044934c96d5d3bb7282b33ccdd707cc6969a8 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Fri, 18 Jun 2021 16:44:30 +0200 Subject: [PATCH 11/17] 1.3.0, nuova gestione con vettori dei dati --- logger/FTLogger.py | 9 ++ sampler/FTSampler.py | 162 ++++++++++++++++------------------- server/FTServer.py | 6 +- server/templates/about.html | 2 +- server/templates/logger.html | 59 ++++++++----- 5 files changed, 124 insertions(+), 114 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index c90672b..c91758c 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -39,6 +39,7 @@ redSrv0.set(redWriteFreq,startingWriteFreq) redisTime = 'RTDATA:TIME:SRV' redSrv0.set('SETTINGS:LOG:STATUS',0) redSrv0.set('SETTINGS:POWER:OFF',0) +redSrv0.set('SETTINGS:LOG:CRONO', "00:00:00") if redSrv0.get('SETTINGS:LOG:WAITIME') is None: redSrv0.set('SETTINGS:LOG:WAITIME', 2) if redSrv0.get('SETTINGS:SELECTED_CH') is None: @@ -88,16 +89,24 @@ def fileSave(): outFile.write(csvRow +"\r\n") outFile.close() + #ciclo principale, salva time attuale e se LOG:STATUS è 1 fa fileSave() while(1): now = datetime.datetime.now() # solo se su redis LOG è 1 eseguo il ciclo principale if(getRedisVal('SETTINGS:LOG:STATUS') == "1"): + redSrv0.set('SETTINGS:LOG:CRONO', "00:00:00") #attendo 2 secondi all'avvio della registrazione if(getRedisVal('SETTINGS:LOG:WAITER') == "0"): time.sleep(int(getRedisVal('SETTINGS:LOG:WAITIME'))) + #salvo startTime per inizio cronometro registrazione + startTime = time.perf_counter() + #FTL.FTLog.Write("FTLogger: " + str(start_time)) redSrv0.set('SETTINGS:LOG:WAITER', 1) fileSave() + #a ogni fileSave() misuro tempo trascorso da inizio registrazione e lo mostro + crono = time.strftime('%H:%M:%S', time.gmtime(int(time.perf_counter() - startTime))) + redSrv0.set('SETTINGS:LOG:CRONO',crono) # riporto ultima esecuzione ad adesso endExec = datetime.datetime.now() # calcolo il delta dovuto alle esecuzioni diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 83dbe67..4155141 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -1,5 +1,6 @@ #!/usr/bin/python +from array import * import os import math import time @@ -7,6 +8,7 @@ import datetime import ADS1256 import redis import FTL.FTLog +import numpy as np FTL.FTLog.Write(" FTSampler started") @@ -25,45 +27,15 @@ def getRedisVal(redisKey): else: return redSrv0.get(redisKey).decode('utf-8') -def echoList(redisKey, numVal): - currList = redSrv0.lrange(redisKey, 0, numVal) - currString = '' - for curVal in range(0,numVal,+1): - currString = currString + ' ' + str(curVal) + ': ' + str((float)(currList[curVal].decode('utf-8'))) + ' | ' - print(currString) - -def putRedisListVal(redisKey, value, maxLen): - #echoList(redisKey, maxLen) - redSrv0.lpush(redisKey, value) - # se supero lunghezza --> rimuovo - redSrv0.ltrim(redisKey, 0, maxLen) - #echoList(redisKey, maxLen) - -def getRmsVal(redisKey, numVal): - # leggo lista da redis - currList = redSrv0.lrange(redisKey, 0, numVal) - numVal= len(currList) - sumSquare=0 - # per ogni elemento calcolo quadrato - for curVal in range(0,numVal,+1): - sumSquare = sumSquare + (float)(currList[curVal].decode('utf-8'))*(float)(currList[curVal].decode('utf-8')) - - # divido e faccio radice quadrata - rmsVal = math.sqrt(sumSquare / numVal) - - return rmsVal - -#intervallo in millisecondi fra un campionamento e il successivo -redSampleFreq = 'SETTINGS:LOG:FREQ' -redSrv0.set(redSampleFreq,100) - #definizioni variabili -redRmsList ='RTDATA:RMSLIST' redSamPer='SETTINGS:LOG:EXETIME' +redSampleFreq = 'SETTINGS:LOG:FREQ' #se non c'è un valore nei campi di redis, popolo il db redSrv0.set('SETTINGS:LOG:STATUS',0) redSrv0.set('SETTINGS:POWER:OFF',0) +if redSrv0.get('SETTINGS:LOG:FREQ') is None: + redSrv0.set('SETTINGS:LOG:FREQ', 50) if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None: redSrv0.set('SETTINGS:DECIMALS:COUNT',1) if redSrv0.get('RTDATA:VALUE:K1CONST') is None: @@ -119,11 +91,27 @@ for numCh in range(0,8,+1): if redSrv0.get('RTDATA:OUT:'+str(numCh)) is None: redSrv0.set('RTDATA:OUT:'+str(numCh),1) -#funzione salva time+data di log e otto valori su redis -def redisSave(CHvalue): - decimalsCount = int(getRedisVal('SETTINGS:DECIMALS:COUNT')) +# calcola la media (colonna x colonna) dei valori ricevuti +def calcMean(dataArray): + outValues = [0.0] * 8 smoothFunction= int(getRedisVal('SETTINGS:SMOOTHING:FUNCTION')) smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) + # verifico il TIPO di Smoothing richiesto: 0 none, 1 media semplice, 2 RMS + if (smoothFunction == 1): + # effettuo calcolo media mobile + outValues = np.sum(dataArray, axis=0) / smoothFact + elif (smoothFunction == 2): + # calcolo i quadrati + outValues = np.sqrt(np.sum(np.square(dataArray), axis=0) / smoothFact) + else: + # nessuno smooting, passa il primo dei sample acquisiti + outValues = dataArray[0] + # restituisco valori calcolati + return outValues + +#funzione salva time+data di log e otto valori su redis +def redisSave(CHvalues): + decimalsCount = int(getRedisVal('SETTINGS:DECIMALS:COUNT')) redLastLog = 'RTDATA:TIME:LOG' dateFormat ="%d/%m/%Y %H:%M:%S" rawLastLog = datetime.datetime.now() @@ -132,30 +120,11 @@ def redisSave(CHvalue): for chIndex in range(0,8,+1): redAreaIn = 'RTDATA:CH:'+str(chIndex) redAreaOut = 'RTDATA:OUT:'+str(chIndex) - redRmsArea = redRmsList+':'+str(chIndex) - innovazione = float("%.4f" % (CHvalue[chIndex]*5.0/0x7fffff)) - strValIn = innovazione - # verifico il TIPO di Smoothing richiesto: 0 none, 1 EWMA, 2 RMS - if (smoothFunction == 1): - # EWMA: RILEGGO DA REDIS vecchio valore - oldVal = float(redSrv0.get(redAreaIn)) - # effettuo smoothing valore - strValIn = (innovazione/smoothFact) + (oldVal * (smoothFact-1) / smoothFact) - - elif (smoothFunction == 2): - # accodo innovazioni - putRedisListVal(redRmsArea, innovazione, smoothFact) - # calcolo valore RMS - strValIn = getRmsVal(redRmsArea, smoothFact) - else: - # nessuno smooting - strValIn = innovazione - + strValIn = float("%.4f" % (CHvalues[chIndex])) #salvo valore IN filtrato - redSrv0.set(redAreaIn,round(strValIn,8)) - + redSrv0.set(redAreaIn,round(strValIn,decimalsCount)) # salvo i valori scalati in OUT - roundedOut = round(scaleVal(CHvalue[chIndex]*5.0/0x7fffff, chIndex), decimalsCount) + roundedOut = round(scaleVal(CHvalues[chIndex], chIndex), decimalsCount) redSrv0.set(redAreaOut,roundedOut) #funzione di refresh valori scalati @@ -207,9 +176,9 @@ def calculateValue(): k1 = getRedisVal('RTDATA:VALUE:K1CONST') k2 = getRedisVal('RTDATA:VALUE:K2CONST') offset = getRedisVal('RTDATA:VALUE:OFFSET') - den = (float(v1)-float(v2)) - if(den < 0.001): - den = 0.001 + den = abs(float(v1)-float(v2)) + if(den < 0.01): + den = 0.01 XVal = (float(v2)/float(den)) newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) @@ -225,38 +194,55 @@ def calculateValue(): strValIn = (newValue/eFact) + (oldVal * (eFact-1) / eFact) redSrv0.set('RTDATA:VALUE:SMOOTHED',round(strValIn,decimalsCount)) -# init oggetto lettura da +# init array +smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) +initArray = [0.0] * 8 +meanValues = [0.0] * 8 +dataBox = np.array([initArray] * smoothFact) +redisTime = 'RTDATA:TIME:SRV' + +# init oggetto lettura Digital Analog try: CH = ADS1256.ADS1256() CH.ADS1256_init() - + #ciclo principale while(1): - redisTime = 'RTDATA:TIME:SRV' - now = datetime.datetime.now() - dateFormat ="%d/%m/%Y %H:%M:%S" - lastLog = now.strftime(dateFormat) - redSrv0.set(redisTime,str(lastLog)) - CHvalue = CH.ADS1256_GetAll() - # salvo valori - redisSave(CHvalue) - # controllo soglia spegnimento - checkPowerOff() - #calcolo il valore k*[V2/(V1-V2)] + offset - calculateValue() - # riporto ultima esecuzione ad adesso - endExec = datetime.datetime.now() - # calcolo il delta time dovuto alle esecuzioni - delta = endExec - now - redSrv0.set('SETTINGS:EXE:TIME',str(delta)) - oldSPeriod=float(getRedisVal(redSamPer)) - newSPeriod=0.5*oldSPeriod+0.5*(float(delta.microseconds/1000)) - redSrv0.set(redSamPer,newSPeriod) - waitTime = int(getRedisVal(redSampleFreq)) / 1000 - delta.microseconds/1000000 - if(waitTime < 0.01): - waitTime = 0.01 - # attesa - time.sleep(waitTime) + # update freq campionamento da redis + sampleFreq = getRedisVal(redSampleFreq) + smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) + dataBox = np.array([initArray] * smoothFact) + for counter in range(0,smoothFact,+1): + now = datetime.datetime.now() + dateFormat ="%d/%m/%Y %H:%M:%S" + lastLog = now.strftime(dateFormat) + redSrv0.set(redisTime,str(lastLog)) + # leggo gli 8 valori + CHvalue = CH.ADS1256_GetAll() + floatArray = np.array(CHvalue, dtype=np.float) + dataBox[counter] = floatArray*float(5.0/0x7fffff) + # calcolo e scrittura ogni NUM PERIOD cicli + if counter == (smoothFact-1): + # faccio gli smoothing colonna x colonna + meanValues = calcMean(dataBox) + #salvo valori + redisSave(meanValues) + # controllo soglia spegnimento + checkPowerOff() + # calcolo il valore k*[V2/(V1-V2)] + offset + calculateValue() + # riporto ultima esecuzione ad adesso + endExec = datetime.datetime.now() + # calcolo il delta time dovuto alle esecuzioni + delta = endExec - now + # attesa viene fatta sempre + waitTime = int(sampleFreq) / 1000 - delta.microseconds/1000000 + if(waitTime < 0.01): + #FTL.FTLog.Write("delta: " + str(delta.microseconds/1000) + " | wait: " + str(waitTime*1000)) + waitTime = 0.01 + #FTL.FTLog.Write("delta: " + str(delta.microseconds/1000) + " | wait: " + str(waitTime*1000)) + # vera attesa + time.sleep(waitTime) #eccezione da ctrl+c in terminale e chiusura except KeyboardInterrupt: diff --git a/server/FTServer.py b/server/FTServer.py index 0e6819b..c9cfd49 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -17,6 +17,7 @@ import logging FTL.FTLog.Write(" FTServer started") +#silenzio i logger logging.getLogger('werkzeug').disabled = True os.environ['WERKZEUG_RUN_MAIN'] = 'true' @@ -123,7 +124,8 @@ def api_channels_all(): 'SelPowerChannel' : getRedisVal('SETTINGS:POWER:CH'), 'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'), 'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'), - 'RealValue' : getRedisVal('RTDATA:VALUE:REAL') + 'RealValue' : getRedisVal('RTDATA:VALUE:REAL'), + 'Crono' : getRedisVal('SETTINGS:LOG:CRONO') } # restituisce in formato json i dati letti da redis return jsonify(channelsData) @@ -497,5 +499,5 @@ def FTShutdown(): #dichiaro host ipv4 (ottenuto sopra utilizzando il modulo socket) if __name__ == "__main__": - FTL.FTLog.Write(" FTServer starting Flask Host!") + FTL.FTLog.Write(" FTServer starting Flask Hosting!") flaskApp.run(host=ipv4, port=80, debug=True) diff --git a/server/templates/about.html b/server/templates/about.html index c35261b..817335b 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.2.1 + V 1.3.0
diff --git a/server/templates/logger.html b/server/templates/logger.html index 6f392c4..c581a46 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -44,6 +44,7 @@ $("#CurrentFolder").html(result.CurrentWorkFolder); $("#ResultValue").html(result.ResultValue); $("#RealValue").html(result.RealValue); + $("#Crono").html(result.Crono); if(result.GateOpen == "0") { @@ -304,9 +305,9 @@
-
+
-
+
Canale A:
@@ -314,15 +315,15 @@
- - + +
-
+
Canale B:
@@ -330,41 +331,53 @@
- - + +
-
-
- Risultante = k*[B/(A-B)]+offset -
-
-
-
- Istant: - -
-
- Media: - +
+
+
+
+
+ Risultante B/(A-B) +
+
+
+
+
+
+ Istant: + +
+
+ Media: + +
+
+
+
+
-
-
+
-
+
+ +
+
From 628607688b881037006a72ce497c7a09105f057e Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Mon, 21 Jun 2021 12:46:09 +0200 Subject: [PATCH 12/17] 1.3.1 controllo campionamento --- logger/FTLogger.py | 4 +- sampler/FTDInOut.py | 4 +- sampler/FTSampler.py | 42 +++++++++++-------- server/FTServer.py | 14 +++++-- .../static/img/exclamation-triangle-fill.svg | 3 ++ server/templates/logger.html | 27 +++++++++++- 6 files changed, 69 insertions(+), 25 deletions(-) create mode 100755 server/static/img/exclamation-triangle-fill.svg diff --git a/logger/FTLogger.py b/logger/FTLogger.py index c91758c..7ce3a45 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -66,6 +66,7 @@ def fileSave(): dataFileName = getRedisVal('RTDATA:SESSION:NAME') dateFormat ="%d/%m/%Y %H:%M:%S" rawLastLog = datetime.datetime.now() + #format date e time con strftime() lastLog = rawLastLog.strftime(dateFormat) try: outFile = open(workingDirectory+"/"+dataFileName, "a") @@ -101,10 +102,9 @@ while(1): time.sleep(int(getRedisVal('SETTINGS:LOG:WAITIME'))) #salvo startTime per inizio cronometro registrazione startTime = time.perf_counter() - #FTL.FTLog.Write("FTLogger: " + str(start_time)) redSrv0.set('SETTINGS:LOG:WAITER', 1) fileSave() - #a ogni fileSave() misuro tempo trascorso da inizio registrazione e lo mostro + #a ogni fileSave() misuro tempo trascorso da inizio registrazione e lo mostro e format date e time con strftime() crono = time.strftime('%H:%M:%S', time.gmtime(int(time.perf_counter() - startTime))) redSrv0.set('SETTINGS:LOG:CRONO',crono) # riporto ultima esecuzione ad adesso diff --git a/sampler/FTDInOut.py b/sampler/FTDInOut.py index 27d293f..3ad221f 100644 --- a/sampler/FTDInOut.py +++ b/sampler/FTDInOut.py @@ -49,7 +49,7 @@ while (1): lastDate = datetime.datetime.now() #formato per data time nomefile: YYYYddmm_HMS format = "%Y%m%d_%H%M%S" - #format date e time adando strftime() + #format date e time con strftime() nameDate = lastDate.strftime(format) + ".txt" redSrv0.set('RTDATA:SESSION:NAME', nameDate) led.on() @@ -63,7 +63,7 @@ while (1): lastDate = datetime.datetime.now() #formato per data time nomefile: YYYYddmm_HMS format = "%Y%m%d_%H%M%S" - #format date e time adando strftime() + #format date e time con strftime() nameDate = lastDate.strftime(format) + ".txt" redSrv0.set('RTDATA:SESSION:NAME', nameDate) led.on() diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 4155141..a7524cb 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -34,6 +34,8 @@ redSampleFreq = 'SETTINGS:LOG:FREQ' #se non c'è un valore nei campi di redis, popolo il db redSrv0.set('SETTINGS:LOG:STATUS',0) redSrv0.set('SETTINGS:POWER:OFF',0) +if redSrv0.get('SETTINGS:WARNING:EXETIME') is None: + redSrv0.set('SETTINGS:WARNING:EXETIME',0) if redSrv0.get('SETTINGS:LOG:FREQ') is None: redSrv0.set('SETTINGS:LOG:FREQ', 50) if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None: @@ -160,7 +162,7 @@ def checkPowerOff(): actVal = float(getRedisVal('RTDATA:CH:' + str(powerChannel))) #controllo che il valore letto sia inferiore al valore impostato di soglia if(actVal < limitVal): - #controllo che il sistema sia acceso da 180 secondi prima di spegnere + #controllo che il sistema abbia superato l'uptime minimo impostato su redis UptimePower = getRedisVal('SETTINGS:POWER:UPTIME') sysUptime = os.popen("awk '{print $1}' /proc/uptime").readline() if float(sysUptime) > float(UptimePower): @@ -168,6 +170,7 @@ def checkPowerOff(): redSrv0.set('SETTINGS:POWER:OFF',1) def calculateValue(): + # funzione per calcolare valore risultante (B/A-B) decimalsCount = int(getRedisVal('SETTINGS:DECIMALS:COUNT')) ch1 = getRedisVal('SETTINGS:CHANNEL:A') ch2 = getRedisVal('SETTINGS:CHANNEL:B') @@ -180,6 +183,7 @@ def calculateValue(): if(den < 0.01): den = 0.01 XVal = (float(v2)/float(den)) + # applicare 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)) strValIn = newValue @@ -212,11 +216,11 @@ try: sampleFreq = getRedisVal(redSampleFreq) smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) dataBox = np.array([initArray] * smoothFact) + now = datetime.datetime.now() + dateFormat ="%d/%m/%Y %H:%M:%S" + lastLog = now.strftime(dateFormat) + redSrv0.set(redisTime,str(lastLog)) for counter in range(0,smoothFact,+1): - now = datetime.datetime.now() - dateFormat ="%d/%m/%Y %H:%M:%S" - lastLog = now.strftime(dateFormat) - redSrv0.set(redisTime,str(lastLog)) # leggo gli 8 valori CHvalue = CH.ADS1256_GetAll() floatArray = np.array(CHvalue, dtype=np.float) @@ -231,18 +235,22 @@ try: checkPowerOff() # calcolo il valore k*[V2/(V1-V2)] + offset calculateValue() - # riporto ultima esecuzione ad adesso - endExec = datetime.datetime.now() - # calcolo il delta time dovuto alle esecuzioni - delta = endExec - now - # attesa viene fatta sempre - waitTime = int(sampleFreq) / 1000 - delta.microseconds/1000000 - if(waitTime < 0.01): - #FTL.FTLog.Write("delta: " + str(delta.microseconds/1000) + " | wait: " + str(waitTime*1000)) - waitTime = 0.01 - #FTL.FTLog.Write("delta: " + str(delta.microseconds/1000) + " | wait: " + str(waitTime*1000)) - # vera attesa - time.sleep(waitTime) + # riporto ultima esecuzione ad adesso + endExec = datetime.datetime.now() + # calcolo il delta time dovuto alle esecuzioni + 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: + redSrv0.set('SETTINGS:WARNING:EXETIME',0) + if(waitTime < 0.001): + waitTime = 0.001 + # vera attesa + time.sleep(waitTime) #eccezione da ctrl+c in terminale e chiusura except KeyboardInterrupt: diff --git a/server/FTServer.py b/server/FTServer.py index c9cfd49..438370b 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -88,6 +88,12 @@ def about(): @flaskApp.route("/api/v1/channels/all", methods=['GET']) def api_channels_all(): numCh = getRedisVal('SETTINGS:SELECTED_CH') + exeWarning = getRedisVal('SETTINGS:WARNING:EXETIME') + displayWarning = 0 + if exeWarning == "1": + displayWarning = 1 + elif exeWarning == "0": + displayWarning = 0 CH = [0,0,0,0,0,0,0,0] OUT = [0,0,0,0,0,0,0,0] OUTMIN = [0,0,0,0,0,0,0,0] @@ -101,7 +107,6 @@ def api_channels_all(): UNIMISURA[numCh] = getRedisVal('SETTINGS:UNIT:MEASURE:'+str(numCh)) channelsData = { 'timeSrv' : getRedisVal('RTDATA:TIME:SRV'), - 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'WriteFreq' : getRedisVal('SETTINGS:WRITE:FREQ'), 'DecimalsCount' : getRedisVal('SETTINGS:DECIMALS:COUNT'), 'Status' : getRedisVal('SETTINGS:LOG:STATUS'), @@ -122,10 +127,13 @@ def api_channels_all(): 'CurrentWorkFolder' : getRedisVal('SETTINGS:FOLDER:CURRENT'), 'RealDateStatus' : getRedisVal('SETTINGS:TIME:REAL'), 'SelPowerChannel' : getRedisVal('SETTINGS:POWER:CH'), + 'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'), + 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'), 'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'), 'RealValue' : getRedisVal('RTDATA:VALUE:REAL'), - 'Crono' : getRedisVal('SETTINGS:LOG:CRONO') + 'Crono' : getRedisVal('SETTINGS:LOG:CRONO'), + 'DisplayAlert' : displayWarning } # restituisce in formato json i dati letti da redis return jsonify(channelsData) @@ -148,7 +156,7 @@ def api_channels_current(): elif savedPwd == "viaZavaritt152": showDiv2 = 1 showDiv3 = 1 - #funzione api_channels_all: legge direttamente da redis, ritorna jsonify + #funzione legge direttamente da redis, ritorna jsonify result = { 'numCh' : numCh, 'CostanteK1' : getRedisVal('RTDATA:VALUE:K1CONST'), diff --git a/server/static/img/exclamation-triangle-fill.svg b/server/static/img/exclamation-triangle-fill.svg new file mode 100755 index 0000000..50e1752 --- /dev/null +++ b/server/static/img/exclamation-triangle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/server/templates/logger.html b/server/templates/logger.html index c581a46..d9c6d4e 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -90,12 +90,20 @@ { $("#Div0").show(); } + + $("#ExeWarning").hide(); + if(result.DisplayAlert == "1") + { + $("#ExeWarning").show(); + } //scarico unità di misura dei canali mostrati $("#UniMisuA").html(result.UniMeasure[result.ChA]); $("#UniMisuB").html(result.UniMeasure[result.ChB]); $("#CalcMeasure1").html(result.CalcUMeasure); $("#CalcMeasure2").html(result.CalcUMeasure); + $("#SmoothFact").html(result.SmoothFact); + $("#LogFreq").html(result.LogFreq); }}); // A ogni giro di data refresh fix di tabella cartelle e tabella file }; @@ -416,9 +424,26 @@
-

+

+
+
+
+
+ Smooth Factor: +
+
+ Sample Period: ms +
+ + + +
+
+
+
+
From 8b04447115022008e4ee36779d434538433ba069 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Mon, 21 Jun 2021 12:46:22 +0200 Subject: [PATCH 13/17] 1.3.1 true --- server/templates/about.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/templates/about.html b/server/templates/about.html index 817335b..b119da5 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.3.0 + V 1.3.1
From c15d43ba213018f577e2b087a8e86eae0a67ec3e Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Thu, 9 Jun 2022 12:59:14 +0200 Subject: [PATCH 14/17] 1.4.1 add salvataggio valore pulito --- logger/FTLogger.py | 5 ++++- sampler/FTSampler.py | 10 ++++++---- server/FTServer.py | 1 + server/templates/about.html | 4 ++-- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 7ce3a45..4028662 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -58,6 +58,7 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: #funzione salva time+data e otto valori letti su file SE LOG è 1 def fileSave(): + cleanValue = getRedisVal('RTDATA:VALUE:CLEAN') resultValue = getRedisVal('RTDATA:VALUE:REAL') smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED') currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') @@ -82,7 +83,9 @@ def fileSave(): chB = getRedisVal('SETTINGS:CHANNEL:B') chBOut = getRedisVal('RTDATA:OUT:'+str(chB)) csvRow += chBOut+";" - #aggiungo il valore risultante calcolato V1/(V2-V1) + #aggiungo il valore pulito + csvRow += cleanValue+";" + #aggiungo il valore corretto con k1 k2 offset csvRow += resultValue+";" #aggiungo il valore risultante MEDIATO csvRow += smoothedValue diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index a7524cb..b540870 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -56,6 +56,8 @@ 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:CLEAN') is None: + redSrv0.set('RTDATA:VALUE:CLEAN', 1) if redSrv0.get('RTDATA:VALUE:REAL') is None: redSrv0.set('RTDATA:VALUE:REAL', 1) if redSrv0.get('SETTINGS:POWER:THRESH') is None: @@ -182,8 +184,10 @@ 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:CLEAN',round(XVal,decimalsCount)) + # applicare 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)) strValIn = newValue @@ -223,7 +227,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 +245,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..8cc0fbd 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/' diff --git a/server/templates/about.html b/server/templates/about.html index b119da5..c909413 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -25,11 +25,11 @@

FT Logger

- Steamware 2021 + Egalware 2022
Software di lettura e scrittura per canali analogici e digitali
- V 1.3.1 + V 1.4.1
From 7c22f6438035cf5eca2e420825adf234cbff2a87 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Thu, 9 Jun 2022 14:39:44 +0200 Subject: [PATCH 15/17] 1.4.1 minor fix --- server/templates/about.html | 2 +- server/templates/layout.html | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/server/templates/about.html b/server/templates/about.html index c909413..3aa531b 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.4.1 + V 1.4.2
diff --git a/server/templates/layout.html b/server/templates/layout.html index 4b39312..ab22bfc 100644 --- a/server/templates/layout.html +++ b/server/templates/layout.html @@ -65,13 +65,12 @@ {% endblock %}
-
-
© Steamware 2021 +
© Egalware 2022
From 0d2bf9e7c87b6e0a735964dffce7af9af5e089dd Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Thu, 9 Jun 2022 17:56:05 +0200 Subject: [PATCH 16/17] 1.4.3 intestazione file output thanks to nicola --- logger/FTLogger.py | 14 ++++++++++++-- sampler/FTSampler.py | 6 +++--- server/templates/about.html | 2 +- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 4028662..9fb7e55 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -56,9 +56,18 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: if redSrv0.get('SETTINGS:OUT:MIN:'+str(numCh)) is None: redSrv0.set('SETTINGS:OUT:MIN:'+str(numCh),0) +def columnNames(): + firstRow = "Data Ora;" + firstRow += "Canale A;" + firstRow += "Canale B;" + firstRow += "Valore Grezzo;" + firstRow += "Valore Corretto;" + firstRow += "Valore Corretto e Mediato"+"\r\n" + return firstRow + #funzione salva time+data e otto valori letti su file SE LOG è 1 def fileSave(): - cleanValue = getRedisVal('RTDATA:VALUE:CLEAN') + rawValue = getRedisVal('RTDATA:VALUE:RAW') resultValue = getRedisVal('RTDATA:VALUE:REAL') smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED') currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') @@ -73,6 +82,7 @@ def fileSave(): outFile = open(workingDirectory+"/"+dataFileName, "a") except FileNotFoundError: outFile = open(workingDirectory+"/"+dataFileName, "w+") + outFile.write(columnNames) # dichiaro una stringa in cui accumulo i valori csvRow = str(lastLog) +";" # scrivo le letture del canale A @@ -84,7 +94,7 @@ def fileSave(): chBOut = getRedisVal('RTDATA:OUT:'+str(chB)) csvRow += chBOut+";" #aggiungo il valore pulito - csvRow += cleanValue+";" + csvRow += rawValue+";" #aggiungo il valore corretto con k1 k2 offset csvRow += resultValue+";" #aggiungo il valore risultante MEDIATO diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index b540870..713ece5 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -56,8 +56,8 @@ 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:CLEAN') is None: - redSrv0.set('RTDATA:VALUE:CLEAN', 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('SETTINGS:POWER:THRESH') is None: @@ -186,7 +186,7 @@ def calculateValue(): den = 0.01 # calcolo il valore risultante pulito (senza correzioni) XVal = (float(v2)/float(den)) - redSrv0.set('RTDATA:VALUE:CLEAN',round(XVal,decimalsCount)) + redSrv0.set('RTDATA:VALUE:RAW',round(XVal,decimalsCount)) # applicare 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)) diff --git a/server/templates/about.html b/server/templates/about.html index 3aa531b..97d7a0c 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.4.2 + V 1.4.3
From 28ebf13ddfd0f077a210ecd9da44787827aa454a Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Fri, 10 Jun 2022 10:04:03 +0200 Subject: [PATCH 17/17] 1.5.0 revisione by Samu --- logger/FTLogger.py | 29 +++++++++++++++++------------ server/templates/about.html | 2 +- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 9fb7e55..1927b56 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 @@ -56,15 +58,6 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: if redSrv0.get('SETTINGS:OUT:MIN:'+str(numCh)) is None: redSrv0.set('SETTINGS:OUT:MIN:'+str(numCh),0) -def columnNames(): - firstRow = "Data Ora;" - firstRow += "Canale A;" - firstRow += "Canale B;" - firstRow += "Valore Grezzo;" - firstRow += "Valore Corretto;" - firstRow += "Valore Corretto e Mediato"+"\r\n" - return firstRow - #funzione salva time+data e otto valori letti su file SE LOG è 1 def fileSave(): rawValue = getRedisVal('RTDATA:VALUE:RAW') @@ -78,11 +71,23 @@ 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+") - outFile.write(columnNames) + firstRow = "Data e Ora;" + firstRow += "Canale A;" + firstRow += "Canale B;" + firstRow += "Valore Grezzo;" + firstRow += "Valore Corretto;" + firstRow += "Valore Corretto e Mediato" + outFile.write(firstRow+"\r\n") + # dichiaro una stringa in cui accumulo i valori csvRow = str(lastLog) +";" # scrivo le letture del canale A diff --git a/server/templates/about.html b/server/templates/about.html index 97d7a0c..c8a90f7 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -29,7 +29,7 @@
Software di lettura e scrittura per canali analogici e digitali
- V 1.4.3 + V 1.5.0