mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-12 01:24:29 +05:00
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e06ba65ead | ||
|
|
22720a27bd | ||
|
|
d0769b5b02 |
@@ -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):
|
||||||
|
|||||||
@@ -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]:
|
||||||
|
|||||||
@@ -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)):
|
||||||
|
|||||||
Reference in New Issue
Block a user