88 lines
3 KiB
Python
88 lines
3 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding: utf8 -*-
|
||
'''
|
||
Created on 13.11.2013
|
||
|
||
@author: Philipp Rauch
|
||
@version: 0.1
|
||
'''
|
||
from PCan import PcanAdapter
|
||
from Sym2Lib import Add2Adapter, get_DataFrameDict
|
||
from datetime import datetime
|
||
from time import sleep
|
||
from threading import Thread
|
||
from Queue import Queue
|
||
from pandas import DataFrame
|
||
from profile.database import Database
|
||
|
||
debug = True
|
||
|
||
def CAN_start(conf):
|
||
print 'starte CAN mit Baud von', conf['can_baudrate']
|
||
can = CANFilter(conf)
|
||
can.start()
|
||
|
||
class CANFilter(Thread):
|
||
|
||
### Lookup f<>r CAN --> DB ###
|
||
lookup = {
|
||
'dc_battery' : 'battery'
|
||
}
|
||
|
||
def __init__(self, conf):
|
||
Thread.__init__(self)
|
||
self.conf = conf
|
||
self.queue = Queue()
|
||
|
||
### init DB ###
|
||
self.db = Database()
|
||
self.db.loadDatabase(strHost = self.conf['mySQL_server'],
|
||
intPort = int(self.conf['mySQL_port']),
|
||
strUser = self.conf['mySQL_user'],
|
||
strPasswd = self.conf['mySQL_pass'],
|
||
strDatabase = self.conf['mySQL_database'],
|
||
strTable = None)
|
||
|
||
self.symList = []
|
||
|
||
### init PCAN ###
|
||
self.pcan = PcanAdapter(PcanAdapter.Baudrate[self.conf['can_baudrate']],
|
||
debug = self.conf['config_debug'])
|
||
self.pcan.initialize()
|
||
if isinstance(self.conf['can_symfile'], str):
|
||
sym = '%s/%s' % (self.conf['config_dictionary'],
|
||
self.conf['can_symfile'])
|
||
self.symList.append(get_DataFrameDict(sym))
|
||
Add2Adapter(self.pcan, sym)
|
||
elif isinstance(self.conf['can_symfile'], list):
|
||
for element in self.conf['can_symfile']:
|
||
sym = '%s/%s' % (self.conf['config_dictionary'], element)
|
||
self.symList.append(get_DataFrameDict(sym))
|
||
Add2Adapter(self.pcan, sym)
|
||
|
||
def mean(self, l):
|
||
return float(sum(l))/len(l) if len(l) > 0 else 0
|
||
|
||
def run(self):
|
||
while True:
|
||
receiveMessageName = self.pcan.receiveMessage()
|
||
|
||
for sym in self.symList:
|
||
if receiveMessageName in sym.keys():
|
||
tmp = {}
|
||
for sig in list(sym[receiveMessageName].columns):
|
||
tmp[sig] = self.pcan.Messages[receiveMessageName].Signals[sig].GetData()
|
||
sym[receiveMessageName] = sym[receiveMessageName].append(tmp, ignore_index=True)
|
||
|
||
if len(sym[receiveMessageName].index) == 100:
|
||
res = DataFrame(sym[receiveMessageName].mean(axis=0)).T
|
||
|
||
res.drop('isMaster', axis = 1, inplace = True)
|
||
res.drop('isCharging', axis = 1, inplace = True)
|
||
res['DateTime'] = datetime.now()
|
||
|
||
self.db.writeDatabase(self.lookup[receiveMessageName], res)
|
||
sym[receiveMessageName] = sym[receiveMessageName].drop(sym[receiveMessageName].index[:])
|
||
#print res
|
||
|
||
sleep(0.01)
|