2013-11-13 18:14:34 +01:00
'''
Created on 13.11 .2013
@author : Philipp Rauch
2013-11-20 17:13:15 +01:00
@version : 0.1
2013-11-13 18:14:34 +01:00
'''
from CanMessage import CanMessage
2013-11-20 17:13:15 +01:00
from CanSignal import CanSignal
from PCan import PcanAdapter
from datetime import datetime
from time import sleep
from threading import Thread
from Queue import Queue
2013-11-21 18:11:38 +01:00
from MySQLdb import connect
from config import readConf
2013-11-13 18:14:34 +01:00
debug = False
2013-11-20 17:13:15 +01:00
class CANFilter ( Thread ) :
2013-11-13 18:14:34 +01:00
2013-11-20 17:13:15 +01:00
battery_current , battery_voltage , battery_capacity , battery_timestamp , test = [ ] , [ ] , [ ] , [ ] , [ ] #create tmp lists
2013-11-13 18:14:34 +01:00
2013-11-21 18:11:38 +01:00
conf = readConf ( )
connection = connect ( host = conf [ ' mySQL_server ' ] ,
user = conf [ ' mySQL_user ' ] ,
passwd = conf [ ' mySQL_pass ' ] ,
db = conf [ ' mySQL_database ' ] )
cursor = connection . cursor ( )
2013-11-19 17:11:25 +01:00
def __init__ ( self ) :
2013-11-20 17:13:15 +01:00
Thread . __init__ ( self )
self . queue = Queue ( )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
self . pcan = PcanAdapter ( PcanAdapter . Baudrate [ ' 250k ' ] )
self . pcan . initialize ( )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
dc_battery = CanMessage ( 0x3A4 , 8 , 50 , ' dc_battery ' )
dc_grid = CanMessage ( 0x3A5 , 8 , 50 , ' dc_grid ' )
dc_pv = CanMessage ( 0x3A6 , 8 , 50 , ' dc_pv ' )
dc_charging = CanMessage ( 0x3A7 , 8 , 50 , ' dc_charging ' )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
self . pcan . addMessage ( dc_battery )
self . pcan . addMessage ( dc_grid )
self . pcan . addMessage ( dc_pv )
self . pcan . addMessage ( dc_charging )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
current = CanSignal ( 0 , 16 , 0 , 0.001 , 0 , ' current ' )
voltage = CanSignal ( 16 , 16 , 0 , 0.01 , 0 , ' voltage ' )
capacity = CanSignal ( 32 , 11 , 0 , 0.05 , 0 , ' capacity ' )
isMaster = CanSignal ( 56 , 1 , 0 , 1 , 0 , ' isMaster ' )
isFeed = CanSignal ( 57 , 1 , 0 , 1 , 0 , ' isFeed ' )
isCharging = CanSignal ( 57 , 1 , 0 , 1 , 0 , ' isCharging ' )
isOn = CanSignal ( 58 , 1 , 0 , 1 , 0 , ' isOn ' )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
self . pcan . Messages [ ' dc_battery ' ] . addSignal ( current )
self . pcan . Messages [ ' dc_battery ' ] . addSignal ( voltage )
self . pcan . Messages [ ' dc_battery ' ] . addSignal ( capacity )
self . pcan . Messages [ ' dc_battery ' ] . addSignal ( isMaster )
self . pcan . Messages [ ' dc_battery ' ] . addSignal ( isCharging )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
self . pcan . Messages [ ' dc_grid ' ] . addSignal ( current )
self . pcan . Messages [ ' dc_grid ' ] . addSignal ( voltage )
self . pcan . Messages [ ' dc_grid ' ] . addSignal ( isMaster )
self . pcan . Messages [ ' dc_grid ' ] . addSignal ( isFeed )
self . pcan . Messages [ ' dc_grid ' ] . addSignal ( isOn )
self . pcan . Messages [ ' dc_pv ' ] . addSignal ( current )
self . pcan . Messages [ ' dc_pv ' ] . addSignal ( voltage )
self . pcan . Messages [ ' dc_charging ' ] . addSignal ( current )
self . pcan . Messages [ ' dc_charging ' ] . addSignal ( voltage )
2013-11-14 17:08:19 +01:00
2013-11-19 17:11:25 +01:00
def mean ( self , l ) :
return float ( sum ( l ) ) / len ( l ) if len ( l ) > 0 else 0
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
def run ( self ) :
while True :
receiveMessageId = self . pcan . receiveMessage ( )
if receiveMessageId == self . pcan . Messages [ ' dc_battery ' ] . Id :
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
self . battery_current . append ( self . pcan . Messages [ ' dc_battery ' ] . Signals [ ' current ' ] . GetData ( ) )
self . battery_voltage . append ( self . pcan . Messages [ ' dc_battery ' ] . Signals [ ' voltage ' ] . GetData ( ) )
self . battery_capacity . append ( self . pcan . Messages [ ' dc_battery ' ] . Signals [ ' capacity ' ] . GetData ( ) )
2013-11-20 17:13:15 +01:00
self . battery_timestamp . append ( datetime . now ( ) )
2013-11-13 18:14:34 +01:00
2013-11-19 17:11:25 +01:00
if len ( self . battery_timestamp ) == 100 :
if debug :
print ' current: ' , self . mean ( self . battery_current )
print ' voltage: ' , self . mean ( self . battery_voltage )
print ' SoC: ' , self . mean ( self . battery_capacity )
print ' time: ' , self . mean ( self . battery_timestamp )
2013-11-14 17:08:19 +01:00
2013-11-21 18:11:38 +01:00
tabelle = ' battery '
# daten = [(tabelle, str(self.battery_timestamp[i]), str(self.battery_current[i]), str(self.battery_voltage[i]), str(self.battery_capacity[i])) for i in range(100)]
daten = ( tabelle , str ( self . battery_timestamp [ 50 ] ) , str ( self . mean ( self . battery_current ) ) , str ( self . mean ( self . battery_voltage ) ) , str ( self . mean ( self . battery_capacity ) ) )
sql = " INSERT INTO %s VALUES ( %s , %s , %s , %s ) "
2013-11-14 17:08:19 +01:00
2013-11-20 17:13:15 +01:00
self . queue . put ( daten [ 0 ] )
# for i in daten:
2013-11-21 18:11:38 +01:00
# print sql % daten
self . cursor . execute ( " INSERT INTO %s VALUES ( \' %s \' , %s , %s , %s ) " % daten )
#self.cursor.executemany(sql, daten)
2013-11-14 17:08:19 +01:00
2013-11-20 17:13:15 +01:00
del self . battery_current [ : ] , self . battery_voltage [ : ] , self . battery_capacity [ : ] , self . battery_timestamp [ : ] #clear tmp lists
sleep ( 0.01 )