Move gen24 specific registers to own file
This commit is contained in:
parent
4a284d1341
commit
4bbb92ba29
2 changed files with 48 additions and 38 deletions
|
@ -23,30 +23,45 @@ class DataType():
|
||||||
|
|
||||||
def encode_to_buffer(self, value):
|
def encode_to_buffer(self, value):
|
||||||
encoder = BinaryPayloadBuilder(byteorder=Endian.BIG, wordorder=Endian.BIG)
|
encoder = BinaryPayloadBuilder(byteorder=Endian.BIG, wordorder=Endian.BIG)
|
||||||
|
print(type(value))
|
||||||
self._add(encoder, value)
|
self._add(encoder, value)
|
||||||
return encoder.build()
|
return encoder.build()
|
||||||
|
|
||||||
|
|
||||||
# helper function for DataType constructors
|
# helper functions for DataType constructors
|
||||||
def decode_string(decoder, value):
|
def decode_string(decoder, value):
|
||||||
return str(decoder.decode_string(16).decode('utf-8'))
|
return str(decoder.decode_string(16).decode('utf-8'))
|
||||||
|
|
||||||
|
def encode_16bit_int(encoder, value):
|
||||||
|
return encoder.add_16bit_int(int(value))
|
||||||
|
|
||||||
# The various data types that the fronius inverters use
|
# The various data types that the fronius inverters use
|
||||||
string8 = DataType(4, decode_string, BinaryPayloadBuilder.add_string)
|
string8 = DataType(4, decode_string, BinaryPayloadBuilder.add_string)
|
||||||
string16 = DataType(8, decode_string, BinaryPayloadBuilder.add_string)
|
string16 = DataType(8, decode_string, BinaryPayloadBuilder.add_string)
|
||||||
string32 = DataType(16, decode_string, BinaryPayloadBuilder.add_string)
|
string32 = DataType(16, decode_string, BinaryPayloadBuilder.add_string)
|
||||||
int16 = DataType(1,BinaryPayloadDecoder.decode_16bit_int, BinaryPayloadBuilder.add_16bit_int)
|
int16 = DataType(1, BinaryPayloadDecoder.decode_16bit_int, encode_16bit_int)
|
||||||
uint16 = DataType(1,BinaryPayloadDecoder.decode_16bit_uint, BinaryPayloadBuilder.add_16bit_uint)
|
uint16 = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int)
|
||||||
int32 = DataType(2,BinaryPayloadDecoder.decode_32bit_int, BinaryPayloadBuilder.add_32bit_int)
|
int32 = DataType(2, BinaryPayloadDecoder.decode_32bit_int, BinaryPayloadBuilder.add_32bit_int)
|
||||||
uint32 = DataType(2,BinaryPayloadDecoder.decode_32bit_uint, BinaryPayloadBuilder.add_32bit_uint)
|
uint32 = DataType(2, BinaryPayloadDecoder.decode_32bit_uint, BinaryPayloadBuilder.add_32bit_uint)
|
||||||
float32 = DataType(2,BinaryPayloadDecoder.decode_32bit_float, BinaryPayloadBuilder.add_32bit_float)
|
float32 = DataType(2, BinaryPayloadDecoder.decode_32bit_float, BinaryPayloadBuilder.add_32bit_float)
|
||||||
uint64 = DataType(4,BinaryPayloadDecoder.decode_64bit_uint, BinaryPayloadBuilder.add_64bit_uint)
|
uint64 = DataType(4, BinaryPayloadDecoder.decode_64bit_uint, BinaryPayloadBuilder.add_64bit_uint)
|
||||||
|
|
||||||
|
|
||||||
class registerReadError(Exception):
|
class registerReadError(Exception):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Finally our fronius modbus register object.
|
# Fronius modbus register object.
|
||||||
|
#
|
||||||
|
# the 'spreadsheet' refers to the various spreadsheets in the 'gen24-modbus-api-external-docs.zip'
|
||||||
|
# file, available by going to https://www.fronius.com/en/photovoltaics/downloads and searching for
|
||||||
|
# 'gen24 modbus'
|
||||||
|
#
|
||||||
|
|
||||||
|
# Constructor parameters:
|
||||||
|
# address: address as specified in the spreadsheet
|
||||||
|
# datatype: One of the above datatypes, as specified for the address in the spreadsheet
|
||||||
|
# unit: the modbus unit, either '1' for the fronius inverter or 200 for the attached fronius smart meter.
|
||||||
|
# description: free text to describe the register's purpose
|
||||||
class FroniusReg:
|
class FroniusReg:
|
||||||
def __init__(self, address, datatype, unit, description):
|
def __init__(self, address, datatype, unit, description):
|
||||||
self.address = address
|
self.address = address
|
||||||
|
@ -89,33 +104,3 @@ class ScaledFroniusReg:
|
||||||
def setValue(self, modbusClient, value):
|
def setValue(self, modbusClient, value):
|
||||||
return self.valueReg.setValue(modbusClient, value / 10 ** self.scaleReg.getValue(modbusClient))
|
return self.valueReg.setValue(modbusClient, value / 10 ** self.scaleReg.getValue(modbusClient))
|
||||||
|
|
||||||
|
|
||||||
MaxChaRte = FroniusReg(40155, uint16, 1, "Max Charge Rate")
|
|
||||||
MaxChaRte_SF = FroniusReg(40156, int16, 1, "Max Charge Rate SF")
|
|
||||||
|
|
||||||
wChaGra = FroniusReg(40357, uint16, 1, "Max Charge Power")
|
|
||||||
storageStateOfCharge = FroniusReg(40362, uint16, 1, "Storage State of Charge")
|
|
||||||
storageStateOfChargeSF = FroniusReg(40376, int16, 1, "Storage State of Charge Scaling Factor")
|
|
||||||
scaledStateOfCharge = ScaledFroniusReg(storageStateOfCharge, storageStateOfChargeSF)
|
|
||||||
|
|
||||||
OutWRte = FroniusReg(40366, int16, 1, "DischargeRate")
|
|
||||||
InWRte = FroniusReg(40367, int16, 1, "ChargeRate")
|
|
||||||
WRteSF = FroniusReg(40379, int16, 1, "ScalingFactor for storage Watts")
|
|
||||||
|
|
||||||
StorCtl_Mode = FroniusReg(40359, uint16, 1, "Hold/Charge/Discharge enable")
|
|
||||||
MinRsvPct = FroniusReg(40361, uint16, 1, "Reserve Percentage")
|
|
||||||
|
|
||||||
InOutWRte_RvrtTms = FroniusReg(40369, uint16, 1, "Revert timer for charge settings")
|
|
||||||
|
|
||||||
ChaGriSet = FroniusReg(40371, uint16, 1, "enum16, 0 = PV only, 1 = Grid enabled")
|
|
||||||
WChaDisChaGra_SF = FroniusReg(40373, int16, 1, "Charge/Discharge Power SF")
|
|
||||||
|
|
||||||
MinRsvPct_SF = FroniusReg(40375, int16, 1, "Reserve Percentage Scaling")
|
|
||||||
|
|
||||||
scaledOutWRte = ScaledFroniusReg(OutWRte, WRteSF)
|
|
||||||
scaledInWRte = ScaledFroniusReg(InWRte, WRteSF)
|
|
||||||
scaledReserve = ScaledFroniusReg(MinRsvPct, MinRsvPct_SF)
|
|
||||||
|
|
||||||
scaledMaxChaRte = ScaledFroniusReg(MaxChaRte, MaxChaRte_SF)
|
|
||||||
|
|
||||||
scaledMaxWChaGra = ScaledFroniusReg(wChaGra, WChaDisChaGra_SF)
|
|
||||||
|
|
25
src/pyfroniusreg/gen24_registers.py
Normal file
25
src/pyfroniusreg/gen24_registers.py
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
from pyfroniusreg import froniusreg
|
||||||
|
|
||||||
|
MaxChaRte = froniusreg.FroniusReg(40155, froniusreg.uint16, 1, "Max Charge Rate")
|
||||||
|
MaxChaRte_SF = froniusreg.FroniusReg(40156, froniusreg.int16, 1, "Max Charge Rate SF")
|
||||||
|
|
||||||
|
wChaGra = froniusreg.FroniusReg(40357, froniusreg.uint16, 1, "Max Charge Power")
|
||||||
|
storageStateOfCharge = froniusreg.FroniusReg(40362, froniusreg.uint16, 1, "Storage State of Charge")
|
||||||
|
storageStateOfChargeSF = froniusreg.FroniusReg(40376, froniusreg.int16, 1, "Storage State of Charge Scaling Factor")
|
||||||
|
scaledStateOfCharge = froniusreg.ScaledFroniusReg(storageStateOfCharge, storageStateOfChargeSF)
|
||||||
|
|
||||||
|
OutWRte = froniusreg.FroniusReg(40366, froniusreg.int16, 1, "DischargeRate")
|
||||||
|
InWRte = froniusreg.FroniusReg(40367, froniusreg.int16, 1, "ChargeRate")
|
||||||
|
WRteSF = froniusreg.FroniusReg(40379, froniusreg.int16, 1, "ScalingFactor for storage Watts")
|
||||||
|
StorCtl_Mode = froniusreg.FroniusReg(40359, froniusreg.uint16, 1, "Hold/Charge/Discharge limit")
|
||||||
|
MinRsvPct = froniusreg.FroniusReg(40361, froniusreg.uint16, 1, "Reserve Percentage")
|
||||||
|
InOutWRte_RvrtTms = froniusreg.FroniusReg(40369, froniusreg.uint16, 1, "Revert timer for charge settings")
|
||||||
|
ChaGriSet = froniusreg.FroniusReg(40371, froniusreg.uint16, 1, "enum16, 0 = PV only, 1 = Grid enabled")
|
||||||
|
WChaDisChaGra_SF = froniusreg.FroniusReg(40373, froniusreg.int16, 1, "Charge/Discharge Power SF")
|
||||||
|
MinRsvPct_SF = froniusreg.FroniusReg(40375, froniusreg.int16, 1, "Reserve Percentage Scaling")
|
||||||
|
|
||||||
|
scaledOutWRte = froniusreg.ScaledFroniusReg(OutWRte, WRteSF)
|
||||||
|
scaledInWRte = froniusreg.ScaledFroniusReg(InWRte, WRteSF)
|
||||||
|
scaledReserve = froniusreg.ScaledFroniusReg(MinRsvPct, MinRsvPct_SF)
|
||||||
|
scaledMaxChaRte = froniusreg.ScaledFroniusReg(MaxChaRte, MaxChaRte_SF)
|
||||||
|
scaledMaxWChaGra = froniusreg.ScaledFroniusReg(wChaGra, WChaDisChaGra_SF)
|
Loading…
Reference in a new issue