diff --git a/custom_components/mega/__init__.py b/custom_components/mega/__init__.py index f159030..613e8cc 100644 --- a/custom_components/mega/__init__.py +++ b/custom_components/mega/__init__.py @@ -24,7 +24,7 @@ from .http import MegaView _LOGGER = logging.getLogger(__name__) -CUSTOMIZE_PORT = vol.Schema({ +CUSTOMIZE_PORT = { vol.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool, vol.Optional(CONF_INVERT, default=False): bool, vol.Optional(CONF_NAME): vol.Any(str, { @@ -42,16 +42,15 @@ CUSTOMIZE_PORT = vol.Schema({ vol.Optional(CONF_ACTION): cv.script_action, # пока не реализовано vol.Optional(CONF_GET_VALUE, default=True): bool, vol.Optional(CONF_CONV_TEMPLATE): cv.template -}) -CUSTOMIZE_DS2413 = vol.Schema({ +} +CUSTOMIZE_DS2413 = { vol.Optional(str.lower, description='адрес и индекс устройства'): CUSTOMIZE_PORT -}) +} CONFIG_SCHEMA = vol.Schema( { DOMAIN: { vol.Optional(CONF_ALLOW_HOSTS): [str], - # vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool, vol.Required(str, description='id меги из веб-интерфейса'): { vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool, vol.Optional(int, description='номер порта'): vol.Any( diff --git a/custom_components/mega/entities.py b/custom_components/mega/entities.py index 53dda34..464e007 100644 --- a/custom_components/mega/entities.py +++ b/custom_components/mega/entities.py @@ -125,7 +125,8 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity): _task_set_ev_on = asyncio.create_task(_set_events_on()) async def get_state(self): - if self.mega.mqtt is None: + self.lg.debug(f'state is %s', self.state) + if not self.mega.mqtt_inputs: self.async_write_ha_state() @@ -249,6 +250,9 @@ class MegaOutPort(MegaPushEntity): elif val is not None: val = val.get("value") if self.index and self.addr: + if not isinstance(val, dict): + self.mega.lg.warning(f'{self} has wrong state: {val}') + return _val = val.get(self.addr) if not isinstance(val, str): self.mega.lg.warning(f'{self} has wrong state: {val}') @@ -284,10 +288,10 @@ class MegaOutPort(MegaPushEntity): cmd = brightness else: cmd = 1 if not self.invert else 0 - cmd = {"cmd": f"{self.cmd_port}:{cmd}"} + _cmd = {"cmd": f"{self.cmd_port}:{cmd}"} if self.addr: - cmd['addr'] = self.addr - await self.mega.request(**cmd) + _cmd['addr'] = self.addr + await self.mega.request(**_cmd) if self.index is not None: # обновление текущего стейта для ds2413 await self.mega.get_port( @@ -303,10 +307,10 @@ class MegaOutPort(MegaPushEntity): async def async_turn_off(self, **kwargs) -> None: cmd = "0" if not self.invert else "1" - cmd = {"cmd": f"{self.cmd_port}:{cmd}"} + _cmd = {"cmd": f"{self.cmd_port}:{cmd}"} if self.addr: - cmd['addr'] = self.addr - await self.mega.request(**cmd) + _cmd['addr'] = self.addr + await self.mega.request(**_cmd) if self.index is not None: # обновление текущего стейта для ds2413 await self.mega.get_port(