Example #1
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
Example #2
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
Example #3
0
    def create_client(serial, port):
        logger.info('create_client() port: {0}'.format(port))

        tracer_client = EPsolarTracerClient(serialclient=serial, port=port)
        return tracer_client
Example #4
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]
Example #5
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:
Example #6
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
Example #7
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:
Example #8
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,
Example #9
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]))