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