insource vedirect
parent
d6741fcc6f
commit
93c99e8107
107
logger.py
107
logger.py
|
@ -4,7 +4,7 @@ import numpy as np
|
|||
import os, serial,time,socket,sys,json,logging,requests,getopt
|
||||
# import the server implementation
|
||||
# import ADC
|
||||
import vedirect
|
||||
#import vedirect
|
||||
#import upload_osm
|
||||
|
||||
configfile="config.json"
|
||||
|
@ -24,6 +24,93 @@ channel_info={"time":{"sensor":"CPU","timestamp":0,"i2c":0},"CPU_temp":{"sensor"
|
|||
|
||||
a = 2
|
||||
|
||||
# import vedirect from https://github.com/karioja/vedirect
|
||||
# description of channels:https://beta.ivc.no/wiki/index.php/Victron_VE_Direct_DIY_Cable
|
||||
class vedirect:
|
||||
def __init__(self, serialport, timeout):
|
||||
self.serialport = serialport
|
||||
self.ser = serial.Serial(serialport, 19200, timeout=timeout)
|
||||
self.header1 = '\r'
|
||||
self.header2 = '\n'
|
||||
self.hexmarker = ':'
|
||||
self.delimiter = '\t'
|
||||
self.key = ''
|
||||
self.value = ''
|
||||
self.bytes_sum = 0;
|
||||
self.state = self.WAIT_HEADER
|
||||
self.dict = {}
|
||||
(HEX, WAIT_HEADER, IN_KEY, IN_VALUE, IN_CHECKSUM) = range(5)
|
||||
def input(self, byte):
|
||||
if byte == self.hexmarker and self.state != self.IN_CHECKSUM:
|
||||
self.state = self.HEX
|
||||
if self.state == self.WAIT_HEADER:
|
||||
self.bytes_sum += ord(byte)
|
||||
if byte == self.header1:
|
||||
self.state = self.WAIT_HEADER
|
||||
elif byte == self.header2:
|
||||
self.state = self.IN_KEY
|
||||
return None
|
||||
elif self.state == self.IN_KEY:
|
||||
self.bytes_sum += ord(byte)
|
||||
if byte == self.delimiter:
|
||||
if (self.key == 'Checksum'):
|
||||
self.state = self.IN_CHECKSUM
|
||||
else:
|
||||
self.state = self.IN_VALUE
|
||||
else:
|
||||
self.key += byte
|
||||
return None
|
||||
elif self.state == self.IN_VALUE:
|
||||
self.bytes_sum += ord(byte)
|
||||
if byte == self.header1:
|
||||
self.state = self.WAIT_HEADER
|
||||
self.dict[self.key] = self.value;
|
||||
self.key = '';
|
||||
self.value = '';
|
||||
else:
|
||||
self.value += byte
|
||||
return None
|
||||
elif self.state == self.IN_CHECKSUM:
|
||||
self.bytes_sum += ord(byte)
|
||||
self.key = ''
|
||||
self.value = ''
|
||||
self.state = self.WAIT_HEADER
|
||||
if (self.bytes_sum % 256 == 0):
|
||||
self.bytes_sum = 0
|
||||
return self.dict
|
||||
else:
|
||||
print 'Malformed packet'
|
||||
self.bytes_sum = 0
|
||||
elif self.state == self.HEX:
|
||||
self.bytes_sum = 0
|
||||
if byte == self.header2:
|
||||
self.state = self.WAIT_HEADER
|
||||
else:
|
||||
raise AssertionError()
|
||||
def read_data(self):
|
||||
while True:
|
||||
byte = self.ser.read(1)
|
||||
packet = self.input(byte)
|
||||
def read_data_single(self):
|
||||
while True:
|
||||
byte = self.ser.read(1)
|
||||
packet = self.input(byte)
|
||||
if (packet != None):
|
||||
return packet
|
||||
def read_data_callback(self, callbackFunction):
|
||||
while True:
|
||||
byte = self.ser.read(1)
|
||||
if byte:
|
||||
packet = self.input(byte)
|
||||
if (packet != None):
|
||||
callbackFunction(packet)
|
||||
else:
|
||||
break
|
||||
|
||||
def print_data_callback(data):
|
||||
print data
|
||||
# end import vedirect
|
||||
|
||||
def upload_osm(sensebox_id,sensor_id,value):
|
||||
url="https://ingress.opensensemap.org/boxes/%s/%s" % (sensebox_id,sensor_id)
|
||||
r = requests.post(url,json={'value': value})
|
||||
|
@ -164,6 +251,7 @@ if "vedirect" in log_conf:
|
|||
bve_port=log_conf['vedirect']['port']
|
||||
else:
|
||||
bve_port='/dev/serial/by-id/usb-VictronEnergy_BV_VE_Direct_cable_VE1SSBVT-if00-port0'
|
||||
print(bve_port)
|
||||
try:
|
||||
ve=vedirect(bve_port,60)
|
||||
except:
|
||||
|
@ -173,6 +261,8 @@ if "vedirect" in log_conf:
|
|||
channel_names.append(i)
|
||||
channel_info[i]={"sensor":"victron","timestamp":0,"i2c":0}
|
||||
|
||||
print(bve)
|
||||
|
||||
# declare adc
|
||||
badc=False
|
||||
if "ads1x15" in log_conf:
|
||||
|
@ -320,11 +410,16 @@ while a > 1:
|
|||
except:
|
||||
print("could not read VE")
|
||||
else:
|
||||
ch_val[channel_names.index("volt_bat_ve")]=int(vedata['V']) # Battery voltage measured by ve
|
||||
ch_val[channel_names.index("volt_arr_ve")]=int(vedata['VPV']) # Array voltage measured by ve
|
||||
ch_val[channel_names.index("amp_ve")]=int(vedata['I']) # loading current by ve
|
||||
ch_val[channel_names.index("watt_ve")]=int(vedata['PPV']) # Array power measured by ve
|
||||
ch_val[channel_names.index("days_ve")]=int(vedata['HSDS']) # total days online ve
|
||||
if 'V' in vedata:
|
||||
ch_val[channel_names.index("volt_bat_ve")]=int(vedata['V']) # Battery voltage measured by ve
|
||||
if 'VPV' in vedata:
|
||||
ch_val[channel_names.index("volt_arr_ve")]=int(vedata['VPV']) # Array voltage measured by ve
|
||||
if 'I' in vedata:
|
||||
ch_val[channel_names.index("amp_ve")]=int(vedata['I']) # loading current by ve
|
||||
if 'PPV' in vedata:
|
||||
ch_val[channel_names.index("watt_ve")]=int(vedata['PPV']) # Array power measured by ve
|
||||
if 'HSDS' in vedata:
|
||||
ch_val[channel_names.index("days_ve")]=int(vedata['HSDS']) # total days online ve
|
||||
for i in range(len(ch_val)):
|
||||
ch_mean[i]=ch_mean[i]+ch_val[i]
|
||||
|
||||
|
|
Loading…
Reference in New Issue