mirror of
https://github.com/andvikt/mega_hacs.git
synced 2025-12-11 17:14: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(CONF_SKIP, description='исключить порт из сканирования', 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_UNIT_OF_MEASUREMENT, description='единицы измерений, либо строка либо мепинг'):
|
||||
vol.Any(str, {
|
||||
@@ -169,7 +171,8 @@ async def _save_service(hass: HomeAssistant, call: ServiceCall):
|
||||
await hub.save()
|
||||
else:
|
||||
for hub in hass.data[DOMAIN].values():
|
||||
await hub.save()
|
||||
if isinstance(hub, MegaD):
|
||||
await hub.save()
|
||||
|
||||
|
||||
@bind_hass
|
||||
|
||||
@@ -76,7 +76,10 @@ class BaseMegaEntity(CoordinatorEntity, RestoreEntity):
|
||||
|
||||
@property
|
||||
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
|
||||
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._loop = loop
|
||||
self.values = {}
|
||||
self.last_port = None
|
||||
self.updater = DataUpdateCoordinator(
|
||||
hass,
|
||||
self.lg,
|
||||
@@ -176,7 +177,7 @@ class MegaD:
|
||||
qos=2,
|
||||
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):
|
||||
for x in range(37):
|
||||
@@ -189,11 +190,13 @@ class MegaD:
|
||||
async with self.cnd:
|
||||
self.last_update = datetime.now()
|
||||
self.values[port] = value
|
||||
self.cnd.notify()
|
||||
self.last_port = port
|
||||
self.cnd.notify_all()
|
||||
|
||||
def _process_msg(self, msg):
|
||||
try:
|
||||
_, port = msg.topic.split('/')
|
||||
d = msg.topic.split('/')
|
||||
port = d[-1]
|
||||
except ValueError:
|
||||
self.lg.warning('can not process %s', msg)
|
||||
return
|
||||
|
||||
@@ -154,3 +154,9 @@ class Mega1WSensor(MegaPushEntity):
|
||||
|
||||
def _update(self, payload: dict):
|
||||
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:
|
||||
# для датчиков можно кастомизировать только имя и unit_of_measurement
|
||||
# для температуры и влажность unit определяется автоматически, для остальных юнита нет
|
||||
name: какой-то датчик
|
||||
name:
|
||||
hum: "влажность"
|
||||
temp: "температура"
|
||||
unit_of_measurement:
|
||||
hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
|
||||
temp: "°C"
|
||||
|
||||
Reference in New Issue
Block a user