modbus modul erweitert, pCharger erweitert
This commit is contained in:
parent
9a95c211eb
commit
cee95b4b63
6 changed files with 76 additions and 42 deletions
|
|
@ -25,7 +25,7 @@ def setup(conf):
|
|||
|
||||
def loop(db, item):
|
||||
'''
|
||||
sql_values = 'SELECT * FROM %s ORDER BY %s DESC LIMIT 0, 1'
|
||||
|
||||
'''
|
||||
path = item.split('/')
|
||||
if path[0] == '':
|
||||
|
|
|
|||
|
|
@ -18,10 +18,8 @@ def setup(conf):
|
|||
|
||||
### INITIALIZE ###
|
||||
PACS.append(messages)
|
||||
PACS.append(ModbusTcpClient('10.2.6.5'))
|
||||
PACS.append(ModbusTcpClient('10.2.6.6'))
|
||||
PACS.append(ModbusTcpClient('10.2.6.7'))
|
||||
PACS.append(ModbusTcpClient('10.2.6.8'))
|
||||
for ip in conf['pac_ip']:
|
||||
PACS.append(ModbusTcpClient(ip))
|
||||
|
||||
### CONNECT ###
|
||||
for PAC in PACS[1::]:
|
||||
|
|
@ -50,18 +48,17 @@ def loop(PACS, item):
|
|||
if func is None:
|
||||
raise NotImplementedError
|
||||
|
||||
res = PACS[2].read_holding_registers(item,reg,unit=2)
|
||||
res = PACS[2].read_holding_registers(item,reg,unit=1)
|
||||
return { row.get('Value name')[inx] : func(res.registers) }
|
||||
|
||||
|
||||
def _to_float_time(reg):
|
||||
res = []
|
||||
res.append(_to_float(reg[0:2]))
|
||||
res.append(_to_time_abs(reg[2:6]))
|
||||
res = { 'value' : _to_float(reg[0:2]) }
|
||||
res.update({ 'time' : _to_time_abs(reg[2:6]) })
|
||||
return res
|
||||
|
||||
def _to_long(reg):
|
||||
tmp = int(reg[0]) << 16 | int(reg[1])
|
||||
tmp = _to_ulong(reg)
|
||||
s = struct.pack('=i', tmp)
|
||||
return struct.unpack('=l', s)[0]
|
||||
|
||||
|
|
@ -76,13 +73,13 @@ def _to_time_abs(reg):
|
|||
return str(date)
|
||||
|
||||
def _to_ulong(reg):
|
||||
return (reg[0]*(int(0xFFFF)+1) + reg[1])
|
||||
return int(reg[0]) << 16 | int(reg[1])
|
||||
|
||||
def _to_ushort(reg):
|
||||
return reg[0]
|
||||
|
||||
def _to_float(reg):
|
||||
tmp = int(reg[0]) << 16 | int(reg[1])
|
||||
tmp = _to_ulong(reg)
|
||||
s = struct.pack('=i', tmp)
|
||||
return struct.unpack('=f', s)[0]
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ class Switch(Thread):
|
|||
elif self.source == MODBUS:
|
||||
result = modbus.loop(self.cursor, item)
|
||||
|
||||
print 'PUT:\t%s' % result
|
||||
#print 'PUT:\t%s' % result
|
||||
|
||||
self.queue.put(result)
|
||||
self.query.task_done()
|
||||
|
|
|
|||
|
|
@ -20,4 +20,6 @@ can_baudrate = 250k # default 500k
|
|||
can_symfile = ems-test.sym
|
||||
|
||||
#### PAC ####
|
||||
pac_csvfile = pacs.csv
|
||||
pac_ip = 10.2.6.5, 10.2.6.6, 10.2.6.7, 10.2.6.8
|
||||
pac_csvfile = pacs.csv # only one file allowed
|
||||
pac_messages = 1, 801, 3001, 50235, 797, 213
|
||||
|
|
|
|||
|
|
@ -5,7 +5,11 @@ Created on 16.01.2014
|
|||
'''
|
||||
import csv
|
||||
from datetime import datetime
|
||||
from pandas import DataFrame
|
||||
from profile.database import Database
|
||||
from Config.parser import config
|
||||
import os
|
||||
import numpy
|
||||
|
||||
number = 1
|
||||
|
||||
|
|
@ -13,17 +17,17 @@ sqlerr = "INSERT INTO %s (DateTime,Type,error) VALUES (\'%s\',%s,%s);"
|
|||
sqlnor = "INSERT INTO %s (DateTime,Type,cardnumber,customernumber,plug,meterreading) VALUES (\'%s\',%s,%s,%s,%s,%s);"
|
||||
folder = 'I:\Rauch\pCharger0%s'
|
||||
|
||||
def clean(list):
|
||||
def clean(li):
|
||||
'''
|
||||
Cleans every strings in a list with the strip() Method
|
||||
|
||||
@param list: all elements musst strings
|
||||
@return list: a list with clean strings
|
||||
@param li: all elements musst strings
|
||||
@return li: a list with clean strings
|
||||
'''
|
||||
for i in range(0, len(list)):
|
||||
list[i] = list[i].strip()
|
||||
#list[i] = list[i].strip('\xef\xbb\xbf')
|
||||
return list
|
||||
for i in range(0, len(li)):
|
||||
li[i] = li[i].strip()
|
||||
#li[i] = li[i].strip('\xef\xbb\xbf')
|
||||
return li
|
||||
|
||||
def makeDatetime(time):
|
||||
'''
|
||||
|
|
@ -32,42 +36,77 @@ def makeDatetime(time):
|
|||
@param: time: string with timeformat(dd.mm.yyy HH:MM:SS)
|
||||
@return: datetime object
|
||||
'''
|
||||
tmp = []
|
||||
time = time.split(' ')
|
||||
time[0] = time[0].split('.')
|
||||
time[1] = time[1].split(':')
|
||||
tmp.append(int(time[0][2]))
|
||||
tmp.append(int(time[0][1]))
|
||||
tmp.append(int(time[0][0]))
|
||||
tmp.append(int(time[1][0]))
|
||||
tmp.append(int(time[1][1]))
|
||||
tmp.append(int(time[1][2]))
|
||||
res = datetime(int(time[0][2]),
|
||||
int(time[0][1]),
|
||||
int(time[0][0]),
|
||||
int(time[1][0]),
|
||||
int(time[1][1]),
|
||||
int(time[1][2]))
|
||||
|
||||
return datetime(tmp[0], tmp[1], tmp[2], tmp[3], tmp[4], tmp[5]).__str__()
|
||||
return res
|
||||
|
||||
def generateSQL(folder):
|
||||
def genData(folder):
|
||||
'''
|
||||
generate SQL commands of all pCarger csv documents in a folder
|
||||
|
||||
@param folder: path to the folder containing pCarger csv files
|
||||
'''
|
||||
ordner = os.listdir(folder)
|
||||
columns = ('DateTime', 'Type','cardnumber', 'customernumber', 'plug', 'meterreading', 'error')
|
||||
res_data = DataFrame(columns = ['DateTime', 'Type', 'cardnumber', 'customernumber', 'plug', 'meterreading', 'error'])
|
||||
for datei in ordner:
|
||||
path = "%s/%s" % (folder, datei)
|
||||
csv_data = csv.reader(file(path), delimiter=';')
|
||||
try:
|
||||
for row in csv_data:
|
||||
res = {}
|
||||
row = clean(row)
|
||||
row[0] = "P-Charger_0%s" % number #row[0]
|
||||
row[1] = makeDatetime(row[1])
|
||||
row[3] = int(row[3], 16).__str__()
|
||||
row[3] = numpy.int(row[3], 16)
|
||||
if row[2] not in 'SE':
|
||||
row[6] = int(row[6], 16).__str__()
|
||||
print sqlnor % tuple(row)
|
||||
row[4] = numpy.nan if row[4] is '' else numpy.int(row[4], 16)
|
||||
row[5] = numpy.int(row[5], 16)
|
||||
row[6] = numpy.int(row[6], 16)
|
||||
for i in range(len(row)-1):
|
||||
res.update({ columns[i] : row[i+1] })
|
||||
else:
|
||||
print sqlerr % tuple(row)
|
||||
for i in range(len(row)-1):
|
||||
if i is 2:
|
||||
res.update({ columns[6] : row[i+1] })
|
||||
else:
|
||||
res.update({ columns[i] : row[i+1] })
|
||||
pass
|
||||
res_data = res_data.append(res, ignore_index = True)
|
||||
except:
|
||||
continue
|
||||
#print res_data
|
||||
|
||||
#res_data = res_data.set_index('DateTime', verify_integrity = True)
|
||||
res_data = res_data.replace('', numpy.nan)
|
||||
res_data = res_data.where(DataFrame.notnull(res_data), 0)
|
||||
res_data[['cardnumber', 'customernumber', 'plug', 'meterreading', 'error']] = res_data[['cardnumber', 'customernumber', 'plug', 'meterreading', 'error']].astype(numpy.int64)
|
||||
return res_data
|
||||
|
||||
|
||||
c = config()
|
||||
conf = c.readConf()
|
||||
|
||||
db = Database()
|
||||
db.loadDatabase(strHost = conf['mySQL_server'],
|
||||
intPort = int(conf['mySQL_port']),
|
||||
strUser = conf['mySQL_user'],
|
||||
strPasswd = conf['mySQL_pass'],
|
||||
strDatabase = 'ems_testdb', #conf['mySQL_database'],
|
||||
strTable = None)
|
||||
|
||||
for i in range(1,8):
|
||||
number = i
|
||||
generateSQL('I:\Rauch\pCharger%s' % '0{0}'.format(number))
|
||||
#print genData('I:\Rauch\pCharger%s' % '0{0}'.format(number))
|
||||
if i == 5:
|
||||
continue
|
||||
db.writeDatabase('pCharger%s' % '0{0}'.format(number), genData('I:\Rauch\pCharger%s' % '0{0}'.format(number)), bClear = False)
|
||||
print 'wrote pCharger%s' % '0{0}'.format(number)
|
||||
|
|
|
|||
10
src/test.py
10
src/test.py
|
|
@ -20,13 +20,9 @@ print '\tTEST-QUERY:\t', query
|
|||
print '\tTEST-QUEUE:\t', queue
|
||||
sw.start()
|
||||
while True:
|
||||
query.put(1)
|
||||
query.put(801)
|
||||
query.put(3001)
|
||||
query.put(50235)
|
||||
query.put(797)
|
||||
query.put(203)
|
||||
sleep(0.5)
|
||||
for mes in conf['pac_messages']:
|
||||
query.put(int(mes))
|
||||
sleep(1)
|
||||
|
||||
### Sym2Lib test ###
|
||||
# sym = "%s/%s" % (conf["config_dictionary"], conf["symfile"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue