Updates pyatmo to 1.8 and adds exception handling (#20938)

* switch to pyatmo 1.7 & add exception handling

* STATE_UNKNOWN => None

* correct too long line

* delete whitespace

* remove fancy update logic
This commit is contained in:
carstenschroeder 2019-02-12 12:12:44 +01:00 committed by Diogo Gomes
parent 5dfaec5967
commit 1e69848af4
3 changed files with 156 additions and 146 deletions

View File

@ -16,7 +16,7 @@ from homeassistant.helpers import discovery
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
from homeassistant.util import Throttle from homeassistant.util import Throttle
REQUIREMENTS = ['pyatmo==1.4'] REQUIREMENTS = ['pyatmo==1.8']
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)

View File

@ -164,146 +164,152 @@ class NetAtmoSensor(Entity):
self._state = None self._state = None
return return
if self.type == 'temperature': try:
self._state = round(data['Temperature'], 1) if self.type == 'temperature':
elif self.type == 'humidity': self._state = round(data['Temperature'], 1)
self._state = data['Humidity'] elif self.type == 'humidity':
elif self.type == 'rain': self._state = data['Humidity']
self._state = data['Rain'] elif self.type == 'rain':
elif self.type == 'sum_rain_1': self._state = data['Rain']
self._state = data['sum_rain_1'] elif self.type == 'sum_rain_1':
elif self.type == 'sum_rain_24': self._state = data['sum_rain_1']
self._state = data['sum_rain_24'] elif self.type == 'sum_rain_24':
elif self.type == 'noise': self._state = data['sum_rain_24']
self._state = data['Noise'] elif self.type == 'noise':
elif self.type == 'co2': self._state = data['Noise']
self._state = data['CO2'] elif self.type == 'co2':
elif self.type == 'pressure': self._state = data['CO2']
self._state = round(data['Pressure'], 1) elif self.type == 'pressure':
elif self.type == 'battery_percent': self._state = round(data['Pressure'], 1)
self._state = data['battery_percent'] elif self.type == 'battery_percent':
elif self.type == 'battery_lvl': self._state = data['battery_percent']
self._state = data['battery_vp'] elif self.type == 'battery_lvl':
elif (self.type == 'battery_vp' and self._state = data['battery_vp']
self._module_type == MODULE_TYPE_WIND): elif (self.type == 'battery_vp' and
if data['battery_vp'] >= 5590: self._module_type == MODULE_TYPE_WIND):
self._state = "Full" if data['battery_vp'] >= 5590:
elif data['battery_vp'] >= 5180: self._state = "Full"
self._state = "High" elif data['battery_vp'] >= 5180:
elif data['battery_vp'] >= 4770: self._state = "High"
self._state = "Medium" elif data['battery_vp'] >= 4770:
elif data['battery_vp'] >= 4360: self._state = "Medium"
self._state = "Low" elif data['battery_vp'] >= 4360:
elif data['battery_vp'] < 4360: self._state = "Low"
self._state = "Very Low" elif data['battery_vp'] < 4360:
elif (self.type == 'battery_vp' and self._state = "Very Low"
self._module_type == MODULE_TYPE_RAIN): elif (self.type == 'battery_vp' and
if data['battery_vp'] >= 5500: self._module_type == MODULE_TYPE_RAIN):
self._state = "Full" if data['battery_vp'] >= 5500:
elif data['battery_vp'] >= 5000: self._state = "Full"
self._state = "High" elif data['battery_vp'] >= 5000:
elif data['battery_vp'] >= 4500: self._state = "High"
self._state = "Medium" elif data['battery_vp'] >= 4500:
elif data['battery_vp'] >= 4000: self._state = "Medium"
self._state = "Low" elif data['battery_vp'] >= 4000:
elif data['battery_vp'] < 4000: self._state = "Low"
self._state = "Very Low" elif data['battery_vp'] < 4000:
elif (self.type == 'battery_vp' and self._state = "Very Low"
self._module_type == MODULE_TYPE_INDOOR): elif (self.type == 'battery_vp' and
if data['battery_vp'] >= 5640: self._module_type == MODULE_TYPE_INDOOR):
self._state = "Full" if data['battery_vp'] >= 5640:
elif data['battery_vp'] >= 5280: self._state = "Full"
self._state = "High" elif data['battery_vp'] >= 5280:
elif data['battery_vp'] >= 4920: self._state = "High"
self._state = "Medium" elif data['battery_vp'] >= 4920:
elif data['battery_vp'] >= 4560: self._state = "Medium"
self._state = "Low" elif data['battery_vp'] >= 4560:
elif data['battery_vp'] < 4560: self._state = "Low"
self._state = "Very Low" elif data['battery_vp'] < 4560:
elif (self.type == 'battery_vp' and self._state = "Very Low"
self._module_type == MODULE_TYPE_OUTDOOR): elif (self.type == 'battery_vp' and
if data['battery_vp'] >= 5500: self._module_type == MODULE_TYPE_OUTDOOR):
self._state = "Full" if data['battery_vp'] >= 5500:
elif data['battery_vp'] >= 5000: self._state = "Full"
self._state = "High" elif data['battery_vp'] >= 5000:
elif data['battery_vp'] >= 4500: self._state = "High"
self._state = "Medium" elif data['battery_vp'] >= 4500:
elif data['battery_vp'] >= 4000: self._state = "Medium"
self._state = "Low" elif data['battery_vp'] >= 4000:
elif data['battery_vp'] < 4000: self._state = "Low"
self._state = "Very Low" elif data['battery_vp'] < 4000:
elif self.type == 'min_temp': self._state = "Very Low"
self._state = data['min_temp'] elif self.type == 'min_temp':
elif self.type == 'max_temp': self._state = data['min_temp']
self._state = data['max_temp'] elif self.type == 'max_temp':
elif self.type == 'windangle_value': self._state = data['max_temp']
self._state = data['WindAngle'] elif self.type == 'windangle_value':
elif self.type == 'windangle': self._state = data['WindAngle']
if data['WindAngle'] >= 330: elif self.type == 'windangle':
self._state = "N (%d\xb0)" % data['WindAngle'] if data['WindAngle'] >= 330:
elif data['WindAngle'] >= 300: self._state = "N (%d\xb0)" % data['WindAngle']
self._state = "NW (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 300:
elif data['WindAngle'] >= 240: self._state = "NW (%d\xb0)" % data['WindAngle']
self._state = "W (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 240:
elif data['WindAngle'] >= 210: self._state = "W (%d\xb0)" % data['WindAngle']
self._state = "SW (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 210:
elif data['WindAngle'] >= 150: self._state = "SW (%d\xb0)" % data['WindAngle']
self._state = "S (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 150:
elif data['WindAngle'] >= 120: self._state = "S (%d\xb0)" % data['WindAngle']
self._state = "SE (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 120:
elif data['WindAngle'] >= 60: self._state = "SE (%d\xb0)" % data['WindAngle']
self._state = "E (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 60:
elif data['WindAngle'] >= 30: self._state = "E (%d\xb0)" % data['WindAngle']
self._state = "NE (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 30:
elif data['WindAngle'] >= 0: self._state = "NE (%d\xb0)" % data['WindAngle']
self._state = "N (%d\xb0)" % data['WindAngle'] elif data['WindAngle'] >= 0:
elif self.type == 'windstrength': self._state = "N (%d\xb0)" % data['WindAngle']
self._state = data['WindStrength'] elif self.type == 'windstrength':
elif self.type == 'gustangle_value': self._state = data['WindStrength']
self._state = data['GustAngle'] elif self.type == 'gustangle_value':
elif self.type == 'gustangle': self._state = data['GustAngle']
if data['GustAngle'] >= 330: elif self.type == 'gustangle':
self._state = "N (%d\xb0)" % data['GustAngle'] if data['GustAngle'] >= 330:
elif data['GustAngle'] >= 300: self._state = "N (%d\xb0)" % data['GustAngle']
self._state = "NW (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 300:
elif data['GustAngle'] >= 240: self._state = "NW (%d\xb0)" % data['GustAngle']
self._state = "W (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 240:
elif data['GustAngle'] >= 210: self._state = "W (%d\xb0)" % data['GustAngle']
self._state = "SW (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 210:
elif data['GustAngle'] >= 150: self._state = "SW (%d\xb0)" % data['GustAngle']
self._state = "S (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 150:
elif data['GustAngle'] >= 120: self._state = "S (%d\xb0)" % data['GustAngle']
self._state = "SE (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 120:
elif data['GustAngle'] >= 60: self._state = "SE (%d\xb0)" % data['GustAngle']
self._state = "E (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 60:
elif data['GustAngle'] >= 30: self._state = "E (%d\xb0)" % data['GustAngle']
self._state = "NE (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 30:
elif data['GustAngle'] >= 0: self._state = "NE (%d\xb0)" % data['GustAngle']
self._state = "N (%d\xb0)" % data['GustAngle'] elif data['GustAngle'] >= 0:
elif self.type == 'guststrength': self._state = "N (%d\xb0)" % data['GustAngle']
self._state = data['GustStrength'] elif self.type == 'guststrength':
elif self.type == 'rf_status_lvl': self._state = data['GustStrength']
self._state = data['rf_status'] elif self.type == 'rf_status_lvl':
elif self.type == 'rf_status': self._state = data['rf_status']
if data['rf_status'] >= 90: elif self.type == 'rf_status':
self._state = "Low" if data['rf_status'] >= 90:
elif data['rf_status'] >= 76: self._state = "Low"
self._state = "Medium" elif data['rf_status'] >= 76:
elif data['rf_status'] >= 60: self._state = "Medium"
self._state = "High" elif data['rf_status'] >= 60:
elif data['rf_status'] <= 59: self._state = "High"
self._state = "Full" elif data['rf_status'] <= 59:
elif self.type == 'wifi_status_lvl': self._state = "Full"
self._state = data['wifi_status'] elif self.type == 'wifi_status_lvl':
elif self.type == 'wifi_status': self._state = data['wifi_status']
if data['wifi_status'] >= 86: elif self.type == 'wifi_status':
self._state = "Low" if data['wifi_status'] >= 86:
elif data['wifi_status'] >= 71: self._state = "Low"
self._state = "Medium" elif data['wifi_status'] >= 71:
elif data['wifi_status'] >= 56: self._state = "Medium"
self._state = "High" elif data['wifi_status'] >= 56:
elif data['wifi_status'] <= 55: self._state = "High"
self._state = "Full" 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: class NetAtmoData:
@ -360,10 +366,14 @@ class NetAtmoData:
self.data = self.station_data.lastData(exclude=3600) self.data = self.station_data.lastData(exclude=3600)
newinterval = 0 newinterval = 0
for module in self.data: try:
if 'When' in self.data[module]: for module in self.data:
newinterval = self.data[module]['When'] if 'When' in self.data[module]:
break newinterval = self.data[module]['When']
break
except TypeError:
_LOGGER.error("No modules found!")
if newinterval: if newinterval:
# Try and estimate when fresh data will be available # Try and estimate when fresh data will be available
newinterval += NETATMO_UPDATE_INTERVAL - time() newinterval += NETATMO_UPDATE_INTERVAL - time()

View File

@ -930,7 +930,7 @@ pyalarmdotcom==0.3.2
pyarlo==0.2.3 pyarlo==0.2.3
# homeassistant.components.netatmo # homeassistant.components.netatmo
pyatmo==1.4 pyatmo==1.8
# homeassistant.components.apple_tv # homeassistant.components.apple_tv
pyatv==0.3.12 pyatv==0.3.12