From dd6d40fb319ada4fc0a09d18698ae6a9b3812b29 Mon Sep 17 00:00:00 2001 From: Robert Bowring Date: Fri, 9 Aug 2019 14:44:52 +0100 Subject: [PATCH 01/14] TRV-Support --- homeassistant/components/hive/__init__.py | 8 ++--- homeassistant/components/hive/climate.py | 39 +++++++++++++++++------ 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index 7ad1cc002f953..332a8ab360536 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -1,7 +1,6 @@ """Support for the Hive devices.""" import logging - -from pyhiveapi import Pyhiveapi +from .pyhiveapi import Pyhiveapi import voluptuous as vol from homeassistant.const import ( @@ -43,10 +42,11 @@ class HiveSession: switch = None weather = None attributes = None - + trv = None def setup(hass, config): """Set up the Hive Component.""" + session = HiveSession() session.core = Pyhiveapi() @@ -75,4 +75,4 @@ def setup(hass, config): if key == hive_type: for hivedevice in devices: load_platform(hass, ha_type, DOMAIN, hivedevice, config) - return True + return True \ No newline at end of file diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index dd7e0164367cb..67b1137db57e8 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -2,7 +2,7 @@ from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( HVAC_MODE_AUTO, HVAC_MODE_HEAT, HVAC_MODE_OFF, PRESET_BOOST, - SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, PRESET_NONE) + SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, PRESET_NONE, CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, CURRENT_HVAC_HEAT) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS from . import DATA_HIVE, DOMAIN @@ -19,6 +19,12 @@ HVAC_MODE_OFF: 'OFF', } +HIVE_TO_HASS_HVAC_ACTION = { + 'UNKNOWN': CURRENT_HVAC_OFF, + False: CURRENT_HVAC_IDLE, + True: CURRENT_HVAC_HEAT +} + SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE SUPPORT_HVAC = [HVAC_MODE_AUTO, HVAC_MODE_HEAT, HVAC_MODE_OFF] SUPPORT_PRESET = [PRESET_NONE, PRESET_BOOST] @@ -28,8 +34,8 @@ def setup_platform(hass, config, add_entities, discovery_info=None): """Set up Hive climate devices.""" if discovery_info is None: return - if discovery_info["HA_DeviceType"] != "Heating": - return + """if discovery_info["HA_DeviceType"] != "Heating": + return""" session = hass.data.get(DATA_HIVE) climate = HiveClimateEntity(session, discovery_info) @@ -45,7 +51,10 @@ def __init__(self, hivesession, hivedevice): self.node_id = hivedevice["Hive_NodeID"] self.node_name = hivedevice["Hive_NodeName"] self.device_type = hivedevice["HA_DeviceType"] - self.thermostat_node_id = hivedevice["Thermostat_NodeID"] + if self.device_type == "Heating": + self.thermostat_node_id = hivedevice["Thermostat_NodeID"] + if self.device_type == "TRV": + self.thermostat_node_id = hivedevice["Hive_NodeID"] self.session = hivesession self.attributes = {} self.data_updatesource = '{}.{}'.format( @@ -80,9 +89,12 @@ def handle_update(self, updatesource): @property def name(self): """Return the name of the Climate device.""" - friendly_name = "Heating" - if self.node_name is not None: - friendly_name = '{} {}'.format(self.node_name, friendly_name) + if self.device_type == "Heating": + friendly_name = "Heating" + if self.node_name is not None: + friendly_name = '{} {}'.format(self.node_name, friendly_name) + elif self.device_type == "TRV": + friendly_name = self.node_name return friendly_name @property @@ -99,13 +111,19 @@ def hvac_modes(self): return SUPPORT_HVAC @property - def hvac_mode(self) -> str: + def hvac_mode(self): """Return hvac operation ie. heat, cool mode. Need to be one of HVAC_MODE_*. """ return HIVE_TO_HASS_STATE[self.session.heating.get_mode(self.node_id)] + @property + def hvac_action(self): + """Return current HVAC action.""" + + return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id,self.device_type)] + @property def temperature_unit(self): """Return the unit of measurement.""" @@ -134,8 +152,9 @@ def max_temp(self): @property def preset_mode(self): """Return the current preset mode, e.g., home, away, temp.""" - if self.session.heating.get_boost(self.node_id) == "ON": - return PRESET_BOOST + if self.device_type == "Heating": + if self.session.heating.get_boost(self.node_id) == "ON": + return PRESET_BOOST return None @property From 4068e86e0d1ee222c3c4c07ed553d1484125d0d2 Mon Sep 17 00:00:00 2001 From: Robert Bowring Date: Fri, 9 Aug 2019 14:47:28 +0100 Subject: [PATCH 02/14] pyhive import update --- homeassistant/components/hive/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index 332a8ab360536..e837fde82ca34 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -1,6 +1,6 @@ """Support for the Hive devices.""" import logging -from .pyhiveapi import Pyhiveapi +from pyhiveapi import Pyhiveapi import voluptuous as vol from homeassistant.const import ( From f1464cf6380717ea80278e3c24101d938819c305 Mon Sep 17 00:00:00 2001 From: Robert Bowring Date: Fri, 9 Aug 2019 15:16:28 +0100 Subject: [PATCH 03/14] Moved HVAC to new line --- homeassistant/components/hive/climate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 67b1137db57e8..f91f45918aace 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -2,7 +2,8 @@ from homeassistant.components.climate import ClimateDevice from homeassistant.components.climate.const import ( HVAC_MODE_AUTO, HVAC_MODE_HEAT, HVAC_MODE_OFF, PRESET_BOOST, - SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, PRESET_NONE, CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, CURRENT_HVAC_HEAT) + SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, PRESET_NONE, + CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, CURRENT_HVAC_HEAT) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS from . import DATA_HIVE, DOMAIN From 138dd6ea1f28f7594fb398d74986fc1bf6fab4c6 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sat, 28 Sep 2019 11:02:45 +0100 Subject: [PATCH 04/14] updated pyhiveapi version --- homeassistant/components/hive/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hive/manifest.json b/homeassistant/components/hive/manifest.json index 886d6841ebb85..2e7c4f4f179de 100644 --- a/homeassistant/components/hive/manifest.json +++ b/homeassistant/components/hive/manifest.json @@ -3,7 +3,7 @@ "name": "Hive", "documentation": "https://www.home-assistant.io/components/hive", "requirements": [ - "pyhiveapi==0.2.18.1" + "pyhiveapi==0.2.19" ], "dependencies": [], "codeowners": [ From ee195b15c410bb8b6e06a9982ac76996b97eecf6 Mon Sep 17 00:00:00 2001 From: Khole Date: Sat, 28 Sep 2019 19:04:40 +0100 Subject: [PATCH 05/14] Update for pylint errors --- homeassistant/components/hive/__init__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index 834852dc19fb6..b64c22d9abdfc 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -83,10 +83,9 @@ class HiveSession: attributes = None trv = None + def setup(hass, config): """Set up the Hive Component.""" - - def heating_boost(service): """Handle the service call.""" node_id = HiveSession.entity_lookup.get(service.data[ATTR_ENTITY_ID]) @@ -137,7 +136,6 @@ def hotwater_boost(service): session.attributes = Pyhiveapi.Attributes() hass.data[DATA_HIVE] = session - for ha_type in DEVICETYPES: devicelist = devices.get(DEVICETYPES[ha_type]) if devicelist: From 0cd449f99f813c9e5913f0d6be6d8f8613f5aa9a Mon Sep 17 00:00:00 2001 From: Khole Date: Sat, 28 Sep 2019 19:07:42 +0100 Subject: [PATCH 06/14] Fix Pylint Errors --- homeassistant/components/hive/climate.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 2ab90dd6948d2..36d17914733cc 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -8,7 +8,6 @@ PRESET_NONE, SUPPORT_PRESET_MODE, SUPPORT_TARGET_TEMPERATURE, - PRESET_NONE, CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, CURRENT_HVAC_HEAT @@ -61,7 +60,7 @@ def __init__(self, hive_session, hive_device): """Initialize the Climate device.""" super().__init__(hive_session, hive_device) if self.device_type == "Heating": - self.thermostat_node_id = hivedevice["Thermostat_NodeID"] + self.thermostat_node_id = hive_device["Thermostat_NodeID"] @property def unique_id(self): @@ -115,7 +114,8 @@ def hvac_mode(self): def hvac_action(self): """Return current HVAC action.""" - return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id,self.device_type)] + return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id, + self.device_type)] @property def temperature_unit(self): From 0c3aac5cd82fd04d9148789710929f29698877f0 Mon Sep 17 00:00:00 2001 From: Khole Date: Sat, 28 Sep 2019 19:22:29 +0100 Subject: [PATCH 07/14] Fixed Pylint 2 --- homeassistant/components/hive/climate.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 36d17914733cc..2ceb4003c64fe 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -113,10 +113,9 @@ def hvac_mode(self): @property def hvac_action(self): """Return current HVAC action.""" - - return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id, + return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id, self.device_type)] - + @property def temperature_unit(self): """Return the unit of measurement.""" From b99ac72c5ef89578cd209c8092b8ead314d23bda Mon Sep 17 00:00:00 2001 From: Khole Date: Sat, 28 Sep 2019 19:34:49 +0100 Subject: [PATCH 08/14] removed whitespace --- homeassistant/components/hive/climate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 2ceb4003c64fe..f80d15c11e0de 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -115,7 +115,7 @@ def hvac_action(self): """Return current HVAC action.""" return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id, self.device_type)] - + @property def temperature_unit(self): """Return the unit of measurement.""" From bec70b0d2c888d053f00ab8c095966c16be88341 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sat, 28 Sep 2019 21:27:10 +0100 Subject: [PATCH 09/14] Black --- homeassistant/components/hive/__init__.py | 1 + homeassistant/components/hive/climate.py | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index b64c22d9abdfc..97e16b49d7f13 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -86,6 +86,7 @@ class HiveSession: def setup(hass, config): """Set up the Hive Component.""" + def heating_boost(service): """Handle the service call.""" node_id = HiveSession.entity_lookup.get(service.data[ATTR_ENTITY_ID]) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index f80d15c11e0de..a5c0a2da14db1 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -10,7 +10,7 @@ SUPPORT_TARGET_TEMPERATURE, CURRENT_HVAC_IDLE, CURRENT_HVAC_OFF, - CURRENT_HVAC_HEAT + CURRENT_HVAC_HEAT, ) from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS @@ -31,9 +31,9 @@ } HIVE_TO_HASS_HVAC_ACTION = { - 'UNKNOWN': CURRENT_HVAC_OFF, + "UNKNOWN": CURRENT_HVAC_OFF, False: CURRENT_HVAC_IDLE, - True: CURRENT_HVAC_HEAT + True: CURRENT_HVAC_HEAT, } SUPPORT_FLAGS = SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE @@ -83,7 +83,7 @@ def name(self): if self.device_type == "Heating": friendly_name = "Heating" if self.node_name is not None: - friendly_name = '{} {}'.format(self.node_name, friendly_name) + friendly_name = "{} {}".format(self.node_name, friendly_name) elif self.device_type == "TRV": friendly_name = self.node_name @@ -113,8 +113,9 @@ def hvac_mode(self): @property def hvac_action(self): """Return current HVAC action.""" - return HIVE_TO_HASS_HVAC_ACTION[self.session.heating.operational_status(self.node_id, - self.device_type)] + return HIVE_TO_HASS_HVAC_ACTION[ + self.session.heating.operational_status(self.node_id, self.device_type) + ] @property def temperature_unit(self): From 9f573c6d37efc93b4e5bafe93893eeb9cdca1a75 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sun, 29 Sep 2019 11:12:47 +0100 Subject: [PATCH 10/14] Updates following review --- homeassistant/components/hive/__init__.py | 1 + homeassistant/components/hive/climate.py | 20 ++++++++------------ 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/homeassistant/components/hive/__init__.py b/homeassistant/components/hive/__init__.py index 97e16b49d7f13..44e3a46d25f14 100644 --- a/homeassistant/components/hive/__init__.py +++ b/homeassistant/components/hive/__init__.py @@ -1,6 +1,7 @@ """Support for the Hive devices and services.""" from functools import wraps import logging + from pyhiveapi import Pyhiveapi import voluptuous as vol diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index a5c0a2da14db1..42fcf1774de7d 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -12,7 +12,6 @@ CURRENT_HVAC_OFF, CURRENT_HVAC_HEAT, ) - from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS @@ -59,8 +58,7 @@ class HiveClimateEntity(HiveEntity, ClimateDevice): def __init__(self, hive_session, hive_device): """Initialize the Climate device.""" super().__init__(hive_session, hive_device) - if self.device_type == "Heating": - self.thermostat_node_id = hive_device["Thermostat_NodeID"] + self.thermostat_node_id = hive_device["Thermostat_NodeID"] @property def unique_id(self): @@ -80,12 +78,11 @@ def supported_features(self): @property def name(self): """Return the name of the Climate device.""" - if self.device_type == "Heating": - friendly_name = "Heating" - if self.node_name is not None: - friendly_name = "{} {}".format(self.node_name, friendly_name) - elif self.device_type == "TRV": - friendly_name = self.node_name + friendly_name = "Heating" + if self.node_name is not None: + if self.device_type == "TRV": + friendly_name = self.node_name + friendly_name = f"{self.node_name} {friendly_name}" return friendly_name @@ -145,9 +142,8 @@ def max_temp(self): @property def preset_mode(self): """Return the current preset mode, e.g., home, away, temp.""" - if self.device_type == "Heating": - if self.session.heating.get_boost(self.node_id) == "ON": - return PRESET_BOOST + if self.device_type == "Heating" and self.session.heating.get_boost(self.node_id) == "ON": + return PRESET_BOOST return None @property From c08511e473f2d16dfb836edf2fe7de08d35078c2 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sun, 29 Sep 2019 13:32:58 +0100 Subject: [PATCH 11/14] updated phyhive to 0.2.19.3 --- homeassistant/components/hive/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homeassistant/components/hive/manifest.json b/homeassistant/components/hive/manifest.json index 2e7c4f4f179de..17974abf990d3 100644 --- a/homeassistant/components/hive/manifest.json +++ b/homeassistant/components/hive/manifest.json @@ -3,7 +3,7 @@ "name": "Hive", "documentation": "https://www.home-assistant.io/components/hive", "requirements": [ - "pyhiveapi==0.2.19" + "pyhiveapi==0.2.19.3" ], "dependencies": [], "codeowners": [ From 500df5e1f20349e688c72fef65d0e6d1a149b4f9 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sun, 29 Sep 2019 13:36:16 +0100 Subject: [PATCH 12/14] Corrected logic on TRV name --- homeassistant/components/hive/climate.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 42fcf1774de7d..0030b300224c6 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -82,7 +82,8 @@ def name(self): if self.node_name is not None: if self.device_type == "TRV": friendly_name = self.node_name - friendly_name = f"{self.node_name} {friendly_name}" + else: + friendly_name = f"{self.node_name} {friendly_name}" return friendly_name From 3d18790999b67865fe408c05347c5d6e51540b09 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sun, 29 Sep 2019 13:43:40 +0100 Subject: [PATCH 13/14] updated requirements as requested --- requirements_all.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_all.txt b/requirements_all.txt index ab99704f9653c..dd0c6112f4080 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -1223,7 +1223,7 @@ pyheos==0.6.0 pyhik==0.2.3 # homeassistant.components.hive -pyhiveapi==0.2.19 +pyhiveapi==0.2.19.3 # homeassistant.components.homematic pyhomematic==0.1.60 From c6c12d2028c90b0daa182d8085074038433bced0 Mon Sep 17 00:00:00 2001 From: bowringr Date: Sun, 29 Sep 2019 19:14:14 +0100 Subject: [PATCH 14/14] Black run --- homeassistant/components/hive/climate.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/homeassistant/components/hive/climate.py b/homeassistant/components/hive/climate.py index 0030b300224c6..ed13e3019ce13 100644 --- a/homeassistant/components/hive/climate.py +++ b/homeassistant/components/hive/climate.py @@ -143,7 +143,10 @@ def max_temp(self): @property def preset_mode(self): """Return the current preset mode, e.g., home, away, temp.""" - if self.device_type == "Heating" and self.session.heating.get_boost(self.node_id) == "ON": + if ( + self.device_type == "Heating" + and self.session.heating.get_boost(self.node_id) == "ON" + ): return PRESET_BOOST return None