*die readConf wurde verbessert *Standartwerte wurden hinterlegt *In den Modulen wird das Configfile verwendet
109 lines
No EOL
4.5 KiB
Python
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) |