ems/CAN/Filter.py
2014-01-30 18:42:36 +01:00

88 lines
3 KiB
Python
Raw Blame History

#!/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)