mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-11 17:14:28 +05:00
Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35f99877ca | ||
|
|
6c50b81bff | ||
|
|
c810693ba5 | ||
|
|
1fd321d4c1 | ||
|
|
6732e1b7a2 |
@@ -63,7 +63,7 @@ async def validate_input(hass: core.HomeAssistant, data):
|
||||
class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
|
||||
"""Handle a config flow for mega."""
|
||||
|
||||
VERSION = 19
|
||||
VERSION = 20
|
||||
CONNECTION_CLASS = config_entries.CONN_CLASS_ASSUMED
|
||||
|
||||
async def async_step_user(self, user_input=None):
|
||||
|
||||
@@ -530,9 +530,17 @@ class MegaD:
|
||||
:return:
|
||||
"""
|
||||
_params = tuple(params.items())
|
||||
return {
|
||||
delay = None
|
||||
if 'delay' in params:
|
||||
delay = params.pop('delay')
|
||||
ret = {
|
||||
_params: await self.request(**params)
|
||||
}
|
||||
self.lg.debug('i2c response: %s', ret)
|
||||
if delay:
|
||||
self.lg.debug('delay %s', delay)
|
||||
await asyncio.sleep(delay)
|
||||
return ret
|
||||
|
||||
async def get_config(self, nports=37):
|
||||
ret = defaultdict(lambda: defaultdict(list))
|
||||
@@ -590,6 +598,9 @@ class MegaD:
|
||||
self.lg.debug(f'scan results: %s', (req, parsed))
|
||||
ret['i2c'][port].extend(parsed)
|
||||
i2c_sensors.extend(req)
|
||||
elif cfg.pty == '4' and cfg.m == '2':
|
||||
# scl исключаем из сканирования
|
||||
continue
|
||||
elif cfg.pty in ('3', '2', '4'):
|
||||
http_cmd = 'get'
|
||||
if cfg.d == '5' and cfg.pty == '3':
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from dataclasses import dataclass, field
|
||||
from urllib.parse import parse_qsl, urlparse
|
||||
from bs4 import BeautifulSoup
|
||||
from homeassistant.const import (
|
||||
@@ -27,6 +28,12 @@ def parse_scan_page(page: str):
|
||||
elif c is Request:
|
||||
req.append(params)
|
||||
continue
|
||||
elif isinstance(c, Request):
|
||||
if c.delay:
|
||||
params = params.copy()
|
||||
params['delay'] = c.delay
|
||||
req.append(params)
|
||||
continue
|
||||
elif isinstance(c, tuple):
|
||||
suffix, c = c
|
||||
elif isinstance(c, str):
|
||||
@@ -55,8 +62,9 @@ class Skip:
|
||||
pass
|
||||
|
||||
|
||||
@dataclass
|
||||
class Request:
|
||||
pass
|
||||
delay: float = None
|
||||
|
||||
|
||||
i2c_classes = {
|
||||
@@ -92,7 +100,7 @@ i2c_classes = {
|
||||
('object', DEVICE_CLASS_TEMPERATURE),
|
||||
],
|
||||
'ptsensor': [
|
||||
Request, # запрос на измерение
|
||||
Request(delay=1), # запрос на измерение
|
||||
DEVICE_CLASS_PRESSURE,
|
||||
DEVICE_CLASS_TEMPERATURE,
|
||||
],
|
||||
|
||||
@@ -109,8 +109,10 @@ class MegaI2C(MegaPushEntity):
|
||||
def device_class(self):
|
||||
return self._device_class
|
||||
|
||||
@property
|
||||
def state(self):
|
||||
return self.mega.values[self._params]
|
||||
# self.lg.debug(f'get % all states: %', self._params, self.mega.values)
|
||||
return self.mega.values.get(self._params)
|
||||
|
||||
@property
|
||||
def device_class(self):
|
||||
|
||||
@@ -57,7 +57,7 @@ class PriorityLock(asyncio.Lock):
|
||||
locked and returns True.
|
||||
"""
|
||||
if (not self._locked and (self._waiters is None or
|
||||
all(w.cancelled() for _, w in self._waiters))):
|
||||
all(w.cancelled() for _, _, w in self._waiters))):
|
||||
self._locked = True
|
||||
return True
|
||||
|
||||
|
||||
Reference in New Issue
Block a user