Compare commits

...

3 Commits

Author SHA1 Message Date
Andrey
e06ba65ead fix errors 2021-02-28 09:49:16 +03:00
Andrey
22720a27bd fix errors 2021-02-28 09:46:06 +03:00
Andrey
d0769b5b02 fix errors 2021-02-27 17:39:54 +03:00
3 changed files with 23 additions and 7 deletions

View File

@@ -63,7 +63,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 = 12 VERSION = 14
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):

View File

@@ -15,7 +15,11 @@ from .tools import make_ints
from . import hub as h from . import hub as h
_LOGGER = logging.getLogger(__name__).getChild('http') _LOGGER = logging.getLogger(__name__).getChild('http')
ext = {f'ext{x}' for x in range(16)}
def is_ext(data: typing.Dict[str, typing.Any]):
for x in data:
if x.startswith('ext'):
return True
class MegaView(HomeAssistantView): class MegaView(HomeAssistantView):
@@ -95,13 +99,21 @@ class MegaView(HomeAssistantView):
data['mega_id'] = hub.id data['mega_id'] = hub.id
ret = 'd' if hub.force_d else '' ret = 'd' if hub.force_d else ''
if port is not None: if port is not None:
if set(data).issubset(ext): if is_ext(data):
ret = '' # пока ответ всегда пустой, неясно какая будет реакция на непустой ответ ret = '' # пока ответ всегда пустой, неясно какая будет реакция на непустой ответ
for e in ext: if port in hub.extenders:
if e in data: pt_orig = port
else:
pt_orig = hub.ext_in.get(port)
if pt_orig is None:
hub.lg.warning(f'can not find extender for int port {port}')
return Response(status=200)
for e, v in data.items():
if e.startswith('ext') in data:
idx = e[-1] idx = e[-1]
pt = f'{port}e{idx}' pt = f'{pt_orig}e{idx}'
data['value'] = 'ON' if data[e] == '1' else 'OFF' data['pt_orig'] = pt_orig
data['value'] = 'ON' if v == '1' else 'OFF'
data['m'] = 1 if data[e] == '0' else 0 # имитация поведения обычного входа, чтобы события обрабатывались аналогично data['m'] = 1 if data[e] == '0' else 0 # имитация поведения обычного входа, чтобы события обрабатывались аналогично
hub.values[pt] = data hub.values[pt] = data
for cb in self.callbacks[hub.id][pt]: for cb in self.callbacks[hub.id][pt]:

View File

@@ -81,6 +81,7 @@ class MegaD:
protected=True, protected=True,
restore_on_restart=False, restore_on_restart=False,
extenders=None, extenders=None,
ext_in=None,
**kwargs, **kwargs,
): ):
"""Initialize.""" """Initialize."""
@@ -96,6 +97,7 @@ class MegaD:
else: else:
self.http = None self.http = None
self.extenders = extenders or [] self.extenders = extenders or []
self.ext_in = ext_in or {}
self.poll_outs = poll_outs self.poll_outs = poll_outs
self.update_all = update_all if update_all is not None else True self.update_all = update_all if update_all is not None else True
self.nports = nports self.nports = nports
@@ -514,6 +516,7 @@ class MegaD:
ret = defaultdict(lambda: defaultdict(list)) ret = defaultdict(lambda: defaultdict(list))
ret['mqtt_id'] = await self.get_mqtt_id() ret['mqtt_id'] = await self.get_mqtt_id()
ret['extenders'] = extenders = [] ret['extenders'] = extenders = []
ret['ext_in'] = ext_int = {}
async for port, cfg in self.scan_ports(nports): async for port, cfg in self.scan_ports(nports):
if cfg.pty == "0": if cfg.pty == "0":
ret['binary_sensor'][port].append({}) ret['binary_sensor'][port].append({})
@@ -533,6 +536,7 @@ class MegaD:
]) ])
elif cfg == MCP230: elif cfg == MCP230:
extenders.append(port) extenders.append(port)
ext_int[int(cfg.inta)] = port
values = await self.request(pt=port, cmd='get') values = await self.request(pt=port, cmd='get')
values = values.split(';') values = values.split(';')
for n in range(len(values)): for n in range(len(values)):