47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
from homeassistant.helpers.typing import ConfigType
|
|
|
|
from custom_components.powercalc.const import (
|
|
CONF_COMPOSITE,
|
|
CONF_FIXED,
|
|
CONF_LINEAR,
|
|
CONF_LUT,
|
|
CONF_MODE,
|
|
CONF_MULTI_SWITCH,
|
|
CONF_PLAYBOOK,
|
|
CONF_WLED,
|
|
CalculationStrategy,
|
|
)
|
|
from custom_components.powercalc.errors import UnsupportedStrategyError
|
|
from custom_components.powercalc.power_profile.power_profile import PowerProfile
|
|
|
|
STRATEGY_CONFIG_MAP = {
|
|
CONF_LINEAR: CalculationStrategy.LINEAR,
|
|
CONF_FIXED: CalculationStrategy.FIXED,
|
|
CONF_MULTI_SWITCH: CalculationStrategy.MULTI_SWITCH,
|
|
CONF_PLAYBOOK: CalculationStrategy.PLAYBOOK,
|
|
CONF_WLED: CalculationStrategy.WLED,
|
|
CONF_LUT: CalculationStrategy.LUT,
|
|
CONF_COMPOSITE: CalculationStrategy.COMPOSITE,
|
|
}
|
|
|
|
|
|
def detect_calculation_strategy(
|
|
config: ConfigType,
|
|
power_profile: PowerProfile | None,
|
|
) -> CalculationStrategy:
|
|
"""Select the calculation strategy."""
|
|
config_mode = config.get(CONF_MODE)
|
|
if config_mode:
|
|
return CalculationStrategy(config_mode)
|
|
|
|
for config_key, strategy in STRATEGY_CONFIG_MAP.items():
|
|
if config_key in config:
|
|
return strategy
|
|
|
|
if power_profile:
|
|
return power_profile.calculation_strategy
|
|
|
|
raise UnsupportedStrategyError(
|
|
"Cannot select a strategy, supply it in the config. See the readme",
|
|
)
|