umbau auf profile/database abgeschlossen, lauffähige version
This commit is contained in:
parent
fdd7afd35b
commit
51610ad421
9 changed files with 353 additions and 401 deletions
101
src/CANFilter.py
101
src/CANFilter.py
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue