Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Split entity between entity and executor logic [refactor] #506

Merged
merged 8 commits into from
Aug 10, 2021
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 33 additions & 29 deletions custom_components/tahoma/alarm_control_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
from homeassistant.helpers.entity_platform import AddEntitiesCallback

from .const import DOMAIN
from .tahoma_entity import TahomaEntity
from .entity import OverkizEntity

COMMAND_ALARM_OFF = "alarmOff"
COMMAND_ALARM_ON = "alarmOn"
Expand Down Expand Up @@ -95,14 +95,16 @@ async def async_setup_entry(
async_add_entities(entities)


class TahomaAlarmControlPanel(TahomaEntity, AlarmControlPanelEntity):
class TahomaAlarmControlPanel(OverkizEntity, AlarmControlPanelEntity):
"""Representation of a TaHoma Alarm Control Panel."""

@property
def state(self):
"""Return the state of the device."""
if self.has_state(CORE_INTRUSION_STATE, INTERNAL_INTRUSION_DETECTED_STATE):
state = self.select_state(
if self.executor.has_state(
CORE_INTRUSION_STATE, INTERNAL_INTRUSION_DETECTED_STATE
):
state = self.executor.select_state(
CORE_INTRUSION_STATE, INTERNAL_INTRUSION_DETECTED_STATE
)
if state == STATE_DETECTED:
Expand All @@ -111,24 +113,26 @@ def state(self):
return STATE_ALARM_PENDING

if (
self.has_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
and self.has_state(INTERNAL_TARGET_ALARM_MODE_STATE)
and self.select_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
!= self.select_state(INTERNAL_TARGET_ALARM_MODE_STATE)
self.executor.has_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
and self.executor.has_state(INTERNAL_TARGET_ALARM_MODE_STATE)
and self.executor.select_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
!= self.executor.select_state(INTERNAL_TARGET_ALARM_MODE_STATE)
):
return STATE_ALARM_PENDING

if self.has_state(MYFOX_ALARM_STATUS_STATE):
return MAP_MYFOX_STATUS_STATE[self.select_state(MYFOX_ALARM_STATUS_STATE)]
if self.executor.has_state(MYFOX_ALARM_STATUS_STATE):
return MAP_MYFOX_STATUS_STATE[
self.executor.select_state(MYFOX_ALARM_STATUS_STATE)
]

if self.has_state(INTERNAL_CURRENT_ALARM_MODE_STATE):
if self.executor.has_state(INTERNAL_CURRENT_ALARM_MODE_STATE):
return MAP_INTERNAL_STATUS_STATE[
self.select_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
self.executor.select_state(INTERNAL_CURRENT_ALARM_MODE_STATE)
]

if self.has_state(VERISURE_ALARM_PANEL_MAIN_ARM_TYPE_STATE):
if self.executor.has_state(VERISURE_ALARM_PANEL_MAIN_ARM_TYPE_STATE):
return MAP_VERISURE_STATUS_STATE[
self.select_state(VERISURE_ALARM_PANEL_MAIN_ARM_TYPE_STATE)
self.executor.select_state(VERISURE_ALARM_PANEL_MAIN_ARM_TYPE_STATE)
]

return None
Expand All @@ -138,59 +142,59 @@ def supported_features(self) -> int:
"""Return the list of supported features."""
supported_features = 0

if self.has_command(COMMAND_ARM, COMMAND_ALARM_ON):
if self.executor.has_command(COMMAND_ARM, COMMAND_ALARM_ON):
supported_features |= SUPPORT_ALARM_ARM_AWAY

if self.has_command(COMMAND_ALARM_PARTIAL_1, COMMAND_ARM_PARTIAL_DAY):
if self.executor.has_command(COMMAND_ALARM_PARTIAL_1, COMMAND_ARM_PARTIAL_DAY):
supported_features |= SUPPORT_ALARM_ARM_HOME

if self.has_command(
if self.executor.has_command(
COMMAND_PARTIAL, COMMAND_ALARM_PARTIAL_2, COMMAND_ARM_PARTIAL_NIGHT
):
supported_features |= SUPPORT_ALARM_ARM_NIGHT

if self.has_command(COMMAND_SET_ALARM_STATUS):
if self.executor.has_command(COMMAND_SET_ALARM_STATUS):
supported_features |= SUPPORT_ALARM_TRIGGER
supported_features |= SUPPORT_ALARM_ARM_CUSTOM_BYPASS

return supported_features

async def async_alarm_disarm(self, code=None):
"""Send disarm command."""
await self.async_execute_command(
self.select_command(COMMAND_DISARM, COMMAND_ALARM_OFF)
await self.executor.async_execute_command(
self.executor.select_command(COMMAND_DISARM, COMMAND_ALARM_OFF)
)

async def async_alarm_arm_home(self, code=None):
"""Send arm home command."""
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_ALARM_PARTIAL_1, COMMAND_ARM_PARTIAL_DAY
)

async def async_alarm_arm_night(self, code=None):
"""Send arm night command."""
await self.async_execute_command(
self.select_command(
await self.executor.async_execute_command(
self.executor.select_command(
COMMAND_PARTIAL, COMMAND_ALARM_PARTIAL_2, COMMAND_ARM_PARTIAL_NIGHT
)
)

async def async_alarm_arm_away(self, code=None):
"""Send arm away command."""
await self.async_execute_command(
self.select_command(COMMAND_ARM, COMMAND_ALARM_ON)
await self.executor.async_execute_command(
self.executor.select_command(COMMAND_ARM, COMMAND_ALARM_ON)
)

async def async_alarm_trigger(self, code=None) -> None:
"""Send alarm trigger command."""
await self.async_execute_command(
self.select_command(COMMAND_SET_ALARM_STATUS, STATE_DETECTED)
await self.executor.async_execute_command(
self.executor.select_command(COMMAND_SET_ALARM_STATUS, STATE_DETECTED)
)

async def async_alarm_arm_custom_bypass(self, code=None) -> None:
"""Send arm custom bypass command."""
await self.async_execute_command(
self.select_command(COMMAND_SET_ALARM_STATUS, STATE_UNDETECTED)
await self.executor.async_execute_command(
self.executor.select_command(COMMAND_SET_ALARM_STATUS, STATE_UNDETECTED)
)

@property
Expand Down
6 changes: 3 additions & 3 deletions custom_components/tahoma/binary_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from homeassistant.helpers.entity_platform import AddEntitiesCallback

from .const import DOMAIN
from .tahoma_entity import TahomaEntity
from .tahoma_entity import OverkizEntity

CORE_ASSEMBLY_STATE = "core:AssemblyState"
CORE_BUTTON_STATE = "core:ButtonState"
Expand Down Expand Up @@ -77,15 +77,15 @@ async def async_setup_entry(
async_add_entities(entities)


class TahomaBinarySensor(TahomaEntity, BinarySensorEntity):
class TahomaBinarySensor(OverkizEntity, BinarySensorEntity):
"""Representation of a TaHoma Binary Sensor."""

@property
def is_on(self):
"""Return the state of the sensor."""

return (
self.select_state(
self.executor.select_state(
CORE_ASSEMBLY_STATE,
CORE_BUTTON_STATE,
CORE_CONTACT_STATE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
)
from homeassistant.const import TEMP_CELSIUS

from ..tahoma_entity import TahomaEntity
from ..entity import OverkizEntity

COMMAND_SET_HEATING_LEVEL = "setHeatingLevel"

Expand Down Expand Up @@ -44,7 +44,7 @@
HVAC_MODES_TO_TAHOMA = {v: k for k, v in TAHOMA_TO_HVAC_MODES.items()}


class AtlanticElectricalHeater(TahomaEntity, ClimateEntity):
class AtlanticElectricalHeater(OverkizEntity, ClimateEntity):
"""Representation of Atlantic Electrical Heater."""

@property
Expand All @@ -60,7 +60,7 @@ def supported_features(self) -> int:
@property
def hvac_mode(self) -> str:
"""Return hvac operation ie. heat, cool mode."""
return TAHOMA_TO_HVAC_MODES[self.select_state(CORE_ON_OFF_STATE)]
return TAHOMA_TO_HVAC_MODES[self.executor.select_state(CORE_ON_OFF_STATE)]

@property
def hvac_modes(self) -> List[str]:
Expand All @@ -69,14 +69,16 @@ def hvac_modes(self) -> List[str]:

async def async_set_hvac_mode(self, hvac_mode: str) -> None:
"""Set new target hvac mode."""
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_HEATING_LEVEL, HVAC_MODES_TO_TAHOMA[hvac_mode]
)

@property
def preset_mode(self) -> Optional[str]:
"""Return the current preset mode, e.g., home, away, temp."""
return TAHOMA_TO_PRESET_MODES[self.select_state(IO_TARGET_HEATING_LEVEL_STATE)]
return TAHOMA_TO_PRESET_MODES[
self.executor.select_state(IO_TARGET_HEATING_LEVEL_STATE)
]

@property
def preset_modes(self) -> Optional[List[str]]:
Expand All @@ -85,6 +87,6 @@ def preset_modes(self) -> Optional[List[str]]:

async def async_set_preset_mode(self, preset_mode: str) -> None:
"""Set new preset mode."""
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_HEATING_LEVEL, PRESET_MODES_TO_TAHOMA[preset_mode]
)
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
from homeassistant.helpers.event import async_track_state_change

from ..coordinator import TahomaDataUpdateCoordinator
from ..tahoma_entity import TahomaEntity
from ..entity import OverkizEntity

_LOGGER = logging.getLogger(__name__)

Expand Down Expand Up @@ -80,7 +80,7 @@


class AtlanticElectricalHeaterWithAdjustableTemperatureSetpoint(
TahomaEntity, ClimateEntity
OverkizEntity, ClimateEntity
):
"""Representation of Atlantic Electrical Heater (With Adjustable Temperature Setpoint)."""

Expand Down Expand Up @@ -164,10 +164,10 @@ def supported_features(self) -> int:
"""Return the list of supported features."""
supported_features = 0

if self.has_command(COMMAND_SET_HEATING_LEVEL):
if self.executor.has_command(COMMAND_SET_HEATING_LEVEL):
supported_features |= SUPPORT_PRESET_MODE

if self.has_command(COMMAND_SET_TARGET_TEMPERATURE):
if self.executor.has_command(COMMAND_SET_TARGET_TEMPERATURE):
supported_features |= SUPPORT_TARGET_TEMPERATURE

return supported_features
Expand All @@ -181,23 +181,25 @@ def hvac_modes(self) -> List[str]:
def hvac_mode(self) -> str:
"""Return hvac operation ie. heat, cool mode."""
if CORE_OPERATING_MODE_STATE in self.device.states:
return TAHOMA_TO_HVAC_MODE[self.select_state(CORE_OPERATING_MODE_STATE)]
return TAHOMA_TO_HVAC_MODE[
self.executor.select_state(CORE_OPERATING_MODE_STATE)
]
if CORE_ON_OFF_STATE in self.device.states:
return TAHOMA_TO_HVAC_MODE[self.select_state(CORE_ON_OFF_STATE)]
return TAHOMA_TO_HVAC_MODE[self.executor.select_state(CORE_ON_OFF_STATE)]

async def async_set_hvac_mode(self, hvac_mode: str) -> None:
"""Set new target hvac mode."""
if CORE_OPERATING_MODE_STATE in self.device.states:
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_OPERATING_MODE, HVAC_MODE_TO_TAHOMA[hvac_mode]
)
else:
if hvac_mode == HVAC_MODE_OFF:
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_OFF,
)
else:
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_HEATING_LEVEL, PRESET_STATE_COMFORT
)

Expand All @@ -209,24 +211,26 @@ def preset_modes(self) -> Optional[List[str]]:
@property
def preset_mode(self) -> Optional[str]:
"""Return the current preset mode, e.g., home, away, temp."""
return TAHOMA_TO_PRESET_MODE[self.select_state(IO_TARGET_HEATING_LEVEL_STATE)]
return TAHOMA_TO_PRESET_MODE[
self.executor.select_state(IO_TARGET_HEATING_LEVEL_STATE)
]

async def async_set_preset_mode(self, preset_mode: str) -> None:
"""Set new preset mode."""
if preset_mode == PRESET_AUTO or preset_mode == PRESET_PROG:
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_OPERATING_MODE, PRESET_MODE_TO_TAHOMA[preset_mode]
)
else:
await self.async_execute_command(
await self.executor.async_execute_command(
COMMAND_SET_HEATING_LEVEL, PRESET_MODE_TO_TAHOMA[preset_mode]
)

@property
def target_temperature(self) -> None:
"""Return the temperature."""
if CORE_TARGET_TEMPERATURE_STATE in self.device.states:
return self.select_state(CORE_TARGET_TEMPERATURE_STATE)
return self.executor.select_state(CORE_TARGET_TEMPERATURE_STATE)

@property
def current_temperature(self):
Expand All @@ -236,4 +240,6 @@ def current_temperature(self):
async def async_set_temperature(self, **kwargs) -> None:
"""Set new temperature."""
temperature = kwargs.get(ATTR_TEMPERATURE)
await self.async_execute_command(COMMAND_SET_TARGET_TEMPERATURE, temperature)
await self.executor.async_execute_command(
COMMAND_SET_TARGET_TEMPERATURE, temperature
)
Loading