From 6412630c85594b51e86a07ac0b9b2121b97234ad Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Sun, 25 Feb 2024 15:03:27 +0100 Subject: [PATCH] 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))