From 2e4828ab9e1652feebd64cfe4698cb7ba04ef28b Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Tue, 6 Apr 2021 11:42:52 +0200 Subject: [PATCH 1/6] gauges readonly, fix elenco --- sampler/FTSampler.py | 12 ++++-------- server/FTServer.py | 3 +-- server/templates/about.html | 4 ++-- server/templates/logger.html | 5 +++-- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 690b2c1..35d0743 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -18,13 +18,11 @@ redSrv0 = redis.Redis( def getRedisVal(redisKey): return redSrv0.get(redisKey).decode('utf-8') -#assegno director: log per file di debug e data per file output +#assegno director log per file di debug LOG_path = "/home/pi/Flythis/logger/log/" -DATA_path = "/home/pi/data/" - -startingSampleFreq = 250 #intervallo in millisecondi fra un campionamento e il successivo +startingSampleFreq = 250 redSampleFreq = 'SETTINGS:LOG:FREQ' redSrv0.set(redSampleFreq,startingSampleFreq) @@ -86,17 +84,15 @@ try: outVal = chOutMin + ((inValue-chInMin) * (deltaOut / deltaIn)) return outVal -#ciclo principale, salva time attuale e se LOG:STATUS è 1 fa il ciclo principale +#ciclo principale while(1): now = datetime.datetime.now() redSrv0.set(redisTime,str(now)) - #print(logStatus) - # solo se su redis LOG è 1 eseguo il ciclo principale CHvalue = CH.ADS1256_GetAll() redisSave(CHvalue) # riporto ultima esecuzione ad adesso endExec = datetime.datetime.now() - # calcolo il delta dovuto alle esecuzioni + # calcolo il delta time dovuto alle esecuzioni delta = endExec - now waitTime = int(redSrv0.get(redSampleFreq)) / 1000 - delta.microseconds/1000000 if(waitTime < 0.1): diff --git a/server/FTServer.py b/server/FTServer.py index 85bfe02..20a0fc0 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -71,10 +71,10 @@ def about(): return render_template('about.html', **channelsData) # definisco una NUOVA route a cui rispondere su chiamta in metodo GET x restituire dati aggiornati +# funzione api_channels_all: legge direttamente da redis, ritorna jsonify @flaskApp.route("/api/v1/channels/all", methods=['GET']) def api_channels_all(): numCh = getRedisVal('SETTINGS:SELECTED_CH') - #funzione api_channels_all: legge direttamente da redis, ritorna jsonify CH = [0,0,0,0,0,0,0,0] OUT = [0,0,0,0,0,0,0,0] @@ -128,7 +128,6 @@ def api_channels_current(): # restituisce in formato json i dati letti da redis return jsonify(result) - # elenco file nella directory @flaskApp.route("/api/v1/files/list", methods=['GET']) def api_get_files(): diff --git a/server/templates/about.html b/server/templates/about.html index e0168f8..9ccbcef 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -19,11 +19,11 @@

Analog and Digital reader and logger software

-

Version 0.2.1

+

Version 1.0.1

Last Patched:
- 02/04/2021

+ 06/04/2021

diff --git a/server/templates/logger.html b/server/templates/logger.html index 9d11497..ab4941f 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -44,7 +44,6 @@ $("#LastSessionName").html(result.LastSessionName); }}); - timeout = setTimeout(dataRefresh, intTime); }; @@ -200,7 +199,7 @@ -
+
@@ -208,6 +207,8 @@
+
+
Logger period: ms
From 1a70e01cd7c36d9ccf3b23ac3832b205e21b7f21 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Tue, 6 Apr 2021 15:35:51 +0200 Subject: [PATCH 2/6] export data + delete data in sviluppo --- server/FTServer.py | 42 +++++++++++++++++++++++--------- server/templates/logger.html | 46 +++++++++++++++++++++++++++--------- 2 files changed, 66 insertions(+), 22 deletions(-) diff --git a/server/FTServer.py b/server/FTServer.py index 20a0fc0..47ad29d 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -4,16 +4,23 @@ from flask import Flask, render_template, jsonify, request from datetime import datetime from flask.wrappers import Request import redis -import os +import os, glob import json from werkzeug.utils import redirect import os.path, time +from distutils.dir_util import copy_tree #from pathlib import Path #from stat import S_ISREG, ST_CTIME, ST_MODE #assegno ipv4 statico ipv4 = '10.74.83.210' +#definisco directory /data +dataDir='/home/pi/data/' + +#definisco directory per export Data +#dataDestination='/media/pi/KING_8GB/Data' + #configurazione per lavorare su server redis locale REDIS_PORT = 6379 REDIS_HOST = '127.0.0.1' @@ -131,25 +138,15 @@ def api_channels_current(): # elenco file nella directory @flaskApp.route("/api/v1/files/list", methods=['GET']) def api_get_files(): - dataDir='/home/pi/data/' fileList = os.listdir(dataDir) - # #all entries in the directory w/ stats - # data = (os.path.join(dataDir, fn) for fn in os.listdir(dataDir)) - # data = ((os.stat(path), path) for path in data) - # # regular files, insert creation date - # data = ((stat[ST_CTIME], path) - # for stat, path in data if S_ISREG(stat[ST_MODE])) - lista = [] idx=0 # for item in sorted(data): for item in fileList: t_obj = time.strptime(time.ctime(os.path.getctime(dataDir+item))) # Transforming the time object to a timestamp - # of ISO 8601 format T_stamp = time.strftime("%Y-%m-%d %H:%M:%S", t_obj) current = {"name": item,"size": os.path.getsize(dataDir+item), "date":T_stamp} - # current = {"name": item,"size": os.path.getsize(dataDir+item), "date":time.ctime(os.path.getctime(dataDir+item))} lista.append(current) idx=idx+1 return jsonify(fileTable = lista) @@ -175,6 +172,29 @@ def stop_log(): redSrv0.set('RTDATA:SESSION:NAME', "-") return "OK" +@flaskApp.route("/api/v1/data/export", methods=['PUT']) +def data_export(): + #funzione dataExport: copia + scriptMount = """ + if [ -a /dev/sd[a-z]1 ] + then + /bin/mount /dev/sd[a-z]1 /mnt/USB + else + /bin/mount /dev/sd[a-z] /mnt/USB + fi + """ + os.system("bash -c '%s'" % scriptMount) + dataDestination='/mnt/USB' + copy_tree(dataDir,dataDestination) + return "OK" + +@flaskApp.route("/api/v1/data/delete", methods=['PUT']) +def data_delete(): + #funzione dataDelete: cancella + for file in os.scandir(dataDir): + os.remove(file.path) + return "OK" + @flaskApp.route("/api/v1/setup/saveInMin", methods=['PUT']) def setupInMin(): # devo leggere il channel attualmente selezionato diff --git a/server/templates/logger.html b/server/templates/logger.html index ab4941f..a2e854a 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -92,7 +92,7 @@ ,url: "/api/v1/log/start" ,data: "" }) - // fix file + // fix table fixFileTable(); }; @@ -103,8 +103,30 @@ ,url: "/api/v1/log/stop" ,data: "" }) + // fix table + fixFileTable(); + }; - // fix file + //funzione exportData: chiamata per copiare e incollare il contenuto della cartella /data + function exportData(){ + $.ajax({ + type: 'PUT' + ,url: "/api/v1/data/export" + ,data: "" + }) + // fix table + fixFileTable(); + }; + + //funzione deleteData: chiamata per eliminare il contenuto della cartella /data + function deleteData(){ + $.ajax({ + type: 'PUT' + ,url: "/api/v1/data/delete" + ,data: "" + }) + // fix table + fixFileTable(); fixFileTable(); }; @@ -116,7 +138,7 @@ UpdateFileTable(fileTable); }}); } - + function UpdateFileTable(fileTable) { // EXTRACT VALUE FOR HTML HEADER. @@ -173,9 +195,6 @@
OUT
-
@@ -191,21 +210,18 @@
OUT
- -
+
- +
@@ -230,6 +246,14 @@
+
+
+ +
+
+ +
+

