2013-11-13 18:14:34 +01:00
|
|
|
'''
|
|
|
|
|
Created on 13.11.2013
|
|
|
|
|
|
|
|
|
|
@author: Philipp Rauch
|
2013-11-20 17:13:15 +01:00
|
|
|
@version: 0.1
|
2013-11-13 18:14:34 +01:00
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
from CanMessage import CanMessage
|
2013-11-20 17:13:15 +01:00
|
|
|
from CanSignal import CanSignal
|
|
|
|
|
from PCan import PcanAdapter
|
|
|
|
|
from datetime import datetime
|
|
|
|
|
from time import sleep
|
|
|
|
|
from threading import Thread
|
|
|
|
|
from Queue import Queue
|
2013-11-22 14:25:12 +01:00
|
|
|
from config import Config
|
2013-11-28 12:41:01 +01:00
|
|
|
import database
|
2013-11-13 18:14:34 +01:00
|
|
|
|
|
|
|
|
debug = False
|
|
|
|
|
|
2013-11-20 17:13:15 +01:00
|
|
|
class CANFilter(Thread):
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
battery_current, battery_voltage = [], []
|
|
|
|
|
battery_soc, battery_timestamp = [], [] #create tmp lists
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-22 16:01:43 +01:00
|
|
|
### LOAD CONFIG ###
|
2013-11-22 14:25:12 +01:00
|
|
|
c = Config()
|
|
|
|
|
conf = c.readConf()
|
2013-11-21 18:11:38 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
cursor = database.setup(conf)
|
2013-11-21 18:11:38 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
def __init__(self):
|
2013-11-20 17:13:15 +01:00
|
|
|
Thread.__init__(self)
|
|
|
|
|
|
|
|
|
|
self.queue = Queue()
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
self.pcan = PcanAdapter(PcanAdapter.Baudrate[self.conf['can_baud']],
|
|
|
|
|
debug = self.conf['config_debug'])
|
2013-11-19 17:11:25 +01:00
|
|
|
self.pcan.initialize()
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
dc_battery = CanMessage(0x3A4, 8, 50, 'dc_battery')
|
|
|
|
|
dc_grid = CanMessage(0x3A5, 8, 50, 'dc_grid')
|
|
|
|
|
dc_pv = CanMessage(0x3A6, 8, 50, 'dc_pv')
|
2013-11-28 12:41:01 +01:00
|
|
|
dc_charging = CanMessage(0x3A7, 8, 50, 'dc_charger')
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
self.pcan.addMessage(dc_battery)
|
|
|
|
|
self.pcan.addMessage(dc_grid)
|
|
|
|
|
self.pcan.addMessage(dc_pv)
|
|
|
|
|
self.pcan.addMessage(dc_charging)
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
current = CanSignal(0, 16, 0, 0.001, 0, 'current')
|
|
|
|
|
voltage = CanSignal(16, 16, 0, 0.01, 0, 'voltage')
|
|
|
|
|
soc = CanSignal(32, 11, 0, 0.05, 0, 'soc')
|
|
|
|
|
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')
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
self.pcan.Messages['dc_battery'].addSignal( current )
|
|
|
|
|
self.pcan.Messages['dc_battery'].addSignal( voltage )
|
2013-11-28 12:41:01 +01:00
|
|
|
self.pcan.Messages['dc_battery'].addSignal( soc )
|
2013-11-19 17:11:25 +01:00
|
|
|
self.pcan.Messages['dc_battery'].addSignal( isMaster )
|
|
|
|
|
self.pcan.Messages['dc_battery'].addSignal( isCharging )
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
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 )
|
2013-11-14 17:08:19 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
def mean(self, l):
|
2013-11-22 14:25:12 +01:00
|
|
|
return float(sum(l))/len(l) if len(l) > 0 else 0
|
2013-11-13 18:14:34 +01:00
|
|
|
|
2013-11-19 17:11:25 +01:00
|
|
|
def run(self):
|
2013-11-22 14:25:12 +01:00
|
|
|
while True:
|
|
|
|
|
receiveMessageId = self.pcan.receiveMessage()
|
|
|
|
|
if receiveMessageId == self.pcan.Messages['dc_battery'].Id:
|
|
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
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())
|
2013-11-22 14:25:12 +01:00
|
|
|
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)
|
2013-11-28 12:41:01 +01:00
|
|
|
print 'SoC: ', self.mean(self.battery_soc)
|
2013-11-22 14:25:12 +01:00
|
|
|
print 'time: ', self.mean(self.battery_timestamp)
|
|
|
|
|
|
|
|
|
|
tabelle = 'battery'
|
2013-11-14 17:08:19 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
list_daten = [(tabelle, str(self.battery_timestamp[i]),
|
|
|
|
|
str(self.battery_current[i]),
|
|
|
|
|
str(self.battery_voltage[i]),
|
|
|
|
|
str(self.battery_soc[i])) for i in range(100)]
|
2013-11-20 17:13:15 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
mean_daten = (tabelle, str(self.battery_timestamp[50]),
|
|
|
|
|
str(self.mean(self.battery_current)),
|
|
|
|
|
str(self.mean(self.battery_voltage)),
|
|
|
|
|
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)
|
2013-11-22 14:25:12 +01:00
|
|
|
#self.cursor.executemany(sql, daten)
|
2013-11-14 17:08:19 +01:00
|
|
|
|
2013-11-28 12:41:01 +01:00
|
|
|
## clear tmp lists ##
|
|
|
|
|
del self.battery_current[:], self.battery_voltage[:],
|
|
|
|
|
del self.battery_soc[:], self.battery_timestamp[:]
|
2013-11-22 16:01:43 +01:00
|
|
|
sleep(0.01)
|