From 5d56df7c0e5f77118a9b1fffbabbecf663de862c Mon Sep 17 00:00:00 2001 From: Paul Warren Date: Mon, 7 Oct 2024 16:20:39 +1100 Subject: [PATCH] SoCTest working! --- FroniusReg.py | 22 ++++++++++++++++------ SoCtest.py | 16 ++++++++++++++++ 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100755 SoCtest.py diff --git a/FroniusReg.py b/FroniusReg.py index 73afc78..3d99ac9 100644 --- a/FroniusReg.py +++ b/FroniusReg.py @@ -7,7 +7,7 @@ from enum import Enum from pymodbus.constants import Endian from pymodbus.payload import BinaryPayloadDecoder -from pymodbus.client.tcp import ModbusTcpClient as ModbusClient +#from pymodbus.client.tcp import ModbusTcpClient as ModbusClient #from pymodbus.diag_message import * #from pymodbus.file_message import * #from pymodbus.other_message import * @@ -71,12 +71,12 @@ class registerReadError(Exception): class FroniusReg: def __init__(self, address, datatype, unit, description): self.address = address - self.datatype = DataType(datatype) + self.datatype = datatype self.unit = unit self.description=description def getValue(self, modbusClient): - self.__getRegisterValue(modbusClient, + return self.__getRegisterValue(modbusClient, self.address, self.datatype, self.unit) @@ -87,7 +87,8 @@ class FroniusReg: slave=unit) if(modbusValue.isError()): raise registerReadError("Unable to read from Fronius Register: %d, %s" % (self.id, self.description)) - + if(modbusValue is None): + raise registerReadError("It's NONE!") return dataType.decode(modbusValue) class ScaledFroniusReg: @@ -95,6 +96,15 @@ class ScaledFroniusReg: self.valueReg=valueReg self.scaleReg=scaleReg - def getValue(self): - return self.valueReg.getValue() * 10 ** self.scaleReg.getValue() + def getValue(self, modbusClient): + return self.valueReg.getValue(modbusClient) * 10 ** self.scaleReg.getValue(modbusClient) + + + + + + +storageStateOfCharge = FroniusReg(40362, DataType.UInt16, 1, "Storage State of Charge") +storageStateOfChargeSF = FroniusReg(40376, DataType.Int16, 1, "Storage State of Charge Scaling Factor") +scaledStateOfCharge = ScaledFroniusReg(storageStateOfCharge, storageStateOfChargeSF) diff --git a/SoCtest.py b/SoCtest.py new file mode 100755 index 0000000..e02da04 --- /dev/null +++ b/SoCtest.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +import FroniusReg + +from pymodbus.client.tcp import ModbusTcpClient + +fronius1 = ModbusTcpClient("172.19.107.211", port=502, timeout=10) +fronius1.connect() + +raw_soc = FroniusReg.storageStateOfCharge.getValue(fronius1) +print(" raw: %s" % raw_soc) + +soc = FroniusReg.scaledStateOfCharge.getValue(fronius1) +print(" SOC: %s%%" % soc) + +