diff --git a/src/pyfroniusreg/froniusreg.py b/src/pyfroniusreg/froniusreg.py index d9ee950..ee1e9f5 100644 --- a/src/pyfroniusreg/froniusreg.py +++ b/src/pyfroniusreg/froniusreg.py @@ -32,6 +32,12 @@ class DataType: # helper functions for DataType constructors +def decode_string4(decoder) -> str: + try: + return str(decoder.decode_string(4).decode("utf-8")) + except UnicodeDecodeError: + return decoder.decode_string(4) + def decode_string8(decoder) -> str: try: return str(decoder.decode_string(8).decode("utf-8")) @@ -46,29 +52,36 @@ def decode_string16(decoder) -> str: return decoder.decode_string(16) -def decode_string32(decoder) -> str: - try: - return str(decoder.decode_string(32).decode("utf-8")) - except UnicodeDecodeError: - return decoder.decode_string(32) - - def encode_16bit_int(encoder, value) -> int: return encoder.add_16bit_int(int(value)) # The various data types that the fronius inverters use -string8 = DataType(4, decode_string8, BinaryPayloadBuilder.add_string) -string16 = DataType(8, decode_string16, BinaryPayloadBuilder.add_string) -string32 = DataType(16, decode_string32, BinaryPayloadBuilder.add_string) +string4 = DataType(4, decode_string4, BinaryPayloadBuilder.add_string) +string8 = DataType(8, decode_string8, BinaryPayloadBuilder.add_string) +string16 = DataType(16, decode_string16, BinaryPayloadBuilder.add_string) + int16 = DataType(1, BinaryPayloadDecoder.decode_16bit_int, encode_16bit_int) uint16 = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int) +bitfield16 = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int) +sunssf = DataType(1, BinaryPayloadDecoder.decode_16bit_int, encode_16bit_int) +pad = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int) +enum16 = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int) +count = DataType(1, BinaryPayloadDecoder.decode_16bit_uint, encode_16bit_int) + int32 = DataType(2, BinaryPayloadDecoder.decode_32bit_int, BinaryPayloadBuilder.add_32bit_int) +acc32 = DataType(2, BinaryPayloadDecoder.decode_32bit_int, BinaryPayloadBuilder.add_32bit_int) + uint32 = DataType(2, BinaryPayloadDecoder.decode_32bit_uint, BinaryPayloadBuilder.add_32bit_uint) float32 = DataType( 2, BinaryPayloadDecoder.decode_32bit_float, BinaryPayloadBuilder.add_32bit_float ) +bitfield32 = DataType( + 2, BinaryPayloadDecoder.decode_32bit_float, BinaryPayloadBuilder.add_32bit_float +) + uint64 = DataType(4, BinaryPayloadDecoder.decode_64bit_uint, BinaryPayloadBuilder.add_64bit_uint) +acc64 = DataType(4, BinaryPayloadDecoder.decode_64bit_uint, BinaryPayloadBuilder.add_64bit_uint) class RegisterReadError(Exception): diff --git a/src/pyfroniusreg/gen24_primo_symo_inverter_register_map_float_storage.py b/src/pyfroniusreg/gen24_primo_symo_inverter_register_map_float_storage.py new file mode 100644 index 0000000..0831653 --- /dev/null +++ b/src/pyfroniusreg/gen24_primo_symo_inverter_register_map_float_storage.py @@ -0,0 +1,318 @@ +from pyfroniusreg import froniusreg + +SID = froniusreg.FroniusReg(40001, froniusreg.uint32, 1, """Well-known value. Uniquely identifies this as a SunSpec Modbus Map""") +ID = froniusreg.FroniusReg(40003, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model common (1)""") +L = froniusreg.FroniusReg(40004, froniusreg.uint16, 1, """Length of sunspec model common (1)""") +Mn = froniusreg.FroniusReg(40005, froniusreg.string16, 1, """Manufacturer""") +Md = froniusreg.FroniusReg(40021, froniusreg.string16, 1, """Device""") +Opt = froniusreg.FroniusReg(40037, froniusreg.string8, 1, """Options""") +Vr = froniusreg.FroniusReg(40045, froniusreg.string8, 1, """SW version of inverter""") +SN = froniusreg.FroniusReg(40053, froniusreg.string16, 1, """Serialnumber of the inverter""") +DA = froniusreg.FroniusReg(40069, froniusreg.uint16, 1, """Modbus Device Address""") +ID = froniusreg.FroniusReg(40070, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model inverter (11x)""") +L = froniusreg.FroniusReg(40071, froniusreg.uint16, 1, """Length of sunspec model inverter (11x)""") +A = froniusreg.FroniusReg(40072, froniusreg.float32, 1, """AC Current""") +AphA = froniusreg.FroniusReg(40074, froniusreg.float32, 1, """Phase A Current""") +AphB = froniusreg.FroniusReg(40076, froniusreg.float32, 1, """Phase B Current""") +AphC = froniusreg.FroniusReg(40078, froniusreg.float32, 1, """Phase C Current""") +PPVphAB = froniusreg.FroniusReg(40080, froniusreg.float32, 1, """Phase Voltage AB""") +PPVphBC = froniusreg.FroniusReg(40082, froniusreg.float32, 1, """Phase Voltage BC""") +PPVphCA = froniusreg.FroniusReg(40084, froniusreg.float32, 1, """Phase Voltage CA""") +PhVphA = froniusreg.FroniusReg(40086, froniusreg.float32, 1, """Phase Voltage AN""") +PhVphB = froniusreg.FroniusReg(40088, froniusreg.float32, 1, """Phase Voltage BN""") +PhVphC = froniusreg.FroniusReg(40090, froniusreg.float32, 1, """Phase Voltage CN""") +W = froniusreg.FroniusReg(40092, froniusreg.float32, 1, """AC Power""") +Hz = froniusreg.FroniusReg(40094, froniusreg.float32, 1, """Line Frequency""") +VA = froniusreg.FroniusReg(40096, froniusreg.float32, 1, """AC Apparent Power""") +VAr = froniusreg.FroniusReg(40098, froniusreg.float32, 1, """AC Reactive Power""") +PF = froniusreg.FroniusReg(40100, froniusreg.float32, 1, """AC Power Factor""") +WH = froniusreg.FroniusReg(40102, froniusreg.float32, 1, """AC Energy""") +DCA = froniusreg.FroniusReg(40104, froniusreg.float32, 1, """DC Current""") +DCV = froniusreg.FroniusReg(40106, froniusreg.float32, 1, """DC Voltage""") +DCW = froniusreg.FroniusReg(40108, froniusreg.float32, 1, """DC Power""") +TmpCab = froniusreg.FroniusReg(40110, froniusreg.float32, 1, """Cabinet Temperature""") +TmpSnk = froniusreg.FroniusReg(40112, froniusreg.float32, 1, """Heat Sink Temperature""") +TmpTrns = froniusreg.FroniusReg(40114, froniusreg.float32, 1, """Transformer Temperature""") +TmpOt = froniusreg.FroniusReg(40116, froniusreg.float32, 1, """Other Temperature""") +St = froniusreg.FroniusReg(40118, froniusreg.enum16, 1, """Enumerated value. Operating state""") +StVnd = froniusreg.FroniusReg(40119, froniusreg.enum16, 1, """Vendor specific operating state code""") +Evt1 = froniusreg.FroniusReg(40120, froniusreg.bitfield32, 1, """Bitmask value. Event fields""") +Evt2 = froniusreg.FroniusReg(40122, froniusreg.bitfield32, 1, """Reserved for future use""") +EvtVnd1 = froniusreg.FroniusReg(40124, froniusreg.bitfield32, 1, """Vendor defined events""") +EvtVnd2 = froniusreg.FroniusReg(40126, froniusreg.bitfield32, 1, """Vendor defined events""") +EvtVnd3 = froniusreg.FroniusReg(40128, froniusreg.bitfield32, 1, """Vendor defined events""") +EvtVnd4 = froniusreg.FroniusReg(40130, froniusreg.bitfield32, 1, """Vendor defined events""") +ID = froniusreg.FroniusReg(40132, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model nameplate (120)""") +L = froniusreg.FroniusReg(40133, froniusreg.uint16, 1, """Length of sunspec model nameplate (120)""") +DERTyp = froniusreg.FroniusReg(40134, froniusreg.enum16, 1, """Type of DER device. Default value is 4 to indicate PV device.""") +WRtg = froniusreg.FroniusReg(40135, froniusreg.uint16, 1, """Continuous power output capability of the inverter.""") +WRtg_SF = froniusreg.FroniusReg(40136, froniusreg.sunssf, 1, """Scale factor""") +VARtg = froniusreg.FroniusReg(40137, froniusreg.uint16, 1, """Continuous Volt-Ampere capability of the inverter.""") +VARtg_SF = froniusreg.FroniusReg(40138, froniusreg.sunssf, 1, """Scale factor""") +VArRtgQ1 = froniusreg.FroniusReg(40139, froniusreg.int16, 1, """Continuous VAR capability of the inverter in quadrant 1.""") +VArRtgQ2 = froniusreg.FroniusReg(40140, froniusreg.int16, 1, """Continuous VAR capability of the inverter in quadrant 2.""") +VArRtgQ3 = froniusreg.FroniusReg(40141, froniusreg.int16, 1, """Continuous VAR capability of the inverter in quadrant 3.""") +VArRtgQ4 = froniusreg.FroniusReg(40142, froniusreg.int16, 1, """Continuous VAR capability of the inverter in quadrant 4.""") +VArRtg_SF = froniusreg.FroniusReg(40143, froniusreg.sunssf, 1, """Scale factor""") +ARtg = froniusreg.FroniusReg(40144, froniusreg.uint16, 1, """Maximum RMS AC current level capability of the inverter.""") +ARtg_SF = froniusreg.FroniusReg(40145, froniusreg.sunssf, 1, """Scale factor""") +PFRtgQ1 = froniusreg.FroniusReg(40146, froniusreg.int16, 1, """Minimum power factor capability of the inverter in quadrant 1.""") +PFRtgQ2 = froniusreg.FroniusReg(40147, froniusreg.int16, 1, """Minimum power factor capability of the inverter in quadrant 2.""") +PFRtgQ3 = froniusreg.FroniusReg(40148, froniusreg.int16, 1, """Minimum power factor capability of the inverter in quadrant 3.""") +PFRtgQ4 = froniusreg.FroniusReg(40149, froniusreg.int16, 1, """Minimum power factor capability of the inverter in quadrant 4.""") +PFRtg_SF = froniusreg.FroniusReg(40150, froniusreg.sunssf, 1, """Scale factor""") +WHRtg = froniusreg.FroniusReg(40151, froniusreg.uint16, 1, """Nominal energy rating of storage device.""") +WHRtg_SF = froniusreg.FroniusReg(40152, froniusreg.sunssf, 1, """Scale factor""") +AhrRtg = froniusreg.FroniusReg(40153, froniusreg.uint16, 1, """The usable capacity of the battery. Maximum charge minus minimum charge from a technology capability perspective (Amp-hour capacity rating).""") +AhrRtg_SF = froniusreg.FroniusReg(40154, froniusreg.sunssf, 1, """Scale factor for amp-hour rating.""") +MaxChaRte = froniusreg.FroniusReg(40155, froniusreg.uint16, 1, """Maximum rate of energy transfer into the storage device.""") +MaxChaRte_SF = froniusreg.FroniusReg(40156, froniusreg.sunssf, 1, """Scale factor""") +MaxDisChaRte = froniusreg.FroniusReg(40157, froniusreg.uint16, 1, """Maximum rate of energy transfer out of the storage device.""") +MaxDisChaRte_SF = froniusreg.FroniusReg(40158, froniusreg.sunssf, 1, """Scale factor""") +Pad = froniusreg.FroniusReg(40159, froniusreg.pad, 1, """Pad register.""") +ID = froniusreg.FroniusReg(40160, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model settings (121)""") +L = froniusreg.FroniusReg(40161, froniusreg.uint16, 1, """Length of sunspec model settings (121)""") +WMax = froniusreg.FroniusReg(40162, froniusreg.uint16, 1, """Setting for maximum power output. Default to WRtg.""") +VRef = froniusreg.FroniusReg(40163, froniusreg.uint16, 1, """Voltage at the PCC.""") +VRefOfs = froniusreg.FroniusReg(40164, froniusreg.int16, 1, """Offset from PCC to inverter.""") +VMax = froniusreg.FroniusReg(40165, froniusreg.uint16, 1, """Setpoint for maximum voltage.""") +VMin = froniusreg.FroniusReg(40166, froniusreg.uint16, 1, """Setpoint for minimum voltage.""") +VAMax = froniusreg.FroniusReg(40167, froniusreg.uint16, 1, """Setpoint for maximum apparent power. Default to VARtg.""") +VArMaxQ1 = froniusreg.FroniusReg(40168, froniusreg.int16, 1, """Setting for maximum reactive power in quadrant 1. Default to VArRtgQ1.""") +VArMaxQ2 = froniusreg.FroniusReg(40169, froniusreg.int16, 1, """Setting for maximum reactive power in quadrant 2. Default to VArRtgQ2.""") +VArMaxQ3 = froniusreg.FroniusReg(40170, froniusreg.int16, 1, """Setting for maximum reactive power in quadrant 3. Default to VArRtgQ3.""") +VArMaxQ4 = froniusreg.FroniusReg(40171, froniusreg.int16, 1, """Setting for maximum reactive power in quadrant 4. Default to VArRtgQ4.""") +WGra = froniusreg.FroniusReg(40172, froniusreg.uint16, 1, """Default ramp rate of change of active power due to command or internal action.""") +PFMinQ1 = froniusreg.FroniusReg(40173, froniusreg.int16, 1, """Setpoint for minimum power factor value in quadrant 1. Default to PFRtgQ1.""") +PFMinQ2 = froniusreg.FroniusReg(40174, froniusreg.int16, 1, """Setpoint for minimum power factor value in quadrant 2. Default to PFRtgQ2.""") +PFMinQ3 = froniusreg.FroniusReg(40175, froniusreg.int16, 1, """Setpoint for minimum power factor value in quadrant 3. Default to PFRtgQ3.""") +PFMinQ4 = froniusreg.FroniusReg(40176, froniusreg.int16, 1, """Setpoint for minimum power factor value in quadrant 4. Default to PFRtgQ4.""") +VArAct = froniusreg.FroniusReg(40177, froniusreg.enum16, 1, """VAR action on change between charging and discharging: 1=switch 2=maintain VAR characterization.""") +ClcTotVA = froniusreg.FroniusReg(40178, froniusreg.enum16, 1, """Calculation method for total apparent power. 1=vector 2=arithmetic.""") +MaxRmpRte = froniusreg.FroniusReg(40179, froniusreg.uint16, 1, """Setpoint for maximum ramp rate as percentage of nominal maximum ramp rate. This setting will limit the rate that watts delivery to the grid can increase or decrease in response to intermittent PV generation.""") +ECPNomHz = froniusreg.FroniusReg(40180, froniusreg.uint16, 1, """Setpoint for nominal frequency at the ECP.""") +ConnPh = froniusreg.FroniusReg(40181, froniusreg.enum16, 1, """Identity of connected phase for single phase inverters. A=1 B=2 C=3.""") +WMax_SF = froniusreg.FroniusReg(40182, froniusreg.sunssf, 1, """Scale factor for real power.""") +VRef_SF = froniusreg.FroniusReg(40183, froniusreg.sunssf, 1, """Scale factor for voltage at the PCC.""") +VRefOfs_SF = froniusreg.FroniusReg(40184, froniusreg.sunssf, 1, """Scale factor for offset voltage.""") +VMinMax_SF = froniusreg.FroniusReg(40185, froniusreg.sunssf, 1, """Scale factor for min/max voltages.""") +VAMax_SF = froniusreg.FroniusReg(40186, froniusreg.sunssf, 1, """Scale factor for apparent power.""") +VArMax_SF = froniusreg.FroniusReg(40187, froniusreg.sunssf, 1, """Scale factor for reactive power.""") +WGra_SF = froniusreg.FroniusReg(40188, froniusreg.sunssf, 1, """Scale factor for default ramp rate.""") +PFMin_SF = froniusreg.FroniusReg(40189, froniusreg.sunssf, 1, """Scale factor for minimum power factor.""") +MaxRmpRte_SF = froniusreg.FroniusReg(40190, froniusreg.sunssf, 1, """Scale factor for maximum ramp percentage.""") +ECPNomHz_SF = froniusreg.FroniusReg(40191, froniusreg.sunssf, 1, """Scale factor for nominal frequency.""") +ID = froniusreg.FroniusReg(40192, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model status (122)""") +L = froniusreg.FroniusReg(40193, froniusreg.uint16, 1, """Length of sunspec model status (122)""") +PVConn = froniusreg.FroniusReg(40194, froniusreg.bitfield16, 1, """PV inverter present/available status. Enumerated value.""") +StorConn = froniusreg.FroniusReg(40195, froniusreg.bitfield16, 1, """Storage inverter present/available status. Enumerated value.""") +ECPConn = froniusreg.FroniusReg(40196, froniusreg.bitfield16, 1, """ECP connection status: disconnected=0 connected=1.""") +ActWh = froniusreg.FroniusReg(40197, froniusreg.acc64, 1, """AC lifetime active (real) energy output.""") +ActVAh = froniusreg.FroniusReg(40201, froniusreg.acc64, 1, """AC lifetime apparent energy output.""") +ActVArhQ1 = froniusreg.FroniusReg(40205, froniusreg.acc64, 1, """AC lifetime reactive energy output in quadrant 1.""") +ActVArhQ2 = froniusreg.FroniusReg(40209, froniusreg.acc64, 1, """AC lifetime reactive energy output in quadrant 2.""") +ActVArhQ3 = froniusreg.FroniusReg(40213, froniusreg.acc64, 1, """AC lifetime negative energy output in quadrant 3.""") +ActVArhQ4 = froniusreg.FroniusReg(40217, froniusreg.acc64, 1, """AC lifetime reactive energy output in quadrant 4.""") +VArAval = froniusreg.FroniusReg(40221, froniusreg.int16, 1, """Amount of VARs available without impacting watts output.""") +VArAval_SF = froniusreg.FroniusReg(40222, froniusreg.sunssf, 1, """Scale factor for available VARs.""") +WAval = froniusreg.FroniusReg(40223, froniusreg.uint16, 1, """Amount of Watts available.""") +WAval_SF = froniusreg.FroniusReg(40224, froniusreg.sunssf, 1, """Scale factor for available Watts.""") +StSetLimMsk = froniusreg.FroniusReg(40225, froniusreg.bitfield32, 1, """Bit Mask indicating setpoint limit(s) reached.""") +StActCtl = froniusreg.FroniusReg(40227, froniusreg.bitfield32, 1, """Bit Mask indicating which inverter controls are currently active.""") +TmSrc = froniusreg.FroniusReg(40229, froniusreg.string4, 1, """Source of time synchronization.""") +Tms = froniusreg.FroniusReg(40233, froniusreg.uint32, 1, """Seconds since 01-01-2000 00:00 UTC""") +RtSt = froniusreg.FroniusReg(40235, froniusreg.bitfield16, 1, """Bit Mask indicating active ride-through status.""") +Ris = froniusreg.FroniusReg(40236, froniusreg.uint16, 1, """Isolation resistance.""") +Ris_SF = froniusreg.FroniusReg(40237, froniusreg.sunssf, 1, """Scale factor for isolation resistance.""") +ID = froniusreg.FroniusReg(40238, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model controls (123)""") +L = froniusreg.FroniusReg(40239, froniusreg.uint16, 1, """Length of sunspec model controls (123)""") +Conn_WinTms = froniusreg.FroniusReg(40240, froniusreg.uint16, 1, """Time window for connect/disconnect.""") +Conn_RvrtTms = froniusreg.FroniusReg(40241, froniusreg.uint16, 1, """Timeout period for connect/disconnect.""") +Conn = froniusreg.FroniusReg(40242, froniusreg.enum16, 1, """Enumerated valued. Connection control.""") +WMaxLimPct = froniusreg.FroniusReg(40243, froniusreg.uint16, 1, """Set power output to specified level.""") +WMaxLimPct_WinTms = froniusreg.FroniusReg(40244, froniusreg.uint16, 1, """Time window for power limit change.""") +WMaxLimPct_RvrtTms = froniusreg.FroniusReg(40245, froniusreg.uint16, 1, """Timeout period for power limit.""") +WMaxLimPct_RmpTms = froniusreg.FroniusReg(40246, froniusreg.uint16, 1, """Ramp time for moving from current setpoint to new setpoint.""") +WMaxLim_Ena = froniusreg.FroniusReg(40247, froniusreg.enum16, 1, """Enumerated valued. Throttle enable/disable control.""") +OutPFSet = froniusreg.FroniusReg(40248, froniusreg.int16, 1, """Set power factor to specific value - cosine of angle.""") +OutPFSet_WinTms = froniusreg.FroniusReg(40249, froniusreg.uint16, 1, """Time window for power factor change.""") +OutPFSet_RvrtTms = froniusreg.FroniusReg(40250, froniusreg.uint16, 1, """Timeout period for power factor.""") +OutPFSet_RmpTms = froniusreg.FroniusReg(40251, froniusreg.uint16, 1, """Ramp time for moving from current setpoint to new setpoint.""") +OutPFSet_Ena = froniusreg.FroniusReg(40252, froniusreg.enum16, 1, """Enumerated valued. Fixed power factor enable/disable control.""") +VArWMaxPct = froniusreg.FroniusReg(40253, froniusreg.int16, 1, """Reactive power in percent of WMax.""") +VArMaxPct = froniusreg.FroniusReg(40254, froniusreg.int16, 1, """Reactive power in percent of VArMax.""") +VArAvalPct = froniusreg.FroniusReg(40255, froniusreg.int16, 1, """Reactive power in percent of VArAval.""") +VArPct_WinTms = froniusreg.FroniusReg(40256, froniusreg.uint16, 1, """Time window for VAR limit change.""") +VArPct_RvrtTms = froniusreg.FroniusReg(40257, froniusreg.uint16, 1, """Timeout period for VAR limit.""") +VArPct_RmpTms = froniusreg.FroniusReg(40258, froniusreg.uint16, 1, """Ramp time for moving from current setpoint to new setpoint.""") +VArPct_Mod = froniusreg.FroniusReg(40259, froniusreg.enum16, 1, """Enumerated value. VAR percent limit mode.""") +VArPct_Ena = froniusreg.FroniusReg(40260, froniusreg.enum16, 1, """Enumerated valued. Percent limit VAr enable/disable control.""") +WMaxLimPct_SF = froniusreg.FroniusReg(40261, froniusreg.sunssf, 1, """Scale factor for power output percent.""") +OutPFSet_SF = froniusreg.FroniusReg(40262, froniusreg.sunssf, 1, """Scale factor for power factor.""") +VArPct_SF = froniusreg.FroniusReg(40263, froniusreg.sunssf, 1, """Scale factor for reactive power percent.""") +ID = froniusreg.FroniusReg(40264, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model mppt (160)""") +L = froniusreg.FroniusReg(40265, froniusreg.uint16, 1, """Length of sunspec model mppt (160)""") +DCA_SF = froniusreg.FroniusReg(40266, froniusreg.sunssf, 1, """Current Scale Factor""") +DCV_SF = froniusreg.FroniusReg(40267, froniusreg.sunssf, 1, """Voltage Scale Factor""") +DCW_SF = froniusreg.FroniusReg(40268, froniusreg.sunssf, 1, """Power Scale Factor""") +DCWH_SF = froniusreg.FroniusReg(40269, froniusreg.sunssf, 1, """Energy Scale Factor""") +Evt = froniusreg.FroniusReg(40270, froniusreg.bitfield32, 1, """Global Events""") +N = froniusreg.FroniusReg(40272, froniusreg.count, 1, """Number of Modules""") +TmsPer = froniusreg.FroniusReg(40273, froniusreg.uint16, 1, """Timestamp Period""") +module_1_ID = froniusreg.FroniusReg(40274, froniusreg.uint16, 1, """Input ID""") +module_1_IDStr = froniusreg.FroniusReg(40275, froniusreg.string8, 1, """Input ID Sting""") +module_1_DCA = froniusreg.FroniusReg(40283, froniusreg.uint16, 1, """DC Current""") +module_1_DCV = froniusreg.FroniusReg(40284, froniusreg.uint16, 1, """DC Voltage""") +module_1_DCW = froniusreg.FroniusReg(40285, froniusreg.uint16, 1, """DC Power""") +module_1_DCWH = froniusreg.FroniusReg(40286, froniusreg.acc32, 1, """Lifetime Energy""") +module_1_Tms = froniusreg.FroniusReg(40288, froniusreg.uint32, 1, """Timestamp""") +module_1_Tmp = froniusreg.FroniusReg(40290, froniusreg.int16, 1, """Temperature""") +module_1_DCSt = froniusreg.FroniusReg(40291, froniusreg.enum16, 1, """Operating State""") +module_1_DCEvt = froniusreg.FroniusReg(40292, froniusreg.bitfield32, 1, """Module Events""") +module_2_ID = froniusreg.FroniusReg(40294, froniusreg.uint16, 1, """Input ID""") +module_2_IDStr = froniusreg.FroniusReg(40295, froniusreg.string8, 1, """Input ID Sting""") +module_2_DCA = froniusreg.FroniusReg(40303, froniusreg.uint16, 1, """DC Current""") +module_2_DCV = froniusreg.FroniusReg(40304, froniusreg.uint16, 1, """DC Voltage""") +module_2_DCW = froniusreg.FroniusReg(40305, froniusreg.uint16, 1, """DC Power""") +module_2_DCWH = froniusreg.FroniusReg(40306, froniusreg.acc32, 1, """Lifetime Energy""") +module_2_Tms = froniusreg.FroniusReg(40308, froniusreg.uint32, 1, """Timestamp""") +module_2_Tmp = froniusreg.FroniusReg(40310, froniusreg.int16, 1, """Temperature""") +module_2_DCSt = froniusreg.FroniusReg(40311, froniusreg.enum16, 1, """Operating State""") +module_2_DCEvt = froniusreg.FroniusReg(40312, froniusreg.bitfield32, 1, """Module Events""") +module_3_ID = froniusreg.FroniusReg(40314, froniusreg.uint16, 1, """Input ID""") +module_3_IDStr = froniusreg.FroniusReg(40315, froniusreg.string8, 1, """Input ID Sting""") +module_3_DCA = froniusreg.FroniusReg(40323, froniusreg.uint16, 1, """DC Current""") +module_3_DCV = froniusreg.FroniusReg(40324, froniusreg.uint16, 1, """DC Voltage""") +module_3_DCW = froniusreg.FroniusReg(40325, froniusreg.uint16, 1, """DC Power""") +module_3_DCWH = froniusreg.FroniusReg(40326, froniusreg.acc32, 1, """Lifetime Energy""") +module_3_Tms = froniusreg.FroniusReg(40328, froniusreg.uint32, 1, """Timestamp""") +module_3_Tmp = froniusreg.FroniusReg(40330, froniusreg.int16, 1, """Temperature""") +module_3_DCSt = froniusreg.FroniusReg(40331, froniusreg.enum16, 1, """Operating State""") +module_3_DCEvt = froniusreg.FroniusReg(40332, froniusreg.bitfield32, 1, """Module Events""") +module_4_ID = froniusreg.FroniusReg(40334, froniusreg.uint16, 1, """Input ID""") +module_4_IDStr = froniusreg.FroniusReg(40335, froniusreg.string8, 1, """Input ID Sting""") +module_4_DCA = froniusreg.FroniusReg(40343, froniusreg.uint16, 1, """DC Current""") +module_4_DCV = froniusreg.FroniusReg(40344, froniusreg.uint16, 1, """DC Voltage""") +module_4_DCW = froniusreg.FroniusReg(40345, froniusreg.uint16, 1, """DC Power""") +module_4_DCWH = froniusreg.FroniusReg(40346, froniusreg.acc32, 1, """Lifetime Energy""") +module_4_Tms = froniusreg.FroniusReg(40348, froniusreg.uint32, 1, """Timestamp""") +module_4_Tmp = froniusreg.FroniusReg(40350, froniusreg.int16, 1, """Temperature""") +module_4_DCSt = froniusreg.FroniusReg(40351, froniusreg.enum16, 1, """Operating State""") +module_4_DCEvt = froniusreg.FroniusReg(40352, froniusreg.bitfield32, 1, """Module Events""") +ID = froniusreg.FroniusReg(40354, froniusreg.uint16, 1, """Well-known value. Uniquely identifies this as a sunspec model storage (124)""") +L = froniusreg.FroniusReg(40355, froniusreg.uint16, 1, """Length of sunspec model storage (124)""") +WChaMax = froniusreg.FroniusReg(40356, froniusreg.uint16, 1, """Setpoint for maximum charge. + +Additional Fronius description: +Reference Value for maximum Charge and Discharge. +Multiply this value by InWRte to define maximum charging and OutWRte to define maximum discharging. +Every rate between this two limits is allowed. +The inverter is not fully capable of transferring power as reported by this reference value. +Note that InWRte and OutWRte can be negative to define ranges for charging and discharging only +""") +WChaGra = froniusreg.FroniusReg(40357, froniusreg.uint16, 1, """Setpoint for maximum charging rate. Default is MaxChaRte.""") +WDisChaGra = froniusreg.FroniusReg(40358, froniusreg.uint16, 1, """Setpoint for maximum discharge rate. Default is MaxDisChaRte.""") +StorCtl_Mod = froniusreg.FroniusReg(40359, froniusreg.bitfield16, 1, """Activate hold/discharge/charge storage control mode. Bitfield value. + +Additional Fronius description: +Active hold/discharge/charge storage control mode. +Set the charge field to enable charging and the discharge field to enable discharging. +""") +VAChaMax = froniusreg.FroniusReg(40360, froniusreg.uint16, 1, """Setpoint for maximum charging VA.""") +MinRsvPct = froniusreg.FroniusReg(40361, froniusreg.uint16, 1, """Setpoint for minimum reserve for storage as a percentage of the nominal maximum storage.""") +ChaState = froniusreg.FroniusReg(40362, froniusreg.uint16, 1, """Currently available energy as a percent of the capacity rating.""") +StorAval = froniusreg.FroniusReg(40363, froniusreg.uint16, 1, """State of charge (ChaState) minus storage reserve (MinRsvPct) times capacity rating (AhrRtg).""") +InBatV = froniusreg.FroniusReg(40364, froniusreg.uint16, 1, """Internal battery voltage.""") +ChaSt = froniusreg.FroniusReg(40365, froniusreg.enum16, 1, """Charge status of storage device. Enumerated value.""") +OutWRte = froniusreg.FroniusReg(40366, froniusreg.int16, 1, """Percent of max discharge rate. + +Additional Fronius description: +Defines maximum Discharge rate. If not used than the default is 100 and WChaMax defines max. Discharge rate. +See WChaMax for details +""") +InWRte = froniusreg.FroniusReg(40367, froniusreg.int16, 1, """Percent of max charging rate. + +Additional Fronius description: +Defines maximum Charge rate. If not used than the default is 100 and WChaMax defines max. Charge rate. +See WChaMax for details +""") +InOutWRte_WinTms = froniusreg.FroniusReg(40368, froniusreg.uint16, 1, """Time window for charge/discharge rate change.""") +InOutWRte_RvrtTms = froniusreg.FroniusReg(40369, froniusreg.uint16, 1, """Timeout period for charge/discharge rate.""") +InOutWRte_RmpTms = froniusreg.FroniusReg(40370, froniusreg.uint16, 1, """Ramp time for moving from current setpoint to new setpoint.""") +ChaGriSet = froniusreg.FroniusReg(40371, froniusreg.enum16, 1, """nan""") +WChaMax_SF = froniusreg.FroniusReg(40372, froniusreg.sunssf, 1, """Scale factor for maximum charge.""") +WChaDisChaGra_SF = froniusreg.FroniusReg(40373, froniusreg.sunssf, 1, """Scale factor for maximum charge and discharge rate.""") +VAChaMax_SF = froniusreg.FroniusReg(40374, froniusreg.sunssf, 1, """Scale factor for maximum charging VA.""") +MinRsvPct_SF = froniusreg.FroniusReg(40375, froniusreg.sunssf, 1, """Scale factor for minimum reserve percentage.""") +ChaState_SF = froniusreg.FroniusReg(40376, froniusreg.sunssf, 1, """Scale factor for available energy percent.""") +StorAval_SF = froniusreg.FroniusReg(40377, froniusreg.sunssf, 1, """Scale factor for state of charge.""") +InBatV_SF = froniusreg.FroniusReg(40378, froniusreg.sunssf, 1, """Scale factor for battery voltage.""") +InOutWRte_SF = froniusreg.FroniusReg(40379, froniusreg.sunssf, 1, """Scale factor for percent charge/discharge rate.""") +ID = froniusreg.FroniusReg(40380, froniusreg.uint16, 1, """Identifies this as End block""") +L = froniusreg.FroniusReg(40381, froniusreg.uint16, 1, """Length of model block""") +scaledWRtg = froniusreg.ScaledFroniusReg(WRtg, WRtg_SF) +scaledVARtg = froniusreg.ScaledFroniusReg(VARtg, VARtg_SF) +scaledVArRtgQ1 = froniusreg.ScaledFroniusReg(VArRtgQ1, VArRtg_SF) +scaledVArRtgQ2 = froniusreg.ScaledFroniusReg(VArRtgQ2, VArRtg_SF) +scaledVArRtgQ3 = froniusreg.ScaledFroniusReg(VArRtgQ3, VArRtg_SF) +scaledVArRtgQ4 = froniusreg.ScaledFroniusReg(VArRtgQ4, VArRtg_SF) +scaledARtg = froniusreg.ScaledFroniusReg(ARtg, ARtg_SF) +scaledPFRtgQ1 = froniusreg.ScaledFroniusReg(PFRtgQ1, PFRtg_SF) +scaledPFRtgQ2 = froniusreg.ScaledFroniusReg(PFRtgQ2, PFRtg_SF) +scaledPFRtgQ3 = froniusreg.ScaledFroniusReg(PFRtgQ3, PFRtg_SF) +scaledPFRtgQ4 = froniusreg.ScaledFroniusReg(PFRtgQ4, PFRtg_SF) +scaledWHRtg = froniusreg.ScaledFroniusReg(WHRtg, WHRtg_SF) +scaledAhrRtg = froniusreg.ScaledFroniusReg(AhrRtg, AhrRtg_SF) +scaledMaxChaRte = froniusreg.ScaledFroniusReg(MaxChaRte, MaxChaRte_SF) +scaledMaxDisChaRte = froniusreg.ScaledFroniusReg(MaxDisChaRte, MaxDisChaRte_SF) +scaledWMax = froniusreg.ScaledFroniusReg(WMax, WMax_SF) +scaledVRef = froniusreg.ScaledFroniusReg(VRef, VRef_SF) +scaledVRefOfs = froniusreg.ScaledFroniusReg(VRefOfs, VRefOfs_SF) +scaledVMax = froniusreg.ScaledFroniusReg(VMax, VMinMax_SF) +scaledVMin = froniusreg.ScaledFroniusReg(VMin, VMinMax_SF) +scaledVAMax = froniusreg.ScaledFroniusReg(VAMax, VAMax_SF) +scaledVArMaxQ1 = froniusreg.ScaledFroniusReg(VArMaxQ1, VArMax_SF) +scaledVArMaxQ2 = froniusreg.ScaledFroniusReg(VArMaxQ2, VArMax_SF) +scaledVArMaxQ3 = froniusreg.ScaledFroniusReg(VArMaxQ3, VArMax_SF) +scaledVArMaxQ4 = froniusreg.ScaledFroniusReg(VArMaxQ4, VArMax_SF) +scaledWGra = froniusreg.ScaledFroniusReg(WGra, WGra_SF) +scaledPFMinQ1 = froniusreg.ScaledFroniusReg(PFMinQ1, PFMin_SF) +scaledPFMinQ2 = froniusreg.ScaledFroniusReg(PFMinQ2, PFMin_SF) +scaledPFMinQ3 = froniusreg.ScaledFroniusReg(PFMinQ3, PFMin_SF) +scaledPFMinQ4 = froniusreg.ScaledFroniusReg(PFMinQ4, PFMin_SF) +scaledMaxRmpRte = froniusreg.ScaledFroniusReg(MaxRmpRte, MaxRmpRte_SF) +scaledECPNomHz = froniusreg.ScaledFroniusReg(ECPNomHz, ECPNomHz_SF) +scaledVArAval = froniusreg.ScaledFroniusReg(VArAval, VArAval_SF) +scaledWAval = froniusreg.ScaledFroniusReg(WAval, WAval_SF) +scaledRis = froniusreg.ScaledFroniusReg(Ris, Ris_SF) +scaledWMaxLimPct = froniusreg.ScaledFroniusReg(WMaxLimPct, WMaxLimPct_SF) +scaledOutPFSet = froniusreg.ScaledFroniusReg(OutPFSet, OutPFSet_SF) +scaledVArWMaxPct = froniusreg.ScaledFroniusReg(VArWMaxPct, VArPct_SF) +scaledVArMaxPct = froniusreg.ScaledFroniusReg(VArMaxPct, VArPct_SF) +scaledVArAvalPct = froniusreg.ScaledFroniusReg(VArAvalPct, VArPct_SF) +scaledmodule_1_DCA = froniusreg.ScaledFroniusReg(module_1_DCA, DCA_SF) +scaledmodule_1_DCV = froniusreg.ScaledFroniusReg(module_1_DCV, DCV_SF) +scaledmodule_1_DCW = froniusreg.ScaledFroniusReg(module_1_DCW, DCW_SF) +scaledmodule_1_DCWH = froniusreg.ScaledFroniusReg(module_1_DCWH, DCWH_SF) +scaledmodule_2_DCA = froniusreg.ScaledFroniusReg(module_2_DCA, DCA_SF) +scaledmodule_2_DCV = froniusreg.ScaledFroniusReg(module_2_DCV, DCV_SF) +scaledmodule_2_DCW = froniusreg.ScaledFroniusReg(module_2_DCW, DCW_SF) +scaledmodule_2_DCWH = froniusreg.ScaledFroniusReg(module_2_DCWH, DCWH_SF) +scaledmodule_3_DCA = froniusreg.ScaledFroniusReg(module_3_DCA, DCA_SF) +scaledmodule_3_DCV = froniusreg.ScaledFroniusReg(module_3_DCV, DCV_SF) +scaledmodule_3_DCW = froniusreg.ScaledFroniusReg(module_3_DCW, DCW_SF) +scaledmodule_3_DCWH = froniusreg.ScaledFroniusReg(module_3_DCWH, DCWH_SF) +scaledmodule_4_DCA = froniusreg.ScaledFroniusReg(module_4_DCA, DCA_SF) +scaledmodule_4_DCV = froniusreg.ScaledFroniusReg(module_4_DCV, DCV_SF) +scaledmodule_4_DCW = froniusreg.ScaledFroniusReg(module_4_DCW, DCW_SF) +scaledmodule_4_DCWH = froniusreg.ScaledFroniusReg(module_4_DCWH, DCWH_SF) +scaledWChaMax = froniusreg.ScaledFroniusReg(WChaMax, WChaMax_SF) +scaledWChaGra = froniusreg.ScaledFroniusReg(WChaGra, WChaDisChaGra_SF) +scaledWDisChaGra = froniusreg.ScaledFroniusReg(WDisChaGra, WChaDisChaGra_SF) +scaledVAChaMax = froniusreg.ScaledFroniusReg(VAChaMax, VAChaMax_SF) +scaledMinRsvPct = froniusreg.ScaledFroniusReg(MinRsvPct, MinRsvPct_SF) +scaledChaState = froniusreg.ScaledFroniusReg(ChaState, ChaState_SF) +scaledStorAval = froniusreg.ScaledFroniusReg(StorAval, StorAval_SF) +scaledInBatV = froniusreg.ScaledFroniusReg(InBatV, InBatV_SF) +scaledOutWRte = froniusreg.ScaledFroniusReg(OutWRte, InOutWRte_SF) +scaledInWRte = froniusreg.ScaledFroniusReg(InWRte, InOutWRte_SF) diff --git a/src/pyfroniusreg/gen24_registers.py b/src/pyfroniusreg/gen24_registers.py deleted file mode 100644 index 9ed682d..0000000 --- a/src/pyfroniusreg/gen24_registers.py +++ /dev/null @@ -1,67 +0,0 @@ -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) - -ID = froniusreg.FroniusReg( - 40003, - froniusreg.uint16, - 1, - "Well-known value. Uniquely identifies this as a sunspec model 'common' (1)", -) -L = froniusreg.FroniusReg(40004, froniusreg.uint16, 1, "Sunspec model commen register count") -Mn = froniusreg.FroniusReg(40005, froniusreg.string16, 1, "Manufacturer") -Md = froniusreg.FroniusReg(40021, froniusreg.string16, 1, "Device Model") -Vr = froniusreg.FroniusReg(40045, froniusreg.string8, 1, "SW version") -SN = froniusreg.FroniusReg(40068, froniusreg.string16, 1, "Serial Number") -DA = froniusreg.FroniusReg(40069, froniusreg.uint16, 1, "Modbus Device Address") - -InputID = froniusreg.FroniusReg(40304, froniusreg.uint16, 1, "Input ID") -InputIDString = froniusreg.FroniusReg(40305, froniusreg.string8, 1, "Input ID String") - -module3DCW = froniusreg.FroniusReg( - 40325, - froniusreg.uint16, - 1, - "When the battery is discharged the data-points of the charge input are set to 0", -) - -module4DCW = froniusreg.FroniusReg( - 40345, - froniusreg.uint16, - 1, - "When the battery is charged the data-points of the discharge input are set to 0", -) - -DCW_SF = froniusreg.FroniusReg(40268, froniusreg.int16, 1, "DC Power Scaling factor") - -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) -scaledToBattery = froniusreg.ScaledFroniusReg(module3DCW, DCW_SF) -scaledFromBattery = froniusreg.ScaledFroniusReg(module4DCW, DCW_SF) diff --git a/src/pyfroniusreg/gen24_registers.py b/src/pyfroniusreg/gen24_registers.py new file mode 120000 index 0000000..76ae757 --- /dev/null +++ b/src/pyfroniusreg/gen24_registers.py @@ -0,0 +1 @@ +gen24_primo_symo_inverter_register_map_float_storage.py \ No newline at end of file diff --git a/src/pyfroniusreg/gen24_registers_orig.py b/src/pyfroniusreg/gen24_registers_orig.py new file mode 100644 index 0000000..9ed682d --- /dev/null +++ b/src/pyfroniusreg/gen24_registers_orig.py @@ -0,0 +1,67 @@ +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) + +ID = froniusreg.FroniusReg( + 40003, + froniusreg.uint16, + 1, + "Well-known value. Uniquely identifies this as a sunspec model 'common' (1)", +) +L = froniusreg.FroniusReg(40004, froniusreg.uint16, 1, "Sunspec model commen register count") +Mn = froniusreg.FroniusReg(40005, froniusreg.string16, 1, "Manufacturer") +Md = froniusreg.FroniusReg(40021, froniusreg.string16, 1, "Device Model") +Vr = froniusreg.FroniusReg(40045, froniusreg.string8, 1, "SW version") +SN = froniusreg.FroniusReg(40068, froniusreg.string16, 1, "Serial Number") +DA = froniusreg.FroniusReg(40069, froniusreg.uint16, 1, "Modbus Device Address") + +InputID = froniusreg.FroniusReg(40304, froniusreg.uint16, 1, "Input ID") +InputIDString = froniusreg.FroniusReg(40305, froniusreg.string8, 1, "Input ID String") + +module3DCW = froniusreg.FroniusReg( + 40325, + froniusreg.uint16, + 1, + "When the battery is discharged the data-points of the charge input are set to 0", +) + +module4DCW = froniusreg.FroniusReg( + 40345, + froniusreg.uint16, + 1, + "When the battery is charged the data-points of the discharge input are set to 0", +) + +DCW_SF = froniusreg.FroniusReg(40268, froniusreg.int16, 1, "DC Power Scaling factor") + +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) +scaledToBattery = froniusreg.ScaledFroniusReg(module3DCW, DCW_SF) +scaledFromBattery = froniusreg.ScaledFroniusReg(module4DCW, DCW_SF) diff --git a/tools/create_from_spreadsheet.py b/tools/create_from_spreadsheet.py index 30dff39..685684a 100755 --- a/tools/create_from_spreadsheet.py +++ b/tools/create_from_spreadsheet.py @@ -28,20 +28,44 @@ def main(): input_file = Path(args.filename) if args.output is None: - output_file = Path(input_file.stem + '.py') + output_file = Path("./" + input_file.stem.lower() + ".py") else: output_file = Path(args.output) input_df = pandas.read_excel(open(input_file, 'rb'), header=0, skiprows=2) - # Coerce strings to ints so we can sort - input_df = input_df[input_df['Start'].apply(lambda x: isinstance(x, (int)))] + # Coerce 'Start' strings to ints so we can sort + input_df = input_df[input_df["Start"].apply(lambda x: isinstance(x, (int)))] # sort on Start register + input_df = input_df.sort_values(["Start"]) - - print(input_df.columns) - print(input_df.sort_values(['Start'])) + + with open(output_file, 'w') as f: + f.write("from pyfroniusreg import froniusreg\n\n") + # Output the direct registers + for index, row in input_df.iterrows(): + if row["Type"] == "string": + data_type = f'string{row["Size"]}' + else: + data_type = row["Type"] + + # TODO: determine proper way of defining the modbus unit + modbus_unit = 1 + f.write('%s = froniusreg.FroniusReg(%d, froniusreg.%s, %d, """%s""")\n' % + (row["Name"].replace('/', '_'), + row["Start"], + data_type, + modbus_unit, + row["Description"])) + + # output the scaled registers + for index, row in input_df.iterrows(): + if not pandas.isna(row["Scale Factor"]): + f.write("scaled%s = froniusreg.ScaledFroniusReg(%s, %s)\n" % + ( row["Name"].replace('/', '_'), + row["Name"].replace('/', '_'), + row["Scale Factor"])) if __name__ == '__main__':