42 Commits

Author SHA1 Message Date
marco.locatelli@steamware.net 5f1ae59099 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/other/AnaLogger into develop 2023-07-12 14:51:37 +02:00
marco.locatelli@steamware.net 8516f43e22 typo 2023-07-12 14:51:28 +02:00
Samuele Locatelli 7d70af70a5 Merge tag 'v_1.8.9' into develop
Update gest setup/taratura
2023-07-12 14:31:12 +02:00
Samuele Locatelli 8aafe64bf9 Merge branch 'release/v_1.8.9' 2023-07-12 14:31:01 +02:00
marco.locatelli@steamware.net 05d5f4b6f8 v1.8.9 fix estensivi a templates html 2023-07-12 12:25:09 +02:00
marco.locatelli@steamware.net 9f486d5465 Completato layout grafico anche x tempo clock 2023-07-11 18:27:08 +02:00
marco.locatelli@steamware.net d60f5410ea Completata pagina settings x layout 2023-07-11 17:53:20 +02:00
marco.locatelli@steamware.net 8f4a2cbcc2 Ancora update layout settings 2023-07-11 17:34:52 +02:00
marco.locatelli@steamware.net f595289e5a Update layout settings 2023-07-11 17:17:44 +02:00
marco.locatelli@steamware.net 90306ac9bf Update pag settings 2023-07-11 14:39:40 +02:00
marco.locatelli@steamware.net 92776a4f6c fix ultimo box logger.html 2023-07-11 12:52:29 +02:00
marco.locatelli@steamware.net e4ff177145 Stabilizzazione setup e letture v1.8.6 2023-07-11 12:36:38 +02:00
marco.locatelli@steamware.net f26a8d0824 refresh 2023-07-11 12:33:26 +02:00
marco.locatelli@steamware.net 9f7da5201b FixDisplay (cifre decimali) 2023-07-11 12:33:15 +02:00
marco.locatelli@steamware.net 6ca7acee23 v1.8.5 2023-07-11 11:31:48 +02:00
marco.locatelli@steamware.net 2cfea27d17 Gestione decimali mostrati & decimali calcolati 2023-07-11 11:29:11 +02:00
Samuele Locatelli c60e013ece Merge tag 'v_1.8.4' into develop
Fix vers 1.8.4
2023-07-03 17:24:53 +02:00
Samuele Locatelli 1249db4c4a Merge branch 'release/v_1.8.4' 2023-07-03 17:24:29 +02:00
Samuele Locatelli 5a3cb7bc98 New rel 2023-07-03 17:24:09 +02:00
Samuele Locatelli c6becf3a67 Fix conf sampler 2023-07-03 17:20:33 +02:00
Samuele Locatelli e72af2dc90 Ancora update EWMA veto 2023-07-03 17:03:03 +02:00
Samuele Locatelli 7918cd75aa ancora fix denominatore 2023-07-03 15:16:39 +02:00
Samuele Locatelli 4789d1c604 FIX: display errore x denominatore zero 2023-07-03 15:16:32 +02:00
Samuele Locatelli f3ea39e588 Merge tag 'v_1.8.3' into develop
Update calcolo
2023-06-29 15:52:30 +02:00
Samuele Locatelli 76172cbe93 Merge branch 'release/v_1.8.3' 2023-06-29 15:52:24 +02:00
marco.locatelli@steamware.net da12979c6a v1.8.3 , fix importante a media e correzione 2023-06-29 15:17:54 +02:00
Samuele Locatelli 98d4e5e3f4 Merge tag 'v_1.8.2' into develop
Fix default setup
2023-06-27 14:49:38 +02:00
Samuele Locatelli b434bb2880 Merge branch 'release/v_1.8.2' 2023-06-27 14:49:30 +02:00
marco.locatelli@steamware.net 0c05c470f1 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/other/AnaLogger into develop 2023-06-27 14:48:45 +02:00
marco.locatelli@steamware.net 24f8b31653 v1.8.2 - fix ai valori default 2023-06-27 14:48:25 +02:00
Samuele Locatelli e2eeae9d98 Merge tag 'v_1.8.1' into develop
Update con vers testat in prod
2023-06-27 13:15:32 +02:00
Samuele Locatelli c8337db86a Merge branch 'release/v_1.8.1' 2023-06-27 13:14:29 +02:00
marco.locatelli@steamware.net 1b7aab3fef vers 1.8.1 2023-06-27 13:13:29 +02:00
marco.locatelli@steamware.net 66d947aac5 Merge branch 'develop' of https://gitlab.steamware.net/egalware-web/other/AnaLogger into develop 2023-06-27 13:13:10 +02:00
marco.locatelli@steamware.net 86fff8dede Merge branch 'temp_branch' into develop 2023-06-27 13:11:35 +02:00
marco.locatelli@steamware.net eb4efcf9a3 1.8.1 Fix a correzione e media 2023-06-27 13:06:14 +02:00
Samuele Locatelli 9a4d7b73eb Merge tag 'v_1.8.0' into develop
Update vers num
2023-06-27 10:43:08 +02:00
Samuele Locatelli 356c6a741e Merge branch 'release/v_1.8.0' 2023-06-27 10:42:58 +02:00
Samuele Locatelli a09b7c666d Update vers 1.8.0 2023-06-27 10:42:37 +02:00
Samuele Locatelli e81f96af8b Merge tag 'AddEwmaSetting' into develop
Aggiunta setting parametro EWMA
2023-06-27 10:34:53 +02:00
Samuele Locatelli ec33733594 Merge branch 'release/AddEwmaSetting' 2023-06-27 10:34:45 +02:00
marco.locatelli@steamware.net 774966bc03 Gestione parametro EWMA 2023-06-27 10:30:23 +02:00
7 changed files with 559 additions and 334 deletions
+78 -49
View File
@@ -32,14 +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)
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',1)
redSrv0.set('SETTINGS:DECIMALS:COUNT', 3)
if redSrv0.get('SETTINGS:DECIMALS:DISPLAY') is None:
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:
@@ -65,21 +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', 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:
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:
@@ -133,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
@@ -183,48 +210,48 @@ def calculateValue():
k1 = getRedisVal('RTDATA:VALUE:K1CONST')
k2 = getRedisVal('RTDATA:VALUE:K2CONST')
offset = getRedisVal('RTDATA:VALUE:OFFSET')
eFact = int(getRedisVal('SETTINGS:SMOOTHING:EFACT'))
# check val min di 1 x denom EWMA...
if(eFact < 1):
eFact = 1
# fix valore minimo denominatore
den = abs(float(v1)-float(v2))
if(den < 0.05):
den = 0.05
# calcolo il valore risultante pulito (senza correzioni)
redSrv0.set('RTDATA:WARNING:DENOMZERO', 1)
else:
redSrv0.set('RTDATA:WARNING:DENOMZERO', 0)
# calcolo il valore risultante RealTime pulito (senza correzioni)
XVal = (float(v2)/float(den))
redSrv0.set('RTDATA:VALUE:RAW',round(XVal,decimalsCount))
# Smoothing EWMA valori "grezzi"
strValInRaw = XVal
# EWMAx RAW RILEGGO DA REDIS vecchio valore
oldValRaw = float(redSrv0.get('RTDATA:VALUE:SMRAW'))
if(oldValRaw == 0):
oldValRaw = 0.01
# se variazione < 50% smooth, altrimenti usa il valore nuovo
if((abs(XVal - oldValRaw) / oldValRaw) < 0.5):
# effettuo smoothing valore
eFact = 3
strValInRaw = (XVal/eFact) + (oldValRaw * (eFact-1) / eFact)
redSrv0.set('RTDATA:VALUE:SMRAW',round(strValInRaw,decimalsCount))
# applicazione correzioni (costanti k1*x^2, k2*x e offset)
newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset)
redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount))
#if(newValue > 0):
# redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount))
#else:
# newValue = 300
# redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount))
# Smoothing EWMA valori corretti (fattori k1 k2)
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, altrimenti usa il valore nuovo
if((abs(newValue - oldVal) / oldVal) < 0.5):
# effettuo smoothing valore
eFact = 3
strValIn = (newValue/eFact) + (oldVal * (eFact-1) / eFact)
redSrv0.set('RTDATA:VALUE:SMOOTHED',round(strValIn,decimalsCount))
# # correzione fattore di scala K2 su cifre significative
# corrDecCount = decimalsCount - int(round(math.log(float(k2),10),0))
# if (corrDecCount < 0):
# corrDecCount = 0
# applicazione correzioni (costanti k1*x^2, k2*x e offset) in RT
YVal = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset)
# redSrv0.set('RTDATA:VALUE:REAL',round(YVal,corrDecCount))
redSrv0.set('RTDATA:VALUE:REAL',round(YVal,decimalsCount))
# procedo SOLO SE il veto EWMA non è presente...
eVeto = getRedisVal('RTDATA:EWMA:VETO')
if (redSrv0.get('RTDATA:EWMA:VETO') is None):
# Smoothing EWMA valori "grezzi" (= medio sul passato) --> ottengo valori "X filtrati"
# RILEGGO DA REDIS vecchio valore
XValOld = float(redSrv0.get('RTDATA:VALUE:SMRAW'))
XValEwma = (XVal/eFact) + (XValOld * (eFact-1) / eFact)
else:
# NON faccio nulla
XValEwma = XVal
# salvo XVal!
redSrv0.set('RTDATA:VALUE:SMRAW',round(XValEwma,decimalsCount))
# applicazione correzioni (costanti k1*x^2, k2*x e offset) sul valore "X filtrato"
YValEwma = (float(k1)*float(XValEwma)*float(XValEwma))+(float(k2)*float(XValEwma))+float(offset)
# redSrv0.set('RTDATA:VALUE:SMOOTHED',round(YValEwma,corrDecCount))
redSrv0.set('RTDATA:VALUE:SMOOTHED',round(YValEwma,decimalsCount))
# init array
smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR'))
initArray = [0.0] * 8
@@ -258,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
@@ -267,8 +296,8 @@ try:
# calcolo il delta time dovuto alle esecuzioni
delta = endExec - now
# attesa viene fatta sempre
waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000
if(waitTime < 0.0):
waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000
if(waitTime < 0.001):
redSrv0.set('SETTINGS:WARNING:EXETIME',1)
else:
redSrv0.set('SETTINGS:WARNING:EXETIME',0)
+54 -5
View File
@@ -89,12 +89,20 @@ def about():
@flaskApp.route("/api/v1/channels/all", methods=['GET'])
def api_channels_all():
numCh = getRedisVal('SETTINGS:SELECTED_CH')
# check exe time vs sample time
exeWarning = getRedisVal('SETTINGS:WARNING:EXETIME')
displayWarning = 0
if exeWarning == "1":
displayWarning = 1
elif exeWarning == "0":
displayWarning = 0
#check demon warning
denZero = getRedisVal('RTDATA:WARNING:DENOMZERO')
displayDenomWarning = 0
if denZero == "1":
displayDenomWarning = 1
elif denZero == "0":
displayDenomWarning = 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]
@@ -110,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,
@@ -129,12 +138,15 @@ def api_channels_all():
'RealDateStatus' : getRedisVal('SETTINGS:TIME:REAL'),
'SelPowerChannel' : getRedisVal('SETTINGS:POWER:CH'),
'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'),
'EFact' : getRedisVal('SETTINGS:SMOOTHING:EFACT'),
'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'),
'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'),
'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'),
'RealValue' : getRedisVal('RTDATA:VALUE:SMRAW'),
'Crono' : getRedisVal('SETTINGS:LOG:CRONO'),
'DisplayAlert' : displayWarning
'DisplayAlert' : displayWarning,
'DisplayDenomAlert' : displayDenomWarning,
'EwmaEnab' : (redSrv0.get('RTDATA:EWMA:VETO') is None)
}
# restituisce in formato json i dati letti da redis
return jsonify(channelsData)
@@ -165,10 +177,12 @@ def api_channels_current():
'Offset' : getRedisVal('RTDATA:VALUE:OFFSET'),
'CalcUMeasure' : getRedisVal('RTDATA:VALUE:UMEASURE'),
'SmoothFact' : getRedisVal('SETTINGS:SMOOTHING:FACTOR'),
'EFact' : getRedisVal('SETTINGS:SMOOTHING:EFACT'),
'ChanThresh' : getRedisVal('SETTINGS:POWER:THRESH'),
'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)),
@@ -229,6 +243,8 @@ def start_log():
workingDirectory = (dataDir+currentFolder)
if workingDirectory != dataDir:
redSrv0.set('SETTINGS:LOG:STATUS', 1)
redSrv0.set('RTDATA:EWMA:VETO', 1)
redSrv0.expire('RTDATA:EWMA:VETO', 2)
#data e time ora
lastDate = datetime.now()
#formato per data time nomefile: YYYYddmm_HMS
@@ -244,6 +260,8 @@ def start_log():
workingDirectory = (dataDir+currentFolder)
os.mkdir(workingDirectory)
redSrv0.set('SETTINGS:LOG:STATUS', 1)
redSrv0.set('RTDATA:EWMA:VETO', 1)
redSrv0.expire('RTDATA:EWMA:VETO', 2)
#data e time ora
lastDate = datetime.now()
#formato per data time nomefile: YYYYddmm_HMS
@@ -344,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
@@ -417,28 +449,45 @@ def setSmoothFact():
# rimando in settings
return redirect("/settings")
@flaskApp.route("/api/v1/eFact", methods=['POST'])
def setEFact():
eFactor = request.form['EFact']
redSrv0.set('SETTINGS:SMOOTHING:EFACT', eFactor)
redSrv0.save()
# rimando in settings
return redirect("/settings")
@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()
# 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
+2 -3
View File
@@ -18,16 +18,15 @@
}
}});
};
</script>
<div class="card my-2">
<div class="card-header">
<h4>FTLogger</h4>
</div>
<div class="card-body">
Egalware 2022
Egalware 2023
<br>
Ver 1.6.2
V 1.8.9
</div>
</div>
</main>
+31 -20
View File
@@ -46,22 +46,32 @@
<div id="main">
<div class="container-fluid">
<div id="Div0">
<div class="card col-12 my-2">
<div class="row card-header">
<div class="card my-2">
<div class="card-header">
<strong>Data e ora</strong>
</div>
<div class="card-body">
<div class="col-12 row input-group my-2">
<label for="dateTimeInput" class="input-group-text col-4">Data Interna: &nbsp;</label>
<div class="col-8"><span id="ServerTime" class="input-group-text"></span></div>
</div>
<form class="col-12" method="POST" action="/api/v1/setup/dateTime">
<div class="row input-group my-2">
<label for="dateTimeInput" class="input-group-text col-4">Imposta Data: &nbsp;</label>
<input type="datetime-local" class="col-6" id="dateTimeInput" name="dateTimeInput">
<input type="submit" value="SET" class="btn btn-success col-2">
<div class="card-body p-1">
<div class="row">
<div class="col-12 input-group my-2">
<div class="input-group-prepend">
<label for="dateTimeInput" class="input-group-text">Data Interna: &nbsp;</label>
</div>
<span id="ServerTime" class="form-control"></span>
</div>
</form>
</div>
<div class="row">
<form class="col-12" method="POST" action="/api/v1/setup/dateTime">
<div class="input-group my-2">
<div class="input-group-prepend">
<label for="dateTimeInput" class="input-group-text">Imposta Data: &nbsp;</label>
</div>
<input type="datetime-local" class="form-control" id="dateTimeInput" name="dateTimeInput">
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success">
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@@ -70,14 +80,15 @@
</div>
</div>
<!--fine contenuto main, inizio footer (data, ora, logo)-->
<footer class="py-1 bg-light bg-dark text-light fixed-bottom">
<div class="container-fluid">
<div class="d-flex align-items-center justify-content-between small">
<div><span id="ServerTime"></span></div>
<div>&copy; Egalware 2022
<footer class="py-1 bg-dark text-light text-center fixed-bottom">
<div class="row">
<div class="col-6">
V 1.8.9
</div>
<div class="col-6">
&copy; Egalware 2023
</div>
</div>
</div>
</div>
</footer>
</body>
</html>
+86 -34
View File
@@ -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")
@@ -77,12 +77,21 @@
{
$("#btnStart").show();
$("#btnStop").hide();
$("#EwmaVeto").hide();
}
else if(result.Status == "1")
{
$("#btnStart").hide();
$("#btnStop").show();
// mostro se ci sia veto EWMA...
if (result.EwmaEnab) {
$("#EwmaVeto").hide();
}
else
{
$("#EwmaVeto").show();
}
}
// se real date status non è stato inserito, mostro div0 che lo chiede
@@ -97,6 +106,15 @@
$("#ExeWarning").show();
}
// controllo i due warning del denominatore
$("#DenomWarning01").hide();
$("#DenomWarning02").hide();
if (result.DisplayDenomAlert == "1") {
$("#DenomWarning01").show();
$("#DenomWarning02").show();
}
//scarico unità di misura dei canali mostrati
$("#UniMisuA").html(result.UniMeasure[result.ChA]);
$("#UniMisuB").html(result.UniMeasure[result.ChB]);
@@ -104,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
};
@@ -350,30 +369,75 @@
<div class="card text-center">
<div class="card-header text-center">
<div class="row">
<div class="col-3"></div>
<div class="col-6">
<strong>Risultante B/(A-B) </strong>
<div class="col-3">
<span class="badge badge-warning" id="DenomWarning01">
<img src="../static/img/exclamation-triangle-fill.svg" height="10" widht="10"></img>
</span>
</div>
<div class="col-6">
<strong>Risultante B/(A-B)</strong>
</div>
<div class="col-3">
<span class="badge badge-warning" id="DenomWarning02">
<img src="../static/img/exclamation-triangle-fill.svg" height="10" widht="10"></img>
</span>
</div>
<div class="col-3"></div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-1"></div>
<div class="col-5">
<strong>Media Grezza: </strong><span class="h5" id="RealValue"></span>
<div class="col-6">
Media Grezza:
</div>
<div class="col-6">
Media Corretta:
</div>
<div class="col-6">
<span class="h5" id="RealValue"></span>
<span class="h5" id="CalcMeasure1"></span>
</div>
<div class="col-5">
<strong>Media Corretta: </strong><span class="h5" id="ResultValue"></span>
<div class="col-6">
<span class="h5" id="ResultValue"></span>
<span class="h5" id="CalcMeasure2"></span>
</div>
<div class="col-1"></div>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-3 text-center">
Smooth Factor:
</div>
<div class="col-3 text-center">
Sample Period:
</div>
<div class="col-3 text-center">
Record Period:
</div>
<div class="col-3 text-center">
System Load:
</div>
<div class="col-3 text-center">
<span class="h5" id="SmoothFact"></span>
</div>
<div class="col-3 text-center">
<span class="h5" id="LogFreq"></span> ms
</div>
<div class="col-3 text-center">
<span class="h5" id="RecPeriod"></span> ms
</div>
<div class="col-3 text-center">
<span class="badge badge-warning" id="ExeWarning">
<img src="../static/img/exclamation-triangle-fill.svg" height="16" widht="16"></img>
</span>
</div>
</div>
</div>
</div>
</div>
<div class="col-12 col-xl-6">
<div class="card my-2">
<div id="Div7" class="card-header">
@@ -381,6 +445,9 @@
<div class="col-5">
<button id="btnStart" type="button" class="btn btn-success btn-block" style="font-size: 110%" onclick="startLog()">
<img src="../static/img/play-fill.svg" height="24" width="24">&nbsp; Inizia Scrittura</button>
<span class="badge badge-success" id="EwmaVeto">
<img src="../static/img/exclamation-triangle-fill.svg" height="20" widht="20"></img>
</span>
</div>
<div class="col-2 badge badge-dark text-light text-center">
<em><span class="h5" id="Crono"></span></em>
@@ -427,24 +494,9 @@
<p class="text-center" id="showData"></p>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-5">
Smooth Factor: <span class="h5" id="SmoothFact"></span>
</div>
<div class="col-5">
Sample Period: <span class="h5" id="LogFreq"></span> ms
</div>
<span class="badge badge-warning" id="ExeWarning">
<img src="../static/img/exclamation-triangle-fill.svg" height="20" widht="20"></img>
</span>
</div>
</div>
</div>
<br>
<br>
</div>
</div>
</main>
{% endblock %}
{% endblock %}
+299 -223
View File
@@ -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);
$("#DecimalsDisplay").val(result.DecimalsDisplay);
$("#ServerTime").html(result.timeSrv);
$("#ddlChannels").val(result.numCh);
$("#MinOut").val(result.MinOut);
@@ -39,18 +41,23 @@
$("#UniMisura").val(result.UniMisura);
$("#ChanThresh").val(result.ChanThresh);
$("#SmoothFact").val(result.SmoothFact);
$("#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();
$("#Div3").hide();
if(result.ShowDiv02 == "1")
{
$("#Div2").show();
$("#Div1").hide();
}
if(result.ShowDiv03 == "1")
{
$("#Div3").show();
$("#Div1").hide();
}
}});
}
@@ -59,6 +66,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);
@@ -73,6 +81,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));
@@ -86,6 +95,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);
@@ -95,6 +105,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'
@@ -176,7 +214,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){
@@ -204,54 +242,56 @@
</div>
</div>
</div>
<div class="row" id="Div2">
<div class="col-6 pr-0">
<div class="card my-2">
<div class="card-header">
<strong>Canale A</strong>
<div class="form-group">
<select class="form-control" id="SelChannelA" onchange="setChannelA(this)">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
<div id="Div2">
<div class="row">
<div class="col-6 pr-0">
<div class="card my-2">
<div class="card-header">
<strong>Canale A</strong>
<div class="form-group">
<select class="form-control" id="SelChannelA" onchange="setChannelA(this)">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</div>
</div>
<div class="card-body text-center">
Nativo: <span id="ChannelA"></span>
<br>
<strong>Scalato: <span id="OutputA"></span>
</strong>
</div>
<div class="card-body text-center">
Nativo: <span id="ChannelA"></span>
<br>
<strong>Scalato: <span id="OutputA"></span>
</div>
</div>
<div class="col-6 pl-0">
<div class="card my-2">
<div class="card-header">
<strong>Canale B</strong>
<div class="form-group">
<select class="form-control" id="SelChannelB" onchange="setChannelB(this)">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</div>
</div>
<div class="card-body text-center">
Nativo: <span id="ChannelB"></span>
<br>
<strong>Scalato: <span id="OutputB"></span>
</strong>
</div>
</div>
</div>
<div class="col-6 pl-0">
<div class="card my-2">
<div class="card-header">
<strong>Canale B</strong>
<div class="form-group">
<select class="form-control" id="SelChannelB" onchange="setChannelB(this)">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</div>
</div>
<div class="card-body text-center">
Nativo: <span id="ChannelB"></span>
<br>
<strong>Scalato: <span id="OutputB"></span>
</strong>
</div>
</div>
</div>
@@ -261,175 +301,173 @@
<div class="row card-header">
<div class="col-5">
<i class="fas fa-table mr-1"></i>
<strong>Impostazioni scalatura</strong>
<strong>Taratura</strong>
</div>
<div class="col-3 text-right">
<label for="sel1"> Canale n°</label>
</div>
<div class="col-4 text-right">
<div class="form-group">
<div class="col-7">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Canale n°</span>
</div>
<select class="form-control" id="ddlChannels" onchange="setChannel(this)">
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
<option>0</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
<option>6</option>
<option>7</option>
</select>
</div>
</div>
</div>
<div class="card-body h6 text-center">
<div class="card-body row text-center">
<div class="col-2"></div>
<div class="col-8">
<div class="row">
<div class="col-2"></div>
<div class="col-8">Input Attuale: &nbsp; <span class="text-center" id="CurrIn">000</span></div>
<div class="col-2"></div>
</div>
</div>
<div class="col-2"></div>
</div>
<div class="card-body row text-center">
<div class="col-2"></div>
<div class="col-8">
<div class="row">
<div class="col-2"></div>
<div class="col-8">Output attuale: &nbsp; <span class="text-center" id="CurrOut">{{ Out0 }}</span></div>
<div class="col-2"></div>
</div>
</div>
<div class="col-2"></div>
</div>
<div class="card-body row text-center">
<div class="col-2"></div>
<div class="col-8">
<div class="row">
<div class="col-5 px-0"><button type="button" class="btn btn-secondary" onclick="saveMin()">Salva Min</button></div>
<div class="col-2"></div>
<div class="col-5 px-0"><button type="button" class="btn btn-info" onclick="saveMax()">Salva Max</button></div>
</div>
</div>
<div class="col-2"></div>
</div>
<div class="card-body p-1 text-center">
<form method="POST" action="/api/v1/scale">
<div class="card-body row text-center">
<div class="col-2">IN</div>
<div class="col-8">
<div class="row text-center">
<div class="col-5 px-0"><input type="number" step="0.0000001" class="form-control text-center" id="MinIn" name="MinIn"></input></div>
<div class="col-2 px-0"></div>
<div class="col-5 px-0"><input type="number" step="0.0000001" class="form-control text-center" id="MaxIn" name="MaxIn"></input></div>
</div>
<div class="row text-center">
<div class="col-1">
</div>
<div class="col-2"></div>
</div>
<div class="card-body row text-center">
<div class="col-2 text-center">OUT</div>
<div class="col-8">
<div class="row">
<div class="col-5 px-0"><input type="number" step="0.0000001" class="form-control text-center" id="MinOut" name="MinOut"></input></div>
<div class="col-2"></div>
<div class="col-5 px-0"><input type="number" step="0.0000001" class="form-control text-center" id="MaxOut" name="MaxOut"></input></div>
</div>
<div class="col-4">
<b>Min</b>
</div>
<div class="col-2">
<div class="col-3">
<b>Now</b>
</div>
</div>
<div class="row">
<div class="input-group my-2 px-0">
<span class="col-6 input-group-text">Unità di misura: &nbsp;</span>
<input type="text" class="col-6 form-control" id="UniMisura" name="UniMisura"></input>
<div class="col-4">
<b>Max</b>
</div>
</div>
<div class="row text-center">
<div class="col-2"></div>
<div class="col-8">
<input type="submit" value="IMPOSTA SCALATURA" class="btn btn-success btn-block mt-2"></input>
<div class="col-1 px-0 mx-0 small">
Out
</div>
<div class="col-2"></div>
</div>
</form>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<i class="fas fa-table mr-1"></i>
<strong>Valori per calcolo risultante = k1*x^2 + k2*x + offset</strong>
</div>
<div class="card-body row">
<form class="col-12" method="POST" action="/api/v1/kconst">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Costante k1: &nbsp;</span>
<div class="col-4">
<div class="input-group input-group-sm mb-3">
<input type="number" step="0.0000001" class="form-control text-center" id="MinOut" name="MinOut"></input>
</div>
</div>
<input type="number" step="0.0000001" class="form-control" id="K1Const" name="K1Const"></input>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Costante k2: &nbsp;</span>
<div class="col-3 px-0">
<span class="text-center small" id="CurrOut"> </span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K2Const" name="K2Const"></input>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Offset o: &nbsp;</span>
<div class="col-4">
<div class="input-group input-group-sm mb-3">
<input type="number" step="0.0000001" class="form-control text-center" id="MaxOut" name="MaxOut">
</div>
</div>
<div class="col-1 px-0 mx-0 small">
In
</div>
<div class="col-4">
<div class="input-group input-group-sm mb-3">
<input type="number" step="0.0000001" class="form-control text-center" id="MinIn" name="MinIn"></input>
<div class="input-group-append">
<button type="button" class="btn btn-info" onclick="saveMin()">S</button>
</div>
</div>
</div>
<div class="col-3 px-0">
<span class="text-center small" id="CurrIn"> </span>
</div>
<div class="col-4">
<div class="input-group input-group-sm mb-3">
<input type="number" step="0.0000001" class="form-control text-center" id="MaxIn" name="MaxIn">
<div class="input-group-append">
<button type="button" class="btn btn-info" onclick="saveMax()">S</button>
</div>
</div>
</div>
<input type="number" step="0.0000001" class="form-control" id="Offset" name="Offset"></input>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<input type="submit" value="SET" class="btn btn-success btn-block mt-2"></input>
<div class="col-12">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Unità di misura: &nbsp;</span>
</div>
<input type="text" class="form-control" id="UniMisura" name="UniMisura"></input>
</div>
</div>
</div>
<div class="row text-center">
<div class="col-12">
<input type="submit" value="SET TARATURA" class="btn btn-success btn-block mt-2"></input>
</div>
<div class="col-2"></div>
</div>
</form>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<strong>Unità di misura del risultato di [Valore B / (Valore A - Valore B)]</strong>
<div class="col-7">
<i class="fas fa-table mr-1"></i>
<strong>Processing e Timer</strong>
</div>
<div class="col-5 text-right">
<span id="RecPeriod"> </span>&nbsp;ms
</div>
</div>
<div class="card-body">
<form class="col-12" method="POST" action="/api/v1/setup/calcMeasureUnit">
<div class="row input-group my-2">
<span class="input-group-text col-4">Unità di misura: &nbsp;</span>
<input type="text" class=" form-control col-5" id="CalcUMeasure" name="CalcUMeasure"></input>
<input type="submit" value="SET" class="btn btn-success col-3"></input>
</div>
</form>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<strong>Tipo processing</strong>
</div>
<div class="card-body">
<div class="card-body p-1">
<div class="row my-2 text-center">
<div class="col-6"><button type="button" class="btn btn-block btn-sm btn-primary" onclick="setupValues()">Set Parametri Taratura</button></div>
<div class="col-6"><button type="button" class="btn btn-block btn-sm btn-primary" onclick="workingValues()">Set Parametri Lettura</button></div>
</div>
<div class="row">
<div class="col-12">
<div class="input-group">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Selezione Processing</span>
</div>
<select class="form-control" id="SelProcessing" onchange="setProcessing(this)">
<option value="0">Nessuno</option>
<option value="1">EWMA</option>
<option value="1">Media</option>
<option value="2">RMS</option>
</select>
</div>
</div>
<form class="col-12" method="POST" action="/api/v1/smoothFact">
<div class="input-group">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Fattore di Smoothing: &nbsp;</span>
</div>
<input type="number" min="1" max="40" class="form-control" id="SmoothFact" name="SmoothFact"></input>
<input type="number" min="1" max="100" class="form-control" id="SmoothFact" name="SmoothFact"></input>
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success "></input>
<input type="submit" value="SET" class="btn btn-success"></input>
</div>
</div>
</form>
<form class="col-12" method="POST" action="/api/v1/eFact">
<div class="input-group input-group-sm mb-3">
<div class="input-group-prepend">
<span class="input-group-text">Valore per EWMA: &nbsp;</span>
</div>
<input type="number" min="1" max="200" step="1" class="form-control" id="EFact" name="EFact"></input>
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success"></input>
</div>
</div>
</form>
<form class="col-12" method="POST" action="/api/v1/frequency">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Periodo di campionamento (ms): &nbsp;</span>
</div>
<input type="number" class="form-control" id="LogFreq" name="LogFreq"></input>
</div>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Periodo di scrittura su file (ms): &nbsp;</span>
</div>
<input type="number" class="form-control" id="WriteFreq" name="WriteFreq"></input>
<br>
</div>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Ritardo prima scrittura su file (s): &nbsp;</span>
</div>
<input type="number" min="1" max="5" class="form-control" id="TimeBeforeWrite" name="TimeBeforeWrite"></input>
<br>
</div>
<div class="row text-center">
<div class="col-12">
<input type="submit" value="SET" class="btn btn-success btn-block mt-2"></input>
</div>
</div>
</form>
@@ -441,15 +479,84 @@
<i class="fas fa-table mr-1"></i>
<strong>Numero Decimali</strong>
</div>
<div class="card-body row">
<form class="col-12" method="POST" action="/api/v1/decimals">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Numero di cifre decimali: &nbsp;</span>
<div class="card-body p-1">
<div class="row">
<form class="col-12" method="POST" action="/api/v1/decimalsCount">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Decimali calcolo: &nbsp;</span>
</div>
<input type="number" min="1" max="5" class="form-control" id="DecimalsCount" name="DecimalsCount"></input>
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success"></input>
</div>
</div>
<input type="number" min="1" max="4" class="form-control" id="DecimalsCount" name="DecimalsCount"></input>
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success"></input>
</form>
<form class="col-12" method="POST" action="/api/v1/decimalsDisplay">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Decimali display: &nbsp;</span>
</div>
<input type="number" min="1" max="5" class="form-control" id="DecimalsDisplay" name="DecimalsDisplay"></input>
<div class="input-group-append">
<input type="submit" value="SET" class="btn btn-success"></input>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<div class="col-12">
<strong>Valori per calcolo risultante = k1*x^2 + k2*x + offset</strong>
</div>
</div>
<div class="card-body p-1">
<div class="row">
<form class="col-12" method="POST" action="/api/v1/kconst">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Costante k1: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K1Const" name="K1Const"></input>
</div>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Costante k2: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K2Const" name="K2Const"></input>
</div>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Offset o: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="Offset" name="Offset"></input>
</div>
<div class="row">
<div class="col-12">
<input type="submit" value="SET" class="btn btn-success btn-block mt-2"></input>
</div>
</div>
</form>
</div>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<strong>Unità di misura del risultato di [Valore B / (Valore A - Valore B)]</strong>
</div>
<div class="card-body p-1">
<form method="POST" action="/api/v1/setup/calcMeasureUnit">
<div class="input-group my-2">
<div class="input-group-prepend">
<span class="input-group-text">Unità di misura: &nbsp;</span>
</div>
<input type="text" class=" form-control" id="CalcUMeasure" name="CalcUMeasure"></input>
</div>
<div class="row">
<div class="col-12">
<input type="submit" value="SET" class="btn btn-success btn-block"></input>
</div>
</div>
</form>
@@ -459,10 +566,10 @@
<div class="row card-header">
<strong>Impostazione canale da monitorare per soglia spegnimento</strong>
</div>
<div class="card-body">
<div class="card-body p-1">
<div class="row">
<div class="col-12">
<div class="input-group">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Selezione canale</span>
</div>
@@ -480,56 +587,27 @@
</div>
</div>
<form class="col-12" method="POST" action="/api/v1/threshold">
<div class="input-group">
<span class="input-group-text">Soglia spegnimento: &nbsp;</span>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Soglia spegnimento:&nbsp;</span>
</div>
<input type="number" step="0.1" min="0" max="3" class="form-control" id="ChanThresh" name="ChanThresh"></input>
</div>
<div class="input-group">
<span class="input-group-text">Attesa minima prima dello spegnimento: &nbsp;</span>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Attesa spegnimento (sec): &nbsp;</span>
</div>
<input type="number" min="360" class="form-control" id="MinUptime" name="MinUptime"></input>
</div>
<div class="row">
<div class="col-2"></div>
<div class="col-8">
<div class="col-12">
<input type="submit" value="SET" class="btn btn-success btn-block mt-2"></input>
</div>
<div class="col-2"></div>
</div>
</form>
</div>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<i class="fas fa-table mr-1"></i>
<strong>Impostazioni Timer</strong>
</div>
<div class="card-body row">
<form class="col-12" method="POST" action="/api/v1/frequency">
<div class="input-group">
<span class="col-6 input-group-text">Periodo di campionamento (ms): &nbsp;</span>
<input type="number" class="col-6 form-control" id="LogFreq" name="LogFreq"></input>
</div>
<div class="input-group">
<span class="col-6 input-group-text">Periodo di scrittura su file (ms): &nbsp;</span>
<input type="number" class="col-6 form-control" id="WriteFreq" name="WriteFreq"></input>
<br>
</div>
<div class="input-group">
<span class="col-6 input-group-text">Ritardo prima scrittura su file (s): &nbsp;</span>
<input type="number" min="1" max="5" class="col-6 form-control" id="TimeBeforeWrite" name="TimeBeforeWrite"></input>
<br>
</div>
<div class="row text-center">
<div class="col-2"></div>
<div class="col-8">
<input type="submit" value="SET" class="btn btn-success btn-block mt-2"></input>
</div>
<div class="col-2"></div>
</div>
</form>
</div>
</div>
<div class="card my-2 col-12">
<div class="row card-header">
<i class="fas fa-table mr-1"></i>
@@ -537,11 +615,9 @@
</div>
<div class="card-body">
<div class="row text-center">
<div class="col-2"></div>
<div class="col-8">
<div class="col-12">
<input type="submit" value="RESET IMPOSTAZIONI" class="btn btn-danger btn-block mt-2" onclick="settingsReset()"></input>
</div>
<div class="col-2"></div>
</div>
</div>
</div>
@@ -549,4 +625,4 @@
<br>
</div>
</main>
{% endblock %}
{% endblock %}
+9
View File
@@ -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