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 diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 9831bfc..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 @@ -27,6 +29,9 @@ def getRedisVal(redisKey): #assegno directory per file di data output DATA_path = "/home/pi/data/" +#assegno waiter a 0 (attesa prima di scrivere 2 secondi) +redSrv0.set('SETTINGS:LOG:WAITER',0) + #intervallo in millisecondi fra una scrittura su file e la successiva startingWriteFreq = 1000 redWriteFreq = 'SETTINGS:WRITE:FREQ' @@ -36,6 +41,9 @@ 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: redSrv0.set('SETTINGS:SELECTED_CH',0) if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: @@ -52,18 +60,34 @@ 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') + rawValue = getRedisVal('RTDATA:VALUE:RAW') + resultValue = getRedisVal('RTDATA:VALUE:REAL') + smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED') currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') workingDirectory = (DATA_path+currentFolder) #dò un nome al nuovo file 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: + + # 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 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 @@ -74,18 +98,33 @@ 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 pulito + csvRow += rawValue+";" + #aggiungo il valore corretto con k1 k2 offset + csvRow += resultValue+";" + #aggiungo il valore risultante MEDIATO + csvRow += smoothedValue # scrivo in blocco la riga dei valori 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() + redSrv0.set('SETTINGS:LOG:WAITER', 1) fileSave() + #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 endExec = datetime.datetime.now() # calcolo il delta dovuto alle esecuzioni @@ -93,5 +132,5 @@ while(1): waitTime = int(redSrv0.get(redWriteFreq)) / 1000 - delta.microseconds/1000000 if(waitTime < 0.1): waitTime = 0.1 - # attesa + # attesa fra una scrittura e successiva time.sleep(waitTime) \ No newline at end of file diff --git a/sampler/FTDInOut.py b/sampler/FTDInOut.py index 7cb6dde..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() @@ -71,6 +71,7 @@ while (1): if stop.is_pressed: #basically la stessa funzione stop_log contenuta in FTServer redSrv0.set('SETTINGS:LOG:STATUS', 0) + redSrv0.set('SETTINGS:LOG:WAITER', 0) redSrv0.set('RTDATA:SESSION:NAME', "") if cancello.is_pressed: @@ -81,6 +82,7 @@ while (1): # CANCELLO APERTO redSrv0.set('RTDATA:GATE_OPEN', 1) redSrv0.set('SETTINGS:LOG:STATUS', 0) + redSrv0.set('SETTINGS:LOG:WAITER', 0) redSrv0.set('RTDATA:SESSION:NAME', "") if(getRedisVal('SETTINGS:LOG:STATUS') == "1"): @@ -90,6 +92,7 @@ while (1): if(getRedisVal('SETTINGS:POWER:OFF') == "1"): redSrv0.set('SETTINGS:POWER:OFF',0) + redSrv0.set('SETTINGS:LOG:WAITER', 0) FTL.FTLog.Write(" FTDInOut requested shutdown") os.system("sudo shutdown -h now") diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index ff8fd12..713ece5 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,50 +27,25 @@ 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) - # print (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: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: 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: redSrv0.set('SETTINGS:POWER:UPTIME', 300) if redSrv0.get('SETTINGS:POWER:CH') is None: @@ -77,8 +54,12 @@ if redSrv0.get('RTDATA:VALUE:UMEASURE') is None: redSrv0.set('RTDATA:VALUE:UMEASURE', "-") if redSrv0.get('SETTINGS:LOG:EXETIME') is None: redSrv0.set('SETTINGS:LOG:EXETIME', 1) -if redSrv0.get('RTDATA:VALUE') is None: - redSrv0.set('RTDATA:VALUE', 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('SETTINGS:POWER:THRESH') is None: redSrv0.set('SETTINGS:POWER:THRESH', 0) if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: @@ -114,11 +95,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() @@ -127,30 +124,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 @@ -186,7 +164,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): @@ -194,48 +172,86 @@ 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') v1 = getRedisVal('RTDATA:OUT:' + ch1) v2 = getRedisVal('RTDATA:OUT:' + ch2) - k = getRedisVal('RTDATA:VALUE:KCONST') - den = (float(v1)-float(v2)) - if(den < 0.001): - den = 0.001 - newValue = float(k)*(float(v2)/float(den)) - redSrv0.set('RTDATA:VALUE',round(newValue,3)) + k1 = getRedisVal('RTDATA:VALUE:K1CONST') + k2 = getRedisVal('RTDATA:VALUE:K2CONST') + offset = getRedisVal('RTDATA:VALUE:OFFSET') + 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)) + 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)) + strValIn = newValue + # EWMA: RILEGGO DA REDIS vecchio valore + oldVal = float(redSrv0.get('RTDATA:VALUE:SMOOTHED')) + if(oldVal == 0): + oldVal = 0.01 + # se variazione < 50% smooth + 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 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' + # update freq campionamento da redis + 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)) - CHvalue = CH.ADS1256_GetAll() - # salvo valori - redisSave(CHvalue) - # controllo soglia spegnimento - checkPowerOff() - #calcolo il valore [V2/(V1-V2)] - calculateValue() + for counter in range(0,smoothFact,+1): + # leggo gli 8 valori + CHvalue = CH.ADS1256_GetAll() + floatArray = np.array(CHvalue, dtype=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 - 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 + # attesa viene fatta sempre + waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000 + 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 @@ -245,5 +261,5 @@ except KeyboardInterrupt: #eccezione da errore e chiusura except Exception as errorMessage: - FTL.FTLog.Write(str(errorMessage)) + FTL.FTLog.Write(str(" FTSampler stopped: " + errorMessage)) exit() \ No newline at end of file diff --git a/server/FTServer.py b/server/FTServer.py index 1840874..8cc0fbd 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' @@ -25,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/' @@ -87,6 +89,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] @@ -100,7 +108,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'), @@ -121,8 +128,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') + 'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'), + 'RealValue' : getRedisVal('RTDATA:VALUE:REAL'), + 'Crono' : getRedisVal('SETTINGS:LOG:CRONO'), + 'DisplayAlert' : displayWarning } # restituisce in formato json i dati letti da redis return jsonify(channelsData) @@ -145,10 +157,12 @@ 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, - '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'), 'ChanThresh' : getRedisVal('SETTINGS:POWER:THRESH'), @@ -156,6 +170,7 @@ def api_channels_current(): 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'DecimalsCount' : getRedisVal('SETTINGS:DECIMALS:COUNT'), 'WriteFreq' : getRedisVal('SETTINGS:WRITE:FREQ'), + 'TimeBeforeWrite' : getRedisVal('SETTINGS:LOG:WAITIME'), 'CurrIn' : getRedisVal('RTDATA:CH:'+str(numCh)), 'CurrOut' : getRedisVal('RTDATA:OUT:'+str(numCh)), 'MaxOut' : getRedisVal('SETTINGS:OUT:MAX:'+str(numCh)), @@ -243,6 +258,7 @@ def start_log(): def stop_log(): #funzione stop_log: scrive su redis LOG:STATUS -> 0 redSrv0.set('SETTINGS:LOG:STATUS', 0) + redSrv0.set('SETTINGS:LOG:WAITER', 0) redSrv0.set('RTDATA:SESSION:NAME', "") led.off() return "OK" @@ -250,8 +266,11 @@ def stop_log(): @flaskApp.route("/api/v1/data/navigate", methods=['PUT']) def data_navigate(): #funzione torna in /data - redSrv0.set('SETTINGS:FOLDER:CURRENT',"") - return redirect("/logger") + if(getRedisVal('SETTINGS:LOG:STATUS') == "0"): + redSrv0.set('SETTINGS:FOLDER:CURRENT',"") + return redirect("/logger") + else: + return redirect("/logger") @flaskApp.route("/api/v1/data/export", methods=['PUT']) def data_export(): @@ -291,9 +310,12 @@ def data_delete(): if dataDir == workingDirectory: return redirect("/logger") else: - shutil.rmtree(workingDirectory) - redSrv0.set('SETTINGS:FOLDER:CURRENT', "") - return redirect("/logger") + if(getRedisVal('SETTINGS:LOG:STATUS') == "0"): + shutil.rmtree(workingDirectory) + redSrv0.set('SETTINGS:FOLDER:CURRENT', "") + return redirect("/logger") + else: + return redirect("/logger") @flaskApp.route("/api/v1/setup/dateTime", methods=['POST']) def insertDateTime(): @@ -402,6 +424,8 @@ def setWriteFrequency(): redSrv0.set('SETTINGS:WRITE:FREQ', newWriteFrequency) newLogFrequency = request.form['LogFreq'] redSrv0.set('SETTINGS:LOG:FREQ', newLogFrequency) + timeBeforeWrite = request.form['TimeBeforeWrite'] + redSrv0.set('SETTINGS:LOG:WAITIME', timeBeforeWrite) redSrv0.save() # rimando in settings return redirect("/settings") @@ -418,8 +442,12 @@ 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() # rimando in settings return redirect("/settings") @@ -480,5 +508,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/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/about.html b/server/templates/about.html index e7f7806..c8a90f7 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -6,7 +6,7 @@ $("#Div0").hide(); var intTime=300; - var timeout = setTimeout(dataRefresh, intTime); + var timeout = setInterval(dataRefresh, intTime); function dataRefresh() { // scarico i dati aggioranti @@ -17,7 +17,6 @@ $("#Div0").show(); } }}); - timeout = setTimeout(dataRefresh, intTime); }; @@ -26,11 +25,11 @@