From c45994a9a60d981e516103dd5ad5543eef706b38 Mon Sep 17 00:00:00 2001 From: Patrick762 Date: Sun, 18 Feb 2024 13:54:40 +0100 Subject: [PATCH] replaced bluetti_mqtt imports with local lib --- custom_components/bluetti_bt/binary_sensor.py | 17 +- .../bluetti_bt_lib/field_attributes.py | 2 +- custom_components/bluetti_bt/const.py | 507 ------------------ custom_components/bluetti_bt/sensor.py | 42 +- custom_components/bluetti_bt/switch.py | 23 +- 5 files changed, 29 insertions(+), 562 deletions(-) diff --git a/custom_components/bluetti_bt/binary_sensor.py b/custom_components/bluetti_bt/binary_sensor.py index 1931b13..53d10d8 100644 --- a/custom_components/bluetti_bt/binary_sensor.py +++ b/custom_components/bluetti_bt/binary_sensor.py @@ -18,16 +18,11 @@ from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, ) -from bluetti_mqtt.mqtt_client import ( - NORMAL_DEVICE_FIELDS, - DC_INPUT_FIELDS, - MqttFieldType, -) - +from .bluetti_bt_lib.field_attributes import FIELD_ATTRIBUTES, FieldType 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 .const import DATA_COORDINATOR, DOMAIN from .coordinator import PollingCoordinator from .utils import unique_id_loggable @@ -52,12 +47,10 @@ async def async_setup_entry( bluetti_device = build_device(address, device_name) sensors_to_add = [] - all_fields = NORMAL_DEVICE_FIELDS - all_fields.update(DC_INPUT_FIELDS) - all_fields.update(ADDITIONAL_DEVICE_FIELDS) + all_fields = FIELD_ATTRIBUTES for field_key, field_config in all_fields.items(): if bluetti_device.has_field(field_key): - if field_config.type == MqttFieldType.BOOL: + if field_config.type == FieldType.BOOL: category = None if field_config.setter is True: category = EntityCategory.DIAGNOSTIC @@ -68,7 +61,7 @@ async def async_setup_entry( device_info, address, field_key, - field_config.home_assistant_extra.get(CONF_NAME, ""), + field_config.name, category=category, ) ) diff --git a/custom_components/bluetti_bt/bluetti_bt_lib/field_attributes.py b/custom_components/bluetti_bt/bluetti_bt_lib/field_attributes.py index 0b9516d..cbb6667 100644 --- a/custom_components/bluetti_bt/bluetti_bt_lib/field_attributes.py +++ b/custom_components/bluetti_bt/bluetti_bt_lib/field_attributes.py @@ -79,7 +79,7 @@ class OutletFieldAttributes(FieldAttributes): device_class = "outlet" -FIELD_ATTRIBUTES = { +FIELD_ATTRIBUTES: dict[str, FieldAttributes] = { # Base device fields "dc_input_power": PowerFieldAttributes( name="DC Input Power", diff --git a/custom_components/bluetti_bt/const.py b/custom_components/bluetti_bt/const.py index 7015358..8082c62 100644 --- a/custom_components/bluetti_bt/const.py +++ b/custom_components/bluetti_bt/const.py @@ -2,8 +2,6 @@ import re -from bluetti_mqtt.mqtt_client import MqttFieldConfig, MqttFieldType - DOMAIN = "bluetti_bt" MANUFACTURER = "Bluetti" @@ -44,508 +42,3 @@ DIAGNOSTIC_FIELDS = [ "safety_module_version", "high_voltage_module_version", ] - -ADDITIONAL_DEVICE_FIELDS = { - "max_ac_input_power": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Max AC Input Power per Phase", - }, - ), - "max_ac_input_current": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Max AC Input Current per Phase", - }, - ), - "max_ac_output_power": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Max AC Output Power per Phase", - }, - ), - "max_ac_output_current": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Max AC Output Current per Phase", - }, - ), - "bcu_version": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={"name": "BCU Version"}, - ), - "safety_module_version": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={"name": "Safety Module Version"}, - ), - "high_voltage_module_version": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={"name": "High Voltage Safety Module Version"}, - ), - 'pv_input_power1': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Power 1", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - 'pv_input_voltage1': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Voltage 1", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - 'pv_input_current1': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Current 1", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - 'pv_input_power2': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Power 2", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - 'pv_input_voltage2': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Voltage 2", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - 'pv_input_current2': MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Solar Input Current 2", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_power_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Power Phase 1", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_power_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Power Phase 2", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_power_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Power Phase 3", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_voltage_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Voltage Phase 1", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_voltage_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Voltage Phase 2", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "adl400_ac_input_voltage_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "ADL400 AC Input Voltage Phase 3", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_voltage_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Voltage Phase 1", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_voltage_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Voltage Phase 2", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_voltage_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Voltage Phase 3", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_current_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Current Phase 1", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_current_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Current Phase 2", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_current_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Current Phase 3", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_power_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Power Phase 1", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_power_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Power Phase 2", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "grid_input_power_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Grid Input Power Phase 3", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_frequency": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Frequency", - "unit_of_measurement": "Hz", - "device_class": "frequency", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_voltage_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Voltage Phase 1", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_voltage_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Voltage Phase 2", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_voltage_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Voltage Phase 3", - "unit_of_measurement": "V", - "device_class": "voltage", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_power_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Power Phase 1", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_power_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Power Phase 2", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_power_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Power Phase 3", - "unit_of_measurement": "W", - "device_class": "power", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_current_phase1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Current Phase 1", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_current_phase2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Current Phase 2", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "ac_output_current_phase3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "AC Output Current Phase 3", - "unit_of_measurement": "A", - "device_class": "current", - "state_class": "measurement", - "force_update": True, - }, - ), - "testing0": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 0", - }, - ), - "testing1": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 1", - }, - ), - "testing2": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 2", - }, - ), - "testing3": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 3", - }, - ), - "testing4": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 4", - }, - ), - "testing5": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 5", - }, - ), - "testing6": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 6", - }, - ), - "testing7": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 7", - }, - ), - "testing8": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 8", - }, - ), - "testing9": MqttFieldConfig( - type=MqttFieldType.NUMERIC, - setter=False, - advanced=False, - home_assistant_extra={ - "name": "Register Testing 9", - }, - ), -} diff --git a/custom_components/bluetti_bt/sensor.py b/custom_components/bluetti_bt/sensor.py index eb8c4cd..7aed069 100644 --- a/custom_components/bluetti_bt/sensor.py +++ b/custom_components/bluetti_bt/sensor.py @@ -6,33 +6,23 @@ from enum import Enum import logging from decimal import Decimal -from homeassistant.components.sensor import SensorEntity, CONF_STATE_CLASS +from homeassistant.components.sensor import SensorEntity from homeassistant.config_entries import ConfigEntry from homeassistant.core import HomeAssistant, callback from homeassistant.const import ( CONF_ADDRESS, CONF_NAME, - CONF_UNIT_OF_MEASUREMENT, - CONF_DEVICE_CLASS, EntityCategory, ) from homeassistant.helpers.entity_platform import AddEntitiesCallback from homeassistant.helpers.entity import DeviceInfo -from homeassistant.helpers.update_coordinator import ( - CoordinatorEntity, -) - -from bluetti_mqtt.mqtt_client import ( - NORMAL_DEVICE_FIELDS, - DC_INPUT_FIELDS, - MqttFieldType, - battery_pack_fields, -) +from homeassistant.helpers.update_coordinator import CoordinatorEntity +from .bluetti_bt_lib.field_attributes import FIELD_ATTRIBUTES, PACK_FIELD_ATTRIBUTES, FieldType 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 .const import DATA_COORDINATOR, DOMAIN, DIAGNOSTIC_FIELDS from .coordinator import PollingCoordinator from .utils import unique_id_loggable @@ -57,45 +47,43 @@ async def async_setup_entry( bluetti_device = build_device(address, device_name) sensors_to_add = [] - all_fields = NORMAL_DEVICE_FIELDS - all_fields.update(DC_INPUT_FIELDS) - all_fields.update(ADDITIONAL_DEVICE_FIELDS) + all_fields = FIELD_ATTRIBUTES if len(bluetti_device.pack_polling_commands) > 0: # add pack fields for device _LOGGER.info("Device type(%s) pack_num_max(%s)", bluetti_device.type, bluetti_device.pack_num_max) for pack in range (1, bluetti_device.pack_num_max + 1): - for name, field in battery_pack_fields(pack).items(): + for name, field in PACK_FIELD_ATTRIBUTES(pack).items(): all_fields.update({name+str(pack): field}) for field_key, field_config in all_fields.items(): - if bluetti_device.has_field(field_key) or field_config.id_override is not None: + if bluetti_device.has_field(field_key): category = None if field_config.setter is True or field_key in DIAGNOSTIC_FIELDS: category = EntityCategory.DIAGNOSTIC - if field_config.type == MqttFieldType.NUMERIC: + if field_config.type == FieldType.NUMERIC: sensors_to_add.append( BluettiSensor( hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR], device_info, address, field_key, - field_config.home_assistant_extra.get(CONF_NAME, ""), - field_config.home_assistant_extra.get(CONF_UNIT_OF_MEASUREMENT), - field_config.home_assistant_extra.get(CONF_DEVICE_CLASS), - field_config.home_assistant_extra.get(CONF_STATE_CLASS), + field_config.name, + field_config.unit_of_measurement, + field_config.device_class, + field_config.state_class, category=category, ) ) - elif field_config.type == MqttFieldType.ENUM: + elif field_config.type == FieldType.ENUM: sensors_to_add.append( BluettiSensor( hass.data[DOMAIN][entry.entry_id][DATA_COORDINATOR], device_info, address, field_key, - field_config.home_assistant_extra.get(CONF_NAME, ""), - options=field_config.home_assistant_extra.get(CONF_OPTIONS), + field_config.name, + options=[o.value for o in field_config.options], category=category, ) ) diff --git a/custom_components/bluetti_bt/switch.py b/custom_components/bluetti_bt/switch.py index 4428ad1..f1bca59 100644 --- a/custom_components/bluetti_bt/switch.py +++ b/custom_components/bluetti_bt/switch.py @@ -23,18 +23,13 @@ from homeassistant.helpers.update_coordinator import ( CoordinatorEntity, ) -from bluetti_mqtt.bluetooth.client import BluetoothClient -from bluetti_mqtt.core.devices.bluetti_device import BluettiDevice -from bluetti_mqtt.mqtt_client import ( - NORMAL_DEVICE_FIELDS, - DC_INPUT_FIELDS, - MqttFieldType, -) - +from .bluetti_bt_lib.base_devices.BluettiDevice import BluettiDevice +from .bluetti_bt_lib.const import WRITE_UUID +from .bluetti_bt_lib.field_attributes import FIELD_ATTRIBUTES, PACK_FIELD_ATTRIBUTES, FieldType 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 .const import CONTROL_FIELDS, DATA_COORDINATOR, DOMAIN from .coordinator import PollingCoordinator from .utils import mac_loggable, unique_id_loggable @@ -59,12 +54,10 @@ async def async_setup_entry( bluetti_device = build_device(address, device_name) sensors_to_add = [] - all_fields = NORMAL_DEVICE_FIELDS - all_fields.update(DC_INPUT_FIELDS) - all_fields.update(ADDITIONAL_DEVICE_FIELDS) + all_fields = FIELD_ATTRIBUTES for field_key, field_config in all_fields.items(): if bluetti_device.has_field(field_key): - if field_config.type == MqttFieldType.BOOL: + if field_config.type == FieldType.BOOL: if field_config.setter is True and field_key in CONTROL_FIELDS: sensors_to_add.append( BluettiSwitch( @@ -73,7 +66,7 @@ async def async_setup_entry( device_info, address, field_key, - field_config.home_assistant_extra.get(CONF_NAME, ""), + field_config.name, entry.entry_id ) ) @@ -171,7 +164,7 @@ class BluettiSwitch(CoordinatorEntity, SwitchEntity): # Send command _LOGGER.debug("Requesting %s (%s,%s)", command, self._response_key, state) await self._client.write_gatt_char( - BluetoothClient.WRITE_UUID, bytes(command) + WRITE_UUID, bytes(command) ) # Wait until device has changed value, otherwise reading register might reset it