mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-12 01:24:29 +05:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6503d6bddd |
@@ -17,7 +17,7 @@ from homeassistant.components import mqtt
|
|||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from .const import DOMAIN, CONF_INVERT, CONF_RELOAD, PLATFORMS, CONF_PORTS, CONF_CUSTOM, CONF_SKIP, CONF_PORT_TO_SCAN, \
|
from .const import DOMAIN, CONF_INVERT, CONF_RELOAD, PLATFORMS, CONF_PORTS, CONF_CUSTOM, CONF_SKIP, CONF_PORT_TO_SCAN, \
|
||||||
CONF_MQTT_INPUTS, CONF_HTTP, CONF_RESPONSE_TEMPLATE, CONF_ACTION, CONF_GET_VALUE, CONF_ALLOW_HOSTS, \
|
CONF_MQTT_INPUTS, CONF_HTTP, CONF_RESPONSE_TEMPLATE, CONF_ACTION, CONF_GET_VALUE, CONF_ALLOW_HOSTS, \
|
||||||
CONF_CONV_TEMPLATE, CONF_ALL, CONF_FORCE_D
|
CONF_CONV_TEMPLATE, CONF_ALL, CONF_FORCE_D, CONF_DEF_RESPONSE
|
||||||
from .hub import MegaD
|
from .hub import MegaD
|
||||||
from .config_flow import ConfigFlow
|
from .config_flow import ConfigFlow
|
||||||
from .http import MegaView
|
from .http import MegaView
|
||||||
@@ -53,6 +53,11 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
vol.Optional(CONF_ALLOW_HOSTS): [str],
|
vol.Optional(CONF_ALLOW_HOSTS): [str],
|
||||||
vol.Required(str, description='id меги из веб-интерфейса'): {
|
vol.Required(str, description='id меги из веб-интерфейса'): {
|
||||||
vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool,
|
vol.Optional(CONF_FORCE_D, description='Принудительно слать d после срабатывания входа', default=False): bool,
|
||||||
|
vol.Optional(
|
||||||
|
CONF_DEF_RESPONSE,
|
||||||
|
description='Ответ по умолчанию',
|
||||||
|
default=''
|
||||||
|
): cv.template,
|
||||||
vol.Optional(int, description='номер порта'): vol.Any(
|
vol.Optional(int, description='номер порта'): vol.Any(
|
||||||
CUSTOMIZE_PORT,
|
CUSTOMIZE_PORT,
|
||||||
CUSTOMIZE_DS2413,
|
CUSTOMIZE_DS2413,
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ async def validate_input(hass: core.HomeAssistant, data):
|
|||||||
class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||||
"""Handle a config flow for mega."""
|
"""Handle a config flow for mega."""
|
||||||
|
|
||||||
VERSION = 7
|
VERSION = 8
|
||||||
CONNECTION_CLASS = config_entries.CONN_CLASS_ASSUMED
|
CONNECTION_CLASS = config_entries.CONN_CLASS_ASSUMED
|
||||||
|
|
||||||
async def async_step_user(self, user_input=None):
|
async def async_step_user(self, user_input=None):
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ CONF_ALLOW_HOSTS = 'allow_hosts'
|
|||||||
CONF_CONV_TEMPLATE = 'conv_template'
|
CONF_CONV_TEMPLATE = 'conv_template'
|
||||||
CONF_POLL_OUTS = 'poll_outs'
|
CONF_POLL_OUTS = 'poll_outs'
|
||||||
CONF_FORCE_D = 'force_d'
|
CONF_FORCE_D = 'force_d'
|
||||||
|
CONF_DEF_RESPONSE = 'def_response'
|
||||||
PLATFORMS = [
|
PLATFORMS = [
|
||||||
"light",
|
"light",
|
||||||
"switch",
|
"switch",
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class MegaView(HomeAssistantView):
|
|||||||
hub.values[port] = data
|
hub.values[port] = data
|
||||||
for cb in self.callbacks[hub.id][port]:
|
for cb in self.callbacks[hub.id][port]:
|
||||||
cb(data)
|
cb(data)
|
||||||
template: Template = self.templates.get(hub.id, {}).get(port)
|
template: Template = self.templates.get(hub.id, {}).get(port, hub.def_response)
|
||||||
if hub.update_all and update_all:
|
if hub.update_all and update_all:
|
||||||
asyncio.create_task(self.later_update(hub))
|
asyncio.create_task(self.later_update(hub))
|
||||||
if template is not None:
|
if template is not None:
|
||||||
@@ -79,8 +79,10 @@ class MegaView(HomeAssistantView):
|
|||||||
ret = template.async_render(data)
|
ret = template.async_render(data)
|
||||||
_LOGGER.debug('response %s', ret)
|
_LOGGER.debug('response %s', ret)
|
||||||
Response(body='', content_type='text/plain', headers={'Server': 's', 'Date': 'n'})
|
Response(body='', content_type='text/plain', headers={'Server': 's', 'Date': 'n'})
|
||||||
if ret:
|
if 'd' in ret:
|
||||||
await hub.request(pt=port, cmd=ret)
|
await hub.request(pt=port, cmd=ret)
|
||||||
|
else:
|
||||||
|
await hub.request(cmd=ret)
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
async def later_update(self, hub):
|
async def later_update(self, hub):
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ from homeassistant.helpers.update_coordinator import DataUpdateCoordinator
|
|||||||
from .const import (
|
from .const import (
|
||||||
TEMP, HUM, PRESS,
|
TEMP, HUM, PRESS,
|
||||||
LUX, PATT_SPLIT, DOMAIN,
|
LUX, PATT_SPLIT, DOMAIN,
|
||||||
CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_FORCE_D
|
CONF_HTTP, EVENT_BINARY_SENSOR, CONF_CUSTOM, CONF_FORCE_D, CONF_DEF_RESPONSE
|
||||||
)
|
)
|
||||||
from .entities import set_events_off, BaseMegaEntity
|
from .entities import set_events_off, BaseMegaEntity
|
||||||
from .exceptions import CannotConnect, NoPort
|
from .exceptions import CannotConnect, NoPort
|
||||||
@@ -171,6 +171,10 @@ class MegaD:
|
|||||||
def force_d(self):
|
def force_d(self):
|
||||||
return self.customize.get(CONF_FORCE_D, False)
|
return self.customize.get(CONF_FORCE_D, False)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def def_response(self):
|
||||||
|
return self.customize.get(CONF_DEF_RESPONSE, None)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_online(self):
|
def is_online(self):
|
||||||
return (datetime.now() - self.last_update).total_seconds() < (self.poll_interval + 10)
|
return (datetime.now() - self.last_update).total_seconds() < (self.poll_interval + 10)
|
||||||
@@ -264,6 +268,8 @@ class MegaD:
|
|||||||
ret = ret.split(';')
|
ret = ret.split(';')
|
||||||
elif '/' in ret:
|
elif '/' in ret:
|
||||||
ret = ret.split('/')
|
ret = ret.split('/')
|
||||||
|
else:
|
||||||
|
ret = [ret]
|
||||||
ret = {'value': dict([
|
ret = {'value': dict([
|
||||||
x.split(':') for x in ret if x.count(':') == 1
|
x.split(':') for x in ret if x.count(':') == 1
|
||||||
])}
|
])}
|
||||||
|
|||||||
Reference in New Issue
Block a user