107 lines
3.4 KiB
Python
107 lines
3.4 KiB
Python
#!/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() |