From 1e5845a3021e1e36675b10086f6483dfe8d49e8e Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Wed, 7 Apr 2021 15:21:37 +0200 Subject: [PATCH 3/6] gestione sottocartelle, export, cancellazione --- logger/FTLogger.py | 14 ++++-- sampler/FTSampler.py | 2 + server/FTServer.py | 82 ++++++++++++++++++++++------------ server/templates/logger.html | 42 ++++++++--------- server/templates/settings.html | 57 ++++++++++++++--------- 5 files changed, 119 insertions(+), 78 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 2e828ac..305f427 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -3,6 +3,8 @@ import time import datetime import redis +import os +import os.path #configurazione per lavorare su server redis locale REDIS_PORT = 6379 @@ -30,6 +32,8 @@ if redSrv0.get('SETTINGS:LOG:STATUS') is None: redSrv0.set('SETTINGS:LOG:STATUS',0) if redSrv0.get('SETTINGS:SELECTED_CH') is None: redSrv0.set('SETTINGS:SELECTED_CH',0) +if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: + redSrv0.set('SETTINGS:FOLDER:CURRENT', "default") for numCh in range(0,8,+1): if redSrv0.get('SETTINGS:IN:MAX:'+str(numCh)) is None: redSrv0.set('SETTINGS:IN:MAX:'+str(numCh),100) @@ -42,15 +46,17 @@ if redSrv0.get('SETTINGS:SELECTED_CH') is None: #funzione salva time+data e otto valori letti su file (SE LOG è 1) def fileSave(): + 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() lastLog = rawLastLog.strftime(dateFormat) try: - outFile = open(DATA_path+"/"+dataFileName, "a") + outFile = open(workingDirectory+"/"+dataFileName, "a") except FileNotFoundError: - print("Creating new data.csv") - outFile = open(DATA_path+"/"+dataFileName, "w+") + outFile = open(workingDirectory+"/"+dataFileName, "w+") outFile.write("# LOG started at " + str(lastLog)) # dichiaro una stringa in cui accumulo i valori csvRow = str(lastLog) +"," @@ -64,7 +70,7 @@ def fileSave(): outFile.write(csvRow +"\r\n") outFile.close() -#ciclo principale, salva time attuale e se LOG:STATUS è 1 fa il ciclo principale +#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 diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 35d0743..45951d1 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -29,6 +29,8 @@ redSrv0.set(redSampleFreq,startingSampleFreq) #se non c'è un valore nei campi di redis, popolo il db redSrv0.set('SETTINGS:LOG:STATUS',0) redisTime = 'RTDATA:TIME:SRV' +if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: + redSrv0.set('SETTINGS:FOLDER:CURRENT', "default") if redSrv0.get('SETTINGS:SELECTED_CH') is None: redSrv0.set('SETTINGS:SELECTED_CH',0) for numCh in range(0,8,+1): diff --git a/server/FTServer.py b/server/FTServer.py index 47ad29d..cee28db 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -9,8 +9,7 @@ import json from werkzeug.utils import redirect import os.path, time from distutils.dir_util import copy_tree -#from pathlib import Path -#from stat import S_ISREG, ST_CTIME, ST_MODE +import shutil #assegno ipv4 statico ipv4 = '10.74.83.210' @@ -18,9 +17,6 @@ ipv4 = '10.74.83.210' #definisco directory /data dataDir='/home/pi/data/' -#definisco directory per export Data -#dataDestination='/media/pi/KING_8GB/Data' - #configurazione per lavorare su server redis locale REDIS_PORT = 6379 REDIS_HOST = '127.0.0.1' @@ -77,12 +73,10 @@ def about(): #assegno il template html di riferimento return render_template('about.html', **channelsData) -# definisco una NUOVA route a cui rispondere su chiamta in metodo GET x restituire dati aggiornati # funzione api_channels_all: legge direttamente da redis, ritorna jsonify @flaskApp.route("/api/v1/channels/all", methods=['GET']) def api_channels_all(): numCh = getRedisVal('SETTINGS:SELECTED_CH') - 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] @@ -92,7 +86,6 @@ def api_channels_all(): OUT[numCh] = getRedisVal('RTDATA:OUT:'+str(numCh)) OUTMIN[numCh] = getRedisVal('SETTINGS:OUT:MIN:'+str(numCh)) OUTMAX[numCh] = getRedisVal('SETTINGS:OUT:MAX:'+str(numCh)) - channelsData = { 'timeSrv' : getRedisVal('RTDATA:TIME:SRV'), 'timeLog' : getRedisVal('RTDATA:TIME:LOG'), @@ -109,7 +102,8 @@ def api_channels_all(): 'ChScaleMin' : getRedisVal('SETTINGS:IN:MIN:'+str(numCh)), 'ChRealMax' : getRedisVal('SETTINGS:OUT:MAX:'+str(numCh)), 'ChRealMin' : getRedisVal('SETTINGS:OUT:MIN:'+str(numCh)), - 'LastSessionName' : getRedisVal('RTDATA:SESSION:NAME') + 'LastSessionName' : getRedisVal('RTDATA:SESSION:NAME'), + 'CurrentWorkFolder' : getRedisVal('SETTINGS:FOLDER:CURRENT') } # restituisce in formato json i dati letti da redis return jsonify(channelsData) @@ -130,7 +124,8 @@ def api_channels_current(): 'MaxOut' : getRedisVal('SETTINGS:OUT:MAX:'+str(numCh)), 'MinOut' : getRedisVal('SETTINGS:OUT:MIN:'+str(numCh)), 'MaxIn' : getRedisVal('SETTINGS:IN:MAX:'+str(numCh)), - 'MinIn' : getRedisVal('SETTINGS:IN:MIN:'+str(numCh)) + 'MinIn' : getRedisVal('SETTINGS:IN:MIN:'+str(numCh)), + 'CurrentWorkFolder' : getRedisVal('SETTINGS:FOLDER:CURRENT') } # restituisce in formato json i dati letti da redis return jsonify(result) @@ -138,15 +133,17 @@ def api_channels_current(): # elenco file nella directory @flaskApp.route("/api/v1/files/list", methods=['GET']) def api_get_files(): - fileList = os.listdir(dataDir) + currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') + workingDirectory = (dataDir+currentFolder) + fileList = os.listdir(workingDirectory) lista = [] idx=0 # for item in sorted(data): for item in fileList: - t_obj = time.strptime(time.ctime(os.path.getctime(dataDir+item))) + t_obj = time.strptime(time.ctime(os.path.getctime(workingDirectory+"/"+item))) # Transforming the time object to a timestamp T_stamp = time.strftime("%Y-%m-%d %H:%M:%S", t_obj) - current = {"name": item,"size": os.path.getsize(dataDir+item), "date":T_stamp} + current = {"name": item,"size": os.path.getsize(workingDirectory+"/"+item), "date":T_stamp} lista.append(current) idx=idx+1 return jsonify(fileTable = lista) @@ -154,16 +151,21 @@ def api_get_files(): # Route di comando x LOG: start e stop @flaskApp.route("/api/v1/log/start", methods=['PUT']) def start_log(): - #funzione start_log: scrive su redis LOG:STATUS -> 1 - redSrv0.set('SETTINGS:LOG:STATUS', 1) - #data e time ora - lastDate = datetime.now() - #formato per data time nomefile: YYYYddmm_HMS - format = "%Y%m%d_%H%M%S" - #format date e time adando strftime() - nameDate = lastDate.strftime(format) + ".csv" - redSrv0.set('RTDATA:SESSION:NAME', nameDate) - return "OK" + currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') + workingDirectory = (dataDir+currentFolder) + if os.path.isdir(workingDirectory) is True: + #funzione start_log: scrive su redis LOG:STATUS -> 1 + redSrv0.set('SETTINGS:LOG:STATUS', 1) + #data e time ora + lastDate = datetime.now() + #formato per data time nomefile: YYYYddmm_HMS + format = "%Y%m%d_%H%M%S" + #format date e time adando strftime() + nameDate = lastDate.strftime(format) + ".csv" + redSrv0.set('RTDATA:SESSION:NAME', nameDate) + return "OK" + else: + return "OK" @flaskApp.route("/api/v1/log/stop", methods=['PUT']) def stop_log(): @@ -175,6 +177,8 @@ def stop_log(): @flaskApp.route("/api/v1/data/export", methods=['PUT']) def data_export(): #funzione dataExport: copia + currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') + workingDirectory = (dataDir+currentFolder) scriptMount = """ if [ -a /dev/sd[a-z]1 ] then @@ -184,16 +188,23 @@ def data_export(): fi """ os.system("bash -c '%s'" % scriptMount) - dataDestination='/mnt/USB' - copy_tree(dataDir,dataDestination) - return "OK" + usbDrive='/mnt/USB/' + dataDestination = (usbDrive+currentFolder) + if os.path.isdir(dataDestination) is True: + copy_tree(workingDirectory, dataDestination) + else: + os.mkdir(dataDestination) + copy_tree(workingDirectory, dataDestination) + return redirect("/settings") @flaskApp.route("/api/v1/data/delete", methods=['PUT']) def data_delete(): #funzione dataDelete: cancella - for file in os.scandir(dataDir): - os.remove(file.path) - return "OK" + currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') + workingDirectory = (dataDir+currentFolder) + shutil.rmtree(workingDirectory) + redSrv0.set('SETTINGS:FOLDER:CURRENT', "not set") + return redirect("/settings") @flaskApp.route("/api/v1/setup/saveInMin", methods=['PUT']) def setupInMin(): @@ -240,6 +251,19 @@ def setWriteFrequency(): # rimando in settings return redirect("/settings") +@flaskApp.route("/api/v1/setup/workingtree", methods=['POST']) +def setWorkingTree(): + #funzione set directory scrive su redis il testo preso dall'input in settings + newWorkFolder = request.form['NewFolder'] + redSrv0.set('SETTINGS:FOLDER:CURRENT', newWorkFolder) + currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') + workingDirectory = (dataDir+currentFolder) + if os.path.isdir(workingDirectory) is True: + return redirect("/settings") + else: + os.mkdir(workingDirectory) + return redirect("/settings") + @flaskApp.route("/api/v1/scaleout", methods=['POST']) def setScale(): indexCh = getRedisVal('SETTINGS:SELECTED_CH') diff --git a/server/templates/logger.html b/server/templates/logger.html index a2e854a..d452514 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -42,6 +42,7 @@ $("#LoggerTime").html(result.timeLog); $("#ServerTime").html(result.timeSrv); $("#LastSessionName").html(result.LastSessionName); + $("#CurrentFolder").html(result.CurrentWorkFolder); }}); timeout = setTimeout(dataRefresh, intTime); @@ -140,7 +141,6 @@ } function UpdateFileTable(fileTable) { - // EXTRACT VALUE FOR HTML HEADER. var col = []; for (var i = 0; i < fileTable.length; i++) { @@ -150,20 +150,18 @@ } } } - // CREATE DYNAMIC TABLE. var table = document.createElement("table"); // CREATE HTML TABLE HEADER ROW USING THE EXTRACTED HEADERS ABOVE. - - var tr = table.insertRow(-1); // TABLE ROW. - + // TABLE ROW. + var tr = table.insertRow(-1); + // TABLE HEADER. for (var i = 0; i < col.length; i++) { - var th = document.createElement("th"); // TABLE HEADER. + var th = document.createElement("th"); th.innerHTML = col[i]; tr.appendChild(th); } - // ADD JSON DATA TO THE TABLE AS ROWS. for (var i = 0; i < fileTable.length; i++) { tr = table.insertRow(-1); @@ -172,15 +170,14 @@ tabCell.innerHTML = fileTable[i][col[j]]; } } - // FINALLY ADD THE NEWLY CREATED TABLE WITH JSON DATA TO A CONTAINER. var divContainer = document.getElementById("showData"); divContainer.innerHTML = ""; divContainer.appendChild(table); } - // fix file UpdateFileTable(fileTable); +
@@ -234,26 +231,23 @@
-
-
- Record Log + Elenco registrazioni +
+ Cartella attuale:   +
+
+ Sessione attuale:   +
+
+
+
-
-
- Current Session:   -
+
+
-
-
- -
-
- -
-

