From 6412630c85594b51e86a07ac0b9b2121b97234ad Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Sun, 25 Feb 2024 15:03:27 +0100 Subject: [PATCH 1/2] added new int field --- .../bluetti_bt/bluetti_bt_lib/utils/struct.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py b/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py index ea9418f..0e74706 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py @@ -44,6 +44,21 @@ class UintField(DeviceField): return val >= self.range[0] and val <= self.range[1] +class IntField(DeviceField): + def __init__(self, name: str, address: int, range: Optional[Tuple[int, int]]): + self.range = range + super().__init__(name, address, 1) + + def parse(self, data: bytes) -> int: + return struct.unpack(">h", data)[0] + + def in_range(self, val: int) -> bool: + if self.range is None: + return True + else: + return val >= self.range[0] and val <= self.range[1] + + class BoolField(DeviceField): def __init__(self, name: str, address: int): super().__init__(name, address, 1) @@ -132,6 +147,9 @@ class DeviceStruct: def add_uint_field(self, name: str, address: int, range: Tuple[int, int] = None): self.fields.append(UintField(name, address, range)) + def add_int_field(self, name: str, address: int, range: Tuple[int, int] = None): + self.fields.append(IntField(name, address, range)) + def add_bool_field(self, name: str, address: int): self.fields.append(BoolField(name, address)) From 4d27f108faf960ecf20ffd8080fffaf12fc9bccb Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Sun, 25 Feb 2024 15:04:18 +0100 Subject: [PATCH 2/2] fixed negative ac and dc solar values --- .../bluetti_bt/bluetti_bt_lib/devices/ep600.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep600.py b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep600.py index 047ce97..bfbc861 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep600.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep600.py @@ -20,11 +20,11 @@ class EP600(ProtocolV2Device): # DC Solar self.struct.add_uint_field("pv_input_power1", 1212) - self.struct.add_uint_field("pv_input_voltage1", 1213) - self.struct.add_uint_field("pv_input_current1", 1214) + self.struct.add_decimal_field("pv_input_voltage1", 1213, 1) + self.struct.add_decimal_field("pv_input_current1", 1214, 1) self.struct.add_uint_field("pv_input_power2", 1220) - self.struct.add_uint_field("pv_input_voltage2", 1221) - self.struct.add_uint_field("pv_input_current2", 1222) + self.struct.add_decimal_field("pv_input_voltage2", 1221, 1) + self.struct.add_decimal_field("pv_input_current2", 1222, 1) # ADL400 Smart Meter for AC Solar self.struct.add_uint_field("adl400_ac_input_power_phase1", 1228) @@ -52,9 +52,9 @@ class EP600(ProtocolV2Device): # EP600 AC Output self.struct.add_decimal_field("ac_output_frequency", 1500, 1) - self.struct.add_uint_field("ac_output_power_phase1", 1510) - self.struct.add_uint_field("ac_output_power_phase2", 1517) - self.struct.add_uint_field("ac_output_power_phase3", 1524) + self.struct.add_int_field("ac_output_power_phase1", 1510) + self.struct.add_int_field("ac_output_power_phase2", 1517) + self.struct.add_int_field("ac_output_power_phase3", 1524) self.struct.add_decimal_field("ac_output_voltage_phase1", 1511, 1) self.struct.add_decimal_field("ac_output_voltage_phase2", 1518, 1) self.struct.add_decimal_field("ac_output_voltage_phase3", 1525, 1)