9e9a63ea1a
Update startBrowser x MON PI
140 lines
5.0 KiB
Python
140 lines
5.0 KiB
Python
#!/usr/bin/python
|
|
|
|
import time
|
|
import datetime
|
|
import redis
|
|
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
|
|
REDIS_PORT = 6379
|
|
REDIS_HOST = '127.0.0.1'
|
|
redSrv0 = redis.Redis(
|
|
host=REDIS_HOST,
|
|
port=REDIS_PORT,
|
|
db=0)
|
|
|
|
#funzione per leggere e decodificare da redis
|
|
def getRedisVal(redisKey):
|
|
if redSrv0.get(redisKey) is None:
|
|
return redSrv0.get(redisKey)
|
|
else:
|
|
return redSrv0.get(redisKey).decode('utf-8')
|
|
|
|
#assegno directory per file di data output
|
|
DATA_path = "/home/pi/data/"
|
|
|
|
#assegno waiter a 0 (attesa prima di scrivere 2 secondi)
|
|
redSrv0.set('SETTINGS:LOG:WAITER',0)
|
|
|
|
#intervallo in millisecondi fra una scrittura su file e la successiva
|
|
startingWriteFreq = 1000
|
|
redWriteFreq = 'SETTINGS:WRITE:FREQ'
|
|
redSrv0.set(redWriteFreq,startingWriteFreq)
|
|
|
|
#se non c'è un valore nei campi di redis, popolo il db
|
|
redisTime = 'RTDATA:TIME:SRV'
|
|
redSrv0.set('SETTINGS:LOG:STATUS',0)
|
|
redSrv0.set('SETTINGS:POWER:OFF',0)
|
|
redSrv0.set('SETTINGS:LOG:CRONO', "00:00:00")
|
|
if redSrv0.get('SETTINGS:LOG:WAITIME') is None:
|
|
redSrv0.set('SETTINGS:LOG:WAITIME', 2)
|
|
if redSrv0.get('SETTINGS:SELECTED_CH') is None:
|
|
redSrv0.set('SETTINGS:SELECTED_CH',0)
|
|
if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None:
|
|
redSrv0.set('SETTINGS:FOLDER:CURRENT', "")
|
|
for numCh in range(0,8,+1):
|
|
if redSrv0.get('SETTINGS:IN:MAX:'+str(numCh)) is None:
|
|
redSrv0.set('SETTINGS:IN:MAX:'+str(numCh),100)
|
|
if redSrv0.get('SETTINGS:IN:MIN:'+str(numCh)) is None:
|
|
redSrv0.set('SETTINGS:IN:MIN:'+str(numCh),0)
|
|
if redSrv0.get('SETTINGS:OUT:MAX:'+str(numCh)) is None:
|
|
redSrv0.set('SETTINGS:OUT:MAX:'+str(numCh),100)
|
|
if redSrv0.get('SETTINGS:OUT:MIN:'+str(numCh)) is None:
|
|
redSrv0.set('SETTINGS:OUT:MIN:'+str(numCh),0)
|
|
|
|
#funzione salva time+data e otto valori letti su file SE LOG è 1
|
|
def fileSave():
|
|
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
|
|
dataFileName = getRedisVal('RTDATA:SESSION:NAME')
|
|
dateFormat ="%d/%m/%Y %H:%M:%S"
|
|
rawLastLog = datetime.datetime.now()
|
|
#format date e time con strftime()
|
|
lastLog = rawLastLog.strftime(dateFormat)
|
|
|
|
# filepath completo
|
|
filePath = workingDirectory+"/"+dataFileName
|
|
|
|
# verifico se file esista
|
|
if(exists(filePath)):
|
|
outFile = open(workingDirectory+"/"+dataFileName, "a")
|
|
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
|
|
chA = getRedisVal('SETTINGS:CHANNEL:A')
|
|
chAOut = getRedisVal('RTDATA:OUT:'+str(chA))
|
|
csvRow += chAOut+";"
|
|
# scrivo le letture del canale B
|
|
chB = getRedisVal('SETTINGS:CHANNEL:B')
|
|
chBOut = getRedisVal('RTDATA:OUT:'+str(chB))
|
|
csvRow += chBOut+";"
|
|
#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()
|
|
|
|
|
|
#ciclo principale, salva time attuale e se LOG:STATUS è 1 fa fileSave()
|
|
while(1):
|
|
now = datetime.datetime.now()
|
|
# solo se su redis LOG è 1 eseguo il ciclo principale
|
|
if(getRedisVal('SETTINGS:LOG:STATUS') == "1"):
|
|
redSrv0.set('SETTINGS:LOG:CRONO', "00:00:00")
|
|
#attendo 2 secondi all'avvio della registrazione
|
|
if(getRedisVal('SETTINGS:LOG:WAITER') == "0"):
|
|
time.sleep(int(getRedisVal('SETTINGS:LOG:WAITIME')))
|
|
#salvo startTime per inizio cronometro registrazione
|
|
startTime = time.perf_counter()
|
|
redSrv0.set('SETTINGS:LOG:WAITER', 1)
|
|
fileSave()
|
|
#a ogni fileSave() misuro tempo trascorso da inizio registrazione e lo mostro e format date e time con strftime()
|
|
crono = time.strftime('%H:%M:%S', time.gmtime(int(time.perf_counter() - startTime)))
|
|
redSrv0.set('SETTINGS:LOG:CRONO',crono)
|
|
# riporto ultima esecuzione ad adesso
|
|
endExec = datetime.datetime.now()
|
|
# calcolo il delta dovuto alle esecuzioni
|
|
delta = endExec - now
|
|
waitTime = int(redSrv0.get(redWriteFreq)) / 1000 - delta.microseconds/1000000
|
|
if(waitTime < 0.1):
|
|
waitTime = 0.1
|
|
# attesa fra una scrittura e successiva
|
|
time.sleep(waitTime) |