Add configFlow and translations

This commit is contained in:
Jean-Marc Collin
2023-10-22 15:31:49 +00:00
parent bf4eee85d8
commit c9671a5c58
6 changed files with 149 additions and 36 deletions

View File

@@ -1,3 +1,7 @@
# pylint: disable=line-too-long
# pylint: disable=too-many-lines
# pylint: disable=invalid-name
"""Config flow for Versatile Thermostat integration.""" """Config flow for Versatile Thermostat integration."""
from __future__ import annotations from __future__ import annotations
@@ -24,6 +28,7 @@ from homeassistant.helpers.entity_component import EntityComponent
from homeassistant.helpers import selector from homeassistant.helpers import selector
from homeassistant.components.climate import ClimateEntity, DOMAIN as CLIMATE_DOMAIN from homeassistant.components.climate import ClimateEntity, DOMAIN as CLIMATE_DOMAIN
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
from homeassistant.components.number import DOMAIN as NUMBER_DOMAIN
from homeassistant.components.input_boolean import ( from homeassistant.components.input_boolean import (
DOMAIN as INPUT_BOOLEAN_DOMAIN, DOMAIN as INPUT_BOOLEAN_DOMAIN,
) )
@@ -91,6 +96,11 @@ from .const import (
CONF_USE_POWER_FEATURE, CONF_USE_POWER_FEATURE,
CONF_AC_MODE, CONF_AC_MODE,
CONF_THERMOSTAT_TYPES, CONF_THERMOSTAT_TYPES,
CONF_THERMOSTAT_VALVE,
CONF_VALVE,
CONF_VALVE_2,
CONF_VALVE_3,
CONF_VALVE_4,
UnknownEntity, UnknownEntity,
WindowOpenDetectionMethod, WindowOpenDetectionMethod,
) )
@@ -249,6 +259,39 @@ class VersatileThermostatBaseConfigFlow(FlowHandler):
} }
) )
self.STEP_THERMOSTAT_VALVE = vol.Schema( # pylint: disable=invalid-name
{
vol.Required(CONF_VALVE): selector.EntitySelector(
selector.EntitySelectorConfig(
domain=[NUMBER_DOMAIN, INPUT_NUMBER_DOMAIN]
),
),
vol.Optional(CONF_VALVE_2): selector.EntitySelector(
selector.EntitySelectorConfig(
domain=[NUMBER_DOMAIN, INPUT_NUMBER_DOMAIN]
),
),
vol.Optional(CONF_VALVE_3): selector.EntitySelector(
selector.EntitySelectorConfig(
domain=[NUMBER_DOMAIN, INPUT_NUMBER_DOMAIN]
),
),
vol.Optional(CONF_VALVE_4): selector.EntitySelector(
selector.EntitySelectorConfig(
domain=[NUMBER_DOMAIN, INPUT_NUMBER_DOMAIN]
),
),
vol.Required(
CONF_PROP_FUNCTION, default=PROPORTIONAL_FUNCTION_TPI
): vol.In(
[
PROPORTIONAL_FUNCTION_TPI,
]
),
vol.Optional(CONF_AC_MODE, default=False): cv.boolean,
}
)
self.STEP_TPI_DATA_SCHEMA = vol.Schema( # pylint: disable=invalid-name self.STEP_TPI_DATA_SCHEMA = vol.Schema( # pylint: disable=invalid-name
{ {
vol.Required(CONF_TPI_COEF_INT, default=0.6): vol.Coerce(float), vol.Required(CONF_TPI_COEF_INT, default=0.6): vol.Coerce(float),
@@ -479,6 +522,10 @@ class VersatileThermostatBaseConfigFlow(FlowHandler):
return await self.generic_step( return await self.generic_step(
"type", self.STEP_THERMOSTAT_SWITCH, user_input, self.async_step_tpi "type", self.STEP_THERMOSTAT_SWITCH, user_input, self.async_step_tpi
) )
elif self._infos[CONF_THERMOSTAT_TYPE] == CONF_THERMOSTAT_VALVE:
return await self.generic_step(
"type", self.STEP_THERMOSTAT_VALVE, user_input, self.async_step_tpi
)
else: else:
return await self.generic_step( return await self.generic_step(
"type", "type",
@@ -509,7 +556,7 @@ class VersatileThermostatBaseConfigFlow(FlowHandler):
elif self._infos[CONF_USE_PRESENCE_FEATURE]: elif self._infos[CONF_USE_PRESENCE_FEATURE]:
next_step = self.async_step_presence next_step = self.async_step_presence
if self._infos.get(CONF_AC_MODE) == True: if self._infos.get(CONF_AC_MODE) is True:
schema = self.STEP_PRESETS_WITH_AC_DATA_SCHEMA schema = self.STEP_PRESETS_WITH_AC_DATA_SCHEMA
else: else:
schema = self.STEP_PRESETS_DATA_SCHEMA schema = self.STEP_PRESETS_DATA_SCHEMA
@@ -565,7 +612,7 @@ class VersatileThermostatBaseConfigFlow(FlowHandler):
"""Handle the presence management flow steps""" """Handle the presence management flow steps"""
_LOGGER.debug("Into ConfigFlow.async_step_presence user_input=%s", user_input) _LOGGER.debug("Into ConfigFlow.async_step_presence user_input=%s", user_input)
if self._infos.get(CONF_AC_MODE) == True: if self._infos.get(CONF_AC_MODE) is True:
schema = self.STEP_PRESENCE_WITH_AC_DATA_SCHEMA schema = self.STEP_PRESENCE_WITH_AC_DATA_SCHEMA
else: else:
schema = self.STEP_PRESENCE_DATA_SCHEMA schema = self.STEP_PRESENCE_DATA_SCHEMA
@@ -670,6 +717,10 @@ class VersatileThermostatOptionsFlowHandler(
return await self.generic_step( return await self.generic_step(
"type", self.STEP_THERMOSTAT_SWITCH, user_input, self.async_step_tpi "type", self.STEP_THERMOSTAT_SWITCH, user_input, self.async_step_tpi
) )
elif self._infos[CONF_THERMOSTAT_TYPE] == CONF_THERMOSTAT_VALVE:
return await self.generic_step(
"type", self.STEP_THERMOSTAT_VALVE, user_input, self.async_step_tpi
)
else: else:
return await self.generic_step( return await self.generic_step(
"type", "type",
@@ -704,7 +755,7 @@ class VersatileThermostatOptionsFlowHandler(
elif self._infos[CONF_USE_PRESENCE_FEATURE]: elif self._infos[CONF_USE_PRESENCE_FEATURE]:
next_step = self.async_step_presence next_step = self.async_step_presence
if self._infos.get(CONF_AC_MODE) == True: if self._infos.get(CONF_AC_MODE) is True:
schema = self.STEP_PRESETS_WITH_AC_DATA_SCHEMA schema = self.STEP_PRESETS_WITH_AC_DATA_SCHEMA
else: else:
schema = self.STEP_PRESETS_DATA_SCHEMA schema = self.STEP_PRESETS_DATA_SCHEMA
@@ -767,7 +818,7 @@ class VersatileThermostatOptionsFlowHandler(
"Into OptionsFlowHandler.async_step_presence user_input=%s", user_input "Into OptionsFlowHandler.async_step_presence user_input=%s", user_input
) )
if self._infos.get(CONF_AC_MODE) == True: if self._infos.get(CONF_AC_MODE) is True:
schema = self.STEP_PRESENCE_WITH_AC_DATA_SCHEMA schema = self.STEP_PRESENCE_WITH_AC_DATA_SCHEMA
else: else:
schema = self.STEP_PRESENCE_DATA_SCHEMA schema = self.STEP_PRESENCE_DATA_SCHEMA

View File

@@ -11,16 +11,16 @@ from homeassistant.components.climate import (
ClimateEntityFeature, ClimateEntityFeature,
) )
PRESET_AC_SUFFIX = "_ac"
PRESET_ECO_AC = PRESET_ECO + PRESET_AC_SUFFIX
PRESET_COMFORT_AC = PRESET_COMFORT + PRESET_AC_SUFFIX
PRESET_BOOST_AC = PRESET_BOOST + PRESET_AC_SUFFIX
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from .prop_algorithm import ( from .prop_algorithm import (
PROPORTIONAL_FUNCTION_TPI, PROPORTIONAL_FUNCTION_TPI,
) )
PRESET_AC_SUFFIX = "_ac"
PRESET_ECO_AC = PRESET_ECO + PRESET_AC_SUFFIX
PRESET_COMFORT_AC = PRESET_COMFORT + PRESET_AC_SUFFIX
PRESET_BOOST_AC = PRESET_BOOST + PRESET_AC_SUFFIX
DEVICE_MANUFACTURER = "JMCOLLIN" DEVICE_MANUFACTURER = "JMCOLLIN"
DEVICE_MODEL = "Versatile Thermostat" DEVICE_MODEL = "Versatile Thermostat"
@@ -65,6 +65,7 @@ CONF_SECURITY_DEFAULT_ON_PERCENT = "security_default_on_percent"
CONF_THERMOSTAT_TYPE = "thermostat_type" CONF_THERMOSTAT_TYPE = "thermostat_type"
CONF_THERMOSTAT_SWITCH = "thermostat_over_switch" CONF_THERMOSTAT_SWITCH = "thermostat_over_switch"
CONF_THERMOSTAT_CLIMATE = "thermostat_over_climate" CONF_THERMOSTAT_CLIMATE = "thermostat_over_climate"
CONF_THERMOSTAT_VALVE = "thermostat_over_valve"
CONF_CLIMATE = "climate_entity_id" CONF_CLIMATE = "climate_entity_id"
CONF_CLIMATE_2 = "climate_entity2_id" CONF_CLIMATE_2 = "climate_entity2_id"
CONF_CLIMATE_3 = "climate_entity3_id" CONF_CLIMATE_3 = "climate_entity3_id"
@@ -77,6 +78,10 @@ CONF_AC_MODE = "ac_mode"
CONF_WINDOW_AUTO_OPEN_THRESHOLD = "window_auto_open_threshold" CONF_WINDOW_AUTO_OPEN_THRESHOLD = "window_auto_open_threshold"
CONF_WINDOW_AUTO_CLOSE_THRESHOLD = "window_auto_close_threshold" CONF_WINDOW_AUTO_CLOSE_THRESHOLD = "window_auto_close_threshold"
CONF_WINDOW_AUTO_MAX_DURATION = "window_auto_max_duration" CONF_WINDOW_AUTO_MAX_DURATION = "window_auto_max_duration"
CONF_VALVE = "valve_entity_id"
CONF_VALVE_2 = "valve_entity2_id"
CONF_VALVE_3 = "valve_entity3_id"
CONF_VALVE_4 = "valve_entity4_id"
CONF_PRESETS = { CONF_PRESETS = {
p: f"{p}_temp" p: f"{p}_temp"
@@ -174,6 +179,11 @@ ALL_CONF = (
CONF_USE_PRESENCE_FEATURE, CONF_USE_PRESENCE_FEATURE,
CONF_USE_POWER_FEATURE, CONF_USE_POWER_FEATURE,
CONF_AC_MODE, CONF_AC_MODE,
CONF_VALVE,
CONF_VALVE_2,
CONF_VALVE_3,
CONF_VALVE_4,
] ]
+ CONF_PRESETS_VALUES + CONF_PRESETS_VALUES
+ CONF_PRESETS_AWAY_VALUES + CONF_PRESETS_AWAY_VALUES
@@ -185,7 +195,7 @@ CONF_FUNCTIONS = [
PROPORTIONAL_FUNCTION_TPI, PROPORTIONAL_FUNCTION_TPI,
] ]
CONF_THERMOSTAT_TYPES = [CONF_THERMOSTAT_SWITCH, CONF_THERMOSTAT_CLIMATE] CONF_THERMOSTAT_TYPES = [CONF_THERMOSTAT_SWITCH, CONF_THERMOSTAT_CLIMATE, CONF_THERMOSTAT_VALVE]
SUPPORT_FLAGS = ClimateEntityFeature.TARGET_TEMPERATURE SUPPORT_FLAGS = ClimateEntityFeature.TARGET_TEMPERATURE

View File

@@ -34,7 +34,11 @@
"climate_entity2_id": "2nd underlying climate", "climate_entity2_id": "2nd underlying climate",
"climate_entity3_id": "3rd underlying climate", "climate_entity3_id": "3rd underlying climate",
"climate_entity4_id": "4th underlying climate", "climate_entity4_id": "4th underlying climate",
"ac_mode": "AC mode" "ac_mode": "AC mode",
"valve_entity_id": "1rst valve number",
"valve_entity2_id": "2nd valve number",
"valve_entity3_id": "3rd valve number",
"valve_entity4_id": "4th valve number"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Mandatory heater entity id", "heater_entity_id": "Mandatory heater entity id",
@@ -46,7 +50,11 @@
"climate_entity2_id": "2nd underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id",
"climate_entity3_id": "3rd underlying climate entity id", "climate_entity3_id": "3rd underlying climate entity id",
"climate_entity4_id": "4th underlying climate entity id", "climate_entity4_id": "4th underlying climate entity id",
"ac_mode": "Use the Air Conditioning (AC) mode" "ac_mode": "Use the Air Conditioning (AC) mode",
"valve_entity_id": "1rst valve number entity id",
"valve_entity2_id": "2nd valve number entity id",
"valve_entity3_id": "3rd valve number entity id",
"valve_entity4_id": "4th valve number entity id"
} }
}, },
"tpi": { "tpi": {
@@ -178,16 +186,20 @@
"title": "Linked entities", "title": "Linked entities",
"description": "Linked entities attributes", "description": "Linked entities attributes",
"data": { "data": {
"heater_entity_id": "Heater switch", "heater_entity_id": "1rst heater switch",
"heater_entity2_id": "2nd Heater switch", "heater_entity2_id": "2nd heater switch",
"heater_entity3_id": "3rd Heater switch", "heater_entity3_id": "3rd heater switch",
"heater_entity4_id": "4th Heater switch", "heater_entity4_id": "4th heater switch",
"proportional_function": "Algorithm", "proportional_function": "Algorithm",
"climate_entity_id": "Underlying thermostat", "climate_entity_id": "1rst underlying climate",
"climate_entity2_id": "2nd underlying climate", "climate_entity2_id": "2nd underlying climate",
"climate_entity3_id": "3rd underlying climate", "climate_entity3_id": "3rd underlying climate",
"climate_entity4_id": "4th underlying climate", "climate_entity4_id": "4th underlying climate",
"ac_mode": "AC mode" "ac_mode": "AC mode",
"valve_entity_id": "1rst valve number",
"valve_entity2_id": "2nd valve number",
"valve_entity3_id": "3rd valve number",
"valve_entity4_id": "4th valve number"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Mandatory heater entity id", "heater_entity_id": "Mandatory heater entity id",
@@ -199,7 +211,11 @@
"climate_entity2_id": "2nd underlying climate entity id", "climate_entity2_id": "2nd underlying climate entity id",
"climate_entity3_id": "3rd underlying climate entity id", "climate_entity3_id": "3rd underlying climate entity id",
"climate_entity4_id": "4th underlying climate entity id", "climate_entity4_id": "4th underlying climate entity id",
"ac_mode": "Use the Air Conditioning (AC) mode" "ac_mode": "Use the Air Conditioning (AC) mode",
"valve_entity_id": "1rst valve number entity id",
"valve_entity2_id": "2nd valve number entity id",
"valve_entity3_id": "3rd valve number entity id",
"valve_entity4_id": "4th valve number entity id"
} }
}, },
"tpi": { "tpi": {
@@ -310,7 +326,8 @@
"thermostat_type": { "thermostat_type": {
"options": { "options": {
"thermostat_over_switch": "Thermostat over a switch", "thermostat_over_switch": "Thermostat over a switch",
"thermostat_over_climate": "Thermostat over another thermostat" "thermostat_over_climate": "Thermostat over a climate",
"thermostat_over_valve": "Thermostat over a valve"
} }
} }
}, },

View File

@@ -310,7 +310,8 @@
"thermostat_type": { "thermostat_type": {
"options": { "options": {
"thermostat_over_switch": "Thermostat over a switch", "thermostat_over_switch": "Thermostat over a switch",
"thermostat_over_climate": "Thermostat over another thermostat" "thermostat_over_climate": "Thermostat over another thermostat",
"thermostat_over_valve": "Thermostat over a valve"
} }
} }
}, },

View File

@@ -34,7 +34,11 @@
"climate_entity2_id": "2ème thermostat sous-jacent", "climate_entity2_id": "2ème thermostat sous-jacent",
"climate_entity3_id": "3ème thermostat sous-jacent", "climate_entity3_id": "3ème thermostat sous-jacent",
"climate_entity4_id": "4ème thermostat sous-jacent", "climate_entity4_id": "4ème thermostat sous-jacent",
"ac_mode": "AC mode ?" "ac_mode": "AC mode ?",
"valve_entity_id": "1ère valve number",
"valve_entity2_id": "2ème valve number",
"valve_entity3_id": "3ème valve number",
"valve_entity4_id": "4ème valve number"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Entity id du 1er radiateur obligatoire", "heater_entity_id": "Entity id du 1er radiateur obligatoire",
@@ -46,7 +50,11 @@
"climate_entity2_id": "Entity id du 2ème thermostat sous-jacent", "climate_entity2_id": "Entity id du 2ème thermostat sous-jacent",
"climate_entity3_id": "Entity id du 3ème thermostat sous-jacent", "climate_entity3_id": "Entity id du 3ème thermostat sous-jacent",
"climate_entity4_id": "Entity id du 4ème thermostat sous-jacent", "climate_entity4_id": "Entity id du 4ème thermostat sous-jacent",
"ac_mode": "Utilisation du mode Air Conditionné (AC)" "ac_mode": "Utilisation du mode Air Conditionné (AC)",
"valve_entity_id": "Entity id de la 1ère valve",
"valve_entity2_id": "Entity id de la 2ème valve",
"valve_entity3_id": "Entity id de la 3ème valve",
"valve_entity4_id": "Entity id de la 4ème valve"
} }
}, },
"tpi": { "tpi": {
@@ -188,7 +196,11 @@
"climate_entity2_id": "2ème thermostat sous-jacent", "climate_entity2_id": "2ème thermostat sous-jacent",
"climate_entity3_id": "3ème thermostat sous-jacent", "climate_entity3_id": "3ème thermostat sous-jacent",
"climate_entity4_id": "4ème thermostat sous-jacent", "climate_entity4_id": "4ème thermostat sous-jacent",
"ac_mode": "AC mode ?" "ac_mode": "AC mode ?",
"valve_entity_id": "1ère valve number",
"valve_entity2_id": "2ème valve number",
"valve_entity3_id": "3ème valve number",
"valve_entity4_id": "4ème valve number"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Entity id du 1er radiateur obligatoire", "heater_entity_id": "Entity id du 1er radiateur obligatoire",
@@ -200,7 +212,11 @@
"climate_entity2_id": "Entity id du 2ème thermostat sous-jacent", "climate_entity2_id": "Entity id du 2ème thermostat sous-jacent",
"climate_entity3_id": "Entity id du 3ème thermostat sous-jacent", "climate_entity3_id": "Entity id du 3ème thermostat sous-jacent",
"climate_entity4_id": "Entity id du 4ème thermostat sous-jacent", "climate_entity4_id": "Entity id du 4ème thermostat sous-jacent",
"ac_mode": "Utilisation du mode Air Conditionné (AC)" "ac_mode": "Utilisation du mode Air Conditionné (AC)",
"valve_entity_id": "Entity id de la 1ère valve",
"valve_entity2_id": "Entity id de la 2ème valve",
"valve_entity3_id": "Entity id de la 3ème valve",
"valve_entity4_id": "Entity id de la 4ème valve"
} }
}, },
"tpi": { "tpi": {
@@ -311,7 +327,8 @@
"thermostat_type": { "thermostat_type": {
"options": { "options": {
"thermostat_over_switch": "Thermostat sur un switch", "thermostat_over_switch": "Thermostat sur un switch",
"thermostat_over_climate": "Thermostat sur un autre thermostat" "thermostat_over_climate": "Thermostat sur un autre thermostat",
"thermostat_over_valve": "Thermostat sur une valve"
} }
} }
}, },

