From 1cc08be3a88e97a860bf33fd1b71da53389bbf65 Mon Sep 17 00:00:00 2001 From: Sascha Date: Wed, 2 Jul 2025 06:43:51 +0200 Subject: [PATCH 1/4] new translationfile: custom_components/auto_off_timer/translations/de.json --- .../auto_off_timer/translations/de.json | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 custom_components/auto_off_timer/translations/de.json diff --git a/custom_components/auto_off_timer/translations/de.json b/custom_components/auto_off_timer/translations/de.json new file mode 100644 index 0000000..cbdb37e --- /dev/null +++ b/custom_components/auto_off_timer/translations/de.json @@ -0,0 +1,54 @@ +{ + "config": { + "title": "Automatischer Ausschalt-Timer", + "step": { + "user": { + "title": "Automatischen Ausschalt-Timer einrichten", + "description": "Konfiguriere Entitäten so, dass sie sich nach einer angegebenen Zeit automatisch ausschalten, wenn sie eingeschaltet werden.", + "data": { + "name": "Name", + "entities": "Entitäten", + "timeout": "Timeout-Dauer", + "enable_template": "Aktivierungsbedingung (Template)" + }, + "data_description": { + "name": "Name für diese Konfiguration des automatischen Ausschalt-Timers", + "entities": "Wähle Entitäten aus, die sich nach Ablauf des Zeitlimits automatisch ausschalten sollen", + "timeout": "Wie lange gewartet werden soll, bevor die Entitäten ausgeschaltet werden", + "enable_template": "Optionale Template-Bedingung, die erfüllt sein muss, damit der Timer aktiviert wird" + } + } + }, + "error": { + "entities_required": "Mindestens eine Entität muss ausgewählt werden", + "timeout_required": "Die Timeout-Dauer muss größer als 0 sein", + "invalid_entities": "Diese Entitäten unterstützen den turn_off-Dienst nicht: {entities_list}" + }, + "abort": { + "already_configured": "Diese Konfiguration des automatischen Ausschalt-Timers existiert bereits" + } + }, + "options": { + "step": { + "init": { + "title": "Automatischen Ausschalt-Timer konfigurieren", + "description": "Aktualisiere die Entitäten und Timeout-Einstellungen für diesen automatischen Ausschalt-Timer.", + "data": { + "entities": "%key:config.step.user.data.entities%", + "timeout": "%key:config.step.user.data.timeout%", + "enable_template": "%key:config.step.user.data.enable_template%" + }, + "data_description": { + "entities": "%key:config.step.user.data_description.entities%", + "timeout": "%key:config.step.user.data_description.timeout%", + "enable_template": "%key:config.step.user.data_description.enable_template%" + } + } + }, + "error": { + "entities_required": "%key:config.error.entities_required%", + "timeout_required": "%key:config.error.timeout_required%", + "invalid_entities_template": "%key:config.error.invalid_entities_template%" + } + } +} From 8dbeecd4e6b0876b2d1c3581a5ae56453e5c5059 Mon Sep 17 00:00:00 2001 From: Sascha Date: Wed, 2 Jul 2025 08:06:20 +0200 Subject: [PATCH 2/4] texts added --- .vscode/settings.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b242572 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "githubPullRequests.ignoredPullRequestBranches": [ + "main" + ] +} \ No newline at end of file From 768ae25560972a45d4f24fc7c668852f356fa438 Mon Sep 17 00:00:00 2001 From: Sascha Date: Wed, 2 Jul 2025 08:09:12 +0200 Subject: [PATCH 3/4] texts added --- .../auto_off_timer/translations/de.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/custom_components/auto_off_timer/translations/de.json b/custom_components/auto_off_timer/translations/de.json index cbdb37e..7afb269 100644 --- a/custom_components/auto_off_timer/translations/de.json +++ b/custom_components/auto_off_timer/translations/de.json @@ -34,21 +34,21 @@ "title": "Automatischen Ausschalt-Timer konfigurieren", "description": "Aktualisiere die Entitäten und Timeout-Einstellungen für diesen automatischen Ausschalt-Timer.", "data": { - "entities": "%key:config.step.user.data.entities%", - "timeout": "%key:config.step.user.data.timeout%", - "enable_template": "%key:config.step.user.data.enable_template%" + "entities": "Mindestens eine Entität muss ausgewählt werden", + "timeout": "Die Timeout-Dauer muss größer als 0 sein", + "enable_template": "Optionale Template-Bedingung, die erfüllt sein muss, damit der Timer aktiviert wird" }, "data_description": { - "entities": "%key:config.step.user.data_description.entities%", - "timeout": "%key:config.step.user.data_description.timeout%", - "enable_template": "%key:config.step.user.data_description.enable_template%" + "entities": "Mindestens eine Entität muss ausgewählt werden", + "timeout": "Die Timeout-Dauer muss größer als 0 sein", + "enable_template": "Optionale Template-Bedingung, die erfüllt sein muss, damit der Timer aktiviert wird" } } }, "error": { - "entities_required": "%key:config.error.entities_required%", - "timeout_required": "%key:config.error.timeout_required%", - "invalid_entities_template": "%key:config.error.invalid_entities_template%" + "entities_required": "Mindestens eine Entität muss ausgewählt werden", + "timeout_required": "Die Timeout-Dauer muss größer als 0 sein", + "invalid_entities_template": "Diese Entitäten unterstützen den turn_off-Dienst nicht: {entities_list}" } } } From 9c61eeb81beae802e4c151aec1fd7c530ad668e5 Mon Sep 17 00:00:00 2001 From: Sascha Date: Wed, 2 Jul 2025 13:03:39 +0200 Subject: [PATCH 4/4] Change Timeout Input Field tu NumberSelector --- .../auto_off_timer/config_flow.py | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/custom_components/auto_off_timer/config_flow.py b/custom_components/auto_off_timer/config_flow.py index 931d0e8..5d3e3e3 100644 --- a/custom_components/auto_off_timer/config_flow.py +++ b/custom_components/auto_off_timer/config_flow.py @@ -4,6 +4,7 @@ from homeassistant.core import callback from homeassistant.helpers import config_validation as cv from homeassistant.helpers import selector +from homeassistant.helpers.selector import NumberSelectorConfig from .const import CONF_ENABLE_TEMPLATE, CONF_ENTITIES, CONF_TIMEOUT, DOMAIN @@ -17,7 +18,8 @@ def _seconds_to_dict(seconds: int) -> dict: def _get_schema( default_entities=None, - default_timeout: dict = None, +# default_timeout: dict = None, + default_timeout: int = None, default_template: str = None, with_title: bool = True, ): @@ -36,8 +38,15 @@ def _get_schema( vol.Required(CONF_ENTITIES, default=default_entities): selector.EntitySelector( selector.EntitySelectorConfig(multiple=True) ), - vol.Required(CONF_TIMEOUT, default=default_timeout): selector.DurationSelector( - selector.DurationSelectorConfig(enable_day=True) + + vol.Required(CONF_TIMEOUT, default=default_timeout): selector.NumberSelector( + NumberSelectorConfig( + min=0, + max=1440, + step=1, + unit_of_measurement="min", + mode="box" # reines Eingabefeld statt Slider + ) ), vol.Optional( CONF_ENABLE_TEMPLATE, default=default_template @@ -62,10 +71,9 @@ def _process_user_input(hass, user_input: dict) -> tuple[list[str], int, str, di if not hass.services.has_service(domain, SERVICE_TURN_OFF): invalid.append(entity) - timeout = ( - int(cv.time_period_dict(user_input.get(CONF_TIMEOUT, None)).total_seconds()) - or 0 - ) + # Eingabe als Minuten → in Sekunden umrechnen + minutes = user_input.get(CONF_TIMEOUT, 0) or 0 + timeout = int(minutes) * 60 template = user_input.get(CONF_ENABLE_TEMPLATE, "") @@ -157,9 +165,10 @@ async def async_step_init(self, user_input=None): default_template = user_input.get(CONF_ENABLE_TEMPLATE, "") else: default_entities = self.config_entry.options.get(CONF_ENTITIES, []) - default_timeout = _seconds_to_dict( - self.config_entry.options.get(CONF_TIMEOUT, 300) - ) + # Sekunden → Minuten + stored_sec = self.config_entry.options.get(CONF_TIMEOUT, 300) + default_timeout = stored_sec // 60 + default_template = self.config_entry.options.get(CONF_ENABLE_TEMPLATE, "") return self.async_show_form(