From 2922c5cb906324e626d4683d7bb3cc9d96ea8de7 Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Fri, 31 May 2024 12:05:09 +0200 Subject: [PATCH] add multiplier to decimal field --- .../bluetti_bt/bluetti_bt_lib/utils/struct.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) 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 58a9d0c..70ef49e 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/utils/struct.py @@ -30,15 +30,15 @@ class DeviceField: class UintField(DeviceField): - def __init__(self, name: str, address: int, range: Optional[Tuple[int, int]], scale: float): + def __init__(self, name: str, address: int, range: Optional[Tuple[int, int]], multiplier: float): self.range = range - self.scale = scale + self.multiplier = multiplier super().__init__(name, address, 1) def parse(self, data: bytes) -> int: val = struct.unpack("!H", data)[0] - return val * self.scale + return val * self.multiplier def in_range(self, val: int) -> bool: if self.range is None: @@ -82,15 +82,16 @@ class EnumField(DeviceField): class DecimalField(DeviceField): def __init__( - self, name: str, address: int, scale: int, range: Optional[Tuple[int, int]] + self, name: str, address: int, scale: int, range: Optional[Tuple[int, int]], multiplier: float ): self.scale = scale self.range = range + self.multiplier = multiplier super().__init__(name, address, 1) def parse(self, data: bytes) -> Decimal: val = Decimal(struct.unpack("!H", data)[0]) - return val / 10 ** self.scale + return (val / 10 ** self.scale) * self.multiplier def in_range(self, val: Decimal) -> bool: if self.range is None: @@ -147,8 +148,8 @@ class DeviceStruct: def __init__(self): self.fields = [] - def add_uint_field(self, name: str, address: int, range: Tuple[int, int] = None, scale: float = 1): - self.fields.append(UintField(name, address, range, scale)) + def add_uint_field(self, name: str, address: int, range: Tuple[int, int] = None, multiplier: float = 1): + self.fields.append(UintField(name, address, range, multiplier)) def add_int_field(self, name: str, address: int, range: Tuple[int, int] = None): self.fields.append(IntField(name, address, range)) @@ -160,9 +161,9 @@ class DeviceStruct: self.fields.append(EnumField(name, address, enum)) def add_decimal_field( - self, name: str, address: int, scale: int, range: Tuple[int, int] = None + self, name: str, address: int, scale: int, range: Tuple[int, int] = None, multiplier: float = 1 ): - self.fields.append(DecimalField(name, address, scale, range)) + self.fields.append(DecimalField(name, address, scale, range, multiplier)) def add_decimal_array_field(self, name: str, address: int, size: int, scale: int): self.fields.append(DecimalArrayField(name, address, size, scale))