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 | |
|---|---|---|---|
|
|
d3f76a88df | ||
|
|
fa2bb2674e | ||
|
|
a1ae4e294b |
@@ -65,7 +65,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 = 20
|
VERSION = 21
|
||||||
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):
|
||||||
@@ -133,7 +133,7 @@ class OptionsFlowHandler(config_entries.OptionsFlow):
|
|||||||
for x in PLATFORMS:
|
for x in PLATFORMS:
|
||||||
cfg.pop(x, None)
|
cfg.pop(x, None)
|
||||||
for x in REMOVE_CONFIG:
|
for x in REMOVE_CONFIG:
|
||||||
cfg.pop(x, default=None)
|
cfg.pop(x, None)
|
||||||
cfg.update(new)
|
cfg.update(new)
|
||||||
|
|
||||||
cfg['new_naming'] = new_naming
|
cfg['new_naming'] = new_naming
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity):
|
|||||||
self._lg = None
|
self._lg = None
|
||||||
self._unique_id = unique_id or f"mega_{mega.id}_{port}" + \
|
self._unique_id = unique_id or f"mega_{mega.id}_{port}" + \
|
||||||
(f"_{id_suffix}" if id_suffix else "")
|
(f"_{id_suffix}" if id_suffix else "")
|
||||||
_pt = port if not mega.new_naming else f'{port:02}'
|
_pt = port if not mega.new_naming else f'{port:02}' if isinstance(port, int) else port
|
||||||
self._name = name or f"{mega.id}_{_pt}" + \
|
self._name = name or f"{mega.id}_{_pt}" + \
|
||||||
(f"_{id_suffix}" if id_suffix else "")
|
(f"_{id_suffix}" if id_suffix else "")
|
||||||
self._customize: dict = None
|
self._customize: dict = None
|
||||||
@@ -123,7 +123,7 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity):
|
|||||||
def name(self):
|
def name(self):
|
||||||
c = self.customize.get(CONF_NAME)
|
c = self.customize.get(CONF_NAME)
|
||||||
if not isinstance(c, str):
|
if not isinstance(c, str):
|
||||||
_pt = self.port if not self.mega.new_naming else f'{self.port:02}'
|
_pt = self.port if not self.mega.new_naming else f'{self.port:02}' if isinstance(self.port, int) else self.port
|
||||||
c = self._name or f"{self.mega.id}_p{_pt}"
|
c = self._name or f"{self.mega.id}_p{_pt}"
|
||||||
return c
|
return c
|
||||||
|
|
||||||
@@ -157,6 +157,8 @@ class MegaPushEntity(BaseMegaEntity):
|
|||||||
|
|
||||||
def __update(self, value: dict):
|
def __update(self, value: dict):
|
||||||
self._update(value)
|
self._update(value)
|
||||||
|
if self.hass is None:
|
||||||
|
return
|
||||||
self.async_write_ha_state()
|
self.async_write_ha_state()
|
||||||
self.lg.debug(f'state after update %s', self.state)
|
self.lg.debug(f'state after update %s', self.state)
|
||||||
if self.mega.mqtt_inputs and not _events_on:
|
if self.mega.mqtt_inputs and not _events_on:
|
||||||
|
|||||||
@@ -470,45 +470,6 @@ class MegaD:
|
|||||||
async def scan_port(self, port):
|
async def scan_port(self, port):
|
||||||
data = await self.request(pt=port)
|
data = await self.request(pt=port)
|
||||||
return parse_config(data)
|
return parse_config(data)
|
||||||
# async with self.lck:
|
|
||||||
# if port in self._scanned:
|
|
||||||
# return self._scanned[port]
|
|
||||||
# url = f'http://{self.host}/{self.sec}/?pt={port}'
|
|
||||||
# self.lg.debug(
|
|
||||||
# f'scan port %s: %s', port, url
|
|
||||||
# )
|
|
||||||
# async with aiohttp.request('get', url) as req:
|
|
||||||
# html = await req.text()
|
|
||||||
# if req.status != 200:
|
|
||||||
# return
|
|
||||||
# tree = BeautifulSoup(html, features="lxml")
|
|
||||||
# pty = tree.find('select', attrs={'name': 'pty'})
|
|
||||||
# if pty is None:
|
|
||||||
# return
|
|
||||||
# else:
|
|
||||||
# pty = pty.find(selected=True)
|
|
||||||
# if pty:
|
|
||||||
# pty = pty['value']
|
|
||||||
# else:
|
|
||||||
# return
|
|
||||||
# if pty in ['0', '1']:
|
|
||||||
# m = tree.find('select', attrs={'name': 'm'})
|
|
||||||
# if m:
|
|
||||||
# m = m.find(selected=True)['value']
|
|
||||||
# self._scanned[port] = (pty, m)
|
|
||||||
# return pty, m
|
|
||||||
# elif pty == '3':
|
|
||||||
# m = tree.find('select', attrs={'name': 'd'})
|
|
||||||
# if m:
|
|
||||||
# m = m.find(selected=True)['value']
|
|
||||||
# self._scanned[port] = (pty, m)
|
|
||||||
# return pty, m
|
|
||||||
# elif pty in ('2', '4'): # эта часть не очень проработана, тут есть i2c который может работать неправильно
|
|
||||||
# m = tree.find('select', attrs={'name': 'd'})
|
|
||||||
# if m:
|
|
||||||
# m = m.find(selected=True)['value']
|
|
||||||
# self._scanned[port] = (pty, m or '0')
|
|
||||||
# return pty, m or '0'
|
|
||||||
|
|
||||||
async def scan_ports(self, nports=37):
|
async def scan_ports(self, nports=37):
|
||||||
for x in range(0, nports+1):
|
for x in range(0, nports+1):
|
||||||
@@ -584,7 +545,7 @@ class MegaD:
|
|||||||
for n in range(len(values)):
|
for n in range(len(values)):
|
||||||
ext_page = await self.request(pt=port, ext=n)
|
ext_page = await self.request(pt=port, ext=n)
|
||||||
ext_cfg = parse_config(ext_page)
|
ext_cfg = parse_config(ext_page)
|
||||||
pt = f'{port}e{n}'
|
pt = f'{port}e{n}' if not self.new_naming else f'{port:02}e{n}'
|
||||||
if ext_cfg.ety == '1':
|
if ext_cfg.ety == '1':
|
||||||
ret['light'][pt].append({})
|
ret['light'][pt].append({})
|
||||||
elif ext_cfg.ety == '0':
|
elif ext_cfg.ety == '0':
|
||||||
@@ -596,7 +557,8 @@ class MegaD:
|
|||||||
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)):
|
||||||
ret['light'][f'{port}e{n}'].append({'dimmer': True, 'dimmer_scale': 16})
|
pt = f'{port}e{n}' if not self.new_naming else f'{port:02}e{n}'
|
||||||
|
ret['light'][pt].append({'dimmer': True, 'dimmer_scale': 16})
|
||||||
elif cfg.pty == '4' and (cfg.gr == '0' or _cust.get(CONF_FORCE_I2C_SCAN)):
|
elif cfg.pty == '4' and (cfg.gr == '0' or _cust.get(CONF_FORCE_I2C_SCAN)):
|
||||||
# i2c в режиме ANY
|
# i2c в режиме ANY
|
||||||
scan = cfg.src.find('a', text='I2C Scan')
|
scan = cfg.src.find('a', text='I2C Scan')
|
||||||
|
|||||||
Reference in New Issue
Block a user