Exemple #1
0
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
Exemple #2
0
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) + ":" +
Exemple #4
0
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:
Exemple #5
0
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)
Exemple #6
0
# 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
Exemple #7
0
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()
Exemple #8
0
#
# 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]
Exemple #9
0
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:
Exemple #10
0
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:
Exemple #11
0
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,
Exemple #12
0
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()
Exemple #13
0
#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)
Exemple #14
0
    "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]))
Exemple #15
0
#!/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
Exemple #16
0
                        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:
Exemple #17
0
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,
Exemple #18
0
    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:
Exemple #19
0
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()
Exemple #20
0
    def create_client(serial, port):
        logger.info('create_client() port: {0}'.format(port))

        tracer_client = EPsolarTracerClient(serialclient=serial, port=port)
        return tracer_client
Exemple #21
0
#!/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]),