From 2cfea27d1706d286c07ff7a6bbe9338ac1b2bc15 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 11:29:11 +0200 Subject: [PATCH 01/12] Gestione decimali mostrati & decimali calcolati --- server/templates/logger.html | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/server/templates/logger.html b/server/templates/logger.html index 409679b..efd921c 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -15,26 +15,26 @@ timeoutFast = setInterval(dataRefresh, intTime); timeoutSlow = setInterval(fixTables, intTimeSlow); - function fixFloat(actVal, numCount) + function fixFloat(actVal, numDisplay) { - return parseFloat(actVal).toFixed(numCount) + return parseFloat(actVal).toFixed(numDisplay) } function dataRefresh() { // scarico i dati aggioranti $.ajax({url: "/api/v1/channels/all", success: function(result){ - numCount = parseInt(result.DecimalsCount) + numDisplay = parseInt(result.DecimalsDisplay) var divWidth = document.getElementById("divChA").offsetWidth // compilo i dati scaricati $("#SelChannelA").html(result.ChA); - $("#OutputA").html(fixFloat(result.Outs[result.ChA],numCount)); + $("#OutputA").html(fixFloat(result.Outs[result.ChA],numDisplay)); 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(fixFloat(result.Outs[result.ChB],numDisplay)); setGaugeB(divWidth,result.Outs[result.ChB],result.Outmin[result.ChB],result.Outmax[result.ChB]); @@ -42,8 +42,8 @@ $("#ServerTime").html(result.timeSrv); $("#LastSessionName").html(result.LastSessionName); $("#CurrentFolder").html(result.CurrentWorkFolder); - $("#ResultValue").html(result.ResultValue); - $("#RealValue").html(result.RealValue); + $("#ResultValue").html(fixFloat(result.ResultValue,numDisplay)); + $("#RealValue").html(fixFloat(result.RealValue,numDisplay)); $("#Crono").html(result.Crono); if(result.GateOpen == "0") From 6ca7acee23468673480deffd4346d4fc12e2b5fa Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 11:31:48 +0200 Subject: [PATCH 02/12] v1.8.5 --- sampler/FTSampler.py | 28 +++++++++++++++------------- server/FTServer.py | 15 +++++++++++++-- server/templates/about.html | 2 +- server/templates/settings.html | 24 +++++++++++++++++++++--- 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index cd9862b..ae7acfe 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -32,16 +32,18 @@ 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) +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) + redSrv0.set('SETTINGS:WARNING:EXETIME', 0) if redSrv0.get('RTDATA:EWMA:VETO') is None: - redSrv0.set('RTDATA:EWMA:VETO',0) + redSrv0.set('RTDATA:EWMA:VETO', 0) if redSrv0.get('SETTINGS:LOG:FREQ') is None: - redSrv0.set('SETTINGS:LOG:FREQ', 70) + redSrv0.set('SETTINGS:LOG:FREQ', 100) if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None: - redSrv0.set('SETTINGS:DECIMALS:COUNT',1) + redSrv0.set('SETTINGS:DECIMALS:COUNT', 5) +if redSrv0.get('SETTINGS:DECIMALS:DISPLAY') is None: + redSrv0.set('SETTINGS:DECIMALS:DISPLAY', 2) if redSrv0.get('RTDATA:VALUE:K1CONST') is None: redSrv0.set('RTDATA:VALUE:K1CONST', 0) if redSrv0.get('RTDATA:VALUE:K2CONST') is None: @@ -67,23 +69,23 @@ if redSrv0.get('RTDATA:VALUE:SMRAW') is None: if redSrv0.get('SETTINGS:POWER:THRESH') is None: redSrv0.set('SETTINGS:POWER:THRESH', 0) if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: - redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 0) + redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 2) if redSrv0.get('SETTINGS:SMOOTHING:FACTOR') is None: redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 5) if redSrv0.get('SETTINGS:SMOOTHING:EFACT') is None: - redSrv0.set('SETTINGS:SMOOTHING:EFACT', 3) + redSrv0.set('SETTINGS:SMOOTHING:EFACT', 8) if redSrv0.get('SETTINGS:PASSWORD:CURRENT') is None: - redSrv0.set('SETTINGS:PASSWORD:CURRENT',"-") + redSrv0.set('SETTINGS:PASSWORD:CURRENT', "-") if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: redSrv0.set('SETTINGS:FOLDER:CURRENT', "") if redSrv0.get('SETTINGS:SELECTED_CH') is None: - redSrv0.set('SETTINGS:SELECTED_CH',0) + redSrv0.set('SETTINGS:SELECTED_CH', 0) if redSrv0.get('SETTINGS:CHANNEL:A') is None: - redSrv0.set('SETTINGS:CHANNEL:A',2) + redSrv0.set('SETTINGS:CHANNEL:A', 2) if redSrv0.get('SETTINGS:CHANNEL:B') is None: - redSrv0.set('SETTINGS:CHANNEL:B',3) + redSrv0.set('SETTINGS:CHANNEL:B', 3) if redSrv0.get('RTDATA:SESSION:NAME') is None: - redSrv0.set('RTDATA:SESSION:NAME',"") + redSrv0.set('RTDATA:SESSION:NAME', "") for numCh in range(0,8,+1): if redSrv0.get('SETTINGS:IN:MAX:'+str(numCh)) is None: diff --git a/server/FTServer.py b/server/FTServer.py index 7c05da5..b563461 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -118,6 +118,7 @@ def api_channels_all(): 'timeSrv' : getRedisVal('RTDATA:TIME:SRV'), 'WriteFreq' : getRedisVal('SETTINGS:WRITE:FREQ'), 'DecimalsCount' : getRedisVal('SETTINGS:DECIMALS:COUNT'), + 'DecimalsDisplay' : getRedisVal('SETTINGS:DECIMALS:DISPLAY'), 'Status' : getRedisVal('SETTINGS:LOG:STATUS'), 'Channels': CH, 'Outs': OUT, @@ -181,6 +182,7 @@ def api_channels_current(): 'timeSrv' : getRedisVal('RTDATA:TIME:SRV'), 'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'), 'DecimalsCount' : getRedisVal('SETTINGS:DECIMALS:COUNT'), + 'DecimalsDisplay' : getRedisVal('SETTINGS:DECIMALS:DISPLAY'), 'WriteFreq' : getRedisVal('SETTINGS:WRITE:FREQ'), 'TimeBeforeWrite' : getRedisVal('SETTINGS:LOG:WAITIME'), 'CurrIn' : getRedisVal('RTDATA:CH:'+str(numCh)), @@ -454,15 +456,24 @@ def setWriteFrequency(): # rimando in settings return redirect("/settings") -@flaskApp.route("/api/v1/decimals", methods=['POST']) +@flaskApp.route("/api/v1/decimalsCount", methods=['POST']) def setDecimalsCount(): - #funzione set decimali, scrive su SETTINGS:DECIMALS:COUNT + #funzione set decimali per i calcoli, scrive su SETTINGS:DECIMALS:COUNT newDecimalsCount = request.form['DecimalsCount'] redSrv0.set('SETTINGS:DECIMALS:COUNT', newDecimalsCount) redSrv0.save() # rimando in settings return redirect("/settings") +@flaskApp.route("/api/v1/decimalsDisplay", methods=['POST']) +def setDecimalsDisplay(): + #funzione set decimali da mostrare, scrive su SETTINGS:DECIMALS:DISPLAY + newDecimalsDisplay = request.form['DecimalsDisplay'] + redSrv0.set('SETTINGS:DECIMALS:DISPLAY', newDecimalsDisplay) + redSrv0.save() + # rimando in settings + return redirect("/settings") + @flaskApp.route("/api/v1/kconst", methods=['POST']) def setKConst(): #scrive su redis la costante K diff --git a/server/templates/about.html b/server/templates/about.html index 02cbaea..684e032 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -27,7 +27,7 @@
Egalware 2023
- Ver 1.8.4 + Ver 1.8.5
diff --git a/server/templates/settings.html b/server/templates/settings.html index b278d21..b4cba46 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -20,12 +20,14 @@ $.ajax({url: "/api/v1/channels/current", success: function(result){ // compilo i dati scaricati numCount = parseInt(result.DecimalsCount) + numDisplay = parseInt(result.DecimalsDisplay) $("#CurrIn").html(fixFloat(result.CurrIn,numCount)); $("#CurrOut").html(fixFloat(result.CurrOut, numCount)); $("#LogFreq").val(result.LogFreq); $("#WriteFreq").val(result.WriteFreq); $("#TimeBeforeWrite").val(result.TimeBeforeWrite); $("#DecimalsCount").val(result.DecimalsCount); + $("#DecimalsDispay").val(result.DecimalsDisplay); $("#ServerTime").html(result.timeSrv); $("#ddlChannels").val(result.numCh); $("#MinOut").val(result.MinOut); @@ -60,6 +62,7 @@ $.ajax({url: "/api/v1/channels/current", success: function(result){ // compilo i dati scaricati numCount = parseInt(result.DecimalsCount) + numDisplay = parseInt(result.DecimalsDisplay) $("#CurrIn").html(fixFloat(result.CurrIn,numCount)); $("#CurrOut").html(fixFloat(result.CurrOut, numCount)); $("#LoggerTime").html(result.timeLog); @@ -74,6 +77,7 @@ $.ajax({url: "/api/v1/channels/all", success: function(result){ numCount = parseInt(result.DecimalsCount) + numDisplay = parseInt(result.DecimalsDisplay) $("#SelChannelA").val(result.ChA); $("#ChannelA").html(fixFloat(result.Channels[result.ChA],numCount+1)); $("#OutputA").html(fixFloat(result.Outs[result.ChA],numCount)); @@ -87,6 +91,7 @@ $("#LogFrequency").html(result.LogFreq); $("#WriteFrequency").html(result.WriteFreq); $("#DecimalsCount").html(result.DecimalsCount); + $("#DecimalsDisplay").html(result.DecimalsDisplay); $("#ServerTime").html(result.timeSrv); $("#ChanScaleMin").html(result.ChScaleMin); $("#ChanScaleMax").html(result.ChScaleMax); @@ -454,12 +459,25 @@ Numero Decimali
-
+
- Numero di cifre decimali:   + Cifre decimali per i calcoli:  
- + +
+ +
+
+
+
+
+
+
+
+ Cifre decimali per visualizzazione:   +
+
From 9f7da5201b3857fee988420943698e1e2021c182 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 12:33:15 +0200 Subject: [PATCH 03/12] FixDisplay (cifre decimali) --- sampler/FTSampler.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index ae7acfe..a012b87 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -139,6 +139,27 @@ def redisSave(CHvalues): roundedOut = round(scaleVal(CHvalues[chIndex], chIndex), decimalsCount) redSrv0.set(redAreaOut,roundedOut) + +#funzione di gestione dei valori grezzi di ingresso dei canali x taratura min/MAX +def setupScale(CHvalues): + decimalsCount = int(getRedisVal('SETTINGS:DECIMALS:COUNT')) + redLastLog = 'RTDATA:TIME:LOG' + dateFormat ="%d/%m/%Y %H:%M:%S" + rawLastLog = datetime.datetime.now() + lastLog = rawLastLog.strftime(dateFormat) + redSrv0.set(redLastLog,str(lastLog)) + for chIndex in range(0,8,+1): + redAreaIn = 'RTDATA:CH:'+str(chIndex) + redAreaOut = 'RTDATA:OUT:'+str(chIndex) + strValIn = float("%.4f" % (CHvalues[chIndex])) + #salvo valore IN filtrato + redSrv0.set(redAreaIn,round(strValIn,decimalsCount)) + # salvo i valori scalati in OUT + roundedOut = round(scaleVal(CHvalues[chIndex], chIndex), decimalsCount) + redSrv0.set(redAreaOut,roundedOut) + + + #funzione di refresh valori scalati def scaleVal(inValue, chIndex): #rileggo da redis i valori min/max secondo chIndex @@ -264,6 +285,8 @@ try: meanValues = calcMean(dataBox) #salvo valori redisSave(meanValues) + #verifica se sono in fase di salvataggio min/max x taratura valori ingresso + setupScale(meanValues) # controllo soglia spegnimento checkPowerOff() # calcolo il valore k*[V2/(V1-V2)] + offset From f26a8d0824344bb49fda6d8cb138870e9aa69305 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 12:33:26 +0200 Subject: [PATCH 04/12] refresh --- server/templates/settings.html | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/server/templates/settings.html b/server/templates/settings.html index b4cba46..cd0f349 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -27,7 +27,7 @@ $("#WriteFreq").val(result.WriteFreq); $("#TimeBeforeWrite").val(result.TimeBeforeWrite); $("#DecimalsCount").val(result.DecimalsCount); - $("#DecimalsDispay").val(result.DecimalsDisplay); + $("#DecimalsDisplay").val(result.DecimalsDisplay); $("#ServerTime").html(result.timeSrv); $("#ddlChannels").val(result.numCh); $("#MinOut").val(result.MinOut); @@ -470,8 +470,6 @@
- -
From e4ff1771451f2a215772037e9f54e31fee104e53 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 12:36:38 +0200 Subject: [PATCH 05/12] Stabilizzazione setup e letture v1.8.6 --- server/templates/logger.html | 16 +++++++++++----- server/templates/settings.html | 4 ++-- server/test.sh | 9 +++++++++ 3 files changed, 22 insertions(+), 7 deletions(-) create mode 100644 server/test.sh diff --git a/server/templates/logger.html b/server/templates/logger.html index efd921c..62c52d9 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -122,6 +122,7 @@ $("#CalcMeasure2").html(result.CalcUMeasure); $("#SmoothFact").html(result.SmoothFact); $("#LogFreq").html(result.LogFreq); + $("#RecPeriod").html(result.SmoothFact*result.LogFreq); }}); // A ogni giro di data refresh fix di tabella cartelle e tabella file }; @@ -459,15 +460,20 @@
-
+
Smooth Factor:
-
+
Sample Period: ms
- +
+ Record Period: ms +
+
+ - + +
@@ -476,4 +482,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/server/templates/settings.html b/server/templates/settings.html index cd0f349..38a344d 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -433,7 +433,7 @@
Fattore di Smoothing:  
- +
@@ -577,4 +577,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/server/test.sh b/server/test.sh new file mode 100644 index 0000000..b9b6041 --- /dev/null +++ b/server/test.sh @@ -0,0 +1,9 @@ +#!/bin/bash + + +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 From 92776a4f6c2a30e2bd50f9899faab1494d4f8ff3 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 12:52:29 +0200 Subject: [PATCH 06/12] fix ultimo box logger.html --- server/templates/logger.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/server/templates/logger.html b/server/templates/logger.html index 62c52d9..1170cde 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -460,16 +460,16 @@
-
+
Smooth Factor:
-
+
Sample Period: ms
-
- Record Period: ms +
+ Record Period: ms
-
+
From 90306ac9bf56dde9ffe2e49fa7e3d7a519ec7b04 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 14:39:40 +0200 Subject: [PATCH 07/12] Update pag settings --- sampler/FTSampler.py | 4 +- server/FTServer.py | 18 +++++- server/templates/about.html | 2 +- server/templates/settings.html | 102 ++++++++++++++++++++++----------- 4 files changed, 88 insertions(+), 38 deletions(-) diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index a012b87..f9914cd 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -71,9 +71,9 @@ if redSrv0.get('SETTINGS:POWER:THRESH') is None: if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 2) if redSrv0.get('SETTINGS:SMOOTHING:FACTOR') is None: - redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 5) + redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 10) if redSrv0.get('SETTINGS:SMOOTHING:EFACT') is None: - redSrv0.set('SETTINGS:SMOOTHING:EFACT', 8) + redSrv0.set('SETTINGS:SMOOTHING:EFACT', 3) if redSrv0.get('SETTINGS:PASSWORD:CURRENT') is None: redSrv0.set('SETTINGS:PASSWORD:CURRENT', "-") if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: diff --git a/server/FTServer.py b/server/FTServer.py index b563461..b9c9f62 100644 --- a/server/FTServer.py +++ b/server/FTServer.py @@ -362,6 +362,20 @@ def insertPassword(): redSrv0.set('SETTINGS:PASSWORD:CURRENT', currentPassword, ex=3600) return redirect("/settings") +@flaskApp.route("/api/v1/setup/setupValues", methods=['PUT']) +def setupValues(): + redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 100) + redSrv0.set('SETTINGS:LOG:FREQ', 10) + redSrv0.save() + return redirect("/settings") + +@flaskApp.route("/api/v1/setup/workingValues", methods=['PUT']) +def workingValues(): + redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 25) + redSrv0.set('SETTINGS:LOG:FREQ', 20) + redSrv0.save() + return redirect("/settings") + @flaskApp.route("/api/v1/setup/saveInMin", methods=['PUT']) def setupInMin(): # devo leggere il channel attualmente selezionato @@ -446,10 +460,10 @@ def setEFact(): @flaskApp.route("/api/v1/frequency", methods=['POST']) def setWriteFrequency(): #funzione set frequenza scrive su redis LOG:FREQ prendendolo dall'input in pagina html con nome LogFreq - newWriteFrequency = request.form['WriteFreq'] - redSrv0.set('SETTINGS:WRITE:FREQ', newWriteFrequency) newLogFrequency = request.form['LogFreq'] redSrv0.set('SETTINGS:LOG:FREQ', newLogFrequency) + newWriteFrequency = request.form['WriteFreq'] + redSrv0.set('SETTINGS:WRITE:FREQ', newWriteFrequency) timeBeforeWrite = request.form['TimeBeforeWrite'] redSrv0.set('SETTINGS:LOG:WAITIME', timeBeforeWrite) redSrv0.save() diff --git a/server/templates/about.html b/server/templates/about.html index 684e032..251b8a4 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -27,7 +27,7 @@
Egalware 2023
- Ver 1.8.5 + Ver 1.8.7
diff --git a/server/templates/settings.html b/server/templates/settings.html index 38a344d..f0847eb 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -45,15 +45,18 @@ $("#CalcUMeasure").val(result.CalcUMeasure); $("#MinUptime").val(result.MinUptime); // inizio nascondendo div2 e div3 + $("#Div1").show(); $("#Div2").hide(); $("#Div3").hide(); if(result.ShowDiv02 == "1") { $("#Div2").show(); + $("#Div1").hide(); } if(result.ShowDiv03 == "1") { $("#Div3").show(); + $("#Div1").hide(); } }}); } @@ -101,6 +104,34 @@ }}); }; + function setupValues(){ + $.ajax({ + type: 'PUT' + ,url: "/api/v1/setup/setupValues" + ,data: "" + ,success: function(){ + alert('Setup Values'); + } + }) + refreshInput(); + refreshSettings(); + dataRefresh(); + }; + + function workingValues(){ + $.ajax({ + type: 'PUT' + ,url: "/api/v1/setup/workingValues" + ,data: "" + ,success: function(){ + alert('Working Values'); + } + }) + refreshInput(); + refreshSettings(); + dataRefresh(); + }; + function saveMin(){ $.ajax({ type: 'PUT' @@ -182,7 +213,7 @@ }); }; - //funzione powerOff: chiede conferma per spegnimento. + //funzione Settings Reset chiede conferma prima di flushare DB redis function settingsReset(){ var R = confirm("Reset impostazioni?"); if (R == true){ @@ -288,6 +319,11 @@
+
+
+
+
+
@@ -314,7 +350,7 @@
-
+
@@ -453,6 +489,37 @@
+
+
+ + Impostazioni Timer +
+
+ +
+ Periodo di campionamento (ms):   + +
+
+ Periodo di scrittura su file (ms):   + +
+
+
+ Ritardo prima scrittura su file (s):   + +
+
+
+
+
+ +
+
+
+ +
+
@@ -527,37 +594,6 @@
-
-
- - Impostazioni Timer -
-
-
-
- Periodo di campionamento (ms):   - -
-
- Periodo di scrittura su file (ms):   - -
-
-
- Ritardo prima scrittura su file (s):   - -
-
-
-
-
- -
-
-
-
-
-
From f595289e5af1f9d315e5de83c1b18df621f42ee4 Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 17:17:44 +0200 Subject: [PATCH 08/12] Update layout settings --- server/templates/about.html | 2 +- server/templates/settings.html | 403 +++++++++++++++++---------------- server/templates/settings.zip | Bin 0 -> 3706 bytes 3 files changed, 203 insertions(+), 202 deletions(-) create mode 100644 server/templates/settings.zip diff --git a/server/templates/about.html b/server/templates/about.html index 251b8a4..bb449a1 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -27,7 +27,7 @@
Egalware 2023
- Ver 1.8.7 + Ver 1.8.8
diff --git a/server/templates/settings.html b/server/templates/settings.html index f0847eb..b5571db 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -233,7 +233,7 @@
- Password:   + Password:  
@@ -241,150 +241,145 @@
-
-
-
-
- Canale A -
- +
+
+
+
+
+ Canale A +
+ +
+
+ Nativo: +
+ Scalato: +
-
- Nativo: -
- Scalato: +
+
+
+
+
+ Canale B +
+ +
+
+
+ Nativo: +
+ Scalato: -
-
-
-
-
-
- Canale B -
-
-
-
- Nativo: -
- Scalato: -
-
-
-
- - Impostazioni scalatura -
-
- -
-
-
- +
+
+
+
+ + Impostazioni scalatura +
+
+ +
+
+
+ +
-
-
-
-
-
-
-
-
-
-
-
-
Input Attuale:   000
-
-
-
-
-
-
-
-
-
-
-
Output attuale:   {{ Out0 }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
IN
-
-
-
-
-
-
+
+
+ min Value
-
-
-
-
OUT
-
-
-
-
-
-
+
+ ActVal
-
+
+ MAX Value
+
+
+
+ +
+ +
+
+
+
+ +
+
+
+ +
+ +
+
+
+
+
+
+ OUT +
+ +
+
+
+ +
+
+
+
+ OUT +
+ +
+
-
- Unità di misura:   - +
+
+ Unità di misura:   + +
@@ -397,65 +392,22 @@
-
-
- - Valori per calcolo risultante = k1*x^2 + k2*x + offset -
-
-
-
-
- Costante k1:   -
- -
-
-
- Costante k2:   -
- -
-
-
- Offset o:   -
- -
-
-
-
- -
-
-
-
-
-
-
-
- Unità di misura del risultato di [Valore B / (Valore A - Valore B)] -
-
-
-
- Unità di misura:   - - -
-
-
-
Tipo processing
+
+
+
+
+
+
-
-
- Selezione Processing +
+
+ Selezione Processing
@@ -476,9 +428,9 @@
-
-
- Valore per EWMA:   +
+
+ Valore per EWMA:  
@@ -496,16 +448,16 @@
-
+
Periodo di campionamento (ms):  
-
+
Periodo di scrittura su file (ms):  
-
+
Ritardo prima scrittura su file (s):  
@@ -527,9 +479,9 @@
-
-
- Cifre decimali per i calcoli:   +
+
+ Cifre decimali per calcoli:  
@@ -538,9 +490,9 @@
-
-
- Cifre decimali per visualizzazione:   +
+
+ Cifre decimali per visualizzazione:  
@@ -550,6 +502,55 @@
+
+
+ + Valori per calcolo risultante = k1*x^2 + k2*x + offset +
+
+
+
+
+ Costante k1:   +
+ +
+
+
+ Costante k2:   +
+ +
+
+
+ Offset o:   +
+ +
+
+
+
+ +
+
+
+
+
+
+
+
+ Unità di misura del risultato di [Valore B / (Valore A - Valore B)] +
+
+
+
+ Unità di misura:   + + +
+
+
+
Impostazione canale da monitorare per soglia spegnimento @@ -557,9 +558,9 @@
-
-
- Selezione canale +
+
+ Selezione canale
-
- Attesa minima prima dello spegnimento:   +
+ Attesa minima prima dello spegnimento:  
diff --git a/server/templates/settings.zip b/server/templates/settings.zip new file mode 100644 index 0000000000000000000000000000000000000000..fd0b4cbff7481a6a0242bc4cebd55f1a2b5a0b1f GIT binary patch literal 3706 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 Date: Tue, 11 Jul 2023 17:34:52 +0200 Subject: [PATCH 09/12] Ancora update layout settings --- server/templates/settings.html | 141 +++++++++++++++++---------------- 1 file changed, 74 insertions(+), 67 deletions(-) diff --git a/server/templates/settings.html b/server/templates/settings.html index b5571db..68dd271 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -233,7 +233,7 @@
- Password:   + Password:  
@@ -299,14 +299,14 @@
-
+
Impostazioni scalatura
-
+
-
+
- +
-
- OUT +
+ OUT
+
-
- Unità di misura:   - +
+
+ Unità di misura:   +
+
-
-
- +
+
-
@@ -396,18 +397,16 @@
Tipo processing
-
-
-
-
-
+
+
+
+
-
-
- Selezione Processing +
+ Selezione Processing
@@ -429,8 +428,8 @@
-
- Valore per EWMA:   +
+ Valore per EWMA:  
@@ -446,30 +445,38 @@ Impostazioni Timer
-
- -
- Periodo di campionamento (ms):   - -
-
- Periodo di scrittura su file (ms):   - -
-
-
- Ritardo prima scrittura su file (s):   - -
-
-
-
-
- +
+
+ +
+
+ Periodo di campionamento (ms):   +
+
-
-
- +
+
+ Periodo di scrittura su file (ms):   +
+ +
+
+
+
+ Ritardo prima scrittura su file (s):   +
+ +
+
+
+
+
+ +
+
+
+ +
@@ -480,8 +487,8 @@
-
- Cifre decimali per calcoli:   +
+ Cifre decimali per calcoli:  
@@ -491,8 +498,8 @@
-
- Cifre decimali per visualizzazione:   +
+ Cifre decimali per visualizzazione:  
@@ -510,20 +517,20 @@
-
- Costante k1:   +
+ Costante k1:  
-
- Costante k2:   +
+ Costante k2:  
-
- Offset o:   +
+ Offset o:  
@@ -544,7 +551,7 @@
- Unità di misura:   + Unità di misura:  
@@ -559,8 +566,8 @@
-
- Selezione canale +
+ Selezione canale
- Attesa minima prima dello spegnimento:   + Attesa minima prima dello spegnimento:  
From d60f5410ea41e8fe8e435dd45637ef07cce49efd Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 17:53:20 +0200 Subject: [PATCH 10/12] Completata pagina settings x layout --- server/templates/settings.html | 153 +++++++++++++++++---------------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/server/templates/settings.html b/server/templates/settings.html index 68dd271..d997872 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -398,7 +398,7 @@ Tipo processing
-
+
@@ -450,30 +450,28 @@
- Periodo di campionamento (ms):   + Periodo di campionamento (ms):  
- +
- Periodo di scrittura su file (ms):   + Periodo di scrittura su file (ms):  
- +
- Ritardo prima scrittura su file (s):   + Ritardo prima scrittura su file (s):  
- +
-
-
+
-
@@ -484,76 +482,85 @@ Numero Decimali
-
-
-
-
- Cifre decimali per calcoli:   +
+
+ +
+
+ Decimali calcolo:   +
+ +
+ +
- -
- + +
+
+
+ Decimali display:   +
+ +
+ +
-
- -
-
-
- Cifre decimali per visualizzazione:   -
- -
- -
-
-
+ +
- - Valori per calcolo risultante = k1*x^2 + k2*x + offset +
+ Valori per calcolo risultante = k1*x^2 + k2*x + offset +
-
-
-
-
- Costante k1:   +
+
+ +
+
+ Costante k1:   +
+
- -
-
-
- Costante k2:   +
+
+ Costante k2:   +
+
- -
-
-
- Offset o:   +
+
+ Offset o:   +
+
- -
-
-
-
- +
+
+ +
-
-
- + +
Unità di misura del risultato di [Valore B / (Valore A - Valore B)]
-
-
-
- Unità di misura:   - - +
+ +
+
+ Unità di misura:   +
+ +
+
+
+ +
@@ -562,12 +569,12 @@
Impostazione canale da monitorare per soglia spegnimento
-
+
- Selezione canale + Selezione canale
- Attesa minima prima dello spegnimento:   +
+ Attesa spegnimento (sec):   +
-
-
+
-
@@ -609,11 +618,9 @@
-
-
+
-
From 9f486d5465d43ed10749b5395d97905bbf7a858c Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Tue, 11 Jul 2023 18:27:08 +0200 Subject: [PATCH 11/12] Completato layout grafico anche x tempo clock --- server/templates/layout.html | 36 +++++++++------ server/templates/settings.html | 80 ++++++++++++++++++---------------- 2 files changed, 65 insertions(+), 51 deletions(-) diff --git a/server/templates/layout.html b/server/templates/layout.html index f6bd787..515bf06 100644 --- a/server/templates/layout.html +++ b/server/templates/layout.html @@ -46,22 +46,32 @@
-
-
+
+
Data e ora
-
-
- -
-
-
-
- - - +
+
+
+
+ +
+
- +
+
+
+
+
+ +
+ +
+ +
+
+
+
diff --git a/server/templates/settings.html b/server/templates/settings.html index d997872..c3a91f4 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -44,6 +44,7 @@ $("#EFact").val(result.EFact); $("#CalcUMeasure").val(result.CalcUMeasure); $("#MinUptime").val(result.MinUptime); + $("#RecPeriod").html(result.SmoothFact*result.LogFreq); // inizio nascondendo div2 e div3 $("#Div1").show(); $("#Div2").hide(); @@ -233,7 +234,7 @@
- Password:   + Password:  
@@ -296,19 +297,18 @@
-
-
-
-
- - Impostazioni scalatura -
-
- -
-
-
- @@ -317,8 +317,7 @@ - -
+
@@ -326,17 +325,17 @@
- min Value + Min
- ActVal + Actual
- MAX Value + Max
-
+
@@ -358,7 +357,7 @@
- OUT + OUT
@@ -369,7 +368,7 @@
- OUT + OUT
@@ -398,15 +397,15 @@ Tipo processing
-
-
-
+
+
+
- Selezione Processing + Selezione Processing
@@ -429,7 +428,7 @@
- Valore per EWMA:   + Valore per EWMA:  
@@ -442,8 +441,13 @@
- - Impostazioni Timer +
+ + Impostazioni Timer +
+
+  ms +
@@ -487,7 +491,7 @@
- Decimali calcolo:   + Decimali calcolo:  
@@ -498,7 +502,7 @@
- Decimali display:   + Decimali display:  
@@ -512,7 +516,7 @@
- Valori per calcolo risultante = k1*x^2 + k2*x + offset + Valori per calcolo risultante = k1*x^2 + k2*x + offset
@@ -520,19 +524,19 @@
- Costante k1:   + Costante k1:  
- Costante k2:   + Costante k2:  
- Offset o:   + Offset o:  
@@ -547,7 +551,7 @@
- Unità di misura del risultato di [Valore B / (Valore A - Valore B)] + Unità di misura del risultato di   [Valore B / (Valore A - Valore B)]
@@ -567,7 +571,7 @@
- Impostazione canale da monitorare per soglia spegnimento + Impostazione canale da monitorare per  soglia spegnimento
From 05d5f4b6f8b2312cf4fe5e1b67358062a7202fab Mon Sep 17 00:00:00 2001 From: "marco.locatelli@steamware.net" Date: Wed, 12 Jul 2023 12:25:09 +0200 Subject: [PATCH 12/12] v1.8.9 fix estensivi a templates html --- sampler/FTSampler.py | 8 +-- server/templates/about.html | 3 +- server/templates/layout.html | 15 +++--- server/templates/logger.html | 71 +++++++++++++++---------- server/templates/settings.html | 91 +++++++++++++++------------------ server/templates/settings.zip | Bin 3706 -> 0 bytes 6 files changed, 99 insertions(+), 89 deletions(-) delete mode 100644 server/templates/settings.zip diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index f9914cd..cc46038 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -39,11 +39,11 @@ if redSrv0.get('SETTINGS:WARNING:EXETIME') is None: if redSrv0.get('RTDATA:EWMA:VETO') is None: redSrv0.set('RTDATA:EWMA:VETO', 0) if redSrv0.get('SETTINGS:LOG:FREQ') is None: - redSrv0.set('SETTINGS:LOG:FREQ', 100) + redSrv0.set('SETTINGS:LOG:FREQ', 20) if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None: - redSrv0.set('SETTINGS:DECIMALS:COUNT', 5) + redSrv0.set('SETTINGS:DECIMALS:COUNT', 3) if redSrv0.get('SETTINGS:DECIMALS:DISPLAY') is None: - redSrv0.set('SETTINGS:DECIMALS:DISPLAY', 2) + redSrv0.set('SETTINGS:DECIMALS:DISPLAY', 1) if redSrv0.get('RTDATA:VALUE:K1CONST') is None: redSrv0.set('RTDATA:VALUE:K1CONST', 0) if redSrv0.get('RTDATA:VALUE:K2CONST') is None: @@ -71,7 +71,7 @@ if redSrv0.get('SETTINGS:POWER:THRESH') is None: if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 2) if redSrv0.get('SETTINGS:SMOOTHING:FACTOR') is None: - redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 10) + redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 25) if redSrv0.get('SETTINGS:SMOOTHING:EFACT') is None: redSrv0.set('SETTINGS:SMOOTHING:EFACT', 3) if redSrv0.get('SETTINGS:PASSWORD:CURRENT') is None: diff --git a/server/templates/about.html b/server/templates/about.html index bb449a1..68b5880 100644 --- a/server/templates/about.html +++ b/server/templates/about.html @@ -18,7 +18,6 @@ } }}); }; -
@@ -27,7 +26,7 @@
Egalware 2023
- Ver 1.8.8 + V 1.8.9
diff --git a/server/templates/layout.html b/server/templates/layout.html index 515bf06..6b59398 100644 --- a/server/templates/layout.html +++ b/server/templates/layout.html @@ -80,14 +80,15 @@
-
-
-
-
-
© Egalware 2022-2023 +
+
+
+ V 1.8.9 +
+
+ © Egalware 2023 +
-
-
diff --git a/server/templates/logger.html b/server/templates/logger.html index 1170cde..d6e0247 100644 --- a/server/templates/logger.html +++ b/server/templates/logger.html @@ -386,21 +386,58 @@
-
-
- Media Grezza: +
+ Media Grezza: +
+
+ Media Corretta: +
+
+
-
- Media Corretta: +
+
-
-
+
+
+
+
+
+ Smooth Factor: +
+
+ Sample Period: +
+
+ Record Period: +
+
+ System Load: +
+
+ +
+
+ ms +
+
+ ms +
+
+ + + +
+
+
+
+
@@ -457,26 +494,6 @@

