Home Assistant Git Exporter
This commit is contained in:
143
config/custom_components/solar_optimizer/__init__.py
Normal file
143
config/custom_components/solar_optimizer/__init__.py
Normal file
@@ -0,0 +1,143 @@
|
||||
"""Initialisation du package de l'intégration HACS Tuto"""
|
||||
import logging
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.const import EVENT_HOMEASSISTANT_START
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.helpers.typing import ConfigType
|
||||
import homeassistant.helpers.config_validation as cv
|
||||
from homeassistant.helpers import selector
|
||||
from homeassistant.components.input_boolean import DOMAIN as INPUT_BOOLEAN_DOMAIN
|
||||
from homeassistant.components.input_number import DOMAIN as INPUT_NUMBER_DOMAIN
|
||||
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
|
||||
from homeassistant.components.humidifier import DOMAIN as HUMIDIFIER_DOMAIN
|
||||
from homeassistant.components.climate import DOMAIN as CLIMATE_DOMAIN
|
||||
from homeassistant.components.number import DOMAIN as NUMBER_DOMAIN
|
||||
from homeassistant.components.button import DOMAIN as BUTTON_DOMAIN
|
||||
|
||||
# from homeassistant.helpers.entity_component import EntityComponent
|
||||
|
||||
|
||||
from .const import DOMAIN, PLATFORMS
|
||||
from .coordinator import SolarOptimizerCoordinator
|
||||
|
||||
# from .input_boolean import async_setup_entry as async_setup_entry_input_boolean
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
CONFIG_SCHEMA = vol.Schema(
|
||||
{
|
||||
DOMAIN: vol.Schema(
|
||||
{
|
||||
"algorithm": vol.Schema(
|
||||
{
|
||||
vol.Required("initial_temp", default=1000): vol.Coerce(float),
|
||||
vol.Required("min_temp", default=0.1): vol.Coerce(float),
|
||||
vol.Required("cooling_factor", default=0.95): vol.Coerce(float),
|
||||
vol.Required(
|
||||
"max_iteration_number", default=1000
|
||||
): cv.positive_int,
|
||||
}
|
||||
),
|
||||
"devices": vol.All(
|
||||
[
|
||||
{
|
||||
vol.Required("name"): str,
|
||||
vol.Required("entity_id"): selector.EntitySelector(
|
||||
selector.EntitySelectorConfig(
|
||||
domain=[INPUT_BOOLEAN_DOMAIN, SWITCH_DOMAIN, HUMIDIFIER_DOMAIN, CLIMATE_DOMAIN, BUTTON_DOMAIN]
|
||||
)
|
||||
),
|
||||
vol.Optional("power_entity_id"): selector.EntitySelector(
|
||||
selector.EntitySelectorConfig(
|
||||
domain=[INPUT_NUMBER_DOMAIN, NUMBER_DOMAIN]
|
||||
)
|
||||
),
|
||||
vol.Required("power_max"): vol.Coerce(float),
|
||||
vol.Optional("power_min"): vol.Coerce(float),
|
||||
vol.Optional("power_step"): vol.Coerce(float),
|
||||
vol.Optional("check_usable_template"): str,
|
||||
vol.Optional("check_active_template"): str,
|
||||
vol.Optional("duration_min"): vol.Coerce(float),
|
||||
vol.Optional("duration_stop_min"): vol.Coerce(float),
|
||||
vol.Optional("duration_power_min"): vol.Coerce(float),
|
||||
vol.Optional("action_mode"): str,
|
||||
vol.Required("activation_service"): str,
|
||||
vol.Required("deactivation_service"): str,
|
||||
vol.Optional("change_power_service"): str,
|
||||
vol.Optional("convert_power_divide_factor"): vol.Coerce(
|
||||
float
|
||||
),
|
||||
vol.Optional("battery_soc_threshold", default=0): vol.Coerce(float),
|
||||
}
|
||||
]
|
||||
),
|
||||
}
|
||||
),
|
||||
},
|
||||
extra=vol.ALLOW_EXTRA,
|
||||
)
|
||||
|
||||
|
||||
async def async_setup(
|
||||
hass: HomeAssistant, config: ConfigType
|
||||
): # pylint: disable=unused-argument
|
||||
"""Initialisation de l'intégration"""
|
||||
_LOGGER.info(
|
||||
"Initializing %s integration with plaforms: %s with config: %s",
|
||||
DOMAIN,
|
||||
PLATFORMS,
|
||||
config.get(DOMAIN),
|
||||
)
|
||||
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
|
||||
# L'argument config contient votre fichier configuration.yaml
|
||||
solar_optimizer_config = config.get(DOMAIN)
|
||||
|
||||
hass.data[DOMAIN]["coordinator"] = coordinator = SolarOptimizerCoordinator(
|
||||
hass, solar_optimizer_config
|
||||
)
|
||||
|
||||
hass.bus.async_listen_once("homeassistant_started", coordinator.on_ha_started)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Creation des entités à partir d'une configEntry"""
|
||||
|
||||
_LOGGER.debug(
|
||||
"Appel de async_setup_entry entry: entry_id='%s', data='%s'",
|
||||
entry.entry_id,
|
||||
entry.data,
|
||||
)
|
||||
|
||||
hass.data.setdefault(DOMAIN, {})
|
||||
|
||||
# Enregistrement de l'écouteur de changement 'update_listener'
|
||||
entry.async_on_unload(entry.add_update_listener(update_listener))
|
||||
|
||||
await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)
|
||||
|
||||
return True
|
||||
|
||||
|
||||
async def update_listener(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
"""Fonction qui force le rechargement des entités associées à une configEntry"""
|
||||
await hass.config_entries.async_reload(entry.entry_id)
|
||||
|
||||
|
||||
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||
"""Handle removal of an entry."""
|
||||
if unloaded := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
|
||||
pass
|
||||
# hass.data[DOMAIN].pop(entry.entry_id)
|
||||
return unloaded
|
||||
|
||||
|
||||
async def async_reload_entry(hass: HomeAssistant, entry: ConfigEntry) -> None:
|
||||
"""Reload config entry."""
|
||||
await async_unload_entry(hass, entry)
|
||||
# await async_setup_entry(hass, entry)
|
||||
Reference in New Issue
Block a user