Add configuration options for WSLink Addon port.
parent
63660006ea
commit
9d5fafa8d0
|
|
@ -6,12 +6,7 @@ from typing import Any
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from yarl import URL
|
from yarl import URL
|
||||||
|
|
||||||
from homeassistant.config_entries import (
|
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult, OptionsFlow
|
||||||
ConfigEntry,
|
|
||||||
ConfigFlow,
|
|
||||||
ConfigFlowResult,
|
|
||||||
OptionsFlow,
|
|
||||||
)
|
|
||||||
from homeassistant.core import callback
|
from homeassistant.core import callback
|
||||||
from homeassistant.exceptions import HomeAssistantError
|
from homeassistant.exceptions import HomeAssistantError
|
||||||
from homeassistant.helpers.network import get_url
|
from homeassistant.helpers.network import get_url
|
||||||
|
|
@ -23,7 +18,6 @@ from .const import (
|
||||||
DOMAIN,
|
DOMAIN,
|
||||||
ECOWITT_ENABLED,
|
ECOWITT_ENABLED,
|
||||||
ECOWITT_WEBHOOK_ID,
|
ECOWITT_WEBHOOK_ID,
|
||||||
# HEALTH_BEARER_TOKEN,
|
|
||||||
INVALID_CREDENTIALS,
|
INVALID_CREDENTIALS,
|
||||||
POCASI_CZ_API_ID,
|
POCASI_CZ_API_ID,
|
||||||
POCASI_CZ_API_KEY,
|
POCASI_CZ_API_KEY,
|
||||||
|
|
@ -37,6 +31,7 @@ from .const import (
|
||||||
WINDY_STATION_ID,
|
WINDY_STATION_ID,
|
||||||
WINDY_STATION_PW,
|
WINDY_STATION_PW,
|
||||||
WSLINK,
|
WSLINK,
|
||||||
|
WSLINK_ADDON_PORT,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -65,6 +60,8 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
self.pocasi_cz_schema = {}
|
self.pocasi_cz_schema = {}
|
||||||
self.ecowitt: dict[str, Any] = {}
|
self.ecowitt: dict[str, Any] = {}
|
||||||
self.ecowitt_schema = {}
|
self.ecowitt_schema = {}
|
||||||
|
self.wslink_addon_port: dict[str, int] = {}
|
||||||
|
self.wslink_addod_schema = {}
|
||||||
|
|
||||||
async def _get_entry_data(self):
|
async def _get_entry_data(self):
|
||||||
"""Get entry data."""
|
"""Get entry data."""
|
||||||
|
|
@ -94,22 +91,17 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
self.windy_data = {
|
self.windy_data = {
|
||||||
WINDY_STATION_ID: self.config_entry.options.get(WINDY_STATION_ID, ""),
|
WINDY_STATION_ID: self.config_entry.options.get(WINDY_STATION_ID, ""),
|
||||||
WINDY_STATION_PW: self.config_entry.options.get(WINDY_STATION_PW, ""),
|
WINDY_STATION_PW: self.config_entry.options.get(WINDY_STATION_PW, ""),
|
||||||
WINDY_LOGGER_ENABLED: self.config_entry.options.get(
|
WINDY_LOGGER_ENABLED: self.config_entry.options.get(WINDY_LOGGER_ENABLED, False),
|
||||||
WINDY_LOGGER_ENABLED, False
|
|
||||||
),
|
|
||||||
WINDY_ENABLED: self.config_entry.options.get(WINDY_ENABLED, False),
|
WINDY_ENABLED: self.config_entry.options.get(WINDY_ENABLED, False),
|
||||||
}
|
}
|
||||||
|
|
||||||
self.windy_data_schema = {
|
self.windy_data_schema = {
|
||||||
vol.Optional(
|
vol.Optional(WINDY_STATION_ID, default=self.windy_data.get(WINDY_STATION_ID, "")): str,
|
||||||
WINDY_STATION_ID, default=self.windy_data.get(WINDY_STATION_ID, "")
|
|
||||||
): str,
|
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
WINDY_STATION_PW,
|
WINDY_STATION_PW,
|
||||||
default=self.windy_data.get(WINDY_STATION_PW, ""),
|
default=self.windy_data.get(WINDY_STATION_PW, ""),
|
||||||
): str,
|
): str,
|
||||||
vol.Optional(WINDY_ENABLED, default=self.windy_data[WINDY_ENABLED]): bool
|
vol.Optional(WINDY_ENABLED, default=self.windy_data[WINDY_ENABLED]): bool or False,
|
||||||
or False,
|
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
WINDY_LOGGER_ENABLED,
|
WINDY_LOGGER_ENABLED,
|
||||||
default=self.windy_data[WINDY_LOGGER_ENABLED],
|
default=self.windy_data[WINDY_LOGGER_ENABLED],
|
||||||
|
|
@ -120,28 +112,18 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
POCASI_CZ_API_ID: self.config_entry.options.get(POCASI_CZ_API_ID, ""),
|
POCASI_CZ_API_ID: self.config_entry.options.get(POCASI_CZ_API_ID, ""),
|
||||||
POCASI_CZ_API_KEY: self.config_entry.options.get(POCASI_CZ_API_KEY, ""),
|
POCASI_CZ_API_KEY: self.config_entry.options.get(POCASI_CZ_API_KEY, ""),
|
||||||
POCASI_CZ_ENABLED: self.config_entry.options.get(POCASI_CZ_ENABLED, False),
|
POCASI_CZ_ENABLED: self.config_entry.options.get(POCASI_CZ_ENABLED, False),
|
||||||
POCASI_CZ_LOGGER_ENABLED: self.config_entry.options.get(
|
POCASI_CZ_LOGGER_ENABLED: self.config_entry.options.get(POCASI_CZ_LOGGER_ENABLED, False),
|
||||||
POCASI_CZ_LOGGER_ENABLED, False
|
POCASI_CZ_SEND_INTERVAL: self.config_entry.options.get(POCASI_CZ_SEND_INTERVAL, 30),
|
||||||
),
|
|
||||||
POCASI_CZ_SEND_INTERVAL: self.config_entry.options.get(
|
|
||||||
POCASI_CZ_SEND_INTERVAL, 30
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.pocasi_cz_schema = {
|
self.pocasi_cz_schema = {
|
||||||
vol.Required(
|
vol.Required(POCASI_CZ_API_ID, default=self.pocasi_cz.get(POCASI_CZ_API_ID)): str,
|
||||||
POCASI_CZ_API_ID, default=self.pocasi_cz.get(POCASI_CZ_API_ID)
|
vol.Required(POCASI_CZ_API_KEY, default=self.pocasi_cz.get(POCASI_CZ_API_KEY)): str,
|
||||||
): str,
|
|
||||||
vol.Required(
|
|
||||||
POCASI_CZ_API_KEY, default=self.pocasi_cz.get(POCASI_CZ_API_KEY)
|
|
||||||
): str,
|
|
||||||
vol.Required(
|
vol.Required(
|
||||||
POCASI_CZ_SEND_INTERVAL,
|
POCASI_CZ_SEND_INTERVAL,
|
||||||
default=self.pocasi_cz.get(POCASI_CZ_SEND_INTERVAL),
|
default=self.pocasi_cz.get(POCASI_CZ_SEND_INTERVAL),
|
||||||
): int,
|
): int,
|
||||||
vol.Optional(
|
vol.Optional(POCASI_CZ_ENABLED, default=self.pocasi_cz.get(POCASI_CZ_ENABLED)): bool,
|
||||||
POCASI_CZ_ENABLED, default=self.pocasi_cz.get(POCASI_CZ_ENABLED)
|
|
||||||
): bool,
|
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
POCASI_CZ_LOGGER_ENABLED,
|
POCASI_CZ_LOGGER_ENABLED,
|
||||||
default=self.pocasi_cz.get(POCASI_CZ_LOGGER_ENABLED),
|
default=self.pocasi_cz.get(POCASI_CZ_LOGGER_ENABLED),
|
||||||
|
|
@ -153,11 +135,13 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
ECOWITT_ENABLED: self.config_entry.options.get(ECOWITT_ENABLED, False),
|
ECOWITT_ENABLED: self.config_entry.options.get(ECOWITT_ENABLED, False),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self.wslink_addon_port = {WSLINK_ADDON_PORT: self.config_entry.options.get(WSLINK_ADDON_PORT, 443)}
|
||||||
|
|
||||||
async def async_step_init(self, user_input: dict[str, Any] = {}):
|
async def async_step_init(self, user_input: dict[str, Any] = {}):
|
||||||
"""Manage the options - show menu first."""
|
"""Manage the options - show menu first."""
|
||||||
_ = user_input
|
_ = user_input
|
||||||
return self.async_show_menu(
|
return self.async_show_menu(
|
||||||
step_id="init", menu_options=["basic", "ecowitt", "windy", "pocasi"]
|
step_id="init", menu_options=["basic", "wslink_port_setup", "ecowitt", "windy", "pocasi"]
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_step_basic(self, user_input: Any = None):
|
async def async_step_basic(self, user_input: Any = None):
|
||||||
|
|
@ -294,6 +278,28 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
user_input = self.retain_data(user_input)
|
user_input = self.retain_data(user_input)
|
||||||
return self.async_create_entry(title=DOMAIN, data=user_input)
|
return self.async_create_entry(title=DOMAIN, data=user_input)
|
||||||
|
|
||||||
|
async def async_step_wslink_port_setup(self, user_input: Any = None) -> ConfigFlowResult:
|
||||||
|
"""WSLink Addon port setup."""
|
||||||
|
|
||||||
|
errors: dict[str, str] = {}
|
||||||
|
await self._get_entry_data()
|
||||||
|
|
||||||
|
if not (port := self.wslink_addon_port.get(WSLINK_ADDON_PORT)):
|
||||||
|
port = 433
|
||||||
|
|
||||||
|
wslink_port_schema = {
|
||||||
|
vol.Required(WSLINK_ADDON_PORT, default=port): int,
|
||||||
|
}
|
||||||
|
if user_input is None:
|
||||||
|
return self.async_show_form(
|
||||||
|
step_id="wslink_port_setup",
|
||||||
|
data_schema=vol.Schema(wslink_port_schema),
|
||||||
|
errors=errors,
|
||||||
|
)
|
||||||
|
|
||||||
|
user_input = self.retain_data(user_input)
|
||||||
|
return self.async_create_entry(title=DOMAIN, data=user_input)
|
||||||
|
|
||||||
def retain_data(self, data: dict[str, Any]) -> dict[str, Any]:
|
def retain_data(self, data: dict[str, Any]) -> dict[str, Any]:
|
||||||
"""Retain user_data."""
|
"""Retain user_data."""
|
||||||
|
|
||||||
|
|
@ -303,6 +309,7 @@ class ConfigOptionsFlowHandler(OptionsFlow):
|
||||||
**self.pocasi_cz,
|
**self.pocasi_cz,
|
||||||
**self.sensors,
|
**self.sensors,
|
||||||
**self.ecowitt,
|
**self.ecowitt,
|
||||||
|
**self.wslink_addon_port,
|
||||||
**dict(data),
|
**dict(data),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -339,9 +346,7 @@ class ConfigFlowHandler(ConfigFlow, domain=DOMAIN):
|
||||||
elif user_input[API_KEY] == user_input[API_ID]:
|
elif user_input[API_KEY] == user_input[API_ID]:
|
||||||
errors["base"] = "valid_credentials_match"
|
errors["base"] = "valid_credentials_match"
|
||||||
else:
|
else:
|
||||||
return self.async_create_entry(
|
return self.async_create_entry(title=DOMAIN, data=user_input, options=user_input)
|
||||||
title=DOMAIN, data=user_input, options=user_input
|
|
||||||
)
|
|
||||||
|
|
||||||
return self.async_show_form(
|
return self.async_show_form(
|
||||||
step_id="user",
|
step_id="user",
|
||||||
|
|
|
||||||
|
|
@ -143,6 +143,7 @@ POCASI_CZ_SEND_MINIMUM: Final = 12 # minimal time to resend data
|
||||||
WSLINK: Final = "wslink"
|
WSLINK: Final = "wslink"
|
||||||
|
|
||||||
WINDY_MAX_RETRIES: Final = 3
|
WINDY_MAX_RETRIES: Final = 3
|
||||||
|
WSLINK_ADDON_PORT: Final = "WSLINK_ADDON_PORT"
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"DOMAIN",
|
"DOMAIN",
|
||||||
|
|
@ -235,28 +236,20 @@ POCASI_CZ_API_ID = "POCASI_CZ_API_ID"
|
||||||
POCASI_CZ_SEND_INTERVAL = "POCASI_SEND_INTERVAL"
|
POCASI_CZ_SEND_INTERVAL = "POCASI_SEND_INTERVAL"
|
||||||
POCASI_CZ_ENABLED = "pocasi_enabled_chcekbox"
|
POCASI_CZ_ENABLED = "pocasi_enabled_chcekbox"
|
||||||
POCASI_CZ_LOGGER_ENABLED = "pocasi_logger_checkbox"
|
POCASI_CZ_LOGGER_ENABLED = "pocasi_logger_checkbox"
|
||||||
POCASI_INVALID_KEY: Final = (
|
POCASI_INVALID_KEY: Final = "Pocasi Meteo refused to accept data. Invalid ID/Key combination?"
|
||||||
"Pocasi Meteo refused to accept data. Invalid ID/Key combination?"
|
|
||||||
)
|
|
||||||
POCASI_CZ_SUCCESS: Final = "Successfully sent data to Pocasi Meteo"
|
POCASI_CZ_SUCCESS: Final = "Successfully sent data to Pocasi Meteo"
|
||||||
POCASI_CZ_UNEXPECTED: Final = (
|
POCASI_CZ_UNEXPECTED: Final = "Pocasti Meteo responded unexpectedly 3 times in row. Resendig is now disabled!"
|
||||||
"Pocasti Meteo responded unexpectedly 3 times in row. Resendig is now disabled!"
|
|
||||||
)
|
|
||||||
|
|
||||||
WINDY_STATION_ID = "WINDY_STATION_ID"
|
WINDY_STATION_ID = "WINDY_STATION_ID"
|
||||||
WINDY_STATION_PW = "WINDY_STATION_PWD"
|
WINDY_STATION_PW = "WINDY_STATION_PWD"
|
||||||
WINDY_ENABLED: Final = "windy_enabled_checkbox"
|
WINDY_ENABLED: Final = "windy_enabled_checkbox"
|
||||||
WINDY_LOGGER_ENABLED: Final = "windy_logger_checkbox"
|
WINDY_LOGGER_ENABLED: Final = "windy_logger_checkbox"
|
||||||
WINDY_NOT_INSERTED: Final = (
|
WINDY_NOT_INSERTED: Final = "Windy responded with 400 error. Invalid ID/password combination?"
|
||||||
"Windy responded with 400 error. Invalid ID/password combination?"
|
WINDY_INVALID_KEY: Final = (
|
||||||
)
|
"Windy API KEY is invalid. Send data to Windy is now disabled. Check your API KEY and try again."
|
||||||
WINDY_INVALID_KEY: Final = "Windy API KEY is invalid. Send data to Windy is now disabled. Check your API KEY and try again."
|
|
||||||
WINDY_SUCCESS: Final = (
|
|
||||||
"Windy successfully sent data and data was successfully inserted by Windy API"
|
|
||||||
)
|
|
||||||
WINDY_UNEXPECTED: Final = (
|
|
||||||
"Windy responded unexpectedly 3 times in a row. Send to Windy is now disabled!"
|
|
||||||
)
|
)
|
||||||
|
WINDY_SUCCESS: Final = "Windy successfully sent data and data was successfully inserted by Windy API"
|
||||||
|
WINDY_UNEXPECTED: Final = "Windy responded unexpectedly 3 times in a row. Send to Windy is now disabled!"
|
||||||
|
|
||||||
|
|
||||||
PURGE_DATA_POCAS: Final = [
|
PURGE_DATA_POCAS: Final = [
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@
|
||||||
"windy": "Nastavení pro přeposílání dat na Windy",
|
"windy": "Nastavení pro přeposílání dat na Windy",
|
||||||
"pocasi": "Nastavení pro přeposlání dat na Počasí Meteo CZ",
|
"pocasi": "Nastavení pro přeposlání dat na Počasí Meteo CZ",
|
||||||
"ecowitt": "Nastavení pro stanice Ecowitt",
|
"ecowitt": "Nastavení pro stanice Ecowitt",
|
||||||
|
"wslink_port_setup": "Nastavení portu WSLink Addonu",
|
||||||
"migration": "Migrace statistiky senzoru"
|
"migration": "Migrace statistiky senzoru"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
@ -108,6 +109,16 @@
|
||||||
"ecowitt_enabled": "Povolit přijímání dat ze stanic Ecowitt"
|
"ecowitt_enabled": "Povolit přijímání dat ze stanic Ecowitt"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"wslink_port_setup": {
|
||||||
|
"description": "Nastavení portu, kde naslouchá WSLink Addon. Slouží pro příjem diagnostik.",
|
||||||
|
"title": "Port WSLink Addonu",
|
||||||
|
"data": {
|
||||||
|
"WSLINK_ADDON_PORT": "Naslouchající port WSLink Addonu"
|
||||||
|
},
|
||||||
|
"data_description": {
|
||||||
|
"WSLINK_ADDON_PORT": "Zadejte port, tak jak jej máte nastavený ve WSLink Addonu."
|
||||||
|
}
|
||||||
|
},
|
||||||
"migration": {
|
"migration": {
|
||||||
"title": "Migrace statistiky senzoru.",
|
"title": "Migrace statistiky senzoru.",
|
||||||
"description": "Pro správnou funkci dlouhodobé statistiky je nutné provést migraci jednotky senzoru v dlouhodobé statistice. Původní jednotka dlouhodobé statistiky pro denní úhrn srážek byla v mm/d, nicméně stanice zasílá pouze data v mm bez časového rozlišení.\n\n Senzor, který má být migrován je pro denní úhrn srážek. Pokud je v seznamu již správná hodnota u senzoru pro denní úhrn (mm), pak je již migrace hotová.\n\n Výsledek migrace pro senzor: {migration_status}, přepvedeno celkem {migration_count} řádků.",
|
"description": "Pro správnou funkci dlouhodobé statistiky je nutné provést migraci jednotky senzoru v dlouhodobé statistice. Původní jednotka dlouhodobé statistiky pro denní úhrn srážek byla v mm/d, nicméně stanice zasílá pouze data v mm bez časového rozlišení.\n\n Senzor, který má být migrován je pro denní úhrn srážek. Pokud je v seznamu již správná hodnota u senzoru pro denní úhrn (mm), pak je již migrace hotová.\n\n Výsledek migrace pro senzor: {migration_status}, přepvedeno celkem {migration_count} řádků.",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue