8 Commits

Author SHA1 Message Date
marco.locatelli@steamware.net 4283f32d33 Merge remote-tracking branch 'origin/develop' into GestioneQuintoGrado 2023-06-27 10:16:19 +02:00
Marco Locatelli 0e233f5f2d 1.7.1 push 2023-03-29 15:47:52 +02:00
Marco Locatelli 116efb58b5 Merge branch 'develop' of https://gitlab.steamware.net/steamware/AnaLogger into develop 2023-03-29 15:46:41 +02:00
Marco Locatelli a72456a770 1.7.1 gestione k6 - sesto grado 2023-03-22 12:56:08 +01:00
marco.locatelli@steamware.net d0531476d3 Release 1.7.0 2023-03-22 12:52:53 +01:00
marco.locatelli@steamware.net 8d9f23ba70 Merge branch 'GestioneQuintoGrado' into develop 2023-03-22 12:17:20 +01:00
marco.locatelli@steamware.net 43b32c6b8c 1.7.0 gestione equazione fino a quinto grado 2023-03-22 12:16:18 +01:00
marco.locatelli@steamware.net 3aebe55260 introduzione da k1 a k5 2023-03-22 10:33:19 +01:00
7 changed files with 394 additions and 570 deletions
+61 -81
View File
@@ -32,22 +32,26 @@ 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)
if redSrv0.get('RTDATA:EWMA:VETO') is None:
redSrv0.set('RTDATA:EWMA:VETO', 0)
redSrv0.set('SETTINGS:WARNING:EXETIME',0)
if redSrv0.get('SETTINGS:LOG:FREQ') is None:
redSrv0.set('SETTINGS:LOG:FREQ', 20)
redSrv0.set('SETTINGS:LOG:FREQ', 100)
if redSrv0.get('SETTINGS:DECIMALS:COUNT') is None:
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)
redSrv0.set('SETTINGS:DECIMALS:COUNT',1)
if redSrv0.get('RTDATA:VALUE:K6CONST') is None:
redSrv0.set('RTDATA:VALUE:K6CONST', 0)
if redSrv0.get('RTDATA:VALUE:K5CONST') is None:
redSrv0.set('RTDATA:VALUE:K5CONST', 0)
if redSrv0.get('RTDATA:VALUE:K4CONST') is None:
redSrv0.set('RTDATA:VALUE:K4CONST', 0)
if redSrv0.get('RTDATA:VALUE:K3CONST') is None:
redSrv0.set('RTDATA:VALUE:K3CONST', 0)
if redSrv0.get('RTDATA:VALUE:K2CONST') is None:
redSrv0.set('RTDATA:VALUE:K2CONST', 1)
redSrv0.set('RTDATA:VALUE:K2CONST', 0)
if redSrv0.get('RTDATA:VALUE:K1CONST') is None:
redSrv0.set('RTDATA:VALUE:K1CONST', 1)
if redSrv0.get('RTDATA:VALUE:OFFSET') is None:
redSrv0.set('RTDATA:VALUE:OFFSET', 0)
if redSrv0.get('SETTINGS:POWER:UPTIME') is None:
@@ -69,23 +73,21 @@ 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', 2)
redSrv0.set('SETTINGS:SMOOTHING:FUNCTION', 0)
if redSrv0.get('SETTINGS:SMOOTHING:FACTOR') is None:
redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 25)
if redSrv0.get('SETTINGS:SMOOTHING:EFACT') is None:
redSrv0.set('SETTINGS:SMOOTHING:EFACT', 3)
redSrv0.set('SETTINGS:SMOOTHING:FACTOR', 10)
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:
@@ -139,27 +141,6 @@ 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
@@ -207,51 +188,52 @@ def calculateValue():
ch2 = getRedisVal('SETTINGS:CHANNEL:B')
v1 = getRedisVal('RTDATA:OUT:' + ch1)
v2 = getRedisVal('RTDATA:OUT:' + ch2)
k1 = getRedisVal('RTDATA:VALUE:K1CONST')
k6 = getRedisVal('RTDATA:VALUE:K6CONST')
k5 = getRedisVal('RTDATA:VALUE:K5CONST')
k4 = getRedisVal('RTDATA:VALUE:K4CONST')
k3 = getRedisVal('RTDATA:VALUE:K3CONST')
k2 = getRedisVal('RTDATA:VALUE:K2CONST')
k1 = getRedisVal('RTDATA:VALUE:K1CONST')
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
redSrv0.set('RTDATA:WARNING:DENOMZERO', 1)
else:
redSrv0.set('RTDATA:WARNING:DENOMZERO', 0)
# calcolo il valore risultante RealTime pulito (senza correzioni)
# calcolo il valore risultante pulito (senza correzioni)
XVal = (float(v2)/float(den))
redSrv0.set('RTDATA:VALUE:RAW',round(XVal,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))
# 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))
# 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))
# applicazione correzioni fino al quinto grado (costanti k e offset)
newValue = (float(k6)*pow(float(XVal),6)) + (float(k5)*pow(float(XVal),5)) + (float(k4)*pow(float(XVal),4)) + (float(k3)*pow(float(XVal),3)) + (float(k2)*pow(float(XVal),2)) + (float(k1)*float(XVal)) + float(offset)
#salvo in redis nuovo valore corretto e arrotondato
redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount))
# Smoothing EWMA valori corretti
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))
# init array
smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR'))
initArray = [0.0] * 8
@@ -285,8 +267,6 @@ 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
@@ -296,8 +276,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.001):
waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000
if(waitTime < 0.0):
redSrv0.set('SETTINGS:WARNING:EXETIME',1)
else:
redSrv0.set('SETTINGS:WARNING:EXETIME',0)
+20 -57
View File
@@ -89,20 +89,12 @@ 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]
@@ -118,7 +110,6 @@ 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,
@@ -138,15 +129,12 @@ 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,
'DisplayDenomAlert' : displayDenomWarning,
'EwmaEnab' : (redSrv0.get('RTDATA:EWMA:VETO') is None)
'DisplayAlert' : displayWarning
}
# restituisce in formato json i dati letti da redis
return jsonify(channelsData)
@@ -172,17 +160,19 @@ def api_channels_current():
#funzione legge direttamente da redis, ritorna jsonify
result = {
'numCh' : numCh,
'CostanteK1' : getRedisVal('RTDATA:VALUE:K1CONST'),
'CostanteK6' : getRedisVal('RTDATA:VALUE:K6CONST'),
'CostanteK5' : getRedisVal('RTDATA:VALUE:K5CONST'),
'CostanteK4' : getRedisVal('RTDATA:VALUE:K4CONST'),
'CostanteK3' : getRedisVal('RTDATA:VALUE:K3CONST'),
'CostanteK2' : getRedisVal('RTDATA:VALUE:K2CONST'),
'CostanteK1' : getRedisVal('RTDATA:VALUE:K1CONST'),
'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)),
@@ -243,8 +233,6 @@ 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
@@ -260,8 +248,6 @@ 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
@@ -362,20 +348,6 @@ 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
@@ -449,52 +421,43 @@ 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
newLogFrequency = request.form['LogFreq']
redSrv0.set('SETTINGS:LOG:FREQ', newLogFrequency)
newWriteFrequency = request.form['WriteFreq']
redSrv0.set('SETTINGS:WRITE:FREQ', newWriteFrequency)
newLogFrequency = request.form['LogFreq']
redSrv0.set('SETTINGS:LOG:FREQ', newLogFrequency)
timeBeforeWrite = request.form['TimeBeforeWrite']
redSrv0.set('SETTINGS:LOG:WAITIME', timeBeforeWrite)
redSrv0.save()
# rimando in settings
return redirect("/settings")
@flaskApp.route("/api/v1/decimalsCount", methods=['POST'])
@flaskApp.route("/api/v1/decimals", methods=['POST'])
def setDecimalsCount():
#funzione set decimali per i calcoli, scrive su SETTINGS:DECIMALS:COUNT
#funzione set decimali, 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
newK1Const = request.form['K1Const']
redSrv0.set('RTDATA:VALUE:K1CONST', newK1Const)
newK6Const = request.form['K6Const']
redSrv0.set('RTDATA:VALUE:K6CONST', newK6Const)
newK5Const = request.form['K5Const']
redSrv0.set('RTDATA:VALUE:K5CONST', newK5Const)
newK4Const = request.form['K4Const']
redSrv0.set('RTDATA:VALUE:K4CONST', newK4Const)
newK3Const = request.form['K3Const']
redSrv0.set('RTDATA:VALUE:K3CONST', newK3Const)
newK2Const = request.form['K2Const']
redSrv0.set('RTDATA:VALUE:K2CONST', newK2Const)
newK1Const = request.form['K1Const']
redSrv0.set('RTDATA:VALUE:K1CONST', newK1Const)
newOffset = request.form['Offset']
redSrv0.set('RTDATA:VALUE:OFFSET', newOffset)
redSrv0.save()
+2 -1
View File
@@ -18,6 +18,7 @@
}
}});
};
</script>
<div class="card my-2">
<div class="card-header">
@@ -26,7 +27,7 @@
<div class="card-body">
Egalware 2023
<br>
V 1.8.9
Ver 1.7.1
</div>
</div>
</main>
+20 -31
View File
@@ -46,32 +46,22 @@
<div id="main">
<div class="container-fluid">
<div id="Div0">
<div class="card my-2">
<div class="card-header">
<div class="card col-12 my-2">
<div class="row card-header">
<strong>Data e ora</strong>
</div>
<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 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>
</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>
</form>
</div>
</div>
</div>
@@ -80,15 +70,14 @@
</div>
</div>
<!--fine contenuto main, inizio footer (data, ora, logo)-->
<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>
<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
</div>
</div>
</div>
</footer>
</body>
</html>
+33 -85
View File
@@ -15,26 +15,26 @@
timeoutFast = setInterval(dataRefresh, intTime);
timeoutSlow = setInterval(fixTables, intTimeSlow);
function fixFloat(actVal, numDisplay)
function fixFloat(actVal, numCount)
{
return parseFloat(actVal).toFixed(numDisplay)
return parseFloat(actVal).toFixed(numCount)
}
function dataRefresh() {
// scarico i dati aggioranti
$.ajax({url: "/api/v1/channels/all", success: function(result){
numDisplay = parseInt(result.DecimalsDisplay)
numCount = parseInt(result.DecimalsCount)
var divWidth = document.getElementById("divChA").offsetWidth
// compilo i dati scaricati
$("#SelChannelA").html(result.ChA);
$("#OutputA").html(fixFloat(result.Outs[result.ChA],numDisplay));
$("#OutputA").html(fixFloat(result.Outs[result.ChA],numCount));
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],numDisplay));
$("#OutputB").html(fixFloat(result.Outs[result.ChB],numCount));
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(fixFloat(result.ResultValue,numDisplay));
$("#RealValue").html(fixFloat(result.RealValue,numDisplay));
$("#ResultValue").html(result.ResultValue);
$("#RealValue").html(result.RealValue);
$("#Crono").html(result.Crono);
if(result.GateOpen == "0")
@@ -77,21 +77,12 @@
{
$("#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
@@ -106,15 +97,6 @@
$("#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]);
@@ -122,7 +104,6 @@
$("#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
};
@@ -369,75 +350,30 @@
<div class="card text-center">
<div class="card-header text-center">
<div class="row">
<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-3"></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>
<strong>Risultante B/(A-B) </strong>
</div>
<div class="col-3"></div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col-6">
Media Grezza:
</div>
<div class="col-6">
Media Corretta:
</div>
<div class="col-6">
<span class="h5" id="RealValue"></span>
<div class="col-1"></div>
<div class="col-5">
<strong>Media Grezza: </strong><span class="h5" id="RealValue"></span>
<span class="h5" id="CalcMeasure1"></span>
</div>
<div class="col-6">
<span class="h5" id="ResultValue"></span>
<div class="col-5">
<strong>Media Corretta: </strong><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">
@@ -445,9 +381,6 @@
<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>
@@ -494,9 +427,24 @@
<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 %}
+258 -306
View File
@@ -20,44 +20,41 @@
$.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);
$("#MaxOut").val(result.MaxOut);
$("#MinIn").val(result.MinIn);
$("#MaxIn").val(result.MaxIn);
$("#K1Const").val(result.CostanteK1);
$("#K6Const").val(result.CostanteK6);
$("#K5Const").val(result.CostanteK5);
$("#K4Const").val(result.CostanteK4);
$("#K3Const").val(result.CostanteK3);
$("#K2Const").val(result.CostanteK2);
$("#K1Const").val(result.CostanteK1);
$("#Offset").val(result.Offset);
$("#CurrentFolder").html(result.CurrentWorkFolder);
$("#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();
}
}});
}
@@ -66,7 +63,6 @@
$.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);
@@ -81,7 +77,6 @@
$.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));
@@ -95,7 +90,6 @@
$("#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);
@@ -105,34 +99,6 @@
}});
};
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'
@@ -214,7 +180,7 @@
});
};
//funzione Settings Reset chiede conferma prima di flushare DB redis
//funzione powerOff: chiede conferma per spegnimento.
function settingsReset(){
var R = confirm("Reset impostazioni?");
if (R == true){
@@ -242,73 +208,13 @@
</div>
</div>
</div>
<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>
</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>
</div>
<div id="Div3">
<div class="card my-2 col-12">
<div class="row card-header">
<div class="col-5">
<i class="fas fa-table mr-1"></i>
<strong>Taratura</strong>
</div>
<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)">
<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>
@@ -320,154 +226,238 @@
</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 p-1 text-center">
<form method="POST" action="/api/v1/scale">
<div class="row text-center">
<div class="col-1">
</div>
<div class="col-4">
<b>Min</b>
</div>
<div class="col-3">
<b>Now</b>
</div>
<div class="col-4">
<b>Max</b>
</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>
<div id="Div3">
<div class="card my-2 col-12">
<div class="row card-header">
<div class="col-5">
<i class="fas fa-table mr-1"></i>
<strong>Impostazioni scalatura</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">
<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>
</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="row text-center">
<div class="col-1 px-0 mx-0 small">
Out
<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 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 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>
<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>
<div class="col-3 px-0">
<span class="text-center small" id="CurrOut"> </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="MaxOut" name="MaxOut">
<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>
<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 class="col-2">
</div>
</div>
<div class="row">
<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 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>
</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 class="col-2"></div>
<div class="col-8">
<input type="submit" value="IMPOSTA SCALATURA" 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">
<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>
<i class="fas fa-table mr-1"></i>
<strong>Setup k6*x^6 + k5*x^5 + k4*x^4 + k3*x^3 + k2*x^2 + k1*x + offset</strong>
</div>
<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="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 k6: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K6Const" name="K6Const"></input>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Costante k5: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K5Const" name="K5Const"></input>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Costante k4: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K4Const" name="K4Const"></input>
</div>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Costante k3: &nbsp;</span>
</div>
<input type="number" step="0.0000001" class="form-control" id="K3Const" name="K3Const"></input>
</div>
<div class="input-group">
<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">
<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">
<div class="input-group-prepend">
<span class="input-group-text">Offset: &nbsp;</span>
</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>
<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>
<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="row">
<div class="col-12">
<div class="input-group input-group-sm">
<div class="input-group">
<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">Media</option>
<option value="1">EWMA</option>
<option value="2">RMS</option>
</select>
</div>
</div>
<form class="col-12" method="POST" action="/api/v1/smoothFact">
<div class="input-group input-group-sm">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Fattore di Smoothing: &nbsp;</span>
</div>
<input type="number" min="1" max="100" class="form-control" id="SmoothFact" name="SmoothFact"></input>
<input type="number" min="1" max="40" class="form-control" id="SmoothFact" name="SmoothFact"></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/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>
<input type="submit" value="SET" class="btn btn-success "></input>
</div>
</div>
</form>
@@ -479,84 +469,15 @@
<i class="fas fa-table mr-1"></i>
<strong>Numero Decimali</strong>
</div>
<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>
</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="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">Unità di misura: &nbsp;</span>
<span class="input-group-text">Numero di cifre decimali: &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>
<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>
</div>
</div>
</form>
@@ -566,10 +487,10 @@
<div class="row card-header">
<strong>Impostazione canale da monitorare per soglia spegnimento</strong>
</div>
<div class="card-body p-1">
<div class="card-body">
<div class="row">
<div class="col-12">
<div class="input-group input-group-sm">
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text">Selezione canale</span>
</div>
@@ -587,27 +508,56 @@
</div>
</div>
<form class="col-12" method="POST" action="/api/v1/threshold">
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Soglia spegnimento:&nbsp;</span>
</div>
<div class="input-group">
<span class="input-group-text">Soglia spegnimento: &nbsp;</span>
<input type="number" step="0.1" min="0" max="3" class="form-control" id="ChanThresh" name="ChanThresh"></input>
</div>
<div class="input-group input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text">Attesa spegnimento (sec): &nbsp;</span>
</div>
<div class="input-group">
<span class="input-group-text">Attesa minima prima dello spegnimento: &nbsp;</span>
<input type="number" min="360" class="form-control" id="MinUptime" name="MinUptime"></input>
</div>
<div class="row">
<div class="col-12">
<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>
<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>
@@ -615,9 +565,11 @@
</div>
<div class="card-body">
<div class="row text-center">
<div class="col-12">
<div class="col-2"></div>
<div class="col-8">
<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>
@@ -625,4 +577,4 @@
<br>
</div>
</main>
{% endblock %}
{% endblock %}
-9
View File
@@ -1,9 +0,0 @@
#!/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