mirror of
https://github.com/home-assistant/core.git
synced 2025-06-04 13:17:06 +00:00

* rebase * fixed review comments * fix test * Update tests * increase test coverage * implement some review comments * Enhance device check for old FWs and add tests * Reworked exception handling * small code optimizations * fix test * Increase test coverage * Update __init__.py changed from hass.config_entries.async_setup_platforms(entry, PLATFORMS) to await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS) * Update __init__.py remove spaces * Bump python-mystrom to 2.2.0 * Migrate to get_device_info from python-mystrom * Migrate to get_device_info from python-mystrom * Update __init__.py * update requirements_all.txt * update config_flow * fix tests * Update homeassistant/components/mystrom/__init__.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Implemented review changes * increase test coverage * Implemented user defined title * implemented user defined title * Additional review comments * fix test * fix linter * fix linter * Update homeassistant/components/mystrom/models.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * fix review comments * fix missing import * simplify * Update homeassistant/components/mystrom/__init__.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/__init__.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_init.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_init.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_init.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_init.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/light.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update homeassistant/components/mystrom/switch.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * fix review comments * fix review comments * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * fix review comment * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> * Update tests/components/mystrom/test_config_flow.py Co-authored-by: epenet <6771947+epenet@users.noreply.github.com> --------- Co-authored-by: epenet <6771947+epenet@users.noreply.github.com>
80 lines
2.4 KiB
Python
80 lines
2.4 KiB
Python
"""The myStrom integration."""
|
|
from __future__ import annotations
|
|
|
|
import logging
|
|
|
|
import pymystrom
|
|
from pymystrom.bulb import MyStromBulb
|
|
from pymystrom.exceptions import MyStromConnectionError
|
|
from pymystrom.switch import MyStromSwitch
|
|
|
|
from homeassistant.config_entries import ConfigEntry
|
|
from homeassistant.const import CONF_HOST, Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.exceptions import ConfigEntryNotReady
|
|
|
|
from .const import DOMAIN
|
|
from .models import MyStromData
|
|
|
|
PLATFORMS_SWITCH = [Platform.SWITCH]
|
|
PLATFORMS_BULB = [Platform.LIGHT]
|
|
|
|
_LOGGER = logging.getLogger(__name__)
|
|
|
|
|
|
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Set up myStrom from a config entry."""
|
|
host = entry.data[CONF_HOST]
|
|
device = None
|
|
try:
|
|
info = await pymystrom.get_device_info(host)
|
|
except MyStromConnectionError as err:
|
|
_LOGGER.error("No route to myStrom plug: %s", host)
|
|
raise ConfigEntryNotReady() from err
|
|
|
|
device_type = info["type"]
|
|
if device_type in [101, 106, 107]:
|
|
device = MyStromSwitch(host)
|
|
platforms = PLATFORMS_SWITCH
|
|
elif device_type == 102:
|
|
mac = info["mac"]
|
|
device = MyStromBulb(host, mac)
|
|
platforms = PLATFORMS_BULB
|
|
if device.bulb_type not in ["rgblamp", "strip"]:
|
|
_LOGGER.error(
|
|
"Device %s (%s) is not a myStrom bulb nor myStrom LED Strip",
|
|
host,
|
|
mac,
|
|
)
|
|
return False
|
|
else:
|
|
_LOGGER.error("Unsupported myStrom device type: %s", device_type)
|
|
return False
|
|
|
|
try:
|
|
await device.get_state()
|
|
except MyStromConnectionError as err:
|
|
_LOGGER.error("No route to myStrom plug: %s", info["ip"])
|
|
raise ConfigEntryNotReady() from err
|
|
|
|
hass.data.setdefault(DOMAIN, {})[entry.entry_id] = MyStromData(
|
|
device=device,
|
|
info=info,
|
|
)
|
|
await hass.config_entries.async_forward_entry_setups(entry, platforms)
|
|
|
|
return True
|
|
|
|
|
|
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
|
"""Unload a config entry."""
|
|
device_type = hass.data[DOMAIN][entry.entry_id].info["type"]
|
|
if device_type in [101, 106, 107]:
|
|
platforms = PLATFORMS_SWITCH
|
|
elif device_type == 102:
|
|
platforms = PLATFORMS_BULB
|
|
if unload_ok := await hass.config_entries.async_unload_platforms(entry, platforms):
|
|
hass.data[DOMAIN].pop(entry.entry_id)
|
|
|
|
return unload_ok
|