mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-11 00:54:28 +05:00
fix errors
This commit is contained in:
@@ -1,6 +1,19 @@
|
||||
from dataclasses import dataclass, field
|
||||
from bs4 import BeautifulSoup
|
||||
|
||||
inputs = [
|
||||
'eact',
|
||||
'inta',
|
||||
'misc',
|
||||
]
|
||||
selectors = [
|
||||
'pty',
|
||||
'm',
|
||||
'gr',
|
||||
'd',
|
||||
'ety',
|
||||
]
|
||||
|
||||
|
||||
@dataclass(frozen=True, eq=True)
|
||||
class Config:
|
||||
@@ -8,21 +21,16 @@ class Config:
|
||||
m: str = None
|
||||
gr: str = None
|
||||
d: str = None
|
||||
inta: str = field(compare=False, hash=False, default=None)
|
||||
ety: str = None
|
||||
inta: str = field(compare=False, hash=False, default=None)
|
||||
misc: str = field(compare=False, hash=False, default=None)
|
||||
eact: str = field(compare=False, hash=False, default=None)
|
||||
|
||||
|
||||
def parse_config(page: str):
|
||||
page = BeautifulSoup(page, features="lxml")
|
||||
ret = {}
|
||||
for x in [
|
||||
'pty',
|
||||
'm',
|
||||
'gr',
|
||||
'd',
|
||||
'ety',
|
||||
]:
|
||||
for x in selectors:
|
||||
v = page.find('select', attrs={'name': x})
|
||||
if v is None:
|
||||
continue
|
||||
@@ -31,12 +39,10 @@ def parse_config(page: str):
|
||||
if v:
|
||||
v = v['value']
|
||||
ret[x] = v
|
||||
v = page.find('input', attrs={'name': 'inta'})
|
||||
if v:
|
||||
ret['inta'] = v['value']
|
||||
v = page.find('input', attrs={'name': 'misc'})
|
||||
if v:
|
||||
ret['misc'] = v.get('checked', False)
|
||||
for x in inputs:
|
||||
v = page.find('input', attrs={'name': x})
|
||||
if v:
|
||||
ret[x] = v['value']
|
||||
return Config(**ret)
|
||||
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ class MegaView(HomeAssistantView):
|
||||
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:
|
||||
if e.startswith('ext'):
|
||||
idx = e[3:]
|
||||
pt = f'{pt_orig}e{idx}'
|
||||
data['pt_orig'] = pt_orig
|
||||
@@ -118,6 +118,8 @@ class MegaView(HomeAssistantView):
|
||||
hub.values[pt] = data
|
||||
for cb in self.callbacks[hub.id][pt]:
|
||||
cb(data)
|
||||
if pt in hub.ext_act:
|
||||
await hub.request(cmd=hub.ext_act[pt])
|
||||
else:
|
||||
hub.values[port] = data
|
||||
for cb in self.callbacks[hub.id][port]:
|
||||
|
||||
@@ -82,6 +82,7 @@ class MegaD:
|
||||
restore_on_restart=False,
|
||||
extenders=None,
|
||||
ext_in=None,
|
||||
ext_act=None,
|
||||
**kwargs,
|
||||
):
|
||||
"""Initialize."""
|
||||
@@ -98,6 +99,7 @@ class MegaD:
|
||||
self.http = None
|
||||
self.extenders = extenders or []
|
||||
self.ext_in = ext_in or {}
|
||||
self.ext_act = ext_act or {}
|
||||
self.poll_outs = poll_outs
|
||||
self.update_all = update_all if update_all is not None else True
|
||||
self.nports = nports
|
||||
@@ -517,6 +519,7 @@ class MegaD:
|
||||
ret['mqtt_id'] = await self.get_mqtt_id()
|
||||
ret['extenders'] = extenders = []
|
||||
ret['ext_in'] = ext_int = {}
|
||||
ret['ext_acts'] = ext_acts = {}
|
||||
async for port, cfg in self.scan_ports(nports):
|
||||
if cfg.pty == "0":
|
||||
ret['binary_sensor'][port].append({})
|
||||
@@ -542,10 +545,13 @@ class MegaD:
|
||||
for n in range(len(values)):
|
||||
ext_page = await self.request(pt=port, ext=n)
|
||||
ext_cfg = parse_config(ext_page)
|
||||
pt = f'{port}e{n}'
|
||||
if ext_cfg.ety == '1':
|
||||
ret['light'][f'{port}e{n}'].append({})
|
||||
ret['light'][pt].append({})
|
||||
elif ext_cfg.ety == '0':
|
||||
ret['binary_sensor'][f'{port}e{n}'].append({})
|
||||
if ext_cfg.eact:
|
||||
ext_acts[pt] = ext_cfg.eact
|
||||
ret['binary_sensor'][pt].append({})
|
||||
elif cfg == PCA9685:
|
||||
extenders.append(port)
|
||||
values = await self.request(pt=port, cmd='get')
|
||||
|
||||
Reference in New Issue
Block a user