diff --git a/custom_components/mega/binary_sensor.py b/custom_components/mega/binary_sensor.py index d7f81f5..722c78d 100644 --- a/custom_components/mega/binary_sensor.py +++ b/custom_components/mega/binary_sensor.py @@ -78,14 +78,15 @@ class MegaBinarySensor(BinarySensorEntity, MegaPushEntity): @property def is_on(self) -> bool: - val = self.mega.values.get(self.port, {}).get("value") \ - or self.mega.values.get(self.port, {}).get('m') + val = self.mega.values.get(self.port, {}) + if isinstance(val, dict): + val = val.get("value", val.get('m')) if val is None and self._state is not None: return self._state == 'ON' elif val is not None: - if val in ['ON', 'OFF']: - return val == 'ON' if not self.invert else val == 'OFF' - else: + if val in ['ON', 'OFF', '1', '0']: + return val in ['ON', '1'] if not self.invert else val in ['OFF', '0'] + elif isinstance(val, int): return val != 1 if not self.invert else val == 1 def _update(self, payload: dict): diff --git a/custom_components/mega/entities.py b/custom_components/mega/entities.py index 5a7893a..4884aef 100644 --- a/custom_components/mega/entities.py +++ b/custom_components/mega/entities.py @@ -247,8 +247,8 @@ class MegaOutPort(MegaPushEntity): val = 0 if val == 0: return self._brightness - else: - return val + elif isinstance(val, (int, float)): + return int(val / self.dimmer_scale) elif val is not None: val = val.get("value") if val is None: @@ -269,7 +269,8 @@ class MegaOutPort(MegaPushEntity): return if self.dimmer: val = safe_int(val) - return val > 0 if not self.invert else val == 0 + if val is not None: + return val > 0 if not self.invert else val == 0 else: return val == 'ON' if not self.invert else val == 'OFF' elif val is not None: @@ -358,8 +359,10 @@ class MegaOutPort(MegaPushEntity): def safe_int(v): - if v in ['ON', 'OFF']: - return None + if v == 'ON': + return 1 + elif v == 'OFF': + return 0 try: return int(v) except (ValueError, TypeError):