#!/usr/bin/python import time import datetime import ADS1256 import RPi.GPIO as GPIO import redis #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) #se non c'è un valore nei campi di redis, gli do 1 if redSrv0.get('SETTINGS:LOG:STATUS') is None: redSrv0.set('SETTINGS:LOG:STATUS',1) if redSrv0.get('SETTINGS:CH:SCALE:MIN1') is None: redSrv0.set('SETTINGS:CH:SCALE:MIN1',1) if redSrv0.get('SETTINGS:CH:SCALE:MAX1') is None: redSrv0.set('SETTINGS:CH:SCALE:MAX1',1) if redSrv0.get('SETTINGS:CH:REAL:MIN1') is None: redSrv0.set('SETTINGS:CH:REAL:MIN1',1) if redSrv0.get('SETTINGS:CH:REAL:MAX1') is None: redSrv0.set('SETTINGS:CH:REAL:MAX1',1) #intervallo in millisecondi fra un campionamento e il successivo redSampleFreq = 'SETTINGS:LOG:FREQ' startingFreq = 1000 redSrv0.set(redSampleFreq,startingFreq) try: CH = ADS1256.ADS1256() CH.ADS1256_init() #funzione stampa otto valori letti su terminale def videoPrint(CHvalue): for CHcount in range(0,8,+1): print("CH "+str(CHcount)+"= %lf"%(CHvalue[CHcount]*5.0/0x7fffff)) #funzione salva time+data e otto valori letti su file def fileSave(CHvalue): try: logFile = open("PyLog.txt", "a") except FileNotFoundError: print("Creating new PyLog.txt") logFile = open("PyLog.txt", "w+") logFile.write("\nTime: "+str(now)) for CHcount in range(0,8,+1): logFile.write(" | CH "+str(CHcount)+" = %lf"%(CHvalue[CHcount]*5.0/0x7fffff)) #funzione salva time+data di log e otto valori su redis def redisSave(CHvalue): redLastLog = 'RTDATA:TIME:LOG' lastLog = datetime.datetime.now() redSrv0.set(redLastLog,str(lastLog)) for CHcount in range(0,8,+1): redArea = 'RTDATA:CH:'+str(CHcount) strVal = "%lf" % (CHvalue[CHcount]*5.0/0x7fffff) redSrv0.set(redArea,strVal) #ciclo principale, salva time attuale e se LOG:STATUS è 1 fa il ciclo principale while(1): redTime = 'RTDATA:TIME:SRV' now = datetime.datetime.now() redSrv0.set(redTime,str(now)) #print(logStatus) # solo se su redis LOG è 1 eseguo il ciclo principale logStatus = redSrv0.get('SETTINGS:LOG:STATUS').decode('utf-8') if logStatus == "1" : CHvalue = CH.ADS1256_GetAll() #videoPrint(CHvalue) #fileSave(CHvalue) redisSave(CHvalue) time.sleep(int(redSrv0.get(redSampleFreq))/1000) #eccezione da ctrl+c in terminale e chiusura except KeyboardInterrupt: GPIO.cleanup() print ("\r\nProgram End. Ctrl+C from user") try: logFile = open("PyLog.txt", "a") except FileNotFoundError: print("Creating new PyLog.txt") logFile = open("PyLog.txt", "w+") logFile.write("\r\nProgram end. Ctrl+C from user at time: "+str(now)) logFile.close() exit() #eccezione da errore e chiusura except Exception as errorMessage: GPIO.cleanup() print("\r\nCaught error " + str(errorMessage)) try: logFile = open("PyLog.txt", "a") except FileNotFoundError: print("Creating new PyLog.txt") logFile = open("PyLog.txt", "w+") logFile.write("\r\nCaught error: "+str(errorMessage)+" at time: "+str(now)) logFile.close() exit()