Merge remote-tracking branch 'origin/develop'
This commit is contained in:
+30
-8
@@ -7,6 +7,8 @@ import os
|
||||
import os.path
|
||||
import FTL.FTLog
|
||||
|
||||
from os.path import exists
|
||||
|
||||
FTL.FTLog.Write(" FTLogger started")
|
||||
|
||||
#configurazione per lavorare su server redis locale
|
||||
@@ -58,8 +60,10 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None:
|
||||
|
||||
#funzione salva time+data e otto valori letti su file SE LOG è 1
|
||||
def fileSave():
|
||||
resultValue = getRedisVal('RTDATA:VALUE:REAL')
|
||||
smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED')
|
||||
rawIstant = getRedisVal('RTDATA:VALUE:RAW')
|
||||
fixedIstant = getRedisVal('RTDATA:VALUE:REAL')
|
||||
rawAverage = getRedisVal('RTDATA:VALUE:SMRAW')
|
||||
fixedAverage = getRedisVal('RTDATA:VALUE:SMOOTHED')
|
||||
currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT')
|
||||
workingDirectory = (DATA_path+currentFolder)
|
||||
#dò un nome al nuovo file
|
||||
@@ -68,10 +72,24 @@ def fileSave():
|
||||
rawLastLog = datetime.datetime.now()
|
||||
#format date e time con strftime()
|
||||
lastLog = rawLastLog.strftime(dateFormat)
|
||||
try:
|
||||
|
||||
# filepath completo
|
||||
filePath = workingDirectory+"/"+dataFileName
|
||||
|
||||
# verifico se file esista
|
||||
if(exists(filePath)):
|
||||
outFile = open(workingDirectory+"/"+dataFileName, "a")
|
||||
except FileNotFoundError:
|
||||
else:
|
||||
outFile = open(workingDirectory+"/"+dataFileName, "w+")
|
||||
firstRow = "Data Ora;"
|
||||
firstRow += "Ch A;"
|
||||
firstRow += "Ch B;"
|
||||
firstRow += "Istant Grezzo;"
|
||||
firstRow += "Istant Corretto;"
|
||||
firstRow += "Mediato Grezzo;"
|
||||
firstRow += "Mediato Corretto"
|
||||
outFile.write(firstRow+"\r\n")
|
||||
|
||||
# dichiaro una stringa in cui accumulo i valori
|
||||
csvRow = str(lastLog) +";"
|
||||
# scrivo le letture del canale A
|
||||
@@ -82,10 +100,14 @@ def fileSave():
|
||||
chB = getRedisVal('SETTINGS:CHANNEL:B')
|
||||
chBOut = getRedisVal('RTDATA:OUT:'+str(chB))
|
||||
csvRow += chBOut+";"
|
||||
#aggiungo il valore risultante calcolato V1/(V2-V1)
|
||||
csvRow += resultValue+";"
|
||||
#aggiungo il valore risultante MEDIATO
|
||||
csvRow += smoothedValue
|
||||
#aggiungo il valore istant raw
|
||||
csvRow += rawIstant+";"
|
||||
#aggiungo il valore istant fixed
|
||||
csvRow += fixedIstant+";"
|
||||
#aggiungo il valore average raw
|
||||
csvRow += rawAverage+";"
|
||||
#aggiungo il valore average fixed
|
||||
csvRow += fixedAverage
|
||||
# scrivo in blocco la riga dei valori
|
||||
outFile.write(csvRow +"\r\n")
|
||||
outFile.close()
|
||||
|
||||
+27
-6
@@ -56,8 +56,12 @@ if redSrv0.get('SETTINGS:LOG:EXETIME') is None:
|
||||
redSrv0.set('SETTINGS:LOG:EXETIME', 1)
|
||||
if redSrv0.get('RTDATA:VALUE:SMOOTHED') is None:
|
||||
redSrv0.set('RTDATA:VALUE:SMOOTHED', 1)
|
||||
if redSrv0.get('RTDATA:VALUE:RAW') is None:
|
||||
redSrv0.set('RTDATA:VALUE:RAW', 1)
|
||||
if redSrv0.get('RTDATA:VALUE:REAL') is None:
|
||||
redSrv0.set('RTDATA:VALUE:REAL', 1)
|
||||
if redSrv0.get('RTDATA:VALUE:SMRAW') is None:
|
||||
redSrv0.set('RTDATA:VALUE:SMRAW', 1)
|
||||
if redSrv0.get('SETTINGS:POWER:THRESH') is None:
|
||||
redSrv0.set('SETTINGS:POWER:THRESH', 0)
|
||||
if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None:
|
||||
@@ -182,22 +186,41 @@ def calculateValue():
|
||||
den = abs(float(v1)-float(v2))
|
||||
if(den < 0.01):
|
||||
den = 0.01
|
||||
# calcolo il valore risultante pulito (senza correzioni)
|
||||
XVal = (float(v2)/float(den))
|
||||
# applicare costanti k1*x^2, k2*x e offset
|
||||
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))
|
||||
|
||||
# Smoothing EWMA valori corretti (fattori k1 k2)
|
||||
strValIn = newValue
|
||||
# EWMA: RILEGGO DA REDIS vecchio valore
|
||||
# EWMA: RILEGGO DA REDIS vecchio valore
|
||||
oldVal = float(redSrv0.get('RTDATA:VALUE:SMOOTHED'))
|
||||
if(oldVal == 0):
|
||||
oldVal = 0.01
|
||||
# se variazione < 50% smooth
|
||||
# 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
|
||||
@@ -223,7 +246,7 @@ try:
|
||||
for counter in range(0,smoothFact,+1):
|
||||
# leggo gli 8 valori
|
||||
CHvalue = CH.ADS1256_GetAll()
|
||||
floatArray = np.array(CHvalue, dtype=np.float)
|
||||
floatArray = np.array(CHvalue, dtype=float)
|
||||
dataBox[counter] = floatArray*float(5.0/0x7fffff)
|
||||
# calcolo e scrittura ogni NUM PERIOD cicli
|
||||
if counter == (smoothFact-1):
|
||||
@@ -241,8 +264,6 @@ try:
|
||||
delta = endExec - now
|
||||
# attesa viene fatta sempre
|
||||
waitTime = (int(sampleFreq)*smoothFact)/1000 - delta.microseconds/1000000
|
||||
#redSrv0.set('SETTINGS:MONITOR:WAITIME',waitTime)
|
||||
#redSrv0.set('SETTINGS:MONITOR:DELTATIME',str(delta.microseconds/1000))
|
||||
if(waitTime < 0.0):
|
||||
redSrv0.set('SETTINGS:WARNING:EXETIME',1)
|
||||
else:
|
||||
|
||||
+2
-1
@@ -26,6 +26,7 @@ led = LED(26)
|
||||
|
||||
#assegno ipv4 statico
|
||||
ipv4 = '10.10.10.210'
|
||||
#ipv4 = '10.74.82.210'
|
||||
|
||||
#definisco directory /data
|
||||
dataDir='/home/pi/data/'
|
||||
@@ -131,7 +132,7 @@ def api_channels_all():
|
||||
'LogFreq' : getRedisVal('SETTINGS:LOG:FREQ'),
|
||||
'SelProcessing' : getRedisVal('SETTINGS:SMOOTHING:FUNCTION'),
|
||||
'ResultValue' : getRedisVal('RTDATA:VALUE:SMOOTHED'),
|
||||
'RealValue' : getRedisVal('RTDATA:VALUE:REAL'),
|
||||
'RealValue' : getRedisVal('RTDATA:VALUE:SMRAW'),
|
||||
'Crono' : getRedisVal('SETTINGS:LOG:CRONO'),
|
||||
'DisplayAlert' : displayWarning
|
||||
}
|
||||
|
||||
@@ -25,11 +25,11 @@
|
||||
<h4>FT Logger</h4>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
Steamware 2021
|
||||
Egalware 2022
|
||||
<br>
|
||||
Software di lettura e scrittura per canali analogici e digitali
|
||||
<br>
|
||||
V 1.3.1
|
||||
V 1.6.0
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
@@ -65,13 +65,12 @@
|
||||
{% endblock %}
|
||||
</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>© Steamware 2021
|
||||
<div>© Egalware 2022
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -361,11 +361,11 @@
|
||||
<div class="row">
|
||||
<div class="col-1"></div>
|
||||
<div class="col-5">
|
||||
<strong>Istant: </strong><span class="h5" id="RealValue"></span>
|
||||
<strong>Media Grezza: </strong><span class="h5" id="RealValue"></span>
|
||||
<span class="h5" id="CalcMeasure1"></span>
|
||||
</div>
|
||||
<div class="col-5">
|
||||
<strong>Media: </strong><span class="h5" id="ResultValue"></span>
|
||||
<strong>Media Corretta: </strong><span class="h5" id="ResultValue"></span>
|
||||
<span class="h5" id="CalcMeasure2"></span>
|
||||
</div>
|
||||
<div class="col-1"></div>
|
||||
|
||||
Reference in New Issue
Block a user