From e23aa1ccf83701bd7f4f2064596d3e5c189031be Mon Sep 17 00:00:00 2001 From: Erik Eriksson Date: Wed, 1 Mar 2017 22:57:37 +0100 Subject: [PATCH] sensor.dovado: compute state in update (#6340) --- homeassistant/components/sensor/dovado.py | 43 ++++++++++++----------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/homeassistant/components/sensor/dovado.py b/homeassistant/components/sensor/dovado.py index 8182c8ccf39..639dfa01ec6 100644 --- a/homeassistant/components/sensor/dovado.py +++ b/homeassistant/components/sensor/dovado.py @@ -16,8 +16,7 @@ from homeassistant.util import slugify import homeassistant.helpers.config_validation as cv from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD, CONF_HOST, CONF_PORT, - CONF_SENSORS, STATE_UNKNOWN, - DEVICE_DEFAULT_NAME) + CONF_SENSORS, DEVICE_DEFAULT_NAME) from homeassistant.components.sensor import (DOMAIN, PLATFORM_SCHEMA) _LOGGER = logging.getLogger(__name__) @@ -88,7 +87,7 @@ class Dovado: number, message) self._dovado.send_sms(number, message) - if self.state["sms"] == "enabled": + if self.state.get("sms") == "enabled": service_name = slugify("{} {}".format(self.name, "send_sms")) hass.services.register(DOMAIN, service_name, send_sms) @@ -125,10 +124,29 @@ class DovadoSensor(Entity): """Initialize the sensor.""" self._dovado = dovado self._sensor = sensor + self._state = self._compute_state() + + def _compute_state(self): + state = self._dovado.state.get(SENSORS[self._sensor][0]) + if self._sensor == SENSOR_NETWORK: + match = re.search(r"\((.+)\)", state) + return match.group(1) if match else None + elif self._sensor == SENSOR_SIGNAL: + try: + return int(state.split()[0]) + except ValueError: + return 0 + elif self._sensor == SENSOR_SMS_UNREAD: + return int(state) + elif self._sensor in [SENSOR_UPLOAD, SENSOR_DOWNLOAD]: + return round(float(state) / 1e6, 1) + else: + return state def update(self): """Update sensor values.""" self._dovado.update() + self._state = self._compute_state() @property def name(self): @@ -139,24 +157,7 @@ class DovadoSensor(Entity): @property def state(self): """Return the sensor state.""" - key = SENSORS[self._sensor][0] - result = self._dovado.state.get(key) - if not result: - return STATE_UNKNOWN - elif self._sensor == SENSOR_NETWORK: - match = re.search(r"\((.+)\)", result) - return match.group(1) if match else STATE_UNKNOWN - elif self._sensor == SENSOR_SIGNAL: - try: - return int(result.split()[0]) - except ValueError: - return 0 - elif self._sensor == SENSOR_SMS_UNREAD: - return int(result) - elif self._sensor in [SENSOR_UPLOAD, SENSOR_DOWNLOAD]: - return round(float(result) / 1e6, 1) - else: - return result + return self._state @property def icon(self):