mirror of
https://github.com/home-assistant/core.git
synced 2025-07-20 11:47:06 +00:00
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:
parent
5dfaec5967
commit
1e69848af4
@ -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__)
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user