ems/scr/CANFilter.py
Philipp Rauch e70ef4de38 Config auf Module angewand
*die readConf wurde verbessert
*Standartwerte wurden hinterlegt
*In den Modulen wird das Configfile verwendet
2013-11-21 18:11:38 +01:00

109 lines
No EOL
4.5 KiB
Python

'''
Created on 13.11.2013
@author: Philipp Rauch
@version: 0.1
'''
from CanMessage import CanMessage
from CanSignal import CanSignal
from PCan import PcanAdapter
from datetime import datetime
from time import sleep
from threading import Thread
from Queue import Queue
from MySQLdb import connect
from config import readConf
debug = False
class CANFilter(Thread):
battery_current, battery_voltage, battery_capacity, battery_timestamp, test = [], [], [], [], [] #create tmp lists
conf = readConf()
connection = connect(host = conf['mySQL_server'],
user = conf['mySQL_user'],
passwd = conf['mySQL_pass'],
db = conf['mySQL_database'])
cursor = connection.cursor()
def __init__(self):
Thread.__init__(self)
self.queue = Queue()
self.pcan = PcanAdapter(PcanAdapter.Baudrate['250k'])
self.pcan.initialize()
dc_battery = CanMessage(0x3A4, 8, 50, 'dc_battery')
dc_grid = CanMessage(0x3A5, 8, 50, 'dc_grid')
dc_pv = CanMessage(0x3A6, 8, 50, 'dc_pv')
dc_charging = CanMessage(0x3A7, 8, 50, 'dc_charging')
self.pcan.addMessage(dc_battery)
self.pcan.addMessage(dc_grid)
self.pcan.addMessage(dc_pv)
self.pcan.addMessage(dc_charging)
current = CanSignal(0, 16, 0, 0.001, 0, 'current')
voltage = CanSignal(16, 16, 0, 0.01, 0, 'voltage')
capacity = CanSignal(32, 11, 0, 0.05, 0, 'capacity')
isMaster = CanSignal(56, 1, 0, 1, 0, 'isMaster')
isFeed = CanSignal(57, 1, 0, 1, 0, 'isFeed')
isCharging = CanSignal(57, 1, 0, 1, 0, 'isCharging')
isOn = CanSignal(58, 1, 0, 1, 0, 'isOn')
self.pcan.Messages['dc_battery'].addSignal( current )
self.pcan.Messages['dc_battery'].addSignal( voltage )
self.pcan.Messages['dc_battery'].addSignal( capacity )
self.pcan.Messages['dc_battery'].addSignal( isMaster )
self.pcan.Messages['dc_battery'].addSignal( isCharging )
self.pcan.Messages['dc_grid'].addSignal( current )
self.pcan.Messages['dc_grid'].addSignal( voltage )
self.pcan.Messages['dc_grid'].addSignal( isMaster )
self.pcan.Messages['dc_grid'].addSignal( isFeed )
self.pcan.Messages['dc_grid'].addSignal( isOn )
self.pcan.Messages['dc_pv'].addSignal( current )
self.pcan.Messages['dc_pv'].addSignal( voltage )
self.pcan.Messages['dc_charging'].addSignal( current )
self.pcan.Messages['dc_charging'].addSignal( voltage )
def mean(self, l):
return float(sum(l))/len(l) if len(l) > 0 else 0
def run(self):
while True:
receiveMessageId = self.pcan.receiveMessage()
if receiveMessageId == self.pcan.Messages['dc_battery'].Id:
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_capacity.append(self.pcan.Messages['dc_battery'].Signals['capacity'].GetData())
self.battery_timestamp.append(datetime.now())
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_capacity)
print 'time: ', self.mean(self.battery_timestamp)
tabelle = 'battery'
# daten = [(tabelle, str(self.battery_timestamp[i]), str(self.battery_current[i]), str(self.battery_voltage[i]), str(self.battery_capacity[i])) for i in range(100)]
daten = (tabelle, str(self.battery_timestamp[50]), str(self.mean(self.battery_current)), str(self.mean(self.battery_voltage)), str(self.mean(self.battery_capacity)))
sql = "INSERT INTO %s VALUES (%s,%s,%s,%s)"
self.queue.put(daten[0])
# for i in daten:
# print sql % daten
self.cursor.execute("INSERT INTO %s VALUES (\'%s\',%s,%s,%s)" % daten)
#self.cursor.executemany(sql, daten)
del self.battery_current[:], self.battery_voltage[:], self.battery_capacity[:], self.battery_timestamp[:] #clear tmp lists
sleep(0.01)