Inital refactor work

This commit is contained in:
Luke Bonaccorsi 2023-08-03 18:33:20 +01:00
parent 610d032005
commit d55a1ceda5
1 changed files with 54 additions and 16 deletions

View File

@ -27,7 +27,14 @@ import ast
from typing import Any from typing import Any
from enum import IntEnum from enum import IntEnum
from homeassistant.loader import bind_hass from homeassistant.loader import bind_hass
from homeassistant.components.vacuum import VacuumEntity, VacuumEntityFeature from homeassistant.components.vacuum import (
StateVacuumEntity,
VacuumEntityFeature,
STATE_CLEANING,
STATE_DOCKED,
STATE_ERROR,
STATE_IDLE,
STATE_RETURNING,)
from homeassistant.config_entries import ConfigEntry from homeassistant.config_entries import ConfigEntry
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.helpers.device_registry import ( from homeassistant.helpers.device_registry import (
@ -106,16 +113,13 @@ async def async_setup_entry(
async_add_entities: AddEntitiesCallback, async_add_entities: AddEntitiesCallback,
) -> None: ) -> None:
"""Initialize my test integration 2 config entry.""" """Initialize my test integration 2 config entry."""
# print("vacuum:async_setup_entry")
vacuums = config_entry.data[CONF_VACS] vacuums = config_entry.data[CONF_VACS]
# print("Vac:", vacuums)
for item in vacuums: for item in vacuums:
item = vacuums[item] item = vacuums[item]
# print("item")
async_add_entities([RoboVacEntity(item)]) async_add_entities([RoboVacEntity(item)])
class RoboVacEntity(VacuumEntity): class RoboVacEntity(StateVacuumEntity):
"""Eufy Robovac version of a Vacuum entity""" """Eufy Robovac version of a Vacuum entity"""
_attr_should_poll = True _attr_should_poll = True
@ -134,7 +138,7 @@ class RoboVacEntity(VacuumEntity):
@property @property
def robovac_supported(self) -> str | None: def robovac_supported(self) -> str | None:
"""Return the cleaning mode of the vacuum cleaner.""" """Return the supported features of the vacuum cleaner."""
return self._attr_robovac_supported return self._attr_robovac_supported
@property @property
@ -232,8 +236,6 @@ class RoboVacEntity(VacuumEntity):
} }
def __init__(self, item) -> None: def __init__(self, item) -> None:
# print("vacuum:RoboVacEntity")
# print("init_item", item)
"""Initialize mytest2 Sensor.""" """Initialize mytest2 Sensor."""
super().__init__() super().__init__()
self._extra_state_attributes = {} self._extra_state_attributes = {}
@ -241,7 +243,7 @@ class RoboVacEntity(VacuumEntity):
self._attr_is_on = False self._attr_is_on = False
self._attr_name = item[CONF_NAME] self._attr_name = item[CONF_NAME]
self._attr_unique_id = item[CONF_ID] self._attr_unique_id = item[CONF_ID]
self._attr_supported_features = 4084 self._attr_supported_features = 0
self._attr_model_code = item[CONF_MODEL] self._attr_model_code = item[CONF_MODEL]
self._attr_ip_address = item[CONF_IP_ADDRESS] self._attr_ip_address = item[CONF_IP_ADDRESS]
self._attr_access_token = item[CONF_ACCESS_TOKEN] self._attr_access_token = item[CONF_ACCESS_TOKEN]
@ -256,12 +258,26 @@ class RoboVacEntity(VacuumEntity):
"T2128", "T2128",
"T2130", "T2130",
]: # C ]: # C
self._attr_fan_speed_list = ["No Suction", "Standard", "Boost IQ", "Max"] self._attr_fan_speed_list = [
"No Suction", "Standard", "Boost IQ", "Max"]
self._attr_robovac_supported = ( self._attr_robovac_supported = (
RoboVacEntityFeature.EDGE | RoboVacEntityFeature.SMALL_ROOM RoboVacEntityFeature.EDGE | RoboVacEntityFeature.SMALL_ROOM
) )
self._attr_supported_features = (
VacuumEntityFeature.BATTERY
| VacuumEntityFeature.CLEAN_SPOT
| VacuumEntityFeature.FAN_SPEED
| VacuumEntityFeature.LOCATE
| VacuumEntityFeature.PAUSE
| VacuumEntityFeature.RETURN_HOME
| VacuumEntityFeature.SEND_COMMAND
| VacuumEntityFeature.START
| VacuumEntityFeature.STATE
| VacuumEntityFeature.STOP
)
elif self.model_code[0:5] in ["T1250", "T2250", "T2251", "T2252", "T2253"]: # G elif self.model_code[0:5] in ["T1250", "T2250", "T2251", "T2252", "T2253"]: # G
self._attr_fan_speed_list = ["Standard", "Turbo", "Max", "Boost IQ"] self._attr_fan_speed_list = [
"Standard", "Turbo", "Max", "Boost IQ"]
self._attr_robovac_supported = ( self._attr_robovac_supported = (
RoboVacEntityFeature.CLEANING_TIME RoboVacEntityFeature.CLEANING_TIME
| RoboVacEntityFeature.CLEANING_AREA | RoboVacEntityFeature.CLEANING_AREA
@ -269,6 +285,18 @@ class RoboVacEntity(VacuumEntity):
| RoboVacEntityFeature.AUTO_RETURN | RoboVacEntityFeature.AUTO_RETURN
| RoboVacEntityFeature.CONSUMABLES | RoboVacEntityFeature.CONSUMABLES
) )
self._attr_supported_features = (
VacuumEntityFeature.BATTERY
| VacuumEntityFeature.CLEAN_SPOT
| VacuumEntityFeature.FAN_SPEED
| VacuumEntityFeature.LOCATE
| VacuumEntityFeature.PAUSE
| VacuumEntityFeature.RETURN_HOME
| VacuumEntityFeature.SEND_COMMAND
| VacuumEntityFeature.START
| VacuumEntityFeature.STATE
| VacuumEntityFeature.STOP
)
elif self.model_code[0:5] in ["T2262"]: # X elif self.model_code[0:5] in ["T2262"]: # X
self._attr_fan_speed_list = ["Pure", "Standard", "Turbo", "Max"] self._attr_fan_speed_list = ["Pure", "Standard", "Turbo", "Max"]
self._attr_robovac_supported = ( self._attr_robovac_supported = (
@ -282,6 +310,19 @@ class RoboVacEntity(VacuumEntity):
| RoboVacEntityFeature.MAP | RoboVacEntityFeature.MAP
| RoboVacEntityFeature.BOOST_IQ | RoboVacEntityFeature.BOOST_IQ
) )
self._attr_supported_features = (
VacuumEntityFeature.BATTERY
| VacuumEntityFeature.CLEAN_SPOT
| VacuumEntityFeature.FAN_SPEED
| VacuumEntityFeature.LOCATE
| VacuumEntityFeature.MAP
| VacuumEntityFeature.PAUSE
| VacuumEntityFeature.RETURN_HOME
| VacuumEntityFeature.SEND_COMMAND
| VacuumEntityFeature.START
| VacuumEntityFeature.STATE
| VacuumEntityFeature.STOP
)
else: else:
self._attr_fan_speed_list = ["Standard"] self._attr_fan_speed_list = ["Standard"]
self._attr_mode = None self._attr_mode = None
@ -294,8 +335,6 @@ class RoboVacEntity(VacuumEntity):
connections=[ connections=[
(CONNECTION_NETWORK_MAC, item[CONF_MAC]), (CONNECTION_NETWORK_MAC, item[CONF_MAC]),
], ],
access_token=item[CONF_ACCESS_TOKEN],
ip_address=item[CONF_IP_ADDRESS],
) )
self.vacuum = robovac( self.vacuum = robovac(
device_id=self.unique_id, device_id=self.unique_id,
@ -308,11 +347,9 @@ class RoboVacEntity(VacuumEntity):
self.error_code = None self.error_code = None
self.tuya_state = None self.tuya_state = None
self.tuyastatus = None self.tuyastatus = None
print("vac:", self.vacuum)
async def async_update(self): async def async_update(self):
"""Synchronise state from the vacuum.""" """Synchronise state from the vacuum."""
print("update:", self.name)
self.async_write_ha_state() self.async_write_ha_state()
if self.ip_address == "": if self.ip_address == "":
return return
@ -544,7 +581,8 @@ class RoboVacEntity(VacuumEntity):
"timestamp": round(time.time() * 1000), "timestamp": round(time.time() * 1000),
} }
json_str = json.dumps(method_call, separators=(",", ":")) json_str = json.dumps(method_call, separators=(",", ":"))
base64_str = base64.b64encode(json_str.encode("utf8")).decode("utf8") base64_str = base64.b64encode(
json_str.encode("utf8")).decode("utf8")
_LOGGER.info("roomClean call %s", json_str) _LOGGER.info("roomClean call %s", json_str)
await self.vacuum.async_set({"124": base64_str}, None) await self.vacuum.async_set({"124": base64_str}, None)
await asyncio.sleep(1) await asyncio.sleep(1)