From 28dbb88171f89af22ea1350fc4c6f21b350f444c Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Tue, 26 Sep 2017 12:21:18 -0600 Subject: [PATCH 1/3] Fixes UPS MyChoice exception --- homeassistant/components/sensor/ups.py | 46 ++++++++++++++++---------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/sensor/ups.py b/homeassistant/components/sensor/ups.py index 40d84fe2618d61..8f96579b4639b4 100644 --- a/homeassistant/components/sensor/ups.py +++ b/homeassistant/components/sensor/ups.py @@ -30,11 +30,14 @@ STATUS_DELIVERED = 'delivered' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_USERNAME): cv.string, - vol.Required(CONF_PASSWORD): cv.string, - vol.Optional(CONF_NAME): cv.string, - vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): ( - vol.All(cv.time_period, cv.positive_timedelta)), + vol.Required(CONF_USERNAME): + cv.string, + vol.Required(CONF_PASSWORD): + cv.string, + vol.Optional(CONF_NAME): + cv.string, + vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): + (vol.All(cv.time_period, cv.positive_timedelta)), }) @@ -42,17 +45,21 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the UPS platform.""" import upsmychoice + try: cookie = hass.config.path(COOKIE) session = upsmychoice.get_session( - config.get(CONF_USERNAME), config.get(CONF_PASSWORD), + config.get(CONF_USERNAME), + config.get(CONF_PASSWORD), cookie_path=cookie) except upsmychoice.UPSError: _LOGGER.exception("Could not connect to UPS My Choice") return False - add_devices([UPSSensor(session, config.get(CONF_NAME), - config.get(CONF_UPDATE_INTERVAL))], True) + add_devices([ + UPSSensor(session, + config.get(CONF_NAME), config.get(CONF_UPDATE_INTERVAL)) + ], True) class UPSSensor(Entity): @@ -79,17 +86,20 @@ def state(self): def _update(self): """Update device state.""" import upsmychoice + status_counts = defaultdict(int) - for package in upsmychoice.get_packages(self._session): - status = slugify(package['status']) - skip = status == STATUS_DELIVERED and \ - parse_date(package['delivery_date']) < now().date() - if skip: - continue - status_counts[status] += 1 - self._attributes = { - ATTR_ATTRIBUTION: upsmychoice.ATTRIBUTION - } + try: + for package in upsmychoice.get_packages(self._session): + status = slugify(package['status']) + skip = status == STATUS_DELIVERED and \ + parse_date(package['delivery_date']) < now().date() + if skip: + continue + status_counts[status] += 1 + except upsmychoice.UPSError: + _LOGGER.error('Could not retrieve info from UPS My Choice account') + + self._attributes = {ATTR_ATTRIBUTION: upsmychoice.ATTRIBUTION} self._attributes.update(status_counts) self._state = sum(status_counts.values()) From ed5db05e737fd5e72e1dd07962db76cd08c0c43e Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Tue, 26 Sep 2017 12:46:01 -0600 Subject: [PATCH 2/3] Added unit of measurement --- homeassistant/components/sensor/ups.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/homeassistant/components/sensor/ups.py b/homeassistant/components/sensor/ups.py index 8f96579b4639b4..bb55ae913362ed 100644 --- a/homeassistant/components/sensor/ups.py +++ b/homeassistant/components/sensor/ups.py @@ -83,6 +83,11 @@ def state(self): """Return the state of the sensor.""" return self._state + @property + def unit_of_measurement(self): + """Return the unit of measurement of this entity, if any.""" + return 'packages' + def _update(self): """Update device state.""" import upsmychoice From 3fdee9e5565becfc7380885160f63dd5c86fbf8a Mon Sep 17 00:00:00 2001 From: Aaron Bach Date: Wed, 27 Sep 2017 11:18:26 -0600 Subject: [PATCH 3/3] Collaborator-requested changes --- homeassistant/components/sensor/ups.py | 30 +++++++++++--------------- 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/homeassistant/components/sensor/ups.py b/homeassistant/components/sensor/ups.py index bb55ae913362ed..c51ae67475fe70 100644 --- a/homeassistant/components/sensor/ups.py +++ b/homeassistant/components/sensor/ups.py @@ -30,14 +30,11 @@ STATUS_DELIVERED = 'delivered' PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({ - vol.Required(CONF_USERNAME): - cv.string, - vol.Required(CONF_PASSWORD): - cv.string, - vol.Optional(CONF_NAME): - cv.string, - vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): - (vol.All(cv.time_period, cv.positive_timedelta)), + vol.Required(CONF_USERNAME): cv.string, + vol.Required(CONF_PASSWORD): cv.string, + vol.Optional(CONF_NAME): cv.string, + vol.Optional(CONF_UPDATE_INTERVAL, default=timedelta(seconds=1800)): ( + vol.All(cv.time_period, cv.positive_timedelta)), }) @@ -45,21 +42,17 @@ def setup_platform(hass, config, add_devices, discovery_info=None): """Set up the UPS platform.""" import upsmychoice - try: cookie = hass.config.path(COOKIE) session = upsmychoice.get_session( - config.get(CONF_USERNAME), - config.get(CONF_PASSWORD), + config.get(CONF_USERNAME), config.get(CONF_PASSWORD), cookie_path=cookie) except upsmychoice.UPSError: _LOGGER.exception("Could not connect to UPS My Choice") return False - add_devices([ - UPSSensor(session, - config.get(CONF_NAME), config.get(CONF_UPDATE_INTERVAL)) - ], True) + add_devices([UPSSensor(session, config.get(CONF_NAME), + config.get(CONF_UPDATE_INTERVAL))], True) class UPSSensor(Entity): @@ -91,7 +84,6 @@ def unit_of_measurement(self): def _update(self): """Update device state.""" import upsmychoice - status_counts = defaultdict(int) try: for package in upsmychoice.get_packages(self._session): @@ -102,9 +94,11 @@ def _update(self): continue status_counts[status] += 1 except upsmychoice.UPSError: - _LOGGER.error('Could not retrieve info from UPS My Choice account') + _LOGGER.error('Could not connect to UPS My Choice account') - self._attributes = {ATTR_ATTRIBUTION: upsmychoice.ATTRIBUTION} + self._attributes = { + ATTR_ATTRIBUTION: upsmychoice.ATTRIBUTION + } self._attributes.update(status_counts) self._state = sum(status_counts.values())