def createclient(port): # print 'creating client for',port # creates a client and appends to clients list try: client = EPsolarTracerClient(method='rtu', port=port, baudrate=115200, timeout=0.2) #need to do a check to make sure device is on as it fails if unit is not on or conected to cable # print client client.connect() sleep(1) unitid = getunitid(client) # print client, unitid clients.append(client) return client except AssertionError as error: # print 'error connecting',error return
def get_charger_data(registers): client = EPsolarTracerClient(serialclient=None) client.connect() output = dict() for key in registers.iterkeys(): value = client.read_input(key) output[key] = {'name': value.register.name, 'description': value.register.description, 'value': value.value} client.close() return output
# # comment/uncomment write commands below to view or set # from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers, coils, registerByName from pymodbus.client.sync import ModbusSerialClient from sys import stdout #ports = [ '/dev/ttyXRUSB0', '/dev/ttyXRUSB1' ] ports = ['/dev/ttyXRUSB1'] for port in ports: print "************ " + port + " ***************" serialclient = ModbusSerialClient(method='rtu', port=port, baudrate=115200) client = EPsolarTracerClient(serialclient=serialclient) client.connect() import datetime now = datetime.datetime.now() print now.year, now.month, now.day, now.hour, now.minute, now.second yearAndMonth = int(((now.year - 2000) << 8) | now.month) dayAndHour = int(((now.day) << 8) | now.hour) minuteAndSecond = int(((now.minute) << 8) | now.second) response = client.read_input("Real time clock 2") stdout.write("Device Time: " + str(int(response) & 0xFF)) response = client.read_input("Real time clock 1") stdout.write(":" + str(int(response) >> 8) + ":" +
from pyepsolartracer.registers import registers, coils # configure the client logging import logging logging.basicConfig() log = logging.getLogger() #log.setLevel(logging.DEBUG) log.setLevel(logging.WARN) #Solar-controller-ID: unitnum = 1 # choose the serial client #client = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits = 1, bytesize = 8, timeout=1) client = EPsolarTracerClient() client.connect() request = ReadDeviceInformationRequest(unit=unitnum) #response = client.execute(request) response = client.client.execute(request) print(repr(response.information)) for reg in registers: print() print(reg) #rr = client.read_input_registers(reg.address, 1, unit=unitnum) rr = client.client.read_input_registers(reg.address, 1, unit=unitnum) if hasattr(rr, "getRegister"): print("read_input_registers:", rr.getRegister(0)) else:
logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) # choose the serial client serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits=1, bytesize=8, timeout=1) #serialclient = None # choose the serial client client = EPsolarTracerClient(serialclient=serialclient) client.connect() client.write_output("Battery Capacity", 408) # 400 if parellelized client.write_output("Battery Type", 0x0000) # = custom client.close() client.connect() #client.write_output("High Volt.disconnect", 15.0) client.write_output("Charging limit voltage", 14.6) client.write_output("Over voltage reconnect", 14.8) client.write_output("Equalization voltage", 14.6) # not required with agm client.write_output("Boost voltage", 13.8) client.write_output("Float voltage", 13.4)
# configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits=1, bytesize=8, timeout=1) #serialclient = None client = EPsolarTracerClient(serialclient=serialclient) client.connect() response = client.read_device_info() #print "Manufacturer:", repr(response.information[0]) #print "Model:", repr(response.information[1]) #print "Version:", repr(response.information[2]) #response = client.read_input("Charging equipment rated input voltage") #print str(response) vlist = [] for reg in registers: #print #print reg
from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers,coils from pymodbus.client.sync import ModbusSerialClient as ModbusClient from pyepsolartracer.registers import registerByName # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits = 1, bytesize = 8, timeout = 0.05) client = EPsolarTracerClient(serialclient = serialclient) client.connect() value = client.read_input("Charging equipment input current") print float(value) client.close()
# # Set time on charge controllers based on local time while running this script # comment/uncomment write commands below to view or set time # from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers, coils, registerByName from pymodbus.client.sync import ModbusSerialClient ports = ['/dev/ttyXRUSB0', '/dev/ttyXRUSB1'] for port in ports: print "************ " + port + " ***************" serialclient = ModbusSerialClient(method='rtu', port=port, baudrate=115200) client = EPsolarTracerClient(serialclient=serialclient) client.connect() import datetime now = datetime.datetime.now() print now.year, now.month, now.day, now.hour, now.minute, now.second yearAndMonth = int(((now.year - 2000) << 8) | now.month) dayAndHour = int(((now.day) << 8) | now.hour) minuteAndSecond = int(((now.minute) << 8) | now.second) #register = registerByName("Real time clock 1") #print vars(register) addr = 0x9013 vals = [minuteAndSecond, dayAndHour, yearAndMonth]
from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers,coils from test.testdata import ModbusMockClient as ModbusClient # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) serialclient = ModbusClient() #serialclient = None client = EPsolarTracerClient(serialclient = serialclient) client.connect() response = client.read_device_info() print "Manufacturer:", repr(response.information[0]) print "Model:", repr(response.information[1]) print "Version:", repr(response.information[2]) response = client.read_input("Charging equipment rated input voltage") print str(response) for reg in registers: #print #print reg value = client.read_input(reg.name) print value #if value.value is not None:
from pyepsolartracer.registers import registers, coils # configure the client logging import logging logging.basicConfig() log = logging.getLogger() #log.setLevel(logging.DEBUG) log.setLevel(logging.WARN) #Solar-controller-ID: unitnum = 1 # choose the serial client #client = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits = 1, bytesize = 8, timeout=1) client = EPsolarTracerClient(port='/dev/ttyUSB0') client.connect() request = ReadDeviceInformationRequest(unit=unitnum) #response = client.execute(request) response = client.client.execute(request) print(repr(response.information)) for reg in registers: print() print(reg) #rr = client.read_input_registers(reg.address, 1, unit=unitnum) rr = client.client.read_input_registers(reg.address, 1, unit=unitnum) if hasattr(rr, "getRegister"): print("read_input_registers:", rr.getRegister(0)) else:
PORT_NAME = '/dev/ttyUSB0' CLIENT_ID = 'epsolar' BROKER_IP = "10.0.0.33" # configure the client logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) mclient = MQTT_Client(CLIENT_ID, BROKER_IP) with EPsolarTracerClient( port = PORT_NAME, #'default_load_state':0 ) as solar: try: while True: j = { "pv" : { 'pv-voltage':solar.read_input("Charging equipment input voltage").value, 'pv-current':solar.read_input("Charging equipment input current").value, 'pv-power':solar.read_input("Charging equipment input power").value }, "bat": { 'bat-voltage':solar.read_input("Charging equipment output voltage").value, 'bat-current':solar.read_input("Charging equipment output current").value,
from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers, coils from pymodbus.client.sync import ModbusSerialClient as ModbusClient # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits=1, bytesize=8, timeout=0.05) client = EPsolarTracerClient(serialclient=serialclient) client.connect() print client.write_output("Manual control the load", True) value = client.read_input("Manual control the load") print value client.close()
#from pymodbus.client.sync import ModbusSerialClient as ModbusClient from pyepsolartracer.client import EPsolarTracerClient from pymodbus.mei_message import * from pyepsolartracer.registers import registers,coils # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.DEBUG) serialclient = None # choose the serial client client = EPsolarTracerClient(serialclient = serialclient) client.connect() request = ReadDeviceInformationRequest(unit=1) response = client.execute(request) print repr(response.information) for reg in registers: print print reg rr = client.read_input_registers(reg.address, 1, unit=1) if hasattr(rr, "getRegister"): print "read_input_registers:", rr.getRegister(0) else: print "read_input_registers", str(rr) rr = client.read_holding_registers(reg.address, 1, unit=1)
"Discharging equipment output power", "Battery Temperature", "Generated energy today", "Consumed energy today" ] if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument("-n", "--nodename", type = str, dest = "nodename", default=socket.gethostname()) parser.add_argument("-H", "--dbhost", type = str, dest = "dbhost", default="localhost") parser.add_argument("-p", "--port", type = str, dest = "port", default = "/dev/ttyXRUSB0") args = parser.parse_args() print "# Nodename:", args.nodename client = EPsolarTracerClient(port = args.port) client.connect() response = client.read_device_info() print "# Manufacturer:", repr(response.information[0]) print "# Model:", repr(response.information[1]) print "# Version:", repr(response.information[2]) try: with database.Connection(dbhost=args.dbhost) as cur: while True: values = [ client.read_input(x).value for x in registers ] now_str = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") piv = values[0] cur.execute("replace into data(hostname,t,piv,pia,piw,pov,poa,loadw,temp,kwh,lkwh) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", (args.nodename,now_str, piv,values[1],values[2],values[3],values[4],values[5],values[6],values[7],values[8]))
#!/usr/bin/env python # -*- coding: iso-8859-15 -*- # This reads severals values from the EPSolar-charging-controller via RS485-USB-Cable (correct kernel-driver-module needed) from pyepsolartracer.client import EPsolarTracerClient # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) client = EPsolarTracerClient() client.connect() response = client.read_device_info() print("Manufacturer:", repr(response.information[0])) print("Model:", repr(response.information[1])) print("Version:", repr(response.information[2])) print("Aktuelle Werte:") print("") print("PV-Generator:") print(client.read_input( "Charging equipment input voltage")) # Momentary Voltage of PV-Generator print(client.read_input( "Charging equipment input current")) # Momentary Current of PV-Generator print(client.read_input( "Charging equipment input power")) # Momentary Power of PV-Generator
port=int(os.environ.get('MQTT_PORT', config['MQTT'].get('port', '1883'))), keepalive=config['MQTT'].getint('keepalive', 60)) except: print_line('MQTT connection error. Please check your settings in the configuration file "config.ini"', error=True, sd_notify=True) sys.exit(1) else: mqtt_client.loop_start() sleep(1.0) # some slack to establish the connection # choose the serial client serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits = 1, bytesize = 8, timeout=1) #serialclient = None # choose the serial client client = EPsolarTracerClient(serialclient = serialclient) client.connect() response = client.read_device_info() announce = dict() announce['Manufacturer'] = str(response.information[0]) announce['Model'] = str(response.information[1]) announce['Version'] = str(response.information[2]) mqtt_client.publish('{}/$announce'.format(base_topic), json.dumps(announce), retain=True) print_line("Manufacturer:" + repr(response.information[0])) print_line("Model:" + repr(response.information[1])) print_line("Version:" + repr(response.information[2])) sd_notifier.notify('READY=1') while True:
myconf = pyepsolartracer.config.Config(DEFAULTCONFIG) if not myconf.hasallsqlvalues: print( "Not all Database-value-definitions found. Please check your config-file. Aborting" ) exit(2) # Print current config myconf.printconfig() mydb = pyepsolartracer.database_mysql.db_mysql(myconf.mysql.server, myconf.mysql.user, myconf.mysql.password, myconf.mysql.db) client = EPsolarTracerClient() client.connect() data = [] # New List for Data response = client.read_device_info() data.append({ 'con-manufacturer': repr(response.information[0]), 'con-model': repr(response.information[1]), 'con-version': repr(response.information[2]), 'con-temp-controller': client.read_input("Temperature inside equipment").value,
parser = argparse.ArgumentParser() parser.add_argument("-t", "--battery-type", help="Battery type(1=Sealed,2=Gel,3=Flooded)", type=int, dest="battery_type", default=None) parser.add_argument("-c", "--battery-capacity", help="Battery capacity in Ah", type=int, dest="battery_capacity", default=None) args = parser.parse_args() client = EPsolarTracerClient(port="/dev/ttyXRUSB0") if args.battery_type is None: print "Battery type: %s" % ( battery_types[client.read_input(REG_BATTERY_TYPE).value]) else: if args.battery_type in (1, 2, 3): client.write_output(REG_BATTERY_TYPE, args.battery_type) print "Battery type set to %s" % (battery_types[args.battery_type]) else: print "Invalid battery type" if args.battery_capacity is None: print "Battery capacity: %dAh" % ( client.read_input(REG_BATTERY_CAPACITY).value) else:
from pyepsolartracer.client import EPsolarTracerClient from pyepsolartracer.registers import registers, coils from pymodbus.client.sync import ModbusSerialClient as ModbusClient # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) serialclient = ModbusClient(method='rtu', port='/dev/ttyXRUSB0', baudrate=115200, stopbits=1, bytesize=8, timeout=0.05) client = EPsolarTracerClient(serialclient=serialclient) client.connect() value = client.read_input("Manual control the load") print bool(int(value)) client.close()
def create_client(serial, port): logger.info('create_client() port: {0}'.format(port)) tracer_client = EPsolarTracerClient(serialclient=serial, port=port) return tracer_client
#!/usr/bin/env python # -*- coding: iso-8859-15 -*- # This reads severals values from the EPSolar-charging-controller via RS485-USB-Cable (correct kernel-driver-module needed) from pyepsolartracer.client import EPsolarTracerClient import json # configure the client logging import logging logging.basicConfig() log = logging.getLogger() log.setLevel(logging.INFO) client = EPsolarTracerClient(port = '/dev/ttyUSB0') if client.connect() == False: print("Error. Port not able to be opened") data = [] # New List for Data response = client.read_device_info() #data.append(["Device Info"]) # Root Layer #data[0].append( data.append( { 'con-manufacturer':repr(response.information[0]), 'con-model':repr(response.information[1]), 'con-version':repr(response.information[2]),