View File

@@ -34,7 +34,11 @@
"climate_entity2_id": "Secundo termostato sottostante", "climate_entity2_id": "Secundo termostato sottostante",
"climate_entity3_id": "Terzo termostato sottostante", "climate_entity3_id": "Terzo termostato sottostante",
"climate_entity4_id": "Quarto termostato sottostante", "climate_entity4_id": "Quarto termostato sottostante",
"ac_mode": "AC mode ?" "ac_mode": "AC mode ?",
"valve_entity_id": "Primo valvola numero",
"valve_entity2_id": "Secondo valvola numero",
"valve_entity3_id": "Terzo valvola numero",
"valve_entity4_id": "Quarto valvola numero"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Entity id obbligatoria del primo riscaldatore", "heater_entity_id": "Entity id obbligatoria del primo riscaldatore",
@@ -46,7 +50,11 @@
"climate_entity2_id": "Entity id del secundo termostato sottostante", "climate_entity2_id": "Entity id del secundo termostato sottostante",
"climate_entity3_id": "Entity id del terzo termostato sottostante", "climate_entity3_id": "Entity id del terzo termostato sottostante",
"climate_entity4_id": "Entity id del quarto termostato sottostante", "climate_entity4_id": "Entity id del quarto termostato sottostante",
"ac_mode": "Utilizzare la modalità AC (Air Conditioned) ?" "ac_mode": "Utilizzare la modalità AC (Air Conditioned) ?",
"valve_entity_id": "Entity id del primo valvola numero",
"valve_entity2_id": "Entity id del secondo valvola numero",
"valve_entity3_id": "Entity id del terzo valvola numero",
"valve_entity4_id": "Entity id del quarto valvola numero"
} }
}, },
"tpi": { "tpi": {
@@ -169,18 +177,22 @@
}, },
"type": { "type": {
"title": "Entità collegate", "title": "Entità collegate",
"description": "Attributi delle entità collegate", "description": "Parametri entità collegate",
"data": { "data": {
"heater_entity_id": "Interruttore riscaldatore", "heater_entity_id": "Primo riscaldatore",
"heater_entity2_id": "Secondo interruttore riscaldatore", "heater_entity2_id": "Secondo riscaldatore",
"heater_entity3_id": "Terzo interruttore riscaldatore", "heater_entity3_id": "Terzo riscaldatore",
"heater_entity4_id": "Quarto interruttore riscaldatore", "heater_entity4_id": "Quarto riscaldatore",
"proportional_function": "Algoritmo", "proportional_function": "Algoritmo",
"climate_entity_id": "Termostato sottostante", "climate_entity_id": "Termostato sottostante",
"climate_entity2_id": "Secundo termostato sottostante", "climate_entity2_id": "Secundo termostato sottostante",
"climate_entity3_id": "Terzo termostato sottostante", "climate_entity3_id": "Terzo termostato sottostante",
"climate_entity4_id": "Quarto termostato sottostante", "climate_entity4_id": "Quarto termostato sottostante",
"ac_mode": "AC mode ?" "ac_mode": "AC mode ?",
"valve_entity_id": "Primo valvola numero",
"valve_entity2_id": "Secondo valvola numero",
"valve_entity3_id": "Terzo valvola numero",
"valve_entity4_id": "Quarto valvola numero"
}, },
"data_description": { "data_description": {
"heater_entity_id": "Entity id obbligatoria del primo riscaldatore", "heater_entity_id": "Entity id obbligatoria del primo riscaldatore",
@@ -192,7 +204,11 @@
"climate_entity2_id": "Entity id del secundo termostato sottostante", "climate_entity2_id": "Entity id del secundo termostato sottostante",
"climate_entity3_id": "Entity id del terzo termostato sottostante", "climate_entity3_id": "Entity id del terzo termostato sottostante",
"climate_entity4_id": "Entity id del quarto termostato sottostante", "climate_entity4_id": "Entity id del quarto termostato sottostante",
"ac_mode": "Utilizzare la modalità AC (Air Conditioned) ?" "ac_mode": "Utilizzare la modalità AC (Air Conditioned) ?",
"valve_entity_id": "Entity id del primo valvola numero",
"valve_entity2_id": "Entity id del secondo valvola numero",
"valve_entity3_id": "Entity id del terzo valvola numero",
"valve_entity4_id": "Entity id del quarto valvola numero"
} }
}, },
"tpi": { "tpi": {
@@ -296,7 +312,8 @@
"thermostat_type": { "thermostat_type": {
"options": { "options": {
"thermostat_over_switch": "Termostato su un interruttore", "thermostat_over_switch": "Termostato su un interruttore",
"thermostat_over_climate": "Termostato sopra un altro termostato" "thermostat_over_climate": "Termostato sopra un altro termostato",
"thermostat_over_valve": "Thermostato su una valvola"
} }
} }
}, },