This commit is contained in:
Andrey
2021-01-26 08:34:27 +03:00
parent c0b1247b9e
commit a7d7738a5c
4 changed files with 39 additions and 10 deletions

View File

@@ -155,10 +155,12 @@ class MegaOutPort(MegaPushEntity):
@property
def is_on(self) -> bool:
val = self.mega.values.get(self.port, {}).get("value")
val = self.mega.values.get(self.port, {})
if val is None and self._state is not None:
return self._state == 'ON'
elif val is not None:
val = val.get("value")
if not self.invert:
return val == 'ON' or str(val) == '1' or (safe_int(val) is not None and safe_int(val) > 0)
else:
@@ -186,10 +188,11 @@ class MegaOutPort(MegaPushEntity):
self.mega.values[self.port] = {'value': cmd}
await self.get_state()
def safe_int(v):
if v in ['ON', 'OFF']:
return None
try:
return int(v)
except ValueError:
except (ValueError, TypeError):
return None

View File

@@ -291,16 +291,18 @@ class MegaD:
value = None
try:
value = json.loads(msg.payload)
value = make_ints(value)
if isinstance(value, dict):
make_ints(value)
self.values[port] = value
for cb in self._callbacks[port]:
cb(value)
value = value.copy()
value['mega_id'] = self.id
self.hass.bus.async_fire(
EVENT_BINARY_SENSOR,
value,
)
if isinstance(value, dict):
value = value.copy()
value['mega_id'] = self.id
self.hass.bus.async_fire(
EVENT_BINARY_SENSOR,
value,
)
except Exception as exc:
self.lg.warning(f'could not parse json ({msg.payload}): {exc}')
return

View File

@@ -2,7 +2,7 @@ def make_ints(d: dict):
for x in d:
try:
d[x] = float(d[x])
except ValueError:
except (ValueError, TypeError):
pass
if 'm' not in d:
d['m'] = 0