From 8409221675a69911f4f191a4c91b4d509a986866 Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Sun, 18 Feb 2024 13:35:17 +0100 Subject: [PATCH] added ep760 --- custom_components/bluetti_bt/binary_sensor.py | 4 +++- .../bluetti_bt/bluetti_bt_lib/devices/ep760.py | 8 ++++++++ .../bluetti_bt_lib/utils/device_builder.py | 7 ++++++- custom_components/bluetti_bt/coordinator.py | 3 ++- custom_components/bluetti_bt/sensor.py | 4 +++- custom_components/bluetti_bt/switch.py | 4 +++- custom_components/bluetti_bt/utils.py | 13 ------------- 7 files changed, 25 insertions(+), 18 deletions(-) create mode 100644 custom_components/bluetti_bt/bluetti_bt_lib/devices/ep760.py diff --git a/custom_components/bluetti_bt/binary_sensor.py b/custom_components/bluetti_bt/binary_sensor.py index b8e5598..1931b13 100644 --- a/custom_components/bluetti_bt/binary_sensor.py +++ b/custom_components/bluetti_bt/binary_sensor.py @@ -24,10 +24,12 @@ from bluetti_mqtt.mqtt_client import ( MqttFieldType, ) +from .bluetti_bt_lib.utils.device_builder import build_device + from . import device_info as dev_info, get_unique_id from .const import DATA_COORDINATOR, DOMAIN, ADDITIONAL_DEVICE_FIELDS from .coordinator import PollingCoordinator -from .utils import unique_id_loggable, build_device +from .utils import unique_id_loggable _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep760.py b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep760.py new file mode 100644 index 0000000..b7126f7 --- /dev/null +++ b/custom_components/bluetti_bt/bluetti_bt_lib/devices/ep760.py @@ -0,0 +1,8 @@ +"""EP760 fields.""" + +from ..base_devices.ProtocolV2Device import ProtocolV2Device + + +class EP760(ProtocolV2Device): + def __init__(self, address: str, sn: str): + super().__init__(address, "EP760", sn) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/utils/device_builder.py b/custom_components/bluetti_bt/bluetti_bt_lib/utils/device_builder.py index f549558..3fb036e 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/utils/device_builder.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/utils/device_builder.py @@ -10,8 +10,11 @@ from ..devices.eb3a import EB3A from ..devices.ep500 import EP500 from ..devices.ep500p import EP500P from ..devices.ep600 import EP600 +from ..devices.ep760 import EP760 -DEVICE_NAME_RE = re.compile(r"^(AC60|AC200M|AC300|AC500|EB3A|EP500|EP500P|EP600)(\d+)$") +DEVICE_NAME_RE = re.compile( + r"^(AC60|AC200M|AC300|AC500|EB3A|EP500|EP500P|EP600|EP760)(\d+)$" +) def build_device(address: str, name: str): @@ -32,3 +35,5 @@ def build_device(address: str, name: str): return EP500P(address, match[2]) if match[1] == "EP600": return EP600(address, match[2]) + if match[1] == "EP760": + return EP760(address, match[2]) diff --git a/custom_components/bluetti_bt/coordinator.py b/custom_components/bluetti_bt/coordinator.py index 40329d5..b52ba01 100644 --- a/custom_components/bluetti_bt/coordinator.py +++ b/custom_components/bluetti_bt/coordinator.py @@ -19,9 +19,10 @@ from homeassistant.helpers.update_coordinator import ( from .bluetti_bt_lib.const import NOTIFY_UUID, RESPONSE_TIMEOUT, WRITE_UUID from .bluetti_bt_lib.exceptions import BadConnectionError, ModbusError, ParseError from .bluetti_bt_lib.utils.commands import ReadHoldingRegisters +from .bluetti_bt_lib.utils.device_builder import build_device from .const import DATA_POLLING_RUNNING, DOMAIN -from .utils import mac_loggable, build_device +from .utils import mac_loggable _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/bluetti_bt/sensor.py b/custom_components/bluetti_bt/sensor.py index 09a81a7..eb8c4cd 100644 --- a/custom_components/bluetti_bt/sensor.py +++ b/custom_components/bluetti_bt/sensor.py @@ -29,10 +29,12 @@ from bluetti_mqtt.mqtt_client import ( battery_pack_fields, ) +from .bluetti_bt_lib.utils.device_builder import build_device + from . import device_info as dev_info, get_unique_id from .const import DATA_COORDINATOR, DOMAIN, CONF_OPTIONS, DIAGNOSTIC_FIELDS, ADDITIONAL_DEVICE_FIELDS from .coordinator import PollingCoordinator -from .utils import unique_id_loggable, build_device +from .utils import unique_id_loggable _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/bluetti_bt/switch.py b/custom_components/bluetti_bt/switch.py index 02fd57f..4428ad1 100644 --- a/custom_components/bluetti_bt/switch.py +++ b/custom_components/bluetti_bt/switch.py @@ -31,10 +31,12 @@ from bluetti_mqtt.mqtt_client import ( MqttFieldType, ) +from .bluetti_bt_lib.utils.device_builder import build_device + from . import device_info as dev_info, get_unique_id from .const import CONTROL_FIELDS, DATA_COORDINATOR, DOMAIN, ADDITIONAL_DEVICE_FIELDS from .coordinator import PollingCoordinator -from .utils import mac_loggable, unique_id_loggable, build_device +from .utils import mac_loggable, unique_id_loggable _LOGGER = logging.getLogger(__name__) diff --git a/custom_components/bluetti_bt/utils.py b/custom_components/bluetti_bt/utils.py index 2062f12..fce973c 100644 --- a/custom_components/bluetti_bt/utils.py +++ b/custom_components/bluetti_bt/utils.py @@ -1,11 +1,5 @@ """Tools.""" -from .bluetti_bt_lib.utils.device_builder import build_device as orig_build_device - -from .const import DEVICE_NAME_RE -from .devices.ep760 import EP760 - - def mac_loggable(mac: str) -> str: """Remove parts of the mac address for logging.""" splitted = mac.split(":") @@ -16,10 +10,3 @@ def unique_id_loggable(unique_id: str) -> str: splitted = unique_id.split("_", maxsplit=1) serial = splitted[0][:6] return serial + "XXXXXXXXXX" + splitted[1] - -def build_device(address: str, name: str): - match = DEVICE_NAME_RE.match(name) - if match[1] == 'EP760': - return EP760(address, match[2]) - else: - return orig_build_device(address, name)