Files
AnaLogger/logger/FTLogger.py
T
2021-04-23 12:06:47 +02:00

89 lines
3.0 KiB
Python

#!/usr/bin/python
import time
import datetime
import redis
import os
import os.path
#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/"
#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'
if redSrv0.get('SETTINGS:LOG:STATUS') is None:
redSrv0.set('SETTINGS:LOG:STATUS',0)
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():
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()
lastLog = rawLastLog.strftime(dateFormat)
try:
outFile = open(workingDirectory+"/"+dataFileName, "a")
except FileNotFoundError:
outFile = open(workingDirectory+"/"+dataFileName, "w+")
# dichiaro una stringa in cui accumulo i valori
csvRow = str(lastLog) +","
for chIndex in range(0,2,+1):
channelOut = getRedisVal('RTDATA:OUT:'+str(chIndex))
csvRow += channelOut+","
# tolgo ultimo ","
l = len(csvRow)
csvRow = csvRow[:l-1]
# 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"):
fileSave()
# 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
time.sleep(waitTime)