mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-12 09:34:28 +05:00
Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4e2d659c44 | ||
|
|
e0b4fec0ca | ||
|
|
b5e4b2c802 | ||
|
|
ed6a86a721 | ||
|
|
811f2067bb | ||
|
|
3e1499f78b |
@@ -26,7 +26,9 @@ CONFIG_SCHEMA = vol.Schema(
|
|||||||
vol.Optional(int, description='номер порта'): {
|
vol.Optional(int, description='номер порта'): {
|
||||||
vol.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool,
|
vol.Optional(CONF_SKIP, description='исключить порт из сканирования', default=False): bool,
|
||||||
vol.Optional(CONF_INVERT, default=False): bool,
|
vol.Optional(CONF_INVERT, default=False): bool,
|
||||||
vol.Optional(CONF_NAME): str,
|
vol.Optional(CONF_NAME): vol.Any(str, {
|
||||||
|
vol.Required(str): str
|
||||||
|
}),
|
||||||
vol.Optional(CONF_DOMAIN): vol.Any('light', 'switch'),
|
vol.Optional(CONF_DOMAIN): vol.Any('light', 'switch'),
|
||||||
vol.Optional(CONF_UNIT_OF_MEASUREMENT, description='единицы измерений, либо строка либо мепинг'):
|
vol.Optional(CONF_UNIT_OF_MEASUREMENT, description='единицы измерений, либо строка либо мепинг'):
|
||||||
vol.Any(str, {
|
vol.Any(str, {
|
||||||
@@ -169,6 +171,7 @@ async def _save_service(hass: HomeAssistant, call: ServiceCall):
|
|||||||
await hub.save()
|
await hub.save()
|
||||||
else:
|
else:
|
||||||
for hub in hass.data[DOMAIN].values():
|
for hub in hass.data[DOMAIN].values():
|
||||||
|
if isinstance(hub, MegaD):
|
||||||
await hub.save()
|
await hub.save()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -76,7 +76,10 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def name(self):
|
||||||
return self.customize.get(CONF_NAME) or self._name or f"{self.mega.id}_p{self.port}"
|
c = self.customize.get(CONF_NAME)
|
||||||
|
if not isinstance(c, str):
|
||||||
|
c = self._name or f"{self.mega.id}_p{self.port}"
|
||||||
|
return c
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def unique_id(self):
|
def unique_id(self):
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ class MegaD:
|
|||||||
self._callbacks: typing.DefaultDict[int, typing.List[typing.Callable[[dict], typing.Coroutine]]] = defaultdict(list)
|
self._callbacks: typing.DefaultDict[int, typing.List[typing.Callable[[dict], typing.Coroutine]]] = defaultdict(list)
|
||||||
self._loop = loop
|
self._loop = loop
|
||||||
self.values = {}
|
self.values = {}
|
||||||
|
self.last_port = None
|
||||||
self.updater = DataUpdateCoordinator(
|
self.updater = DataUpdateCoordinator(
|
||||||
hass,
|
hass,
|
||||||
self.lg,
|
self.lg,
|
||||||
@@ -176,7 +177,7 @@ class MegaD:
|
|||||||
qos=2,
|
qos=2,
|
||||||
retain=False,
|
retain=False,
|
||||||
)
|
)
|
||||||
await asyncio.wait_for(self.cnd.wait(), timeout=15)
|
await asyncio.wait_for(self.cnd.wait_for(lambda: self.last_port == port), timeout=15)
|
||||||
|
|
||||||
async def get_all_ports(self):
|
async def get_all_ports(self):
|
||||||
for x in range(37):
|
for x in range(37):
|
||||||
@@ -189,11 +190,13 @@ class MegaD:
|
|||||||
async with self.cnd:
|
async with self.cnd:
|
||||||
self.last_update = datetime.now()
|
self.last_update = datetime.now()
|
||||||
self.values[port] = value
|
self.values[port] = value
|
||||||
self.cnd.notify()
|
self.last_port = port
|
||||||
|
self.cnd.notify_all()
|
||||||
|
|
||||||
def _process_msg(self, msg):
|
def _process_msg(self, msg):
|
||||||
try:
|
try:
|
||||||
_, port = msg.topic.split('/')
|
d = msg.topic.split('/')
|
||||||
|
port = d[-1]
|
||||||
except ValueError:
|
except ValueError:
|
||||||
self.lg.warning('can not process %s', msg)
|
self.lg.warning('can not process %s', msg)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -154,3 +154,9 @@ class Mega1WSensor(MegaPushEntity):
|
|||||||
|
|
||||||
def _update(self, payload: dict):
|
def _update(self, payload: dict):
|
||||||
self.mega.values[self.port] = payload
|
self.mega.values[self.port] = payload
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
n = super().name
|
||||||
|
c = self.customize.get(CONF_NAME, {}).get(self.key)
|
||||||
|
return c or n
|
||||||
@@ -54,7 +54,9 @@ mega:
|
|||||||
33:
|
33:
|
||||||
# для датчиков можно кастомизировать только имя и unit_of_measurement
|
# для датчиков можно кастомизировать только имя и unit_of_measurement
|
||||||
# для температуры и влажность unit определяется автоматически, для остальных юнита нет
|
# для температуры и влажность unit определяется автоматически, для остальных юнита нет
|
||||||
name: какой-то датчик
|
name:
|
||||||
|
hum: "влажность"
|
||||||
|
temp: "температура"
|
||||||
unit_of_measurement:
|
unit_of_measurement:
|
||||||
hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
|
hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
|
||||||
temp: "°C"
|
temp: "°C"
|
||||||
|
|||||||
Reference in New Issue
Block a user