Compare commits

...

6 Commits

Author SHA1 Message Date
Andrey
4e2d659c44 fix mid 2021-01-22 21:32:55 +03:00
Andrey
e0b4fec0ca add name cusomisation for multiple sensors 2021-01-22 12:28:04 +03:00
Andrey
b5e4b2c802 add name cusomisation for multiple sensors 2021-01-22 12:27:07 +03:00
Andrey
ed6a86a721 add name cusomisation for multiple sensors 2021-01-22 12:24:38 +03:00
Andrey
811f2067bb fix save_all service 2021-01-22 12:20:16 +03:00
Andrey
3e1499f78b fix get_port 2021-01-22 12:16:32 +03:00
5 changed files with 24 additions and 7 deletions

View File

@@ -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

View File

@@ -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):

View File

@@ -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

View File

@@ -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

View File

@@ -54,7 +54,9 @@ mega:
33:
# для датчиков можно кастомизировать только имя и unit_of_measurement
# для температуры и влажность unit определяется автоматически, для остальных юнита нет
name: какой-то датчик
name:
hum: "влажность"
temp: "температура"
unit_of_measurement:
hum: "%" # если датчиков несколько, то можно указывать юниты по их ключам
temp: "°C"