Fix Plugwise climate issues (#31209)

* Fix Plugwise climate issues

* Remove showing None-state for available_schemas, as requested by reviewer.
This commit is contained in:
Bouwe Westerdijk 2020-01-29 08:57:25 +01:00 committed by GitHub
parent 89ae255de7
commit 61a8618010
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 30 additions and 17 deletions

View File

@ -13,6 +13,7 @@ from homeassistant.components.climate.const import (
HVAC_MODE_AUTO, HVAC_MODE_AUTO,
HVAC_MODE_HEAT, HVAC_MODE_HEAT,
HVAC_MODE_HEAT_COOL, HVAC_MODE_HEAT_COOL,
HVAC_MODE_OFF,
SUPPORT_PRESET_MODE, SUPPORT_PRESET_MODE,
SUPPORT_TARGET_TEMPERATURE, SUPPORT_TARGET_TEMPERATURE,
) )
@ -66,7 +67,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
def setup_platform(hass, config, add_entities, discovery_info=None): def setup_platform(hass, config, add_entities, discovery_info=None):
"""Add the Plugwise (Anna) Thermostate.""" """Add the Plugwise (Anna) Thermostat."""
api = haanna.Haanna( api = haanna.Haanna(
config[CONF_USERNAME], config[CONF_USERNAME],
config[CONF_PASSWORD], config[CONF_PASSWORD],
@ -88,7 +89,7 @@ def setup_platform(hass, config, add_entities, discovery_info=None):
class ThermostatDevice(ClimateDevice): class ThermostatDevice(ClimateDevice):
"""Representation of an Plugwise thermostat.""" """Representation of the Plugwise thermostat."""
def __init__(self, api, name, min_temp, max_temp): def __init__(self, api, name, min_temp, max_temp):
"""Set up the Plugwise API.""" """Set up the Plugwise API."""
@ -96,14 +97,18 @@ class ThermostatDevice(ClimateDevice):
self._min_temp = min_temp self._min_temp = min_temp
self._max_temp = max_temp self._max_temp = max_temp
self._name = name self._name = name
self._direct_objects = None
self._domain_objects = None self._domain_objects = None
self._outdoor_temperature = None self._outdoor_temperature = None
self._selected_schema = None self._selected_schema = None
self._last_active_schema = None
self._preset_mode = None self._preset_mode = None
self._presets = None self._presets = None
self._presets_list = None self._presets_list = None
self._boiler_status = None
self._heating_status = None self._heating_status = None
self._cooling_status = None self._cooling_status = None
self._dhw_status = None
self._schema_names = None self._schema_names = None
self._schema_status = None self._schema_status = None
self._current_temperature = None self._current_temperature = None
@ -115,8 +120,8 @@ class ThermostatDevice(ClimateDevice):
@property @property
def hvac_action(self): def hvac_action(self):
"""Return the current action.""" """Return the current hvac action."""
if self._heating_status: if self._heating_status or self._boiler_status or self._dhw_status:
return CURRENT_HVAC_HEAT return CURRENT_HVAC_HEAT
if self._cooling_status: if self._cooling_status:
return CURRENT_HVAC_COOL return CURRENT_HVAC_COOL
@ -143,8 +148,10 @@ class ThermostatDevice(ClimateDevice):
attributes = {} attributes = {}
if self._outdoor_temperature: if self._outdoor_temperature:
attributes["outdoor_temperature"] = self._outdoor_temperature attributes["outdoor_temperature"] = self._outdoor_temperature
attributes["available_schemas"] = self._schema_names if self._schema_names:
attributes["selected_schema"] = self._selected_schema attributes["available_schemas"] = self._schema_names
if self._selected_schema:
attributes["selected_schema"] = self._selected_schema
if self._boiler_temperature: if self._boiler_temperature:
attributes["boiler_temperature"] = self._boiler_temperature attributes["boiler_temperature"] = self._boiler_temperature
if self._water_pressure: if self._water_pressure:
@ -162,7 +169,7 @@ class ThermostatDevice(ClimateDevice):
@property @property
def hvac_modes(self): def hvac_modes(self):
"""Return the available hvac modes list.""" """Return the available hvac modes list."""
if self._heating_status is not None: if self._heating_status is not None or self._boiler_status is not None:
if self._cooling_status is not None: if self._cooling_status is not None:
return HVAC_MODES_2 return HVAC_MODES_2
return HVAC_MODES_1 return HVAC_MODES_1
@ -173,11 +180,11 @@ class ThermostatDevice(ClimateDevice):
"""Return current active hvac state.""" """Return current active hvac state."""
if self._schema_status: if self._schema_status:
return HVAC_MODE_AUTO return HVAC_MODE_AUTO
if self._heating_status: if self._heating_status or self._boiler_status or self._dhw_status:
if self._cooling_status: if self._cooling_status:
return HVAC_MODE_HEAT_COOL return HVAC_MODE_HEAT_COOL
return HVAC_MODE_HEAT return HVAC_MODE_HEAT
return None return HVAC_MODE_OFF
@property @property
def target_temperature(self): def target_temperature(self):
@ -193,9 +200,9 @@ class ThermostatDevice(ClimateDevice):
def preset_mode(self): def preset_mode(self):
"""Return the active selected schedule-name. """Return the active selected schedule-name.
Or return the active preset, or return Temporary in case of a manual change Or, return the active preset, or return Temporary in case of a manual change
in the set-temperature with a weekschedule active, in the set-temperature with a weekschedule active.
or return Manual in case of a manual change and no weekschedule active. Or return Manual in case of a manual change and no weekschedule active.
""" """
if self._presets: if self._presets:
presets = self._presets presets = self._presets
@ -248,7 +255,7 @@ class ThermostatDevice(ClimateDevice):
if hvac_mode == HVAC_MODE_AUTO: if hvac_mode == HVAC_MODE_AUTO:
schema_mode = "true" schema_mode = "true"
self._api.set_schema_state( self._api.set_schema_state(
self._domain_objects, self._selected_schema, schema_mode self._domain_objects, self._last_active_schema, schema_mode
) )
def set_preset_mode(self, preset_mode): def set_preset_mode(self, preset_mode):
@ -259,16 +266,22 @@ class ThermostatDevice(ClimateDevice):
def update(self): def update(self):
"""Update the data from the thermostat.""" """Update the data from the thermostat."""
_LOGGER.debug("Update called") _LOGGER.debug("Update called")
self._direct_objects = self._api.get_direct_objects()
self._domain_objects = self._api.get_domain_objects() self._domain_objects = self._api.get_domain_objects()
self._outdoor_temperature = self._api.get_outdoor_temperature( self._outdoor_temperature = self._api.get_outdoor_temperature(
self._domain_objects self._domain_objects
) )
self._selected_schema = self._api.get_active_schema_name(self._domain_objects) self._selected_schema = self._api.get_active_schema_name(self._domain_objects)
self._last_active_schema = self._api.get_last_active_schema_name(
self._domain_objects
)
self._preset_mode = self._api.get_current_preset(self._domain_objects) self._preset_mode = self._api.get_current_preset(self._domain_objects)
self._presets = self._api.get_presets(self._domain_objects) self._presets = self._api.get_presets(self._domain_objects)
self._presets_list = list(self._api.get_presets(self._domain_objects)) self._presets_list = list(self._api.get_presets(self._domain_objects))
self._heating_status = self._api.get_heating_status(self._domain_objects) self._boiler_status = self._api.get_boiler_status(self._direct_objects)
self._cooling_status = self._api.get_cooling_status(self._domain_objects) self._heating_status = self._api.get_heating_status(self._direct_objects)
self._cooling_status = self._api.get_cooling_status(self._direct_objects)
self._dhw_status = self._api.get_domestic_hot_water_status(self._direct_objects)
self._schema_names = self._api.get_schema_names(self._domain_objects) self._schema_names = self._api.get_schema_names(self._domain_objects)
self._schema_status = self._api.get_schema_state(self._domain_objects) self._schema_status = self._api.get_schema_state(self._domain_objects)
self._current_temperature = self._api.get_current_temperature( self._current_temperature = self._api.get_current_temperature(

View File

@ -4,5 +4,5 @@
"documentation": "https://www.home-assistant.io/integrations/plugwise", "documentation": "https://www.home-assistant.io/integrations/plugwise",
"dependencies": [], "dependencies": [],
"codeowners": ["@laetificat", "@CoMPaTech", "@bouwew"], "codeowners": ["@laetificat", "@CoMPaTech", "@bouwew"],
"requirements": ["haanna==0.13.5"] "requirements": ["haanna==0.14.1"]
} }

View File

@ -640,7 +640,7 @@ ha-ffmpeg==2.0
ha-philipsjs==0.0.8 ha-philipsjs==0.0.8
# homeassistant.components.plugwise # homeassistant.components.plugwise
haanna==0.13.5 haanna==0.14.1
# homeassistant.components.habitica # homeassistant.components.habitica
habitipy==0.2.0 habitipy==0.2.0