-
-
-
-
- Smooth Factor: -
-
- Sample Period: ms -
-
- Record Period: ms -
-
- - - -
-
-
-


diff --git a/server/templates/settings.html b/server/templates/settings.html index c3a91f4..d52ae8f 100644 --- a/server/templates/settings.html +++ b/server/templates/settings.html @@ -301,7 +301,7 @@
- Scalatura + Taratura
@@ -324,18 +324,39 @@
-
- Min +
- Actual + Min +
+
+ Now
- Max + Max
-
+
+ Out +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ Inp +
+
@@ -343,10 +364,10 @@
-
+
-
+
@@ -354,25 +375,6 @@
-
-
-
- OUT -
- -
-
-
- -
-
-
-
- OUT -
- -
-
@@ -386,7 +388,7 @@
- +
@@ -394,7 +396,13 @@
- Tipo processing +
+ + Processing e Timer +
+
+  ms +
@@ -426,7 +434,7 @@
-
+
Valore per EWMA:  
@@ -436,21 +444,6 @@
-
-
-
-
-
-
- - Impostazioni Timer -
-
-  ms -
-
-
-
@@ -516,7 +509,7 @@
- Valori per calcolo risultante = k1*x^2 + k2*x + offset + Valori per calcolo risultante = k1*x^2 + k2*x + offset
@@ -551,7 +544,7 @@
- Unità di misura del risultato di   [Valore B / (Valore A - Valore B)] + Unità di misura del risultato di [Valore B / (Valore A - Valore B)]
@@ -571,7 +564,7 @@
- Impostazione canale da monitorare per  soglia spegnimento + Impostazione canale da monitorare per soglia spegnimento
@@ -596,7 +589,7 @@
- Soglia spegnimento:   + Soglia spegnimento: 
diff --git a/server/templates/settings.zip b/server/templates/settings.zip deleted file mode 100644 index fd0b4cbff7481a6a0242bc4cebd55f1a2b5a0b1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3706 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