-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig_flow.py
More file actions
52 lines (42 loc) · 1.81 KB
/
Copy pathconfig_flow.py
File metadata and controls
52 lines (42 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
from __future__ import annotations
import voluptuous as vol
from homeassistant import config_entries
from homeassistant.data_entry_flow import FlowResult
from .const import CONF_NET_METERING, CONF_SELECTED_RATE, DOMAIN
from .coordinator import DteRateCoordinator
class DteRatesConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
VERSION = 1
async def async_step_user(self, user_input: dict | None = None) -> FlowResult:
coordinator = DteRateCoordinator(self.hass)
await coordinator.async_refresh()
if coordinator.data is None:
return self.async_abort(reason="cannot_connect")
rate_options = {
code: f"{rate.name} ({code})"
for code, rate in coordinator.data.rates.items()
}
if user_input is not None:
selected_rate = user_input[CONF_SELECTED_RATE]
return self.async_create_entry(
title=rate_options[selected_rate],
data=user_input,
)
schema = vol.Schema(
{
vol.Required(CONF_SELECTED_RATE): vol.In(rate_options),
vol.Optional(CONF_NET_METERING, default=False): bool,
}
)
return self.async_show_form(
step_id="user",
data_schema=schema,
description_placeholders={
"rider18_status": _rider18_status(coordinator.data),
},
)
def _rider18_status(rate_card) -> str:
count = len(getattr(rate_card, "pscr_rates", {}))
if count:
suffix = "tariff" if count == 1 else "tariffs"
return f"Rider 18 export credits use parsed generation rates plus MPSC PSCR factors loaded for {count} {suffix}."
return "Rider 18 export credits use parsed generation rates plus MPSC PSCR when the selected tariff has a PSCR factor."