From 1804c6edc5b80ed955a804c13662b6d35754877d Mon Sep 17 00:00:00 2001 From: Christian Ferbar <5595808+ferbar@users.noreply.github.com> Date: Mon, 2 Dec 2019 20:24:16 +0100 Subject: [PATCH] Clear miflora sensor state on exception (#29276) * Clear state on exception Clear state if querying the device fails. The state is then set to unknown, so it can be tracked if a miflora device isn't responding any more. * Add available() Signal valid data via available() --- homeassistant/components/miflora/sensor.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/miflora/sensor.py b/homeassistant/components/miflora/sensor.py index a08c4ce5eac..815a6e97bb8 100644 --- a/homeassistant/components/miflora/sensor.py +++ b/homeassistant/components/miflora/sensor.py @@ -106,6 +106,7 @@ class MiFloraSensor(Entity): self._icon = icon self._name = name self._state = None + self._available = False self.data = [] self._force_update = force_update # Median is used to filter out outliers. median of 3 will filter @@ -132,6 +133,11 @@ class MiFloraSensor(Entity): """Return the state of the sensor.""" return self._state + @property + def available(self): + """Return True if entity is available.""" + return self._available + @property def unit_of_measurement(self): """Return the units of measurement.""" @@ -156,15 +162,14 @@ class MiFloraSensor(Entity): try: _LOGGER.debug("Polling data for %s", self.name) data = self.poller.parameter_value(self.parameter) - except OSError as ioerr: - _LOGGER.info("Polling error %s", ioerr) - return - except BluetoothBackendException as bterror: - _LOGGER.info("Polling error %s", bterror) + except (OSError, BluetoothBackendException) as err: + _LOGGER.info("Polling error %s: %s", type(err).__name__, err) + self._available = False return if data is not None: _LOGGER.debug("%s = %s", self.name, data) + self._available = True self.data.append(data) else: _LOGGER.info("Did not receive any data from Mi Flora sensor %s", self.name)