diff --git a/server/templates/settings.html b/server/templates/settings.html index a28f5dd..4031aa8 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -10,7 +10,6 @@ // carico la prima volta i dati function refreshInput() { - // scarico i dati aggioranti $.ajax({url: "/api/v1/channels/current", success: function(result){ // compilo i dati scaricati $("#CurrIn").html(result.CurrIn); @@ -24,11 +23,11 @@ $("#MaxOut").val(result.MaxOut); $("#MinIn").html(result.MinIn); $("#MaxIn").html(result.MaxIn); + $("#CurrentFolder").html(result.CurrentWorkFolder); }}); } function refreshSettings() { - // scarico i dati aggioranti $.ajax({url: "/api/v1/channels/current", success: function(result){ // compilo i dati scaricati $("#CurrIn").html(result.CurrIn); @@ -122,11 +121,11 @@
-
+
- Channel A + Canale A
@@ -144,16 +143,16 @@
- Original: + Nativo:
- Scaled: + Scalato:
- Channel B + Canale B
@@ -171,21 +170,21 @@
- Original: + Nativo:
- Scaled: + Scalato:
-
+
-
+
- Channel Setup + Impostazioni scala canale
-
+
@@ -202,7 +201,6 @@
-
@@ -212,7 +210,7 @@
MIN
-
Current
+
Attuale
MAX
@@ -261,7 +259,7 @@
- +
@@ -270,7 +268,24 @@
-
+
+
+ Selezione cartella +
+ Cartella attuale:   +
+
+
+
+
+ Insert new:   + + +
+
+
+
+
Impostazioni Timer @@ -285,7 +300,7 @@ Periodo di scrittura (ms):  
- +
@@ -293,10 +308,10 @@
- Reset settings to defaults + Reset impostazioni predefinite
-
-
+
+
From 6a446993ccf14b965a9d676d3a790cbeeb7fb4fa Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Thu, 8 Apr 2021 11:45:19 +0200 Subject: [PATCH 4/6] autenticazione utente, gestione password --- logger/log/PyLog.txt | 1 + sampler/FTSampler.py | 2 + server/FTServer.py | 27 ++- server/templates/settings.html | 354 ++++++++++++++++++--------------- 4 files changed, 222 insertions(+), 162 deletions(-) diff --git a/logger/log/PyLog.txt b/logger/log/PyLog.txt index 94b20d1..28aa885 100644 --- a/logger/log/PyLog.txt +++ b/logger/log/PyLog.txt @@ -84,3 +84,4 @@ 2021-04-01 15:20:08.570454 Caught error: name 'now' is not defined 2021-04-01 15:21:11.244154 Caught error: name 'now' is not defined 2021-04-02 09:27:42.781175 Caught error: Connection closed by server. +2021-04-08 11:19:48.305652 Caught error: Error 111 connecting to 127.0.0.1:6379. Connection refused. diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 45951d1..29ba41a 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -29,6 +29,8 @@ redSrv0.set(redSampleFreq,startingSampleFreq) #se non c'è un valore nei campi di redis, popolo il db redSrv0.set('SETTINGS:LOG:STATUS',0) redisTime = 'RTDATA:TIME:SRV' +if redSrv0.get('SETTINGS:PASSWORD:CURRENT') is None: + redSrv0.set('SETTINGS:PASSWORD:CURRENT',"-") if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: redSrv0.set('SETTINGS:FOLDER:CURRENT', "default") if redSrv0.get('SETTINGS:SELECTED_CH') is None: diff --git a/server/FTServer.py b/server/FTServer.py index cee28db..60adf6c 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -112,6 +112,21 @@ def api_channels_all(): @flaskApp.route("/api/v1/channels/current", methods=['GET']) def api_channels_current(): numCh = getRedisVal('SETTINGS:SELECTED_CH') + savedPwd = getRedisVal('SETTINGS:PASSWORD:CURRENT') + if savedPwd is None: + redSrv0.set('SETTINGS:PASSWORD:CURRENT',"") + # tutto false + showDiv1 = 0 + showDiv2 = 0 + showDiv3 = 0 + if savedPwd == "": + showDiv1 = 1 + elif savedPwd == "viaZavaritt": + showDiv3 = 1 + elif savedPwd == "viaZavaritt152": + showDiv2 = 1 + showDiv3 = 1 + #funzione api_channels_all: legge direttamente da redis, ritorna jsonify result = { 'numCh' : numCh, @@ -125,7 +140,10 @@ def api_channels_current(): 'MinOut' : getRedisVal('SETTINGS:OUT:MIN:'+str(numCh)), 'MaxIn' : getRedisVal('SETTINGS:IN:MAX:'+str(numCh)), 'MinIn' : getRedisVal('SETTINGS:IN:MIN:'+str(numCh)), - 'CurrentWorkFolder' : getRedisVal('SETTINGS:FOLDER:CURRENT') + 'CurrentWorkFolder' : getRedisVal('SETTINGS:FOLDER:CURRENT'), + 'ShowDiv01' : showDiv1, + 'ShowDiv02' : showDiv2, + 'ShowDiv03' : showDiv3, } # restituisce in formato json i dati letti da redis return jsonify(result) @@ -206,6 +224,13 @@ def data_delete(): redSrv0.set('SETTINGS:FOLDER:CURRENT', "not set") return redirect("/settings") +@flaskApp.route("/api/v1/setup/passwordInput", methods=['POST']) +def insertPassword(): + #funzione inserimento password + currentPassword = request.form['PasswordForm'] + redSrv0.set('SETTINGS:PASSWORD:CURRENT', currentPassword, ex=5*60) + return redirect("/settings") + @flaskApp.route("/api/v1/setup/saveInMin", methods=['PUT']) def setupInMin(): # devo leggere il channel attualmente selezionato diff --git a/server/templates/settings.html b/server/templates/settings.html index 4031aa8..3a6ce6c 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -24,6 +24,22 @@ $("#MinIn").html(result.MinIn); $("#MaxIn").html(result.MaxIn); $("#CurrentFolder").html(result.CurrentWorkFolder); + // inizio nascondendo + $("#Div1").show(); + $("#Div2").hide(); + $("#Div3").hide(); + // if(result.ShowDiv01 == "0") + // { + // $("#Div1").hide(); + // } + if(result.ShowDiv02 == "1") + { + $("#Div2").show(); + } + if(result.ShowDiv03 == "1") + { + $("#Div3").show(); + } }}); } @@ -121,8 +137,24 @@
-
-
+
+
+
+ Autenticazione utente +
+
+ +
+ Password:   + + +
+ +
+
+
+
+
Canale A @@ -130,26 +162,26 @@
-
+
- Nativo: -
- Scalato: - + Nativo: +
+ Scalato: +
-
+
Canale B @@ -157,167 +189,167 @@
-
+
- Nativo: -
+ Nativo: +
Scalato: -
+
-
-
-
-
- - Impostazioni scala canale -
-
- -
-
-
- -
-
-
-
-
-
-
-
-
-
-
MIN
-
Attuale
-
MAX
+
+
+
+
+
+ + Impostazioni scala canale
-
-
-
-
-
IN
-
-
-
000
-
000
-
000
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
OUT
-
-
-
- -
-
{{ Out0 }}
-
- -
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
MIN
+
Attuale
+
MAX
+
+
+
+
+
+
IN
+
+
+
000
+
000
+
000
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
OUT
+
+
+
+ +
+
{{ Out0 }}
+
+ +
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+
+
+
+ Selezione cartella +
+ Cartella attuale:   +
+
+
+
+
+ Insert new:   + + +
+
+
+
+
+
+ + Impostazioni Timer +
+
+
+
+ Periodo di campionamento (ms):   + +
+
+ Periodo di scrittura (ms):   + +
+ +
+
+
+
+
+
+ + Reset impostazioni predefinite +
+
+
- +
+ +
-
-
+
- -
-
-
-
-
- Selezione cartella -
- Cartella attuale:   -
-
-
-
-
- Insert new:   - - -
-
-
-
-
-
- - Impostazioni Timer -
-
-
-
- Periodo di campionamento (ms):   - -
-
- Periodo di scrittura (ms):   - -
- -
-
-
-
-
-
- - Reset impostazioni predefinite -
-
-
-
-
- -
-
-
From eba6ae8bbd557d03ba385f7b866ac09bab24059e Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Thu, 8 Apr 2021 14:27:09 +0200 Subject: [PATCH 5/6] formattazione html e pulizia codice --- logger/FTLogger.py | 5 +- sampler/FTSampler.py | 5 +- server/FTServer.py | 5 +- server/templates/about.html | 16 ++---- server/templates/layout.html | 4 +- server/templates/settings.html | 91 +++++++++++++++------------------- 6 files changed, 57 insertions(+), 69 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 305f427..170362c 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -16,7 +16,10 @@ redSrv0 = redis.Redis( #funzione per leggere e decodificare da redis def getRedisVal(redisKey): - return redSrv0.get(redisKey).decode('utf-8') + if redSrv0.get(redisKey) is None: + return redSrv0.get(redisKey) + else: + return redSrv0.get(redisKey).decode('utf-8') #assegno directory per file di data output DATA_path = "/home/pi/data/" diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 29ba41a..0be510b 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -16,7 +16,10 @@ redSrv0 = redis.Redis( #funzione per leggere e decodificare da redis def getRedisVal(redisKey): - return redSrv0.get(redisKey).decode('utf-8') + if redSrv0.get(redisKey) is None: + return redSrv0.get(redisKey) + else: + return redSrv0.get(redisKey).decode('utf-8') #assegno director log per file di debug LOG_path = "/home/pi/Flythis/logger/log/" diff --git a/server/FTServer.py b/server/FTServer.py index 60adf6c..984e0c2 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -27,7 +27,10 @@ redSrv0 = redis.Redis( #funzione per leggere e decodificare da redis def getRedisVal(redisKey): - return redSrv0.get(redisKey).decode('utf-8') + if redSrv0.get(redisKey) is None: + return redSrv0.get(redisKey) + else: + return redSrv0.get(redisKey).decode('utf-8') flaskApp = Flask(__name__) flaskApp.config['JSON_SORT_KEYS'] = False diff --git a/server/templates/about.html b/server/templates/about.html index 9ccbcef..5bce330 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -6,24 +6,16 @@ var intTime=2000;
-
+
- - About Analogger +

Steamware Srl

-

Steamware Srl

+ FT Logger Software 2021
-

Analog and Digital reader and logger software

-
-
-

Version 1.0.1

-
-
-

Last Patched:
- 06/04/2021

+ Analog and Digital reader and logger software
diff --git a/server/templates/layout.html b/server/templates/layout.html index 3c6e341..51b4f0a 100644 --- a/server/templates/layout.html +++ b/server/templates/layout.html @@ -4,8 +4,8 @@ - - + + {{ title }} diff --git a/server/templates/settings.html b/server/templates/settings.html index 3a6ce6c..f33947d 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -24,14 +24,9 @@ $("#MinIn").html(result.MinIn); $("#MaxIn").html(result.MaxIn); $("#CurrentFolder").html(result.CurrentWorkFolder); - // inizio nascondendo - $("#Div1").show(); + // inizio nascondendo div2 e div3 $("#Div2").hide(); $("#Div3").hide(); - // if(result.ShowDiv01 == "0") - // { - // $("#Div1").hide(); - // } if(result.ShowDiv02 == "1") { $("#Div2").show(); @@ -93,7 +88,7 @@ } }) }; - + function saveMax(){ $.ajax({ type: 'PUT' @@ -137,9 +132,9 @@
-
+
-
+
Autenticazione utente
@@ -154,12 +149,10 @@
-
-
-
+
+
+
Canale A -
-
-
Nativo:
@@ -181,12 +173,11 @@
-
-
-
+
+
+
+
Canale B -
-
-
Nativo: @@ -207,32 +197,31 @@ Scalato:
+
-
+
-
-
-
- - Impostazioni scala canale -
-
- -
-
-
- -
+
+
+ + Impostazioni scala canale +
+
+ +
+
+
+
@@ -300,13 +289,11 @@
-
- Selezione cartella -
- Cartella attuale:   -
+
+ Selezione folder salvataggio file
-
+
+ Cartella attuale:  
Insert new:   @@ -317,7 +304,7 @@
-
+
Impostazioni Timer
@@ -337,7 +324,7 @@
-
+
Reset impostazioni predefinite
From 1a0991b521826f0f9ee2a5bfd0f20b38aeb74134 Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Thu, 8 Apr 2021 15:52:34 +0200 Subject: [PATCH 6/6] confirm on delete, minor fix --- server/FTServer.py | 8 ++--- server/templates/logger.html | 65 ++++++++++++++++++++++++---------- server/templates/settings.html | 15 -------- 3 files changed, 50 insertions(+), 38 deletions(-) diff --git a/server/FTServer.py b/server/FTServer.py index 984e0c2..06c777d 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -216,7 +216,7 @@ def data_export(): else: os.mkdir(dataDestination) copy_tree(workingDirectory, dataDestination) - return redirect("/settings") + return redirect("/logger") @flaskApp.route("/api/v1/data/delete", methods=['PUT']) def data_delete(): @@ -225,7 +225,7 @@ def data_delete(): workingDirectory = (dataDir+currentFolder) shutil.rmtree(workingDirectory) redSrv0.set('SETTINGS:FOLDER:CURRENT', "not set") - return redirect("/settings") + return redirect("/logger") @flaskApp.route("/api/v1/setup/passwordInput", methods=['POST']) def insertPassword(): @@ -287,10 +287,10 @@ def setWorkingTree(): currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') workingDirectory = (dataDir+currentFolder) if os.path.isdir(workingDirectory) is True: - return redirect("/settings") + return redirect("/logger") else: os.mkdir(workingDirectory) - return redirect("/settings") + return redirect("/logger") @flaskApp.route("/api/v1/scaleout", methods=['POST']) def setScale(): diff --git a/server/templates/logger.html b/server/templates/logger.html index d452514..5c1f069 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -3,10 +3,13 @@ {% block content %}