umbau auf profile/database abgeschlossen, lauffähige version

This commit is contained in:
Philipp Rauch 2014-01-29 18:29:53 +01:00
parent fdd7afd35b
commit 51610ad421
9 changed files with 353 additions and 401 deletions

View file

@ -1,50 +1,62 @@
#!/usr/bin/env python
# -*- coding: utf8 -*-
'''
Created on 13.11.2013
@author: Philipp Rauch
@version: 0.1
'''
from CanMessage import CanMessage
from CanSignal import CanSignal
from PCan import PcanAdapter
from Sym2Lib import Add2Adapter, Sym2Code
from datetime import datetime
from time import sleep
from threading import Thread
from Queue import Queue
from config import Config
import database
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 config import Config
from pandas import DataFrame
from profile.database import Database
debug = True
class CANFilter(Thread):
battery_current, battery_voltage = [], []
battery_soc, battery_timestamp = [], [] #create tmp lists
### LOAD CONFIG ###
c = Config()
conf = c.readConf()
cursor = database.setup(conf)
### Lookup f<>r CAN --> DB ###
lookup = {
'dc_battery' : 'battery'
}
def __init__(self):
Thread.__init__(self)
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["symfile"], str):
sym = "%s/%s" % (self.conf["config_dictionary"], self.conf["symfile"])
Sym2Code(sym)
sym = "%s/%s" % (self.conf["config_dictionary"],
self.conf["symfile"])
self.symList.append(get_DataFrameDict(sym))
Add2Adapter(self.pcan, sym)
elif isinstance(self.conf["symfile"], list):
for element in self.conf["symfile"]:
sym = "%s/%s" % (self.conf["config_dictionary"], element)
#Sym2Code(sym)
self.symList.append(get_DataFrameDict(sym))
Add2Adapter(self.pcan, sym)
def mean(self, l):
@ -52,45 +64,24 @@ class CANFilter(Thread):
def run(self):
while True:
receiveMessageId = self.pcan.receiveMessage()
receiveMessageName = self.pcan.receiveMessage()
if receiveMessageId == self.pcan.Messages['dc_battery'].Id:
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)
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_soc.append(
self.pcan.Messages['dc_battery'].Signals['soc'].GetData())
self.battery_timestamp.append(datetime.now())
if len(sym[receiveMessageName].index) == 100:
res = DataFrame(sym[receiveMessageName].mean(axis=0)).T
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_soc)
print 'time: ', self.battery_timestamp[50]
res.drop('isMaster', axis = 1, inplace = True)
res.drop('isCharging', axis = 1, inplace = True)
res['DateTime'] = datetime.now()
tabelle = 'battery'
self.db.writeDatabase(self.lookup[receiveMessageName], res)
sym[receiveMessageName] = sym[receiveMessageName].drop(sym[receiveMessageName].index[:])
#print res
list_daten = [(tabelle, str(self.battery_timestamp[i]),
str(self.battery_voltage[i]),
str(self.battery_current[i]),
str(self.battery_soc[i])) for i in range(100)]
mean_daten = (tabelle, str(self.battery_timestamp[50]),
str(self.mean(self.battery_voltage)),
str(self.mean(self.battery_current)),
str(self.mean(self.battery_soc)))
sql = "INSERT INTO %s VALUES (\'%s\',%s,%s,%s)"
self.queue.put(mean_daten[0])
self.cursor.execute(sql % mean_daten)
#self.cursor.executemany(sql, daten)
## clear tmp lists ##
del self.battery_current[:], self.battery_voltage[:],
del self.battery_soc[:], self.battery_timestamp[:]
sleep(0.01)