From 39642700ca0c5d6c9b197d16a035b074ce2ccdc1 Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 15 Feb 2021 19:05:00 +0300 Subject: [PATCH] fix force_d --- custom_components/mega/__init__.py | 3 ++- custom_components/mega/exceptions.py | 4 ++++ custom_components/mega/http.py | 5 ++--- custom_components/mega/hub.py | 29 ++++++++++++++-------------- readme.md | 1 - 5 files changed, 23 insertions(+), 19 deletions(-) diff --git a/custom_components/mega/__init__.py b/custom_components/mega/__init__.py index 0c0bfc7..17aa573 100644 --- a/custom_components/mega/__init__.py +++ b/custom_components/mega/__init__.py @@ -28,8 +28,9 @@ CONFIG_SCHEMA = vol.Schema( { DOMAIN: { vol.Optional(CONF_ALLOW_HOSTS): [str], - vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool, + # 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.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool, vol.Optional(CONF_INVERT, default=False): bool, diff --git a/custom_components/mega/exceptions.py b/custom_components/mega/exceptions.py index 9165b10..ec65f3f 100644 --- a/custom_components/mega/exceptions.py +++ b/custom_components/mega/exceptions.py @@ -15,3 +15,7 @@ class DuplicateId(exceptions.HomeAssistantError): class InvalidAuth(exceptions.HomeAssistantError): """Error to indicate there is invalid auth.""" + + +class NoPort(Exception): + pass \ No newline at end of file diff --git a/custom_components/mega/http.py b/custom_components/mega/http.py index a1baaed..36103df 100644 --- a/custom_components/mega/http.py +++ b/custom_components/mega/http.py @@ -8,16 +8,15 @@ from aiohttp.web_request import Request from aiohttp.web_response import Response from homeassistant.helpers.template import Template -from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_RESPONSE_TEMPLATE from homeassistant.components.http import HomeAssistantView from homeassistant.core import HomeAssistant +from .const import EVENT_BINARY_SENSOR, DOMAIN, CONF_RESPONSE_TEMPLATE from .tools import make_ints from . import hub as h _LOGGER = logging.getLogger(__name__).getChild('http') class MegaView(HomeAssistantView): - """Handle Yandex Smart Home unauthorized requests.""" url = '/mega' name = 'mega' @@ -31,7 +30,7 @@ class MegaView(HomeAssistantView): mid: { pt: cfg[mid][pt][CONF_RESPONSE_TEMPLATE] for pt in cfg[mid] - if CONF_RESPONSE_TEMPLATE in cfg[mid][pt] + if isinstance(pt, int) and CONF_RESPONSE_TEMPLATE in cfg[mid][pt] } for mid in cfg if isinstance(cfg[mid], dict) } _LOGGER.debug('templates: %s', self.templates) diff --git a/custom_components/mega/hub.py b/custom_components/mega/hub.py index c5e857d..3a076e3 100644 --- a/custom_components/mega/hub.py +++ b/custom_components/mega/hub.py @@ -10,15 +10,19 @@ import json from bs4 import BeautifulSoup from homeassistant.components import mqtt -from homeassistant.const import (DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_PRESSURE, - DEVICE_CLASS_ILLUMINANCE, TEMP_CELSIUS, PERCENTAGE, LIGHT_LUX) +from homeassistant.const import ( + DEVICE_CLASS_TEMPERATURE, DEVICE_CLASS_HUMIDITY, DEVICE_CLASS_PRESSURE, + DEVICE_CLASS_ILLUMINANCE, TEMP_CELSIUS, PERCENTAGE, LIGHT_LUX +) from homeassistant.core import HomeAssistant -from homeassistant.helpers.entity import Entity from homeassistant.helpers.update_coordinator import DataUpdateCoordinator -from .const import TEMP, HUM, PRESS, LUX, PATT_SPLIT, DOMAIN, CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_SKIP, \ - CONF_FORCE_D +from .const import ( + TEMP, HUM, PRESS, + LUX, PATT_SPLIT, DOMAIN, + CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_FORCE_D +) from .entities import set_events_off, BaseMegaEntity -from .exceptions import CannotConnect +from .exceptions import CannotConnect, NoPort from .tools import make_ints TEMP_PATT = re.compile(r'temp:([01234567890\.]+)') @@ -44,13 +48,11 @@ CLASSES = { LUX: DEVICE_CLASS_ILLUMINANCE } I2C_DEVICE_TYPES = { - "2": LUX, # BH1750 - "3": LUX, # TSL2591 - "7": LUX, # MAX44009 - "70": LUX, # OPT3001 + "2": LUX, # BH1750 + "3": LUX, # TSL2591 + "7": LUX, # MAX44009 + "70": LUX, # OPT3001 } -class NoPort(Exception): - pass class MegaD: @@ -191,8 +193,7 @@ class MegaD: async def poll(self): """ - Send get port 0 every poll_interval. When answer is received, mega. becomes online else mega. becomes - offline + Polling ports """ self.lg.debug('poll') if self.mqtt is None: diff --git a/readme.md b/readme.md index a78b57d..341dc94 100644 --- a/readme.md +++ b/readme.md @@ -110,7 +110,6 @@ mega: # эти параметры можно использовать в условиях или непосредственно в шаблоне в виде {{pt}} response_template: >- {% if m==2 %}1:0{% else %}d{% endif %} - ``` Начиная с версии v0.3.17 ответ можно слать так же и в режиме MQTT. Аналогично, темплейт должен возвращать готовую команду