From 591c86baf591c502ad7e1514edea918f2d7f7a8c Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Thu, 30 May 2024 20:22:43 +0200 Subject: [PATCH] fix internal_dc_input_voltage for ac300 and ac500 --- .../bluetti_bt/bluetti_bt_lib/devices/ac300.py | 2 +- .../bluetti_bt/bluetti_bt_lib/devices/ac500.py | 2 +- .../bluetti_bt/bluetti_bt_lib/utils/struct.py | 11 +++++++---- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac300.py b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac300.py index 7a9cc8f..3f6b9e0 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac300.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac300.py @@ -23,7 +23,7 @@ class AC300(ProtocolV1Device): self.struct.add_decimal_field("internal_current_three", 78, 1, (0, 100)) self.struct.add_uint_field("internal_power_three", 79) self.struct.add_decimal_field("ac_input_frequency", 80, 2) - self.struct.add_uint_field("internal_dc_input_voltage", 86) + self.struct.add_uint_field("internal_dc_input_voltage", 86, scale=.1) self.struct.add_decimal_field("internal_dc_input_power", 87, 1) self.struct.add_decimal_field("internal_dc_input_current", 88, 2) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac500.py b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac500.py index 2def5c0..7d53243 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac500.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ac500.py @@ -23,7 +23,7 @@ class AC500(ProtocolV1Device): self.struct.add_decimal_field("internal_current_three", 78, 1, (0, 100)) self.struct.add_uint_field("internal_power_three", 79) self.struct.add_decimal_field("ac_input_frequency", 80, 2) - self.struct.add_uint_field("internal_dc_input_voltage", 86) + self.struct.add_uint_field("internal_dc_input_voltage", 86, scale=.1) self.struct.add_decimal_field("internal_dc_input_power", 87, 1) self.struct.add_decimal_field("internal_dc_input_current", 88, 2) 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 0e74706..10fd169 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py @@ -30,12 +30,15 @@ class DeviceField: class UintField(DeviceField): - def __init__(self, name: str, address: int, range: Optional[Tuple[int, int]]): + def __init__(self, name: str, address: int, range: Optional[Tuple[int, int]], scale: int): self.range = range + self.scale = scale super().__init__(name, address, 1) def parse(self, data: bytes) -> int: - return struct.unpack("!H", data)[0] + val = struct.unpack("!H", data)[0] + + return val * self.scale def in_range(self, val: int) -> bool: if self.range is None: @@ -144,8 +147,8 @@ class DeviceStruct: def __init__(self): self.fields = [] - def add_uint_field(self, name: str, address: int, range: Tuple[int, int] = None): - self.fields.append(UintField(name, address, range)) + def add_uint_field(self, name: str, address: int, range: Tuple[int, int] = None, scale: int = 1): + self.fields.append(UintField(name, address, range, scale)) def add_int_field(self, name: str, address: int, range: Tuple[int, int] = None): self.fields.append(IntField(name, address, range))