* CANFilter kann jetzt empfangene Daten in eine MySQL Datenbank schreiben. * rest-api.py wurde in API.py umbenannt. * Buffer wurde zu einer Klasse umstrukturiert.
89 lines
No EOL
3 KiB
Python
89 lines
No EOL
3 KiB
Python
'''
|
|
Created on 13.11.2013
|
|
|
|
@author: Philipp Rauch
|
|
@version: 0.02
|
|
'''
|
|
|
|
from CanMessage import CanMessage
|
|
from CanSignal import CanSignal
|
|
from PCan import PcanAdapter
|
|
import datetime
|
|
import time
|
|
#import MySQLdb
|
|
|
|
debug = False
|
|
|
|
pcan = PcanAdapter(PcanAdapter.Baudrate['250k'])
|
|
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')
|
|
|
|
pcan.addMessage(dc_battery)
|
|
pcan.addMessage(dc_grid)
|
|
pcan.addMessage(dc_pv)
|
|
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')
|
|
|
|
pcan.Messages['dc_battery'].addSignal( current )
|
|
pcan.Messages['dc_battery'].addSignal( voltage )
|
|
pcan.Messages['dc_battery'].addSignal( capacity )
|
|
pcan.Messages['dc_battery'].addSignal( isMaster )
|
|
pcan.Messages['dc_battery'].addSignal( isCharging )
|
|
|
|
pcan.Messages['dc_grid'].addSignal( current )
|
|
pcan.Messages['dc_grid'].addSignal( voltage )
|
|
pcan.Messages['dc_grid'].addSignal( isMaster )
|
|
pcan.Messages['dc_grid'].addSignal( isFeed )
|
|
pcan.Messages['dc_grid'].addSignal( isOn )
|
|
|
|
pcan.Messages['dc_pv'].addSignal( current )
|
|
pcan.Messages['dc_pv'].addSignal( voltage )
|
|
|
|
pcan.Messages['dc_charging'].addSignal( current )
|
|
pcan.Messages['dc_charging'].addSignal( voltage )
|
|
|
|
battery_current, battery_voltage, battery_capacity, battery_timestamp = [], [], [], []
|
|
|
|
#connection = MySQLdb.connect("url", "user", "passwort", "datenbankname")
|
|
#cursor = connection.cursor()
|
|
|
|
def mean(l):
|
|
return float(sum(l))/len(l) if len(l) > 0 else 0
|
|
|
|
while True:
|
|
receiveMessageId = pcan.receiveMessage()
|
|
if receiveMessageId == pcan.Messages['dc_battery'].Id:
|
|
|
|
battery_current.append(pcan.Messages['dc_battery'].Signals['current'].GetData())
|
|
battery_voltage.append(pcan.Messages['dc_battery'].Signals['voltage'].GetData())
|
|
battery_capacity.append(pcan.Messages['dc_battery'].Signals['capacity'].GetData())
|
|
battery_timestamp.append(str(datetime.datetime.now()))
|
|
|
|
if len(battery_timestamp) == 1000:
|
|
if debug:
|
|
print 'current: ', mean(battery_current)
|
|
print 'voltage: ', mean(battery_voltage)
|
|
print 'SoC: ', mean(battery_capacity)
|
|
print 'time: ', mean(battery_timestamp)
|
|
|
|
tabelle = 'EMS-TEST'
|
|
daten = [(tabelle, str(battery_timestamp[i]), str(battery_current[i]), str(battery_voltage[i]), str(battery_capacity[i])) for i in range(1000)]
|
|
sql = 'INSERT INTO %s VALUES(%s, %s, %s, %s)'
|
|
|
|
for i in daten:
|
|
print sql % i
|
|
# cursor.executemany(sql, daten)
|
|
|
|
del battery_current[:], battery_voltage[:], battery_capacity[:], battery_timestamp[:]
|
|
time.sleep(0.01) |