diff --git a/homeassistant/components/netatmo/__init__.py b/homeassistant/components/netatmo/__init__.py index 50bd290797d..ce39ad9d55e 100644 --- a/homeassistant/components/netatmo/__init__.py +++ b/homeassistant/components/netatmo/__init__.py @@ -16,7 +16,7 @@ from homeassistant.helpers import discovery import homeassistant.helpers.config_validation as cv from homeassistant.util import Throttle -REQUIREMENTS = ['pyatmo==1.4'] +REQUIREMENTS = ['pyatmo==1.8'] _LOGGER = logging.getLogger(__name__) diff --git a/homeassistant/components/netatmo/sensor.py b/homeassistant/components/netatmo/sensor.py index d593d93729b..f4dad6a3b6b 100644 --- a/homeassistant/components/netatmo/sensor.py +++ b/homeassistant/components/netatmo/sensor.py @@ -164,146 +164,152 @@ class NetAtmoSensor(Entity): self._state = None return - if self.type == 'temperature': - self._state = round(data['Temperature'], 1) - elif self.type == 'humidity': - self._state = data['Humidity'] - elif self.type == 'rain': - self._state = data['Rain'] - elif self.type == 'sum_rain_1': - self._state = data['sum_rain_1'] - elif self.type == 'sum_rain_24': - self._state = data['sum_rain_24'] - elif self.type == 'noise': - self._state = data['Noise'] - elif self.type == 'co2': - self._state = data['CO2'] - elif self.type == 'pressure': - self._state = round(data['Pressure'], 1) - elif self.type == 'battery_percent': - self._state = data['battery_percent'] - elif self.type == 'battery_lvl': - self._state = data['battery_vp'] - elif (self.type == 'battery_vp' and - self._module_type == MODULE_TYPE_WIND): - if data['battery_vp'] >= 5590: - self._state = "Full" - elif data['battery_vp'] >= 5180: - self._state = "High" - elif data['battery_vp'] >= 4770: - self._state = "Medium" - elif data['battery_vp'] >= 4360: - self._state = "Low" - elif data['battery_vp'] < 4360: - self._state = "Very Low" - elif (self.type == 'battery_vp' and - self._module_type == MODULE_TYPE_RAIN): - if data['battery_vp'] >= 5500: - self._state = "Full" - elif data['battery_vp'] >= 5000: - self._state = "High" - elif data['battery_vp'] >= 4500: - self._state = "Medium" - elif data['battery_vp'] >= 4000: - self._state = "Low" - elif data['battery_vp'] < 4000: - self._state = "Very Low" - elif (self.type == 'battery_vp' and - self._module_type == MODULE_TYPE_INDOOR): - if data['battery_vp'] >= 5640: - self._state = "Full" - elif data['battery_vp'] >= 5280: - self._state = "High" - elif data['battery_vp'] >= 4920: - self._state = "Medium" - elif data['battery_vp'] >= 4560: - self._state = "Low" - elif data['battery_vp'] < 4560: - self._state = "Very Low" - elif (self.type == 'battery_vp' and - self._module_type == MODULE_TYPE_OUTDOOR): - if data['battery_vp'] >= 5500: - self._state = "Full" - elif data['battery_vp'] >= 5000: - self._state = "High" - elif data['battery_vp'] >= 4500: - self._state = "Medium" - elif data['battery_vp'] >= 4000: - self._state = "Low" - elif data['battery_vp'] < 4000: - self._state = "Very Low" - elif self.type == 'min_temp': - self._state = data['min_temp'] - elif self.type == 'max_temp': - self._state = data['max_temp'] - elif self.type == 'windangle_value': - self._state = data['WindAngle'] - elif self.type == 'windangle': - if data['WindAngle'] >= 330: - self._state = "N (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 300: - self._state = "NW (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 240: - self._state = "W (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 210: - self._state = "SW (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 150: - self._state = "S (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 120: - self._state = "SE (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 60: - self._state = "E (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 30: - self._state = "NE (%d\xb0)" % data['WindAngle'] - elif data['WindAngle'] >= 0: - self._state = "N (%d\xb0)" % data['WindAngle'] - elif self.type == 'windstrength': - self._state = data['WindStrength'] - elif self.type == 'gustangle_value': - self._state = data['GustAngle'] - elif self.type == 'gustangle': - if data['GustAngle'] >= 330: - self._state = "N (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 300: - self._state = "NW (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 240: - self._state = "W (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 210: - self._state = "SW (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 150: - self._state = "S (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 120: - self._state = "SE (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 60: - self._state = "E (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 30: - self._state = "NE (%d\xb0)" % data['GustAngle'] - elif data['GustAngle'] >= 0: - self._state = "N (%d\xb0)" % data['GustAngle'] - elif self.type == 'guststrength': - self._state = data['GustStrength'] - elif self.type == 'rf_status_lvl': - self._state = data['rf_status'] - elif self.type == 'rf_status': - if data['rf_status'] >= 90: - self._state = "Low" - elif data['rf_status'] >= 76: - self._state = "Medium" - elif data['rf_status'] >= 60: - self._state = "High" - elif data['rf_status'] <= 59: - self._state = "Full" - elif self.type == 'wifi_status_lvl': - self._state = data['wifi_status'] - elif self.type == 'wifi_status': - if data['wifi_status'] >= 86: - self._state = "Low" - elif data['wifi_status'] >= 71: - self._state = "Medium" - elif data['wifi_status'] >= 56: - self._state = "High" - elif data['wifi_status'] <= 55: - self._state = "Full" + try: + if self.type == 'temperature': + self._state = round(data['Temperature'], 1) + elif self.type == 'humidity': + self._state = data['Humidity'] + elif self.type == 'rain': + self._state = data['Rain'] + elif self.type == 'sum_rain_1': + self._state = data['sum_rain_1'] + elif self.type == 'sum_rain_24': + self._state = data['sum_rain_24'] + elif self.type == 'noise': + self._state = data['Noise'] + elif self.type == 'co2': + self._state = data['CO2'] + elif self.type == 'pressure': + self._state = round(data['Pressure'], 1) + elif self.type == 'battery_percent': + self._state = data['battery_percent'] + elif self.type == 'battery_lvl': + self._state = data['battery_vp'] + elif (self.type == 'battery_vp' and + self._module_type == MODULE_TYPE_WIND): + if data['battery_vp'] >= 5590: + self._state = "Full" + elif data['battery_vp'] >= 5180: + self._state = "High" + elif data['battery_vp'] >= 4770: + self._state = "Medium" + elif data['battery_vp'] >= 4360: + self._state = "Low" + elif data['battery_vp'] < 4360: + self._state = "Very Low" + elif (self.type == 'battery_vp' and + self._module_type == MODULE_TYPE_RAIN): + if data['battery_vp'] >= 5500: + self._state = "Full" + elif data['battery_vp'] >= 5000: + self._state = "High" + elif data['battery_vp'] >= 4500: + self._state = "Medium" + elif data['battery_vp'] >= 4000: + self._state = "Low" + elif data['battery_vp'] < 4000: + self._state = "Very Low" + elif (self.type == 'battery_vp' and + self._module_type == MODULE_TYPE_INDOOR): + if data['battery_vp'] >= 5640: + self._state = "Full" + elif data['battery_vp'] >= 5280: + self._state = "High" + elif data['battery_vp'] >= 4920: + self._state = "Medium" + elif data['battery_vp'] >= 4560: + self._state = "Low" + elif data['battery_vp'] < 4560: + self._state = "Very Low" + elif (self.type == 'battery_vp' and + self._module_type == MODULE_TYPE_OUTDOOR): + if data['battery_vp'] >= 5500: + self._state = "Full" + elif data['battery_vp'] >= 5000: + self._state = "High" + elif data['battery_vp'] >= 4500: + self._state = "Medium" + elif data['battery_vp'] >= 4000: + self._state = "Low" + elif data['battery_vp'] < 4000: + self._state = "Very Low" + elif self.type == 'min_temp': + self._state = data['min_temp'] + elif self.type == 'max_temp': + self._state = data['max_temp'] + elif self.type == 'windangle_value': + self._state = data['WindAngle'] + elif self.type == 'windangle': + if data['WindAngle'] >= 330: + self._state = "N (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 300: + self._state = "NW (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 240: + self._state = "W (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 210: + self._state = "SW (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 150: + self._state = "S (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 120: + self._state = "SE (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 60: + self._state = "E (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 30: + self._state = "NE (%d\xb0)" % data['WindAngle'] + elif data['WindAngle'] >= 0: + self._state = "N (%d\xb0)" % data['WindAngle'] + elif self.type == 'windstrength': + self._state = data['WindStrength'] + elif self.type == 'gustangle_value': + self._state = data['GustAngle'] + elif self.type == 'gustangle': + if data['GustAngle'] >= 330: + self._state = "N (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 300: + self._state = "NW (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 240: + self._state = "W (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 210: + self._state = "SW (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 150: + self._state = "S (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 120: + self._state = "SE (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 60: + self._state = "E (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 30: + self._state = "NE (%d\xb0)" % data['GustAngle'] + elif data['GustAngle'] >= 0: + self._state = "N (%d\xb0)" % data['GustAngle'] + elif self.type == 'guststrength': + self._state = data['GustStrength'] + elif self.type == 'rf_status_lvl': + self._state = data['rf_status'] + elif self.type == 'rf_status': + if data['rf_status'] >= 90: + self._state = "Low" + elif data['rf_status'] >= 76: + self._state = "Medium" + elif data['rf_status'] >= 60: + self._state = "High" + elif data['rf_status'] <= 59: + self._state = "Full" + elif self.type == 'wifi_status_lvl': + self._state = data['wifi_status'] + elif self.type == 'wifi_status': + if data['wifi_status'] >= 86: + self._state = "Low" + elif data['wifi_status'] >= 71: + self._state = "Medium" + elif data['wifi_status'] >= 56: + self._state = "High" + elif data['wifi_status'] <= 55: + self._state = "Full" + except KeyError: + _LOGGER.error("No %s data found for %s", self.type, + self.module_name) + self._state = None + return class NetAtmoData: @@ -360,10 +366,14 @@ class NetAtmoData: self.data = self.station_data.lastData(exclude=3600) newinterval = 0 - for module in self.data: - if 'When' in self.data[module]: - newinterval = self.data[module]['When'] - break + try: + for module in self.data: + if 'When' in self.data[module]: + newinterval = self.data[module]['When'] + break + except TypeError: + _LOGGER.error("No modules found!") + if newinterval: # Try and estimate when fresh data will be available newinterval += NETATMO_UPDATE_INTERVAL - time() diff --git a/requirements_all.txt b/requirements_all.txt index dacfe4fd6d5..9f2df6894b3 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -930,7 +930,7 @@ pyalarmdotcom==0.3.2 pyarlo==0.2.3 # homeassistant.components.netatmo -pyatmo==1.4 +pyatmo==1.8 # homeassistant.components.apple_tv pyatv==0.3.12