From 8899d0f5f41a38806dc5cf56cb5c4d9389c2dccd Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Thu, 5 Dec 2024 11:14:08 -0800 Subject: [PATCH 01/44] Add Mend Renovate bot (#1077) * Add Mend Renovate bot * Add extends --- .github/renovate.json | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/renovate.json diff --git a/.github/renovate.json b/.github/renovate.json new file mode 100644 index 00000000..d27d86ea --- /dev/null +++ b/.github/renovate.json @@ -0,0 +1,38 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "rebaseWhen": "behind-base-branch", + "dependencyDashboard": true, + "labels": [ + "dependencies", + "no-stale" + ], + "commitMessagePrefix": "⬆️", + "commitMessageTopic": "{{depName}}", + "prBodyDefinitions": { + "Release": "yes" + }, + "packageRules": [ + { + "matchManagers": [ + "github-actions" + ], + "addLabels": [ + "github_actions" + ], + "rangeStrategy": "pin" + }, + { + "matchManagers": [ + "github-actions" + ], + "matchUpdateTypes": [ + "minor", + "patch" + ], + "automerge": true + } + ], + "extends": [ + "config:recommended" + ] +} From 09e047345714b44142728627e05cb5def046b6a0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:20:00 -0800 Subject: [PATCH 02/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python-mult?= =?UTF-8?q?ipart=20to=20v0.0.18=20[SECURITY]=20(#1078)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ⬆️ Update python-multipart to v0.0.18 [SECURITY] * Update README.md, strings.json, and services.yaml --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] --- README.md | 102 ++++++++++++++++----------------- webapp/requirements-locked.txt | 2 +- 2 files changed, 52 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 296b4aca..1fc735e0 100644 --- a/README.md +++ b/README.md @@ -103,46 +103,46 @@ The YAML and frontend configuration methods support all of the options listed be -| Variable name | Description | Default | Type | -|:-------------------------------|:---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------|:---------------------------------------| -| `lights` | List of light entity_ids to be controlled (may be empty). 🌟 | `[]` | list of `entity_id`s | -| `interval` | Frequency to adapt the lights, in seconds. 🔄 | `90` | `int > 0` | -| `transition` | Duration of transition when lights change, in seconds. 🕑 | `45` | `float` 0-6553 | -| `initial_transition` | Duration of the first transition when lights turn from `off` to `on` in seconds. ⏲️ | `1` | `float` 0-6553 | -| `min_brightness` | Minimum brightness percentage. 💡 | `1` | `int` 1-100 | -| `max_brightness` | Maximum brightness percentage. 💡 | `100` | `int` 1-100 | -| `min_color_temp` | Warmest color temperature in Kelvin. 🔥 | `2000` | `int` 1000-10000 | -| `max_color_temp` | Coldest color temperature in Kelvin. ❄️ | `5500` | `int` 1000-10000 | -| `prefer_rgb_color` | Whether to prefer RGB color adjustment over light color temperature when possible. 🌈 | `False` | `bool` | -| `sleep_brightness` | Brightness percentage of lights in sleep mode. 😴 | `1` | `int` 1-100 | -| `sleep_rgb_or_color_temp` | Use either `"rgb_color"` or `"color_temp"` in sleep mode. 🌙 | `color_temp` | one of `['color_temp', 'rgb_color']` | -| `sleep_color_temp` | Color temperature in sleep mode (used when `sleep_rgb_or_color_temp` is `color_temp`) in Kelvin. 😴 | `1000` | `int` 1000-10000 | -| `sleep_rgb_color` | RGB color in sleep mode (used when `sleep_rgb_or_color_temp` is "rgb_color"). 🌈 | `[255, 56, 0]` | RGB color | -| `sleep_transition` | Duration of transition when "sleep mode" is toggled in seconds. 😴 | `1` | `float` 0-6553 | -| `transition_until_sleep` | When enabled, Adaptive Lighting will treat sleep settings as the minimum, transitioning to these values after sunset. 🌙 | `False` | `bool` | -| `sunrise_time` | Set a fixed time (HH:MM:SS) for sunrise. 🌅 | `None` | `str` | -| `min_sunrise_time` | Set the earliest virtual sunrise time (HH:MM:SS), allowing for later sunrises. 🌅 | `None` | `str` | -| `max_sunrise_time` | Set the latest virtual sunrise time (HH:MM:SS), allowing for earlier sunrises. 🌅 | `None` | `str` | -| `sunrise_offset` | Adjust sunrise time with a positive or negative offset in seconds. ⏰ | `0` | `int` | -| `sunset_time` | Set a fixed time (HH:MM:SS) for sunset. 🌇 | `None` | `str` | -| `min_sunset_time` | Set the earliest virtual sunset time (HH:MM:SS), allowing for later sunsets. 🌇 | `None` | `str` | -| `max_sunset_time` | Set the latest virtual sunset time (HH:MM:SS), allowing for earlier sunsets. 🌇 | `None` | `str` | -| `sunset_offset` | Adjust sunset time with a positive or negative offset in seconds. ⏰ | `0` | `int` | -| `brightness_mode` | Brightness mode to use. Possible values are `default`, `linear`, and `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈 | `default` | one of `['default', 'linear', 'tanh']` | +| Variable name | Description | Default | Type | +|:-------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------|:---------------------------------------| +| `lights` | List of light entity_ids to be controlled (may be empty). 🌟 | `[]` | list of `entity_id`s | +| `interval` | Frequency to adapt the lights, in seconds. 🔄 | `90` | `int > 0` | +| `transition` | Duration of transition when lights change, in seconds. 🕑 | `45` | `float` 0-6553 | +| `initial_transition` | Duration of the first transition when lights turn from `off` to `on` in seconds. ⏲️ | `1` | `float` 0-6553 | +| `min_brightness` | Minimum brightness percentage. 💡 | `1` | `int` 1-100 | +| `max_brightness` | Maximum brightness percentage. 💡 | `100` | `int` 1-100 | +| `min_color_temp` | Warmest color temperature in Kelvin. 🔥 | `2000` | `int` 1000-10000 | +| `max_color_temp` | Coldest color temperature in Kelvin. ❄️ | `5500` | `int` 1000-10000 | +| `prefer_rgb_color` | Whether to prefer RGB color adjustment over light color temperature when possible. 🌈 | `False` | `bool` | +| `sleep_brightness` | Brightness percentage of lights in sleep mode. 😴 | `1` | `int` 1-100 | +| `sleep_rgb_or_color_temp` | Use either `"rgb_color"` or `"color_temp"` in sleep mode. 🌙 | `color_temp` | one of `['color_temp', 'rgb_color']` | +| `sleep_color_temp` | Color temperature in sleep mode (used when `sleep_rgb_or_color_temp` is `color_temp`) in Kelvin. 😴 | `1000` | `int` 1000-10000 | +| `sleep_rgb_color` | RGB color in sleep mode (used when `sleep_rgb_or_color_temp` is "rgb_color"). 🌈 | `[255, 56, 0]` | RGB color | +| `sleep_transition` | Duration of transition when "sleep mode" is toggled in seconds. 😴 | `1` | `float` 0-6553 | +| `transition_until_sleep` | When enabled, Adaptive Lighting will treat sleep settings as the minimum, transitioning to these values after sunset. 🌙 | `False` | `bool` | +| `sunrise_time` | Set a fixed time (HH:MM:SS) for sunrise. 🌅 | `None` | `str` | +| `min_sunrise_time` | Set the earliest virtual sunrise time (HH:MM:SS), allowing for later sunrises. 🌅 | `None` | `str` | +| `max_sunrise_time` | Set the latest virtual sunrise time (HH:MM:SS), allowing for earlier sunrises. 🌅 | `None` | `str` | +| `sunrise_offset` | Adjust sunrise time with a positive or negative offset in seconds. ⏰ | `0` | `int` | +| `sunset_time` | Set a fixed time (HH:MM:SS) for sunset. 🌇 | `None` | `str` | +| `min_sunset_time` | Set the earliest virtual sunset time (HH:MM:SS), allowing for later sunsets. 🌇 | `None` | `str` | +| `max_sunset_time` | Set the latest virtual sunset time (HH:MM:SS), allowing for earlier sunsets. 🌇 | `None` | `str` | +| `sunset_offset` | Adjust sunset time with a positive or negative offset in seconds. ⏰ | `0` | `int` | +| `brightness_mode` | Brightness mode to use. Possible values are `default`, `linear`, and `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈 | `default` | one of `['default', 'linear', 'tanh']` | | `brightness_mode_time_dark` | (Ignored if `brightness_mode='default'`) The duration in seconds to ramp up/down the brightness before/after sunrise/sunset. 📈📉 | `900` | `int` | | `brightness_mode_time_light` | (Ignored if `brightness_mode='default'`) The duration in seconds to ramp up/down the brightness after/before sunrise/sunset. 📈📉. | `3600` | `int` | -| `take_over_control` | Disable Adaptive Lighting if another source calls `light.turn_on` while lights are on and being adapted. Note that this calls `homeassistant.update_entity` every `interval`! 🔒 | `True` | `bool` | -| `detect_non_ha_changes` | Detects and halts adaptations for non-`light.turn_on` state changes. Needs `take_over_control` enabled. 🕵️ Caution: ⚠️ Some lights might falsely indicate an 'on' state, which could result in lights turning on unexpectedly. Disable this feature if you encounter such issues. | `False` | `bool` | -| `autoreset_control_seconds` | Automatically reset the manual control after a number of seconds. Set to 0 to disable. ⏲️ | `0` | `int` 0-31536000 | -| `only_once` | Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄 | `False` | `bool` | +| `take_over_control` | Disable Adaptive Lighting if another source calls `light.turn_on` while lights are on and being adapted. Note that this calls `homeassistant.update_entity` every `interval`! 🔒 | `True` | `bool` | +| `detect_non_ha_changes` | Detects and halts adaptations for non-`light.turn_on` state changes. Needs `take_over_control` enabled. 🕵️ Caution: ⚠️ Some lights might falsely indicate an 'on' state, which could result in lights turning on unexpectedly. Disable this feature if you encounter such issues. | `False` | `bool` | +| `autoreset_control_seconds` | Automatically reset the manual control after a number of seconds. Set to 0 to disable. ⏲️ | `0` | `int` 0-31536000 | +| `only_once` | Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄 | `False` | `bool` | | `adapt_only_on_bare_turn_on` | When turning lights on initially. If set to `true`, AL adapts only if `light.turn_on` is invoked without specifying color or brightness. ❌🌈 This e.g., prevents adaptation when activating a scene. If `false`, AL adapts regardless of the presence of color or brightness in the initial `service_data`. Needs `take_over_control` enabled. 🕵️ | `False` | `bool` | -| `separate_turn_on_commands` | Use separate `light.turn_on` calls for color and brightness, needed for some light types. 🔀 | `False` | `bool` | -| `send_split_delay` | Delay (ms) between `separate_turn_on_commands` for lights that don't support simultaneous brightness and color setting. ⏲️ | `0` | `int` 0-10000 | -| `adapt_delay` | Wait time (seconds) between light turn on and Adaptive Lighting applying changes. Might help to avoid flickering. ⏲️ | `0` | `float > 0` | -| `skip_redundant_commands` | Skip sending adaptation commands whose target state already equals the light's known state. Minimizes network traffic and improves the adaptation responsivity in some situations. 📉Disable if physical light states get out of sync with HA's recorded state. | `False` | `bool` | -| `intercept` | Intercept and adapt `light.turn_on` calls to enabling instantaneous color and brightness adaptation. 🏎️ Disable for lights that do not support `light.turn_on` with color and brightness. | `True` | `bool` | -| `multi_light_intercept` | Intercept and adapt `light.turn_on` calls that target multiple lights. ➗⚠️ This might result in splitting up a single `light.turn_on` call into multiple calls, e.g., when lights are in different switches. Requires `intercept` to be enabled. | `True` | `bool` | -| `include_config_in_attributes` | Show all options as attributes on the switch in Home Assistant when set to `true`. 📝 | `False` | `bool` | +| `separate_turn_on_commands` | Use separate `light.turn_on` calls for color and brightness, needed for some light types. 🔀 | `False` | `bool` | +| `send_split_delay` | Delay (ms) between `separate_turn_on_commands` for lights that don't support simultaneous brightness and color setting. ⏲️ | `0` | `int` 0-10000 | +| `adapt_delay` | Wait time (seconds) between light turn on and Adaptive Lighting applying changes. Might help to avoid flickering. ⏲️ | `0` | `float > 0` | +| `skip_redundant_commands` | Skip sending adaptation commands whose target state already equals the light's known state. Minimizes network traffic and improves the adaptation responsivity in some situations. 📉Disable if physical light states get out of sync with HA's recorded state. | `False` | `bool` | +| `intercept` | Intercept and adapt `light.turn_on` calls to enabling instantaneous color and brightness adaptation. 🏎️ Disable for lights that do not support `light.turn_on` with color and brightness. | `True` | `bool` | +| `multi_light_intercept` | Intercept and adapt `light.turn_on` calls that target multiple lights. ➗⚠️ This might result in splitting up a single `light.turn_on` call into multiple calls, e.g., when lights are in different switches. Requires `intercept` to be enabled. | `True` | `bool` | +| `include_config_in_attributes` | Show all options as attributes on the switch in Home Assistant when set to `true`. 📝 | `False` | `bool` | @@ -186,15 +186,15 @@ adaptive_lighting: -| Service data attribute | Description | Required | Type | -|:-------------------------|:--------------------------------------------------------------------------------------|:-----------|:---------------------| -| `entity_id` | The `entity_id` of the switch with the settings to apply. 📝 | ✅ | list of `entity_id`s | -| `lights` | A light (or list of lights) to apply the settings to. 💡 | ❌ | list of `entity_id`s | -| `transition` | Duration of transition when lights change, in seconds. 🕑 | ❌ | `float` 0-6553 | -| `adapt_brightness` | Whether to adapt the brightness of the light. 🌞 | ❌ | bool | -| `adapt_color` | Whether to adapt the color on supporting lights. 🌈 | ❌ | bool | -| `prefer_rgb_color` | Whether to prefer RGB color adjustment over light color temperature when possible. 🌈 | ❌ | bool | -| `turn_on_lights` | Whether to turn on lights that are currently off. 🔆 | ❌ | bool | +| Service data attribute | Description | Required | Type | +|:-------------------------|:-------------------------------------------------------------------------------------|:-----------|:---------------------| +| `entity_id` | The `entity_id` of the switch with the settings to apply. 📝 | ✅ | list of `entity_id`s | +| `lights` | A light (or list of lights) to apply the settings to. 💡 | ❌ | list of `entity_id`s | +| `transition` | Duration of transition when lights change, in seconds. 🕑 | ❌ | `float` 0-6553 | +| `adapt_brightness` | Whether to adapt the brightness of the light. 🌞 | ❌ | bool | +| `adapt_color` | Whether to adapt the color on supporting lights. 🌈 | ❌ | bool | +| `prefer_rgb_color` | Whether to prefer RGB color adjustment over light color temperature when possible. 🌈 | ❌ | bool | +| `turn_on_lights` | Whether to turn on lights that are currently off. 🔆 | ❌ | bool | #### `adaptive_lighting.set_manual_control` @@ -208,11 +208,11 @@ adaptive_lighting: -| Service data attribute | Description | Required | Type | -|:-------------------------|:------------------------------------------------------------------------------------------------|:-----------|:---------------------| -| `entity_id` | The `entity_id` of the switch in which to (un)mark the light as being `manually controlled`. 📝 | ✅ | list of `entity_id`s | -| `lights` | entity_id(s) of lights, if not specified, all lights in the switch are selected. 💡 | ❌ | list of `entity_id`s | -| `manual_control` | Whether to add ("true") or remove ("false") the light from the "manual_control" list. 🔒 | ❌ | bool | +| Service data attribute | Description | Required | Type | +|:-------------------------|:-----------------------------------------------------------------------------------------------|:-----------|:---------------------| +| `entity_id` | The `entity_id` of the switch in which to (un)mark the light as being `manually controlled`. 📝 | ✅ | list of `entity_id`s | +| `lights` | entity_id(s) of lights, if not specified, all lights in the switch are selected. 💡 | ❌ | list of `entity_id`s | +| `manual_control` | Whether to add ("true") or remove ("false") the light from the "manual_control" list. 🔒 | ❌ | bool | #### `adaptive_lighting.change_switch_settings` diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index e965a1b5..64ed6570 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -43,7 +43,7 @@ packaging==23.2 # via # htmltools # shinyswatch -python-multipart==0.0.6 +python-multipart==0.0.18 # via shiny pytz==2023.3.post1 # via astral From 9a190e625af9b08a3a176f39b610a960f83058da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:20:07 -0800 Subject: [PATCH 03/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20idna=20to?= =?UTF-8?q?=20v3.7=20[SECURITY]=20(#1079)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 64ed6570..8e544136 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -27,7 +27,7 @@ htmltools==0.5.1 # via # shiny # shinyswatch -idna==3.6 +idna==3.7 # via anyio linkify-it-py==2.0.2 # via shiny From 43015d1df16c0ea1a38dfaacb6ea57e20d0ab701 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 11:20:12 -0800 Subject: [PATCH 04/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20starlette?= =?UTF-8?q?=20to=20v0.40.0=20[SECURITY]=20(#1080)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 8e544136..4db3cb83 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -58,7 +58,7 @@ shinyswatch==0.3.1 # via -r requirements.txt sniffio==1.3.0 # via anyio -starlette==0.34.0 +starlette==0.40.0 # via shiny typing-extensions==4.9.0 # via From 5c6fc91c6676256c0eb73968b117224a7e4bd03f Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:27:19 +0200 Subject: [PATCH 05/44] docs: add TamilNeram as a contributor for translation (#1089) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index d8934e03..492cdaab 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -891,6 +891,15 @@ "contributions": [ "translation" ] + }, + { + "login": "TamilNeram", + "name": "தமிழ் நேரம்", + "avatar_url": "https://avatars.githubusercontent.com/u/67970539?v=4", + "profile": "https://github.com/TamilNeram", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 1fc735e0..2b0f646e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/hacs/integration) ![Version](https://img.shields.io/github/v/release/basnijholt/adaptive-lighting?style=for-the-badge) -[![All Contributors](https://img.shields.io/badge/all_contributors-97-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-98-orange.svg?style=flat-square)](#contributors-) # 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙 @@ -589,6 +589,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark Lucho Gizdov
Lucho Gizdov

🌍 MizterB
MizterB

💻 brietman
brietman

🌍 + தமிழ் நேரம்
தமிழ் நேரம்

🌍 From 111d9fc6b10adb8cb8fc4071a13b50d5a5277a8d Mon Sep 17 00:00:00 2001 From: "Weblate (bot)" Date: Thu, 5 Dec 2024 20:27:50 +0100 Subject: [PATCH 06/44] Translations update from Hosted Weblate (#1016) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (Tamil) Currently translated at 100.0% (153 of 153 strings) Added translation using Weblate (Tamil) Co-authored-by: Hosted Weblate Co-authored-by: தமிழ்நேரம் Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ta/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Greek) Currently translated at 44.4% (68 of 153 strings) Added translation using Weblate (Greek) Co-authored-by: Hosted Weblate Co-authored-by: Thunderstrike116 Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/el/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Japanese) Currently translated at 49.0% (75 of 153 strings) Co-authored-by: Hosted Weblate Co-authored-by: Meteor2 Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ja/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Portuguese) Currently translated at 60.7% (93 of 153 strings) Co-authored-by: Hosted Weblate Co-authored-by: Patrick Bassut Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/pt/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Dutch) Currently translated at 100.0% (153 of 153 strings) Co-authored-by: Hosted Weblate Co-authored-by: brietman Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/nl/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Finnish) Currently translated at 99.3% (152 of 153 strings) Co-authored-by: Ricky Tigg Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/fi/ Translation: Adaptive Lighting/Adaptive Lighting * Translated using Weblate (Slovak) Currently translated at 100.0% (153 of 153 strings) Co-authored-by: Hosted Weblate Co-authored-by: Milan Šalka Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/sk/ Translation: Adaptive Lighting/Adaptive Lighting --------- Co-authored-by: தமிழ்நேரம் Co-authored-by: Thunderstrike116 Co-authored-by: Meteor2 Co-authored-by: Patrick Bassut Co-authored-by: brietman Co-authored-by: Ricky Tigg Co-authored-by: Milan Šalka --- .../adaptive_lighting/translations/el.json | 19 ++ .../adaptive_lighting/translations/fi.json | 139 +++++++++++- .../adaptive_lighting/translations/ja.json | 3 + .../adaptive_lighting/translations/nl.json | 4 +- .../adaptive_lighting/translations/pt.json | 16 +- .../adaptive_lighting/translations/sk.json | 6 +- .../adaptive_lighting/translations/ta.json | 202 ++++++++++++++++++ 7 files changed, 377 insertions(+), 12 deletions(-) create mode 100644 custom_components/adaptive_lighting/translations/el.json create mode 100644 custom_components/adaptive_lighting/translations/ta.json diff --git a/custom_components/adaptive_lighting/translations/el.json b/custom_components/adaptive_lighting/translations/el.json new file mode 100644 index 00000000..8794a46a --- /dev/null +++ b/custom_components/adaptive_lighting/translations/el.json @@ -0,0 +1,19 @@ +{ + "title": "Adaptive Lighting", + "options": { + "step": { + "init": { + "title": "Επιλογές Adaptive Lighting" + } + } + }, + "services": { + "change_switch_settings": { + "fields": { + "only_once": { + "description": "Προσαρμογή των φώτων μόνο όταν είναι αναμμένα (`true`) ή συνεχής προσαρμογή αυτών (`false`). 🔄" + } + } + } + } +} diff --git a/custom_components/adaptive_lighting/translations/fi.json b/custom_components/adaptive_lighting/translations/fi.json index 7acd9578..15b5b18f 100644 --- a/custom_components/adaptive_lighting/translations/fi.json +++ b/custom_components/adaptive_lighting/translations/fi.json @@ -28,8 +28,69 @@ }, "transition": { "description": "Valojen siirtymän kesto sekunneissa, kun valaistusta muutetaan." + }, + "sleep_color_temp": { + "description": "Värilämpötila lepotilassa (käytetään, kun `sleep_rgb_or_color_temp` on `color_temp`) kelvineinä. 😴" + }, + "detect_non_ha_changes": { + "description": "Havaitsee ja pysäyttää mukautukset ei-\"light.turn_on\" -tilanmuutoksille. Vaatii \"take_over_control\":n käyttöönoton. 🕵️ Varoitus: ⚠️ Jotkut valot saatavat osoittaa virheellisesti 'on'-tilan, mikä voi johtaa valojen syttymiseen odottamatta. Poista tämä ominaisuus käytöstä, jos kohtaat tällaisia ongelmia." + }, + "sunrise_time": { + "description": "Aseta kiinteä aika (TT:MM:SS) auringonnousulle. 🌅" + }, + "use_defaults": { + "description": "Asettaa oletusarvot, joita ei ole määritetty tässä palvelukutsussa. Vaihtoehdot: \"nykyinen\" (oletus, säilyttää nykyiset arvot), \"tehdas\" (palauttaa dokumentoituihin oletusasetuksiin) tai \"kokoonpano\" (palaa kokoonpanon oletusasetusten vaihtamiseksi). ⚙️" + }, + "max_sunrise_time": { + "description": "Aseta viimeisin virtuaalinen auringonnousuaika (TT:MM:SS), aikaisempia auringonnousuja sallien. 🌅" + }, + "separate_turn_on_commands": { + "description": "Käytä erillisiä \"light.turn_on\" -kutsuja värin ja kirkkauden määrittämiseksi, joita tarvitaan joissakin valotyypeissä. 🔀" + }, + "entity_id": { + "description": "Kytkimen entiteettitunnus. 📝" + }, + "turn_on_lights": { + "description": "Sytytetäänkö valot, jotka ovat tällä hetkellä pois päältä. 🔆" + }, + "include_config_in_attributes": { + "description": "Näytä kaikki vaihtoehdot attribuutteina kotiavustajan kytkimellä, kun sen arvo on \"true\". 📝" + }, + "sleep_transition": { + "description": "Siirtymän kesto, kun \"lepotila\" vaihdetaan sekunneiksi. 😴" + }, + "max_brightness": { + "description": "Enimmäiskirkkausprosentti. 💡" + }, + "min_brightness": { + "description": "Vähittäiskirkkausprosentti. 💡" + }, + "sleep_rgb_color": { + "description": "RGB-väri lepotilassa (käytetään, kun `sleep_rgb_or_color_temp` on \"rgb_color\"). 🌈" + }, + "sunset_time": { + "description": "Aseta kiinteä aika (TT:MM:SS) auringonlaskulle. 🌇" + }, + "sleep_rgb_or_color_temp": { + "description": "Käytä joko `\"rgb_color\"` tai `\"color_temp\"` lepotilassa. 🌙" + }, + "min_color_temp": { + "description": "Lämpimin värilämpötila kelvineissä. 🔥" + }, + "prefer_rgb_color": { + "description": "Halutaanko RGB-värinsäätö mieluummin valon värilämpötilan sijaan, kun mahdollista. 🌈" + }, + "take_over_control": { + "description": "Poista Adaptive Lighting käytöstä, jos toinen lähde kutsuu `light.turn_on`, kun valot ovat päällä ja niitä mukautetaan. Huomaa, että tämä kutsuu `homeassistant.update_entity` joka `interval`! 🔒" + }, + "min_sunset_time": { + "description": "Aseta aikaisin virtuaalinen auringonlaskuaika (TT:MM:SS), myöhempiä auringonlaskuja sallien. 🌇" + }, + "adapt_delay": { + "description": "Odotusaika (sekunteina) valon syttymisen ja Adaptive Lightingin muutosten käyttöönoton välillä. Saattaa auttaa välttämään välkkymistä. ⏲️" } - } + }, + "description": "Muuta haluamiasi asetuksia kytkimessä. Kaikki vaihtoehdot ovat samat kuin kokoonpanon kulussa." }, "apply": { "description": "Asettaa nykyiset Adaptiivisen Valaistuksen asetukset valoihin.", @@ -39,8 +100,37 @@ }, "transition": { "description": "Valojen siirtymän kesto sekunneissa, kun valaistusta muutetaan." + }, + "entity_id": { + "description": "Kytkimen `entity_id` ja käytettävät asetukset. 📝" + }, + "adapt_brightness": { + "description": "Mukautetaanko valon kirkkautta. 🌞" + }, + "adapt_color": { + "description": "Mukautetaanko tukivalojen väriä. 🌈" + }, + "prefer_rgb_color": { + "description": "Halutaanko RGB-värinsäätö mieluummin valon värilämpötilan sijaan, kun mahdollista. 🌈" + }, + "turn_on_lights": { + "description": "Sytytetäänkö valot, jotka ovat tällä hetkellä pois päältä. 🔆" } } + }, + "set_manual_control": { + "fields": { + "lights": { + "description": "Valojen entity_id(s), jos sitä ei ole määritetty, kaikki kytkimen valot valitaan. 💡" + }, + "entity_id": { + "description": "Kytkimen `entity_id`, jolla valo määritetään `manuaalisesti ohjattavaksi`. 📝" + }, + "manual_control": { + "description": "Lisätäänkö (\"true\") vai poistetaanko (\"false\") valo \"manual_control\"-luettelosta. 🔒" + } + }, + "description": "Merkitse, onko valo 'manuaalisesti ohjattu'." } }, "title": "Adaptiivinen valaistus", @@ -55,16 +145,57 @@ "brightness_mode": "Kirkkaus-moodi jota käytetään. Mahdolliset arvot ovat `default`, `linear`, and `tanh` (käyttää arvoja `brightness_mode_time_dark` ja `brightness_mode_time_light`).", "sunset_offset": "Muuta auringonlaskun aikaa positiivisella tai negatiivisella korjauksella määritettynä sekunneissa.", "initial_transition": "Ensimmäisen siirtymän kesto sekunneissa, kun valot kytketään 'off'-tilasta 'on'-tilaan.", - "send_split_delay": "Viive (ms) `separate_turn_on_commands` välillä valoille, jotka eivät tue yhtäaikaista kirkkauden ja värilämpötilan säätöä." - } + "send_split_delay": "Viive (ms) `separate_turn_on_commands` välillä valoille, jotka eivät tue yhtäaikaista kirkkauden ja värilämpötilan säätöä.", + "sleep_color_temp": "Värilämpötila lepotilassa (käytetään, kun `sleep_rgb_or_color_temp` on `color_temp`) kelvineinä. 😴", + "brightness_mode_time_dark": "(Ohitetaan, jos `brightness_mode='default'`) Kesto sekunteina kirkkauden lisäämiseen/vähentämiseen auringonnousun/auringonlaskun jälkeen/ennen. 📈📉.", + "adapt_delay": "Odotusaika (sekunteina) valon syttymisen ja Adaptive Lightingin muutosten käyttöönoton välillä. Saattaa auttaa välttämään välkkymistä. ⏲️", + "sleep_transition": "Siirtymän kesto, kun \"lepotila\" vaihdetaan sekunneiksi. 😴", + "interval": "Tiheys valojen mukauttamiseen sekunneissa. 🔄", + "brightness_mode_time_light": "(Ohitetaan, jos `brightness_mode='default'`) Kesto sekunteina kirkkauden lisäämiseen/vähentämiseen auringonnousun/auringonlaskun jälkeen/ennen. 📈📉.", + "sleep_rgb_color": "RGB-väri lepotilassa (käytetään, kun `sleep_rgb_or_color_temp` on \"rgb_color\"). 🌈", + "sunrise_time": "Aseta kiinteä aika (TT:MM:SS) auringonnousulle. 🌅", + "sunset_time": "Aseta kiinteä aika (TT:MM:SS) auringonlaskulle. 🌇", + "min_sunset_time": "Aseta aikaisin virtuaalinen auringonlaskuaika (TT:MM:SS), myöhempiä auringonlaskuja sallien. 🌅", + "min_sunrise_time": "Aseta aikaisin virtuaalinen auringonnousuaika (TT:MM:SS), myöhempiä auringonnousuja sallien. 🌅", + "max_sunrise_time": "Aseta aikaisin virtuaalinen auringonnousuaika (TT:MM:SS), aikaisempia auringonnousuja sallien. 🌅", + "sleep_rgb_or_color_temp": "Käytä joko `\"rgb_color\"` tai `\"color_temp\"` lepotilassa. 🌙" + }, + "description": "Määritä Adaptive Lighting -komponentti. Vaihtoehtojen nimet vastaavat YAML-asetuksia. Jos olet määrittänyt tämän merkinnän YAML:ssa, tässä ei näy vaihtoehtoja. Interaktiiviset kaaviot, jotka esittelevät parametrien vaikutuksia, on [tässä verkkosovelluksessa](https://basnijholt.github.io/adaptive-lighting). Lisätietoja löytyy [virallisesta dokumentaatiosta](https://github.com/basnijholt/adaptive-lighting#readme).", + "data": { + "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Kun valot sytytetään ensimmäisen kerran. Jos asetuksena on \"true\", Adaptive Lighting mukautuu vain, jos \"light.turn_on\" kutsutaan määrittelemättä väriä tai kirkkautta. ❌🌈 Tämä esimerkiksi estää mukautumisen näkymää aktivoitaessa. Jos \"false\", Adaptive Lighting mukautuu riippumatta siitä, onko alkuperäisessä \"service_data\"-arvossa väri tai kirkkaus. Vaatii \"take_over_control\":n käyttöönoton. 🕵️ ", + "multi_light_intercept": "multi_light_intercept: sieppaa ja mukauta light.turn_on-kutsut, jotka kohdistuvat useisiin valoihin. ➗⚠️ Tämä saattaa johtaa yksittäisen light.turn_on-kutsun jakamiseen useiksi kutsuiksi, esimerkiksi kun valot ovat eri kytkimissä. Vaadi `intercept`:n käyttöönotto.", + "only_once": "only_once: Mukauta valot vain, kun ne ovat päällä (\"true\") tai mukauta niitä jatkuvasti (\"false\"). 🔄", + "skip_redundant_commands": "skip_redundant_commands: Ohita mukautuskomentojen lähettäminen, joiden kohdetila on jo yhtä suuri kuin valon tunnettu tila. Minimoi verkkoliikenteen ja parantaa mukautumisvastetta joissain tilanteissa. 📉 Poista käytöstä, jos fyysiset valotilat eivät ole synkronoitu kotiavustajan tallennetun tilan kanssa.", + "take_over_control": "take_over_control: Poista mukautuva valaistus käytöstä, jos toinen lähde kutsuu `light.turn_on`, kun valot ovat päällä ja niitä mukautetaan. Huomaa, että tämä kutsuu `homeassistant.update_entity` joka `interval`! 🔒", + "detect_non_ha_changes": "detect_non_ha_changes: Havaitsee ja pysäyttää mukautukset ei-\"light.turn_on\" -tilanmuutoksille. Vaatii \"take_over_control\" käyttöönoton. 🕵️ Varoitus: ⚠️ Jotkut valot saatavat osoittaa virheellisesti 'on'-tilan, mikä voi johtaa valojen syttymiseen odottamatta. Poista tämä ominaisuus käytöstä, jos kohtaat tällaisia ongelmia.", + "lights": "lights: Luettelo ohjattavista valon entity_ids:stä (voi olla tyhjä). 🌟", + "max_brightness": "max_brightness: Enimmäiskirkkausprosentti. 💡", + "max_color_temp": "max_color_temp: Kylmin värilämpötila kelvineinä. ❄️", + "min_brightness": "min_brightness: Vähittäiskirkkausprosentti. 💡", + "min_color_temp": "min_color_temp: Lämpimin värilämpötila kelvineinä. 🔥", + "prefer_rgb_color": "prefer_rgb_color: valitaanko RGB-värien säätö valon värilämpötilan sijaan, kun mahdollista. 🌈", + "transition_until_sleep": "shift_until_sleep: Kun käytössä, Adaptive Lighting käsittelee lepoasetukset miniminä ja siirtyy näihin arvoihin auringonlaskun jälkeen. 🌙", + "include_config_in_attributes": "include_config_in_attributes: Näytä kaikki vaihtoehdot attribuutteina Kotiavustajan kytkimessä, kun asetuksena on \"true\". 📝", + "intercept": "intercept: sieppaa ja mukauta \"light.turn_on\"-kutsut mahdollistamaan välitön värin ja kirkkauden mukauttaminen. 🏎️ Poista käytöstä valot, jotka eivät tue \"light.turn_on\" värin ja kirkkauden kanssa.", + "separate_turn_on_commands": "separate_turn_on_commands: Käytä erillisiä `light.turn_on`-kutsuja värin ja kirkkauden määrittämiseksi, joita tarvitaan joissakin valotyypeissä. 🔀" + }, + "title": "Adaptive Lightingin vaihtoehdot" } + }, + "error": { + "option_error": "Virheellinen vaihtoehto", + "entity_missing": "Kotiavustajasta puuttuu yksi tai useampi valittu valoentiteetti" } }, "config": { "step": { "user": { - "title": "Valitse nimi tälle Adaptiivisen Valaistuksen esiintymälle" + "title": "Valitse nimi tälle Adaptiivisen Valaistuksen esiintymälle", + "description": "Jokainen esiintymä voi sisältää useita valoja!" } + }, + "abort": { + "already_configured": "Tämä laite on jo määritetty" } } } diff --git a/custom_components/adaptive_lighting/translations/ja.json b/custom_components/adaptive_lighting/translations/ja.json index 20cc082c..065d8b3b 100644 --- a/custom_components/adaptive_lighting/translations/ja.json +++ b/custom_components/adaptive_lighting/translations/ja.json @@ -11,6 +11,9 @@ }, "sunset_offset": { "description": "日の入時間を基準に秒単位で正値もしくは負値で調整する。⏰" + }, + "entity_id": { + "description": "スイッチのエンティティID。 📝" } } }, diff --git a/custom_components/adaptive_lighting/translations/nl.json b/custom_components/adaptive_lighting/translations/nl.json index 16fe3059..49fd1019 100644 --- a/custom_components/adaptive_lighting/translations/nl.json +++ b/custom_components/adaptive_lighting/translations/nl.json @@ -43,7 +43,7 @@ "sunset_time": "sunset_time: handmatige onderdrukking van de zonsondergangstijd, indien 'Geen', wordt de werkelijke zonsopgangstijd op uw locatie gebruikt (UU:MM:SS)", "min_sunset_time": "min_sunset_time: handmatige onderdrukking van de minimale zonsondergangstijd, indien 'Geen', wordt de werkelijke zonsondergangstijd op uw locatie gebruikt (UU:MM:SS)", "take_over_control": "take_over_control: Als iets anders dan Adaptieve verlichting 'light.turn_on' roept wanneer een lamp al aan is, stop dan met het aanpassen van het licht totdat het (of de schakelaar) uit -> aan gaat.", - "detect_non_ha_changes": "detect_non_ha_changes: detecteert alle >10% wijzigingen aan de lichten (ook buiten HA), vereist dat 'take_over_control' is ingeschakeld (heet 'homeassistant.update_entity' elke 'interval'!)", + "detect_non_ha_changes": "detect_non_ha_changes: Detecteert en stopt aanpassingen voor`light.turn_on` statuswijzigingen. Vereist dat`take_over_control` is ingeschakeld. 🕵️ Voorzichtig: ⚠️ Sommige lampen kunnen een 'aan' status vals aangeven, wat kan leiden tot onverwacht inschakelen van lampen. Schakel deze functie uit als je dergelijke problemen tegenkomt.", "transition": "Overgangstijd bij het aanbrengen van een wijziging op de lichten (seconden)", "adapt_delay": "adapt_delay: wachttijd tussen het inschakelen van het licht (seconden) en het aanbrengen van wijzigingen in de lichtstatus door Adaptieve verlichting. Kan flikkering voorkomen.", "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Bij het initieel inschakelen van de lampen. Als dit op `true` is ingesteld, past Av alleen aan als `light.turn_on` wordt aangeroepen zonder een kleur of helderheid te specificeren. ❌🌈 Dit voorkomt bijvoorbeeld aanpassing bij het activeren van een scène. Als het `false` is, past Av aan ongeacht de aanwezigheid van kleur of helderheid in de initiële `service_data`. `take_over_control` moet ingeschakeld zijn. 🕵️ ", @@ -121,7 +121,7 @@ "description": "Duur van de eerste overgang wanneer de lampen van `uit` naar `aan`gaan, in seconden. ⏲️" }, "take_over_control": { - "description": "Schakel Adaptieve verlichting uit wanneer een andere bron `light.turn_on` aanroept terwijl de lampen aan staan en worden aangepast. N.b. dit zal `homeassistant.update_entity` elke `interval` uitvoeren." + "description": "Schakel Adaptieve verlichting uit als een andere bron `light.turn_on` aanroept terwijl de lampen aan zijn en worden aangepast. Let op dit roept`homeassistant.update_entity` elke `interval`aan." }, "detect_non_ha_changes": { "description": "Detecteert en stopt aanpassingen voor niet-`light.turn_on` state veranderingen. `take_over_control` moet actief zijn. 🕵️ Let op:⚠️Sommige lampen kunnen incorrect een 'on' state weergeven, wat resulteert in lampen die onverwacht aan gaan. Schakel deze feature uit wanneer deze fout zich voordoet." diff --git a/custom_components/adaptive_lighting/translations/pt.json b/custom_components/adaptive_lighting/translations/pt.json index bc4c82d2..d8b72689 100644 --- a/custom_components/adaptive_lighting/translations/pt.json +++ b/custom_components/adaptive_lighting/translations/pt.json @@ -26,8 +26,15 @@ }, "transition": { "description": "Duração da transição quando as luzes mudam, em segundos. 🕑" + }, + "max_color_temp": { + "description": "Cor mais fria em Kelvin. ❄️" + }, + "sleep_brightness": { + "description": "Porcentagem do brilho da lâmpadas no modo \"sleep mode\"." } - } + }, + "description": "Muda alguma configuração que você quiser no interruptor. Todas as opções aqui são as mesmas que estão no processo de configuração." }, "apply": { "description": "Aplica as definições atuais da Iluminação Adaptativa às luzes.", @@ -60,9 +67,12 @@ "sunset_offset": "Ajustar a hora do pôr do sol com um offset positivo ou negativo em segundos. ⏰", "sleep_transition": "Duração da transição quando o \"modo dormir\" é alternado em segundos. 😴", "autoreset_control_seconds": "Reiniciar o controlo manual automaticamente após um número de segundos. Definir 0 para desativar. ⏲️", - "transition": "Duração da transição quando as luzes mudam, em segundos. 🕑" + "transition": "Duração da transição quando as luzes mudam, em segundos. 🕑", + "sleep_brightness": "Porcentagem do brilho da lâmpadas no modo \"sleep mode\".", + "brightness_mode": "Brilho que irá ser usado. Possíveis valores são `default`, `linear` e `tanh`(usa `brightness_mode_time_dark` e `brightness_mode_time_light`). 📈" }, - "title": "Opções da Iluminação Adaptativa" + "title": "Opções da Iluminação Adaptativa", + "description": "Configure um componente da Iluminação Adaptativa. O nome das opções são as mesmas que as do YML. Se você já definiu essa configuração no YAML, nenhuma opção vai aparecer aqui. Para acessar um gráfico que demonstra o efeito dos parâmetros, acesse [esse app](https://basnijholt.github.io/adaptive-lighting). Para mais detalhes, veja a [documentação oficial](https://github.com/basnijholt/adaptive-lighting#readme)." } }, "error": { diff --git a/custom_components/adaptive_lighting/translations/sk.json b/custom_components/adaptive_lighting/translations/sk.json index 11ad8844..e1cf499f 100644 --- a/custom_components/adaptive_lighting/translations/sk.json +++ b/custom_components/adaptive_lighting/translations/sk.json @@ -36,7 +36,7 @@ "sunrise_offset": "Upravte čas východu slnka o sekundy vpred alebo vzad. ⏰", "transition": "Trvanie prechodu, keď sú svetlá zmenené (v sekundách). ⏲️", "brightness_mode": "Výber režimu jasu. Možné hodnotu sú `default`, `linear` a `tanh` (používa `brightness_mode_time_dark` a `brightness_mode_time_light`). 📈", - "brightness_mode_time_light": "(Ignorované ak `brightness_mode='default'`) Čas na zvýšenie/zníženie jasu po udalosti/pred udalosťou východu/západu slnka. 📈📉", + "brightness_mode_time_light": "(Ignorovaný, ak `brightness_mode = 'predvolené') Trvanie v sekundách na rampu / vypnutie jasu po / pred východ slnka/sunset. 📈📉.", "sunset_offset": "Upravte čas západu slnka o sekundy vpred alebo vzad. ⏰", "max_sunset_time": "Nastavte najneskorší možný virtuálny západ slnka (HH:MM:SS). Umožňuje skorší západ slnka. 🌅", "initial_transition": "Trvanie prvého prechodu, keď sú svetlá zapnuté z `off` na `on` (v sekundách). ⏲️", @@ -132,7 +132,7 @@ "description": "Prispôsobiť svetlá len pri zapnutí (`true`) alebo prispôsobovať ich priebežne (`false`). 🔄" }, "use_defaults": { - "description": "Nastaví predvolené hodnoty, ktoré nie sú špecifikované v tomto volaní služby. Možnosti: \"current\" (predvolené, zachová aktuálne hodnoty), \"factory\" (použije predvolené hodnoty z dokumentácie) alebo \"configuration\" (vráti na predvolené nastavenia prepínača). ⚙️" + "description": "Stanovuje predvolené hodnoty nie sú uvedené v tomto servisnom hovore. Možnosti: \"current\" (predvolené, zachováva aktuálne hodnoty), \"chôdzky na zdokumentované predvolené nastavenia), alebo \"konfigurácia\" (odkazy prepínať predvolené nastavenia). ⚙️" }, "separate_turn_on_commands": { "description": "Použiť samostatné volania služby `light.turn_on` pre nastavenie teploty svetla a jasu (môže byť potrebné pre niektoré typy svetiel). 🔀" @@ -196,7 +196,7 @@ "description": "`entity_id` prepínača u ktorého sa majú svetlá o(d)značiť ako \"manuálne ovládané\". 📝" }, "lights": { - "description": "entity_id svetiel, ak nie sú špecifikované, tak sú vybrané všetky svetlá prepínača. 💡" + "description": "subjekt_id(s) svietidiel, ak nie je špecifikované, všetky svetlá v prepínači sú vybrané. 💡" } }, "description": "Či označiť svetlo ako \"manuálne ovládané\"." diff --git a/custom_components/adaptive_lighting/translations/ta.json b/custom_components/adaptive_lighting/translations/ta.json new file mode 100644 index 00000000..66115d64 --- /dev/null +++ b/custom_components/adaptive_lighting/translations/ta.json @@ -0,0 +1,202 @@ +{ + "services": { + "set_manual_control": { + "description": "ஒரு ஒளி 'கைமுறையாக கட்டுப்படுத்தப்பட்டதா' என்பதைக் குறிக்கவும்.", + "fields": { + "entity_id": { + "description": "சுவிட்சின் `நிறுவனம்_ஐடி`, இதில் (அன்) ஒளியை` கைமுறையாக கட்டுப்படுத்தப்படுகிறது 'என்று குறிக்கவும். ." + }, + "lights": { + "description": "விளக்குகளின் entity_id (கள்), குறிப்பிடப்படாவிட்டால், சுவிட்சில் உள்ள அனைத்து விளக்குகளும் தேர்ந்தெடுக்கப்படுகின்றன. ." + }, + "manual_control": { + "description": "\"கையேடு_ கன்ட்ரோல்\" பட்டியலிலிருந்து ஒளியை சேர்க்க வேண்டுமா அல்லது அகற்ற வேண்டுமா அல்லது அகற்ற வேண்டுமா அல்லது அகற்ற வேண்டுமா? ." + } + } + }, + "change_switch_settings": { + "fields": { + "sunrise_offset": { + "description": "விநாடிகளில் நேர்மறை அல்லது எதிர்மறை ஆஃப்செட் மூலம் சூரிய தோன்றுகை நேரத்தை சரிசெய்யவும். ." + }, + "sunrise_time": { + "description": "சூரிய உதயத்திற்கு ஒரு நிலையான நேரத்தை (HH: MM: SS) அமைக்கவும். ." + }, + "entity_id": { + "description": "சுவிட்சின் நிறுவன ஐடி. ." + }, + "use_defaults": { + "description": "இந்த பணி அழைப்பில் குறிப்பிடப்படாத இயல்புநிலை மதிப்புகளை அமைக்கிறது. விருப்பங்கள்: \"நடப்பு\" (இயல்புநிலை, தற்போதைய மதிப்புகளைத் தக்க வைத்துக் கொள்கிறது), \"தொழிற்சாலை\" (ஆவணப்படுத்தப்பட்ட இயல்புநிலைகளுக்கு மீட்டமைக்கிறது) அல்லது \"உள்ளமைவு\" (கட்டமைப்பு இயல்புநிலைகளை மாற்றுவதற்கு மாற்றுகிறது). ." + }, + "include_config_in_attributes": { + "description": "`உண்மை` என அமைக்கப்பட்டிருக்கும் போது வீட்டு உதவியாளரின் சுவிட்சில் உள்ள அனைத்து விருப்பங்களையும் பண்புகளாகக் காட்டுங்கள். ." + }, + "turn_on_lights": { + "description": "தற்போது முடக்கப்பட்ட விளக்குகளை இயக்க வேண்டுமா. ." + }, + "initial_transition": { + "description": "விளக்குகள் `ஆஃப்` முதல்` ஆன் `வரை நொடிகளில் மாறும் போது முதல் மாற்றத்தின் காலம். ." + }, + "sleep_transition": { + "description": "\"தூக்க பயன்முறை\" நொடிகளில் மாற்றப்படும்போது மாற்றத்தின் காலம். ." + }, + "max_brightness": { + "description": "அதிகபட்ச ஒளி விழுக்காடு. ." + }, + "max_color_temp": { + "description": "கெல்வினில் குளிரான வண்ண வெப்பநிலை. ." + }, + "min_brightness": { + "description": "குறைந்தபட்ச ஒளி விழுக்காடு. ." + }, + "min_color_temp": { + "description": "கெல்வினில் வெப்பமான வண்ண வெப்பநிலை. ." + }, + "only_once": { + "description": "விளக்குகள் இயக்கப்படும்போது மட்டுமே (`உண்மை`) மாற்றியமைக்கும்போது அல்லது அவற்றைத் தழுவிக்கொள்ளுங்கள் (` பொய்`). ." + }, + "prefer_rgb_color": { + "description": "முடிந்தவரை ஒளி வண்ண வெப்பநிலையை விட RGB வண்ண சரிசெய்தலை விரும்பலாமா. ." + }, + "separate_turn_on_commands": { + "description": "சில ஒளி வகைகளுக்கு தேவைப்படும் வண்ணம் மற்றும் பிரகாசத்திற்கான தனித்தனி `லைட்.டர்ன்_ஓஎன்` அழைப்புகளைப் பயன்படுத்தவும். ." + }, + "send_split_delay": { + "description": "ஒரே நேரத்தில் ஒளி மற்றும் வண்ண அமைப்பை ஆதரிக்காத விளக்குகளுக்கு `தனி_டர்ன்_ஆன்_காமண்ட்ச்` இடையே நேரந்தவறுகை (எம்.எச்). ." + }, + "sleep_brightness": { + "description": "தூக்க பயன்முறையில் விளக்குகளின் ஒளி விழுக்காடு. ." + }, + "sleep_rgb_or_color_temp": { + "description": "தூக்க பயன்முறையில் `\" rgb_color \"` அல்லது `\" Color_Temp \"key ஐப் பயன்படுத்தவும். ." + }, + "sleep_rgb_color": { + "description": "தூக்க பயன்முறையில் RGB வண்ணம் (`SLEEP_RGB_OR_COLOR_TEMP`\" RGB_COLOR \"ஆக இருக்கும்போது பயன்படுத்தப்படுகிறது). ." + }, + "sleep_color_temp": { + "description": "ச்லீப் பயன்முறையில் வண்ண வெப்பநிலை (கெல்வினில் `SLEEP_RGB_OR_COLOR_TEMP` என்பது` color_temp` ஆக இருக்கும்போது பயன்படுத்தப்படுகிறது). ." + }, + "sunset_offset": { + "description": "வினாடிகளில் நேர்மறை அல்லது எதிர்மறை ஆஃப்செட் மூலம் சூரிய மறைவு நேரத்தை சரிசெய்யவும். ." + }, + "sunset_time": { + "description": "சூரிய அச்தமனத்திற்கு ஒரு நிலையான நேரத்தை (HH: MM: SS) அமைக்கவும். ." + }, + "max_sunrise_time": { + "description": "ஆரம்பகால சூரிய உதயத்தை அனுமதிக்கும் அண்மைக் கால மெய்நிகர் சூரிய தோன்றுகை நேரத்தை (HH: MM: SS) அமைக்கவும். ." + }, + "min_sunset_time": { + "description": "ஆரம்பகால மெய்நிகர் சூரிய மறைவு நேரத்தை (HH: MM: SS) அமைக்கவும், பின்னர் சூரிய அச்தமனங்களை அனுமதிக்கிறது. ." + }, + "take_over_control": { + "description": "விளக்குகள் இயக்கத்தில் இருக்கும்போது மற்றொரு சான்று `லைட்.டர்ன்_ஒன்` என்று அழைத்தால் தகவமைப்பு விளக்குகளை முடக்கு. இது `ஓமாசிச்டன்ட்.பிடேட்_என்டிட்டி` ஒவ்வொரு` இடைவெளியையும் 'என்று அழைக்கிறது என்பதை நினைவில் கொள்க! ." + }, + "detect_non_ha_changes": { + "description": "`விளக்கு அல்லாத. டர்ன்_ஓஎன்` மாநில மாற்றங்களுக்கான தழுவல்களைக் கண்டறிந்து நிறுத்துகிறது. `Take_over_control` இயக்கப்பட்டது. 🕵œ எச்சரிக்கை: ⚠œ சில விளக்குகள் ஒரு 'ஆன்' நிலையை பொய்யாகக் குறிக்கக்கூடும், இதனால் விளக்குகள் எதிர்பாராத விதமாக இயக்கப்படலாம். இதுபோன்ற சிக்கல்களை நீங்கள் சந்தித்தால் இந்த அம்சத்தை முடக்கு." + }, + "transition": { + "description": "விளக்குகள் மாறும்போது, நொடிகளில் மாற்றத்தின் காலம். ." + }, + "adapt_delay": { + "description": "லைட் டர்ன் மற்றும் தகவமைப்பு விளக்குகள் இடையே காத்திருப்பு நேரம் (விநாடிகள்) மாற்றங்களைப் பயன்படுத்துகிறது. ஒளிரும் தவிர்க்க உதவலாம். ." + }, + "autoreset_control_seconds": { + "description": "பல விநாடிகளுக்குப் பிறகு தானாகவே கையேடு கட்டுப்பாட்டை மீட்டமைக்கவும். முடக்க 0 என அமைக்கவும். ." + } + }, + "description": "சுவிட்சில் நீங்கள் விரும்பும் எந்த அமைப்புகளையும் மாற்றவும். இங்குள்ள அனைத்து விருப்பங்களும் கட்டமைப்பு ஓட்டத்தில் உள்ளதைப் போலவே இருக்கும்." + }, + "apply": { + "description": "தற்போதைய தகவமைப்பு லைட்டிங் அமைப்புகளை விளக்குகளுக்கு பயன்படுத்துகிறது.", + "fields": { + "entity_id": { + "description": "விண்ணப்பிக்க அமைப்புகளுடன் சுவிட்சின் `ENTITY_ID`. ." + }, + "lights": { + "description": "அமைப்புகளைப் பயன்படுத்த ஒரு ஒளி (அல்லது விளக்குகளின் பட்டியல்). ." + }, + "transition": { + "description": "விளக்குகள் மாறும்போது, நொடிகளில் மாற்றத்தின் காலம். ." + }, + "adapt_brightness": { + "description": "ஒளியின் பிரகாசத்தை மாற்றியமைக்க வேண்டுமா. ." + }, + "adapt_color": { + "description": "துணை விளக்குகளில் வண்ணத்தை மாற்றியமைக்க வேண்டுமா. ." + }, + "prefer_rgb_color": { + "description": "முடிந்தவரை ஒளி வண்ண வெப்பநிலையை விட RGB வண்ண சரிசெய்தலை விரும்பலாமா. ." + }, + "turn_on_lights": { + "description": "தற்போது முடக்கப்பட்ட விளக்குகளை இயக்க வேண்டுமா. ." + } + } + } + }, + "title": "தகவமைப்பு விளக்குகள்", + "config": { + "step": { + "user": { + "title": "தகவமைப்பு விளக்கு உதாரணத்திற்கு ஒரு பெயரைத் தேர்வுசெய்க", + "description": "ஒவ்வொரு நிகழ்விலும் பல விளக்குகள் இருக்கலாம்!" + } + }, + "abort": { + "already_configured": "இந்த சாதனம் ஏற்கனவே கட்டமைக்கப்பட்டுள்ளது" + } + }, + "options": { + "step": { + "init": { + "title": "தகவமைப்பு விளக்கு விருப்பங்கள்", + "description": "தகவமைப்பு விளக்கு கூறுகளை உள்ளமைக்கவும். விருப்பப் பெயர்கள் YAML அமைப்புகளுடன் சீரமைக்கப்படுகின்றன. இந்த உள்ளீட்டை நீங்கள் YAML இல் வரையறுத்திருந்தால், இங்கே எந்த விருப்பங்களும் தோன்றாது. அளவுரு விளைவுகளை நிரூபிக்கும் ஊடாடும் வரைபடங்களுக்கு, [இந்த வலை பயன்பாடு] (https://basnijholt.github.io/adaptive-lighting) ஐப் பார்வையிடவும். மேலும் விவரங்களுக்கு, [அதிகாரப்பூர்வ ஆவணங்கள்] (https://github.com/basnijholt/adaptive-lighting#readme) ஐப் பார்க்கவும்.", + "data": { + "lights": "விளக்குகள்: கட்டுப்படுத்தப்பட வேண்டிய ஒளி நிறுவனம்_டுகளின் பட்டியல் (காலியாக இருக்கலாம்). .", + "min_brightness": "min_brightness: குறைந்தபட்ச ஒளி விழுக்காடு. .", + "max_brightness": "அதிகபட்ச பிரகாசம்: அதிகபட்ச ஒளி விழுக்காடு. .", + "min_color_temp": "min_color_temp: கெல்வினில் வெப்பமான வண்ண வெப்பநிலை. .", + "max_color_temp": "MAX_COLOR_TEMP: கெல்வினில் குளிரான வண்ண வெப்பநிலை. .", + "prefer_rgb_color": "bey_rgb_color: முடிந்தவரை ஒளி வண்ண வெப்பநிலையை விட RGB வண்ண சரிசெய்தலை விரும்பலாமா. .", + "transition_until_sleep": "Transition_until_sleep: இயக்கப்பட்டால், தகவமைப்பு விளக்குகள் தூக்க அமைப்புகளை குறைந்தபட்சமாகக் கருதும், சூரிய அச்தமனத்திற்குப் பிறகு இந்த மதிப்புகளுக்கு மாறும். .", + "take_over_control": "Take_over_control: விளக்குகள் இயக்கத்தில் இருக்கும்போது மற்றொரு சான்று `லைட்.டர்ன்_ஓஎன்` என்று அழைத்தால் தகவமைப்பு விளக்குகளை முடக்கு. இது `ஓமாசிச்டன்ட்.பிடேட்_என்டிட்டி` ஒவ்வொரு` இடைவெளியையும் 'என்று அழைக்கிறது என்பதை நினைவில் கொள்க! .", + "detect_non_ha_changes": "கண்டறிதல்_நான்_ஆ_சேஞ்ச்ச்: `விளக்கு அல்லாத. டர்ன்_ஓஎன்` மாநில மாற்றங்களுக்கான தழுவல்களைக் கண்டறிந்து நிறுத்துகிறது. `Take_over_control` இயக்கப்பட்டது. 🕵œ எச்சரிக்கை: ⚠œ சில விளக்குகள் ஒரு 'ஆன்' நிலையை பொய்யாகக் குறிக்கக்கூடும், இதனால் விளக்குகள் எதிர்பாராத விதமாக இயக்கப்படலாம். இதுபோன்ற சிக்கல்களை நீங்கள் சந்தித்தால் இந்த அம்சத்தை முடக்கு.", + "only_once": "மட்டும்_இன்: விளக்குகள் இயக்கப்படும்போது மட்டுமே (`உண்மை`) மாற்றியமைக்கும்போது அல்லது அவற்றைத் தழுவிக்கொள்ளுங்கள் (` தவறு`). .", + "adapt_only_on_bare_turn_on": "Sadve_only_on_bare_turn_on: ஆரம்பத்தில் விளக்குகளை இயக்கும்போது. `உண்மை` என அமைக்கப்பட்டால், வண்ணம் அல்லது பிரகாசத்தைக் குறிப்பிடாமல்` லைட்.டர்ன்_ஓஎன்` செயல்படுத்தப்பட்டால் மட்டுமே அல் மாற்றியமைக்கிறது. ❌🌈 இது எ.கா., ஒரு காட்சியை செயல்படுத்தும்போது தழுவலைத் தடுக்கிறது. `தவறு` என்றால், ஆரம்ப` சேவை_டா` இல் நிறம் அல்லது ஒளி இருப்பதைப் பொருட்படுத்தாமல் AL மாற்றியமைக்கிறது. `Take_over_control` இயக்கப்பட்டது. . ", + "separate_turn_on_commands": "தனித்தனி_டர்ன்_ஆன்_காமண்ட்ச்: சில ஒளி வகைகளுக்கு தேவைப்படும் வண்ணம் மற்றும் பிரகாசத்திற்கான தனித்தனி `லைட்.டர்ன்_ஓஎன்` அழைப்புகளைப் பயன்படுத்தவும். .", + "skip_redundant_commands": "Skip_redundant_commands: தழுவல் கட்டளைகளை அனுப்புவதைத் தவிர்க்கவும், அதன் இலக்கு நிலை ஏற்கனவே ஒளியின் அறியப்பட்ட நிலைக்கு சமம். பிணையம் போக்குவரத்தை குறைக்கிறது மற்றும் சில சூழ்நிலைகளில் தழுவல் மறுமொழியை மேம்படுத்துகிறது. ஆ இன் பதிவு செய்யப்பட்ட நிலையுடன் இயற்பியல் ஒளி நிலைகள் ஒத்திசைவிலிருந்து வெளியேறினால் அது காணக்கூடியது.", + "intercept": "இடைமறிப்பு: உடனடி வண்ணம் மற்றும் பிரகாசமான தழுவலை செயல்படுத்த `ஒளி. Color வண்ணம் மற்றும் பிரகாசத்துடன் `ஒளி.", + "multi_light_intercept": "Mulli_light_intect: பல விளக்குகளை குறிவைக்கும் `light.turn_on` அழைப்புகளை இடைமறிக்கவும் மாற்றவும். ➗⚠œ இது ஒரு `லைட்.டர்ன்_ஒன்` அழைப்பை பல அழைப்புகளாக பிரிக்கக்கூடும், எ.கா., விளக்குகள் வெவ்வேறு சுவிட்சுகளில் இருக்கும்போது. இயக்கப்பட வேண்டும் `இடைமறிப்பு` தேவை.", + "include_config_in_attributes": "அடங்கும்_கான்ஃபிக்_இன்_அட்ரிபியூட்: `உண்மை` என அமைக்கப்பட்டிருக்கும் போது வீட்டு உதவியாளரின் சுவிட்சில் உள்ள பண்புகளாக அனைத்து விருப்பங்களையும் காட்டுங்கள். ." + }, + "data_description": { + "interval": "விளக்குகளை மாற்றியமைக்க அதிர்வெண், நொடிகளில். .", + "transition": "விளக்குகள் மாறும்போது, நொடிகளில் மாற்றத்தின் காலம். .", + "initial_transition": "விளக்குகள் `ஆஃப்` முதல்` ஆன் `வரை நொடிகளில் மாறும் போது முதல் மாற்றத்தின் காலம். .", + "sleep_brightness": "தூக்க பயன்முறையில் விளக்குகளின் ஒளி விழுக்காடு. .", + "sleep_rgb_or_color_temp": "தூக்க பயன்முறையில் `\" rgb_color \"` அல்லது `\" Color_Temp \"key ஐப் பயன்படுத்தவும். .", + "sleep_color_temp": "ச்லீப் பயன்முறையில் வண்ண வெப்பநிலை (கெல்வினில் `SLEEP_RGB_OR_COLOR_TEMP` என்பது` color_temp` ஆக இருக்கும்போது பயன்படுத்தப்படுகிறது). .", + "sleep_rgb_color": "தூக்க பயன்முறையில் RGB வண்ணம் (`SLEEP_RGB_OR_COLOR_TEMP`\" RGB_COLOR \"ஆக இருக்கும்போது பயன்படுத்தப்படுகிறது). .", + "sleep_transition": "\"தூக்க பயன்முறை\" நொடிகளில் மாற்றப்படும்போது மாற்றத்தின் காலம். .", + "sunrise_time": "சூரிய உதயத்திற்கு ஒரு நிலையான நேரத்தை (HH: MM: SS) அமைக்கவும். .", + "min_sunrise_time": "ஆரம்பகால மெய்நிகர் சூரிய உதய நேரத்தை (HH: MM: SS) அமைக்கவும், பின்னர் சூரிய உதயங்களை அனுமதிக்கிறது. .", + "max_sunrise_time": "ஆரம்பகால சூரிய உதயத்தை அனுமதிக்கும் அண்மைக் கால மெய்நிகர் சூரிய தோன்றுகை நேரத்தை (HH: MM: SS) அமைக்கவும். .", + "sunrise_offset": "விநாடிகளில் நேர்மறை அல்லது எதிர்மறை ஆஃப்செட் மூலம் சூரிய தோன்றுகை நேரத்தை சரிசெய்யவும். .", + "sunset_time": "சூரிய அச்தமனத்திற்கு ஒரு நிலையான நேரத்தை (HH: MM: SS) அமைக்கவும். .", + "min_sunset_time": "ஆரம்பகால மெய்நிகர் சூரிய மறைவு நேரத்தை (HH: MM: SS) அமைக்கவும், பின்னர் சூரிய அச்தமனங்களை அனுமதிக்கிறது. .", + "max_sunset_time": "முந்தைய சூரிய அச்தமனங்களை அனுமதிக்கும் அண்மைக் கால மெய்நிகர் சன்செட் நேரத்தை (HH: MM: SS) அமைக்கவும். .", + "sunset_offset": "விநாடிகளில் நேர்மறை அல்லது எதிர்மறை ஆஃப்செட் மூலம் சூரிய மறைவு நேரத்தை சரிசெய்யவும். .", + "send_split_delay": "ஒரே நேரத்தில் ஒளி மற்றும் வண்ண அமைப்பை ஆதரிக்காத விளக்குகளுக்கு `தனி_டர்ன்_ஆன்_காமண்ட்ச்` இடையே நேரந்தவறுகை (எம்.எச்). .", + "adapt_delay": "லைட் டர்ன் மற்றும் தகவமைப்பு விளக்குகள் இடையே காத்திருப்பு நேரம் (விநாடிகள்) மாற்றங்களைப் பயன்படுத்துகிறது. ஒளிரும் தவிர்க்க உதவலாம். .", + "brightness_mode": "பயன்படுத்த பிரகாசமான முறை. சாத்தியமான மதிப்புகள் `இயல்புநிலை`,` லீனியர்`, மற்றும் `டான்` (` பிரகாசம்_மோட்_ நேரம்_டார்க்` மற்றும் `பிரகாசம்_மோட்_மட்_லிட்` ஆகியவற்றைப் பயன்படுத்துகின்றன). .", + "brightness_mode_time_dark": ". .", + "brightness_mode_time_light": ". ..", + "autoreset_control_seconds": "பல விநாடிகளுக்குப் பிறகு தானாகவே கையேடு கட்டுப்பாட்டை மீட்டமைக்கவும். முடக்க 0 என அமைக்கவும். ." + } + } + }, + "error": { + "option_error": "தவறான விருப்பம்", + "entity_missing": "ஒன்று அல்லது அதற்கு மேற்பட்ட தேர்ந்தெடுக்கப்பட்ட ஒளி நிறுவனங்கள் வீட்டு உதவியாளரிடமிருந்து காணவில்லை" + } + } +} From 54f43076495ee0ab7e76e17f81029791d3b74ca1 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:28:01 +0200 Subject: [PATCH 07/44] docs: add Thunderstrike116 as a contributor for translation (#1095) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 492cdaab..cdf03c35 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -900,6 +900,15 @@ "contributions": [ "translation" ] + }, + { + "login": "Thunderstrike116", + "name": "Thunderstrike116", + "avatar_url": "https://avatars.githubusercontent.com/u/23220766?v=4", + "profile": "https://github.com/Thunderstrike116", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 2b0f646e..0fa68d93 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/hacs/integration) ![Version](https://img.shields.io/github/v/release/basnijholt/adaptive-lighting?style=for-the-badge) -[![All Contributors](https://img.shields.io/badge/all_contributors-98-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-99-orange.svg?style=flat-square)](#contributors-) # 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙 @@ -591,6 +591,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark brietman
brietman

🌍 தமிழ் நேரம்
தமிழ் நேரம்

🌍 + + Thunderstrike116
Thunderstrike116

🌍 + From 4006fe0b1565a2cc4cf8814ceec7068f57b259d5 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:28:32 +0200 Subject: [PATCH 08/44] docs: add immeteor2 as a contributor for translation (#1105) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index cdf03c35..1edee2ae 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -909,6 +909,15 @@ "contributions": [ "translation" ] + }, + { + "login": "immeteor2", + "name": "immeteor2", + "avatar_url": "https://avatars.githubusercontent.com/u/125735487?v=4", + "profile": "https://github.com/immeteor2", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 0fa68d93..5c0213b5 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/hacs/integration) ![Version](https://img.shields.io/github/v/release/basnijholt/adaptive-lighting?style=for-the-badge) -[![All Contributors](https://img.shields.io/badge/all_contributors-99-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-100-orange.svg?style=flat-square)](#contributors-) # 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙 @@ -593,6 +593,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark Thunderstrike116
Thunderstrike116

🌍 + immeteor2
immeteor2

🌍 From 4e2f02fbc2b4e18b6f56b55f8e7f535f10331938 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:28:58 +0200 Subject: [PATCH 09/44] docs: add pbassut as a contributor for translation (#1110) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index 1edee2ae..c01e17a5 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -918,6 +918,15 @@ "contributions": [ "translation" ] + }, + { + "login": "pbassut", + "name": "Patrick Bassut", + "avatar_url": "https://avatars.githubusercontent.com/u/1500037?v=4", + "profile": "https://github.com/pbassut", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 5c0213b5..71cc87a8 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/hacs/integration) ![Version](https://img.shields.io/github/v/release/basnijholt/adaptive-lighting?style=for-the-badge) -[![All Contributors](https://img.shields.io/badge/all_contributors-100-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-101-orange.svg?style=flat-square)](#contributors-) # 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙 @@ -594,6 +594,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark Thunderstrike116
Thunderstrike116

🌍 immeteor2
immeteor2

🌍 + Patrick Bassut
Patrick Bassut

🌍 From 33a7f56a3177e8d3f2f88fe6b14b31349f965acb Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:29:38 +0200 Subject: [PATCH 10/44] docs: add Ricky-Tigg as a contributor for translation (#1120) * docs: update README.md * docs: update .all-contributorsrc --------- Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com> --- .all-contributorsrc | 9 +++++++++ README.md | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index c01e17a5..a78192bc 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -927,6 +927,15 @@ "contributions": [ "translation" ] + }, + { + "login": "Ricky-Tigg", + "name": "Ricky Tigg", + "avatar_url": "https://avatars.githubusercontent.com/u/26058215?v=4", + "profile": "https://github.com/Ricky-Tigg", + "contributions": [ + "translation" + ] } ], "contributorsPerLine": 7, diff --git a/README.md b/README.md index 71cc87a8..78e8e260 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ [![hacs_badge](https://img.shields.io/badge/HACS-Default-orange.svg?style=for-the-badge)](https://github.com/hacs/integration) ![Version](https://img.shields.io/github/v/release/basnijholt/adaptive-lighting?style=for-the-badge) -[![All Contributors](https://img.shields.io/badge/all_contributors-101-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-102-orange.svg?style=flat-square)](#contributors-) # 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙 @@ -595,6 +595,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark Thunderstrike116
Thunderstrike116

🌍 immeteor2
immeteor2

🌍 Patrick Bassut
Patrick Bassut

🌍 + Ricky Tigg
Ricky Tigg

🌍 From 7e98bdd46a4fdaf474b1f934e3243ba78c07d896 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:31:36 +0200 Subject: [PATCH 11/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20websockets?= =?UTF-8?q?=20to=20v14=20(#1124)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 4db3cb83..b1c274b3 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -71,7 +71,7 @@ uvicorn==0.25.0 # via shiny watchfiles==0.21.0 # via shiny -websockets==12.0 +websockets==14.1 # via shiny xstatic-bootswatch==3.3.7.0 # via shinyswatch From 3811df7c573a8c963543725c58d1b773bbf2b993 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:40:26 +0200 Subject: [PATCH 12/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20watchfiles?= =?UTF-8?q?=20to=20v1=20(#1123)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index b1c274b3..99b384ad 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -69,7 +69,7 @@ uc-micro-py==1.0.2 # via linkify-it-py uvicorn==0.25.0 # via shiny -watchfiles==0.21.0 +watchfiles==1.0.0 # via shiny websockets==14.1 # via shiny From 2a3acd52065a6a5f822d7b6407b8707337a02052 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:40:36 +0200 Subject: [PATCH 13/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20ubuntu=20to?= =?UTF-8?q?=20v24=20(#1122)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/pytest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index b03f0023..6c4c176a 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -8,7 +8,7 @@ on: jobs: pytest: name: Run pytest - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 timeout-minutes: 60 strategy: fail-fast: false From 8855f3313e9729da2e521f5ca1effcc44c42d627 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:15 +0200 Subject: [PATCH 14/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20shiny=20to?= =?UTF-8?q?=20v1=20(#1121)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- webapp/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 99b384ad..daac1fae 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -47,7 +47,7 @@ python-multipart==0.0.18 # via shiny pytz==2023.3.post1 # via astral -shiny==0.5.0 +shiny==1.2.1 # via # -r requirements.txt # shinylive diff --git a/webapp/requirements.txt b/webapp/requirements.txt index 54732c09..84e45334 100644 --- a/webapp/requirements.txt +++ b/webapp/requirements.txt @@ -1,4 +1,4 @@ shinylive==0.1.1 astral==2.2 shinyswatch==0.3.1 -shiny==0.5.0 +shiny==1.2.1 From 2a24c519fe723a7d3aad350d45696c910003d1e2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:23 +0200 Subject: [PATCH 15/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20release-dra?= =?UTF-8?q?fter/release-drafter=20action=20to=20v6=20(#1119)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/release-drafter.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 12b1f6c2..e3badf0f 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -17,6 +17,6 @@ jobs: pull-requests: write runs-on: ubuntu-latest steps: - - uses: release-drafter/release-drafter@v5 + - uses: release-drafter/release-drafter@v6 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 7d418be392fbc845baf5e77c1c2b4dd6b6b1965f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:34 +0200 Subject: [PATCH 16/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20pytz=20to?= =?UTF-8?q?=20v2024=20(#1118)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index daac1fae..75c07a61 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -45,7 +45,7 @@ packaging==23.2 # shinyswatch python-multipart==0.0.18 # via shiny -pytz==2023.3.post1 +pytz==2024.2 # via astral shiny==1.2.1 # via From 0d29b1d60c9d0954217abd4313439c9e89e03ee6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:41 +0200 Subject: [PATCH 17/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20packaging?= =?UTF-8?q?=20to=20v24=20(#1117)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 75c07a61..9f1ce3d4 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -39,7 +39,7 @@ mdit-py-plugins==0.4.0 # via shiny mdurl==0.1.2 # via markdown-it-py -packaging==23.2 +packaging==24.2 # via # htmltools # shinyswatch From 584368c1a484b49b513d5da167d417e853bbf21b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:49 +0200 Subject: [PATCH 18/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/setu?= =?UTF-8?q?p-qemu-action=20action=20to=20v3=20(#1116)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 1f6099d0..426f15dd 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -15,7 +15,7 @@ jobs: - linux/arm64 steps: - name: Set up QEMU - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Login to Docker Hub From b8306c2b2189ded2bd7fd755862677186d8f64da Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:41:54 +0200 Subject: [PATCH 19/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/setu?= =?UTF-8?q?p-buildx-action=20action=20to=20v3=20(#1115)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 426f15dd..4a39d531 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -17,7 +17,7 @@ jobs: - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: From dd1090cf52d88884f98e6045892a1cb127ede2e1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:42:07 +0200 Subject: [PATCH 20/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/logi?= =?UTF-8?q?n-action=20action=20to=20v3=20(#1114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 4a39d531..5b91de29 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -19,7 +19,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v2 + uses: docker/login-action@v3 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} From 57c36133f7b02151e7d1851713259afe9da84d70 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:42:14 +0200 Subject: [PATCH 21/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/buil?= =?UTF-8?q?d-push-action=20action=20to=20v6=20(#1113)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/docker-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml index 5b91de29..3e088e96 100644 --- a/.github/workflows/docker-build.yml +++ b/.github/workflows/docker-build.yml @@ -24,7 +24,7 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v4 + uses: docker/build-push-action@v6 with: # Only push on the master branch push: ${{ github.ref == 'refs/heads/master' }} From e4f5163f164255b7015d9a50051432de88fb9109 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:42:48 +0200 Subject: [PATCH 22/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/upl?= =?UTF-8?q?oad-pages-artifact=20action=20to=20v3=20(#1111)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/deploy-webapp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index 51cbab81..38f83fee 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -52,7 +52,7 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v2 + uses: actions/upload-pages-artifact@v3 with: # Upload the 'site' directory, where your app has been built path: "site" From 577e6b21387533e5bc9544ea11fae68771a8d046 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:43:09 +0200 Subject: [PATCH 23/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/set?= =?UTF-8?q?up-python=20action=20to=20v5=20(#1109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/deploy-webapp.yml | 2 +- .github/workflows/install_dependencies/action.yml | 2 +- .github/workflows/pre-commit.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index 38f83fee..7dc8b8bc 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v3 - name: Set Up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v5 with: python-version: 3.x diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml index badc6566..37379c41 100644 --- a/.github/workflows/install_dependencies/action.yml +++ b/.github/workflows/install_dependencies/action.yml @@ -28,7 +28,7 @@ runs: ref: ${{ inputs.core-version }} - name: Set up Python ${{ inputs.python-version }} id: python - uses: actions/setup-python@v4.1.0 + uses: actions/setup-python@v5.3.0 with: python-version: ${{ inputs.python-version }} - name: Install dependencies diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index f46e01d4..050cf6b0 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -10,5 +10,5 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: actions/setup-python@v3 + - uses: actions/setup-python@v5 - uses: pre-commit/action@v3.0.0 From 9082ab349d65b15b9b260fb5d2c7d6d9c729c0e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:43:52 +0200 Subject: [PATCH 24/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/dep?= =?UTF-8?q?loy-pages=20action=20to=20v4=20(#1108)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/deploy-webapp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index 7dc8b8bc..e86a8c93 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -59,4 +59,4 @@ jobs: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v2 + uses: actions/deploy-pages@v4 From aab8d1bd6d2ffb0caadfd804aee0d3a0408ff9df Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:44:39 +0200 Subject: [PATCH 25/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/con?= =?UTF-8?q?figure-pages=20action=20to=20v5=20(#1107)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/deploy-webapp.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index e86a8c93..aacb861d 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -49,7 +49,7 @@ jobs: shinylive export webapp site - name: Setup Pages - uses: actions/configure-pages@v3 + uses: actions/configure-pages@v5 - name: Upload artifact uses: actions/upload-pages-artifact@v3 From dfac56ca89382c8ec90cb0e9d236296ca4eb86d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:44:52 +0200 Subject: [PATCH 26/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20uvicorn=20t?= =?UTF-8?q?o=20v0.32.1=20(#1103)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 9f1ce3d4..b35744b8 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -67,7 +67,7 @@ typing-extensions==4.9.0 # shinyswatch uc-micro-py==1.0.2 # via linkify-it-py -uvicorn==0.25.0 +uvicorn==0.32.1 # via shiny watchfiles==1.0.0 # via shiny From d5f992a12d0d80f60d90eccd75cc74c312c9d30a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:45:31 +0200 Subject: [PATCH 27/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20typing-exte?= =?UTF-8?q?nsions=20to=20v4.12.2=20(#1102)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index b35744b8..4e06fdcf 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -60,7 +60,7 @@ sniffio==1.3.0 # via anyio starlette==0.40.0 # via shiny -typing-extensions==4.9.0 +typing-extensions==4.12.2 # via # htmltools # shiny From 186da900aaddc11c8224292431684b35e74df2ed Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:45:39 +0200 Subject: [PATCH 28/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20starlette?= =?UTF-8?q?=20to=20v0.41.3=20(#1101)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 4e06fdcf..28773147 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -58,7 +58,7 @@ shinyswatch==0.3.1 # via -r requirements.txt sniffio==1.3.0 # via anyio -starlette==0.40.0 +starlette==0.41.3 # via shiny typing-extensions==4.12.2 # via From 5450e0d3adc2bdad3bf22acef70e76d0b858c267 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:17 +0200 Subject: [PATCH 29/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20shinylive?= =?UTF-8?q?=20to=20v0.7.1=20(#1099)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- webapp/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 28773147..45db72aa 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -52,7 +52,7 @@ shiny==1.2.1 # -r requirements.txt # shinylive # shinyswatch -shinylive==0.1.1 +shinylive==0.7.1 # via -r requirements.txt shinyswatch==0.3.1 # via -r requirements.txt diff --git a/webapp/requirements.txt b/webapp/requirements.txt index 84e45334..518357b1 100644 --- a/webapp/requirements.txt +++ b/webapp/requirements.txt @@ -1,4 +1,4 @@ -shinylive==0.1.1 +shinylive==0.7.1 astral==2.2 shinyswatch==0.3.1 shiny==1.2.1 From 8b5a48f4eef5299ceb7fd9e75f97f5ff324f471a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:26 +0200 Subject: [PATCH 30/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python=20Do?= =?UTF-8?q?cker=20tag=20to=20v3.13=20(#1096)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 5232b4d9..6e871795 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ # Optionally build the image yourself with: # docker build -t basnijholt/adaptive-lighting:latest . -FROM python:3.12-bookworm +FROM python:3.13-bookworm RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt-get install -y \ From 8c5d65f9551fed9b62466e475ae5f4d63900e166 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:38 +0200 Subject: [PATCH 31/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20idna=20to?= =?UTF-8?q?=20v3.10=20(#1094)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 45db72aa..c507652d 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -27,7 +27,7 @@ htmltools==0.5.1 # via # shiny # shinyswatch -idna==3.7 +idna==3.10 # via anyio linkify-it-py==2.0.2 # via shiny From af09a6f3a3093c24f581fac64c4f2399b0e57077 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:46 +0200 Subject: [PATCH 32/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20htmltools?= =?UTF-8?q?=20to=20v0.6.0=20(#1093)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index c507652d..1ad1a3cc 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -23,7 +23,7 @@ click==8.1.7 # uvicorn h11==0.14.0 # via uvicorn -htmltools==0.5.1 +htmltools==0.6.0 # via # shiny # shinyswatch From 0c8feba1cf82c8050dec9e544b238243afdb3500 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:51 +0200 Subject: [PATCH 33/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20asgiref=20t?= =?UTF-8?q?o=20v3.8.1=20(#1092)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 1ad1a3cc..bf1b9a2d 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -12,7 +12,7 @@ appdirs==1.4.4 # via # shiny # shinylive -asgiref==3.7.2 +asgiref==3.8.1 # via shiny astral==2.2 # via -r requirements.txt From ed434e6b489943fe56a5f092f7741c84536767c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:46:57 +0200 Subject: [PATCH 34/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20anyio=20to?= =?UTF-8?q?=20v4.7.0=20(#1091)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index bf1b9a2d..4e17a984 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -4,7 +4,7 @@ # # pip-compile --output-file=requirements-locked.txt requirements.txt # -anyio==4.2.0 +anyio==4.7.0 # via # starlette # watchfiles From d8255b2baddf6e3ab0d4403aa11c62a5b8222681 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:47:44 +0200 Subject: [PATCH 35/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/che?= =?UTF-8?q?ckout=20action=20to=20v3.6.0=20(#1088)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/hassfest.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hassfest.yaml b/.github/workflows/hassfest.yaml index cc16d185..de29b939 100644 --- a/.github/workflows/hassfest.yaml +++ b/.github/workflows/hassfest.yaml @@ -11,5 +11,5 @@ jobs: validate_hassfest: runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v3.0.2" + - uses: "actions/checkout@v3.6.0" - uses: home-assistant/actions/hassfest@master From 56497176df35fe4cc7daa9d84afdc61de3324452 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:06 +0200 Subject: [PATCH 36/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20shinyswatch?= =?UTF-8?q?=20to=20v0.8.0=20(#1100)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- webapp/requirements.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 4e17a984..ea2f299e 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -54,7 +54,7 @@ shiny==1.2.1 # shinyswatch shinylive==0.7.1 # via -r requirements.txt -shinyswatch==0.3.1 +shinyswatch==0.8.0 # via -r requirements.txt sniffio==1.3.0 # via anyio diff --git a/webapp/requirements.txt b/webapp/requirements.txt index 518357b1..413a85d1 100644 --- a/webapp/requirements.txt +++ b/webapp/requirements.txt @@ -1,4 +1,4 @@ shinylive==0.7.1 astral==2.2 -shinyswatch==0.3.1 +shinyswatch==0.8.0 shiny==1.2.1 From c2d699555ef9798fbccb831ee1f128c64bcb8a01 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:13 +0200 Subject: [PATCH 37/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20uc-micro-py?= =?UTF-8?q?=20to=20v1.0.3=20(#1087)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index ea2f299e..8f6fc45b 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -65,7 +65,7 @@ typing-extensions==4.12.2 # htmltools # shiny # shinyswatch -uc-micro-py==1.0.2 +uc-micro-py==1.0.3 # via linkify-it-py uvicorn==0.32.1 # via shiny From cee0ae56c45161703d82ee6d0b017f35b818ac27 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:19 +0200 Subject: [PATCH 38/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20sniffio=20t?= =?UTF-8?q?o=20v1.3.1=20(#1086)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 8f6fc45b..16f72e2a 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -56,7 +56,7 @@ shinylive==0.7.1 # via -r requirements.txt shinyswatch==0.8.0 # via -r requirements.txt -sniffio==1.3.0 +sniffio==1.3.1 # via anyio starlette==0.41.3 # via shiny From 32e3bbdeba2996c321fefdda7b3e3739a79484db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:26 +0200 Subject: [PATCH 39/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python-mult?= =?UTF-8?q?ipart=20to=20v0.0.19=20(#1085)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 16f72e2a..169e590a 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -43,7 +43,7 @@ packaging==24.2 # via # htmltools # shinyswatch -python-multipart==0.0.18 +python-multipart==0.0.19 # via shiny pytz==2024.2 # via astral From 0ba1fa554bd2f391c988381f2508b5b338b913c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:40 +0200 Subject: [PATCH 40/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20pre-commit/?= =?UTF-8?q?action=20action=20to=20v3.0.1=20(#1084)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/pre-commit.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 050cf6b0..b5dd0c0e 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -11,4 +11,4 @@ jobs: steps: - uses: actions/checkout@v3 - uses: actions/setup-python@v5 - - uses: pre-commit/action@v3.0.0 + - uses: pre-commit/action@v3.0.1 From 5bd1adf3d2423e6cce04093bd986fcc76fb01c59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:45 +0200 Subject: [PATCH 41/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20mdit-py-plu?= =?UTF-8?q?gins=20to=20v0.4.2=20(#1083)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 169e590a..6e32b2fa 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -35,7 +35,7 @@ markdown-it-py==3.0.0 # via # mdit-py-plugins # shiny -mdit-py-plugins==0.4.0 +mdit-py-plugins==0.4.2 # via shiny mdurl==0.1.2 # via markdown-it-py From 6b567565ab616acb9fdd101d1c9e7d328cc57ffa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:48:51 +0200 Subject: [PATCH 42/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20linkify-it-?= =?UTF-8?q?py=20to=20v2.0.3=20(#1082)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- webapp/requirements-locked.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt index 6e32b2fa..e788711f 100644 --- a/webapp/requirements-locked.txt +++ b/webapp/requirements-locked.txt @@ -29,7 +29,7 @@ htmltools==0.6.0 # shinyswatch idna==3.10 # via anyio -linkify-it-py==2.0.2 +linkify-it-py==2.0.3 # via shiny markdown-it-py==3.0.0 # via From 4739863fb242fa781c98b8bea48165244cf15091 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Dec 2024 21:49:56 +0200 Subject: [PATCH 43/44] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/che?= =?UTF-8?q?ckout=20action=20to=20v4=20(#1106)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/deploy-webapp.yml | 2 +- .github/workflows/hassfest.yaml | 2 +- .github/workflows/install_dependencies/action.yml | 4 ++-- .github/workflows/main-to-master-sync.yml | 2 +- .github/workflows/pre-commit.yaml | 2 +- .github/workflows/pytest.yaml | 2 +- .github/workflows/update-readme.yml | 2 +- .github/workflows/validate.yml | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index aacb861d..44d3d0df 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -30,7 +30,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Set Up Python uses: actions/setup-python@v5 diff --git a/.github/workflows/hassfest.yaml b/.github/workflows/hassfest.yaml index de29b939..4d141e56 100644 --- a/.github/workflows/hassfest.yaml +++ b/.github/workflows/hassfest.yaml @@ -11,5 +11,5 @@ jobs: validate_hassfest: runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v3.6.0" + - uses: "actions/checkout@v4.2.2" - uses: home-assistant/actions/hassfest@master diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml index 37379c41..c1f2ddd8 100644 --- a/.github/workflows/install_dependencies/action.yml +++ b/.github/workflows/install_dependencies/action.yml @@ -14,14 +14,14 @@ runs: using: "composite" steps: - name: Check out code from GitHub - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ github.repository }} ref: ${{ github.ref }} persist-credentials: false fetch-depth: 0 - name: Check out code from GitHub - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: home-assistant/core path: core diff --git a/.github/workflows/main-to-master-sync.yml b/.github/workflows/main-to-master-sync.yml index 99cd85b3..d5c915c8 100644 --- a/.github/workflows/main-to-master-sync.yml +++ b/.github/workflows/main-to-master-sync.yml @@ -11,7 +11,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: ref: main fetch-depth: 0 diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index b5dd0c0e..7f579afa 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -9,6 +9,6 @@ jobs: pre-commit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v5 - uses: pre-commit/action@v3.0.1 diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml index 6c4c176a..4d7472de 100644 --- a/.github/workflows/pytest.yaml +++ b/.github/workflows/pytest.yaml @@ -62,7 +62,7 @@ jobs: core-version: "dev" steps: - name: Check out code from GitHub - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Home Assistant uses: ./.github/workflows/install_dependencies diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml index bf85fce3..456e6626 100644 --- a/.github/workflows/update-readme.yml +++ b/.github/workflows/update-readme.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out code from GitHub - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install Home Assistant uses: ./.github/workflows/install_dependencies diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 2bb88b96..79c7fe00 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -11,7 +11,7 @@ jobs: validate_hacs: runs-on: "ubuntu-latest" steps: - - uses: "actions/checkout@v2" + - uses: "actions/checkout@v4" - name: HACS validation uses: "hacs/action@main" with: From 8fb9493a40a33155ceac7aea96200ee68a8831c1 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Thu, 5 Dec 2024 14:35:19 -0800 Subject: [PATCH 44/44] Fix Shiny WebApp (#1127) * Use requirements.txt.in * Include webapp/color_and_brightness.py * Fix Shiny WebApp * Install shinylive in CI --- .github/workflows/deploy-webapp.yml | 3 +- webapp/app.py | 14 +- webapp/color_and_brightness.py | 521 ++++++++++++++++++++++++++++ webapp/requirements-locked.txt | 77 ---- webapp/requirements.txt | 8 +- webapp/requirements.txt.in | 1 + 6 files changed, 535 insertions(+), 89 deletions(-) create mode 100644 webapp/color_and_brightness.py delete mode 100644 webapp/requirements-locked.txt create mode 100644 webapp/requirements.txt.in diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml index 44d3d0df..f0dedea3 100644 --- a/.github/workflows/deploy-webapp.yml +++ b/.github/workflows/deploy-webapp.yml @@ -39,7 +39,8 @@ jobs: - name: Install Dependencies run: | - pip install -r webapp/requirements-locked.txt + pip install -r webapp/requirements.txt + pip install shinylive - name: Build the WebAssembly app run: | diff --git a/webapp/app.py b/webapp/app.py index ab896687..68dbb2f9 100644 --- a/webapp/app.py +++ b/webapp/app.py @@ -217,10 +217,9 @@ def plot_color_temp(inputs: dict[str, Any], sleep_mode: bool) -> plt.Figure: # Shiny UI app_ui = ui.page_fluid( - shinyswatch.theme.sandstone(), ui.panel_title("🌞 Adaptive Lighting Simulator WebApp 🌛"), ui.layout_sidebar( - ui.panel_sidebar( + ui.sidebar( ui.input_switch("adapt_until_sleep", "adapt_until_sleep", value=False), ui.input_switch("sleep_mode", "sleep_mode", value=False), ui.input_slider("min_brightness", "min_brightness", 1, 100, 30, post="%"), @@ -277,13 +276,12 @@ def plot_color_temp(inputs: dict[str, Any], sleep_mode: bool) -> plt.Figure: post=" hr", ), ), - ui.panel_main( - ui.markdown(desc_top), - ui.output_plot(id="brightness_plot"), - ui.output_plot(id="color_temp_plot"), - ui.markdown(desc_bottom), - ), + ui.markdown(desc_top), + ui.output_plot(id="brightness_plot"), + ui.output_plot(id="color_temp_plot"), + ui.markdown(desc_bottom), ), + theme=shinyswatch.theme.sandstone, ) diff --git a/webapp/color_and_brightness.py b/webapp/color_and_brightness.py new file mode 100644 index 00000000..ba804df3 --- /dev/null +++ b/webapp/color_and_brightness.py @@ -0,0 +1,521 @@ +"""Switch for the Adaptive Lighting integration.""" + +from __future__ import annotations + +import bisect +import colorsys +import datetime +import logging +import math +from dataclasses import dataclass +from datetime import timedelta +from functools import cached_property, partial +from typing import TYPE_CHECKING, Any, Literal, cast + +from homeassistant_util_color import ( + color_RGB_to_xy, + color_temperature_to_rgb, + color_xy_to_hs, +) + +if TYPE_CHECKING: + import astral + +# Same as homeassistant.const.SUN_EVENT_SUNRISE and homeassistant.const.SUN_EVENT_SUNSET +# We re-define them here to not depend on homeassistant in this file. +SUN_EVENT_SUNRISE = "sunrise" +SUN_EVENT_SUNSET = "sunset" + +SUN_EVENT_NOON = "solar_noon" +SUN_EVENT_MIDNIGHT = "solar_midnight" + +_ORDER = (SUN_EVENT_SUNRISE, SUN_EVENT_NOON, SUN_EVENT_SUNSET, SUN_EVENT_MIDNIGHT) +_ALLOWED_ORDERS = {_ORDER[i:] + _ORDER[:i] for i in range(len(_ORDER))} + +UTC = datetime.timezone.utc +utcnow: partial[datetime.datetime] = partial(datetime.datetime.now, UTC) +utcnow.__doc__ = "Get now in UTC time." + +_LOGGER = logging.getLogger(__name__) + + +@dataclass(frozen=True) +class SunEvents: + """Track the state of the sun and associated light settings.""" + + name: str + astral_location: astral.Location + sunrise_time: datetime.time | None + min_sunrise_time: datetime.time | None + max_sunrise_time: datetime.time | None + sunset_time: datetime.time | None + min_sunset_time: datetime.time | None + max_sunset_time: datetime.time | None + sunrise_offset: datetime.timedelta = datetime.timedelta() + sunset_offset: datetime.timedelta = datetime.timedelta() + timezone: datetime.tzinfo = UTC + + def sunrise(self, dt: datetime.date) -> datetime.datetime: + """Return the (adjusted) sunrise time for the given datetime.""" + sunrise = ( + self.astral_location.sunrise(dt, local=False) + if self.sunrise_time is None + else self._replace_time(dt, self.sunrise_time) + ) + self.sunrise_offset + if self.min_sunrise_time is not None: + min_sunrise = self._replace_time(dt, self.min_sunrise_time) + if min_sunrise > sunrise: + sunrise = min_sunrise + if self.max_sunrise_time is not None: + max_sunrise = self._replace_time(dt, self.max_sunrise_time) + if max_sunrise < sunrise: + sunrise = max_sunrise + return sunrise + + def sunset(self, dt: datetime.date) -> datetime.datetime: + """Return the (adjusted) sunset time for the given datetime.""" + sunset = ( + self.astral_location.sunset(dt, local=False) + if self.sunset_time is None + else self._replace_time(dt, self.sunset_time) + ) + self.sunset_offset + if self.min_sunset_time is not None: + min_sunset = self._replace_time(dt, self.min_sunset_time) + if min_sunset > sunset: + sunset = min_sunset + if self.max_sunset_time is not None: + max_sunset = self._replace_time(dt, self.max_sunset_time) + if max_sunset < sunset: + sunset = max_sunset + return sunset + + def _replace_time( + self, + dt: datetime.date, + time: datetime.time, + ) -> datetime.datetime: + date_time = datetime.datetime.combine(dt, time) + dt_with_tz = date_time.replace(tzinfo=self.timezone) + return dt_with_tz.astimezone(UTC) + + def noon_and_midnight( + self, + dt: datetime.datetime, + sunset: datetime.datetime | None = None, + sunrise: datetime.datetime | None = None, + ) -> tuple[datetime.datetime, datetime.datetime]: + """Return the (adjusted) noon and midnight times for the given datetime.""" + if ( + self.sunrise_time is None + and self.sunset_time is None + and self.min_sunrise_time is None + and self.max_sunrise_time is None + and self.min_sunset_time is None + and self.max_sunset_time is None + ): + solar_noon = self.astral_location.noon(dt, local=False) + solar_midnight = self.astral_location.midnight(dt, local=False) + return solar_noon, solar_midnight + + if sunset is None: + sunset = self.sunset(dt) + if sunrise is None: + sunrise = self.sunrise(dt) + + middle = abs(sunset - sunrise) / 2 + if sunset > sunrise: + noon = sunrise + middle + midnight = noon + timedelta(hours=12) * (1 if noon.hour < 12 else -1) + else: + midnight = sunset + middle + noon = midnight + timedelta(hours=12) * (1 if midnight.hour < 12 else -1) + return noon, midnight + + def sun_events(self, dt: datetime.datetime) -> list[tuple[str, float]]: + """Get the four sun event's timestamps at 'dt'.""" + sunrise = self.sunrise(dt) + sunset = self.sunset(dt) + solar_noon, solar_midnight = self.noon_and_midnight(dt, sunset, sunrise) + events = [ + (SUN_EVENT_SUNRISE, sunrise.timestamp()), + (SUN_EVENT_SUNSET, sunset.timestamp()), + (SUN_EVENT_NOON, solar_noon.timestamp()), + (SUN_EVENT_MIDNIGHT, solar_midnight.timestamp()), + ] + self._validate_sun_event_order(events) + return events + + def _validate_sun_event_order(self, events: list[tuple[str, float]]) -> None: + """Check if the sun events are in the expected order.""" + events = sorted(events, key=lambda x: x[1]) + events_names, _ = zip(*events, strict=True) + if events_names not in _ALLOWED_ORDERS: + msg = ( + f"{self.name}: The sun events {events_names} are not in the expected" + " order. The Adaptive Lighting integration will not work!" + " This might happen if your sunrise/sunset offset is too large or" + " your manually set sunrise/sunset time is past/before noon/midnight." + ) + _LOGGER.error(msg) + raise ValueError(msg) + + def prev_and_next_events(self, dt: datetime.datetime) -> list[tuple[str, float]]: + """Get the previous and next sun event.""" + events = [ + event + for days in [-1, 0, 1] + for event in self.sun_events(dt + timedelta(days=days)) + ] + events = sorted(events, key=lambda x: x[1]) + i_now = bisect.bisect([ts for _, ts in events], dt.timestamp()) + return events[i_now - 1 : i_now + 1] + + def sun_position(self, dt: datetime.datetime) -> float: + """Calculate the position of the sun, between [-1, 1].""" + target_ts = dt.timestamp() + (_, prev_ts), (next_event, next_ts) = self.prev_and_next_events(dt) + h, x = ( + (prev_ts, next_ts) + if next_event in (SUN_EVENT_SUNSET, SUN_EVENT_SUNRISE) + else (next_ts, prev_ts) + ) + # k = -1 between sunset and sunrise (sun below horizon) + # k = 1 between sunrise and sunset (sun above horizon) + k = 1 if next_event in (SUN_EVENT_SUNSET, SUN_EVENT_NOON) else -1 + return k * (1 - ((target_ts - h) / (h - x)) ** 2) + + def closest_event(self, dt: datetime.datetime) -> tuple[str, float]: + """Get the closest sunset or sunrise event.""" + (prev_event, prev_ts), (next_event, next_ts) = self.prev_and_next_events(dt) + if SUN_EVENT_SUNRISE in (prev_event, next_event): + ts_event = prev_ts if prev_event == SUN_EVENT_SUNRISE else next_ts + return SUN_EVENT_SUNRISE, ts_event + if SUN_EVENT_SUNSET in (prev_event, next_event): + ts_event = prev_ts if prev_event == SUN_EVENT_SUNSET else next_ts + return SUN_EVENT_SUNSET, ts_event + msg = "No sunrise or sunset event found." + raise ValueError(msg) + + +@dataclass(frozen=True) +class SunLightSettings: + """Track the state of the sun and associated light settings.""" + + name: str + astral_location: astral.Location + adapt_until_sleep: bool + max_brightness: int + max_color_temp: int + min_brightness: int + min_color_temp: int + sleep_brightness: int + sleep_rgb_or_color_temp: Literal["color_temp", "rgb_color"] + sleep_color_temp: int + sleep_rgb_color: tuple[int, int, int] + sunrise_time: datetime.time | None + min_sunrise_time: datetime.time | None + max_sunrise_time: datetime.time | None + sunset_time: datetime.time | None + min_sunset_time: datetime.time | None + max_sunset_time: datetime.time | None + brightness_mode_time_dark: datetime.timedelta + brightness_mode_time_light: datetime.timedelta + brightness_mode: Literal["default", "linear", "tanh"] = "default" + sunrise_offset: datetime.timedelta = datetime.timedelta() + sunset_offset: datetime.timedelta = datetime.timedelta() + timezone: datetime.tzinfo = UTC + + @cached_property + def sun(self) -> SunEvents: + """Return the SunEvents object.""" + return SunEvents( + name=self.name, + astral_location=self.astral_location, + sunrise_time=self.sunrise_time, + sunrise_offset=self.sunrise_offset, + min_sunrise_time=self.min_sunrise_time, + max_sunrise_time=self.max_sunrise_time, + sunset_time=self.sunset_time, + sunset_offset=self.sunset_offset, + min_sunset_time=self.min_sunset_time, + max_sunset_time=self.max_sunset_time, + timezone=self.timezone, + ) + + def _brightness_pct_default(self, dt: datetime.datetime) -> float: + """Calculate the brightness percentage using the default method.""" + sun_position = self.sun.sun_position(dt) + if sun_position > 0: + return self.max_brightness + delta_brightness = self.max_brightness - self.min_brightness + return (delta_brightness * (1 + sun_position)) + self.min_brightness + + def _brightness_pct_tanh(self, dt: datetime.datetime) -> float: + event, ts_event = self.sun.closest_event(dt) + dark = self.brightness_mode_time_dark.total_seconds() + light = self.brightness_mode_time_light.total_seconds() + if event == SUN_EVENT_SUNRISE: + brightness = scaled_tanh( + dt.timestamp() - ts_event, + x1=-dark, + x2=+light, + y1=0.05, # be at 5% of range at x1 + y2=0.95, # be at 95% of range at x2 + y_min=self.min_brightness, + y_max=self.max_brightness, + ) + elif event == SUN_EVENT_SUNSET: + brightness = scaled_tanh( + dt.timestamp() - ts_event, + x1=-light, # shifted timestamp for the start of sunset + x2=+dark, # shifted timestamp for the end of sunset + y1=0.95, # be at 95% of range at the start of sunset + y2=0.05, # be at 5% of range at the end of sunset + y_min=self.min_brightness, + y_max=self.max_brightness, + ) + return clamp(brightness, self.min_brightness, self.max_brightness) + + def _brightness_pct_linear(self, dt: datetime.datetime) -> float: + event, ts_event = self.sun.closest_event(dt) + # at ts_event - dt_start, brightness == start_brightness + # at ts_event + dt_end, brightness == end_brightness + dark = self.brightness_mode_time_dark.total_seconds() + light = self.brightness_mode_time_light.total_seconds() + if event == SUN_EVENT_SUNRISE: + brightness = lerp( + dt.timestamp() - ts_event, + x1=-dark, + x2=+light, + y1=self.min_brightness, + y2=self.max_brightness, + ) + elif event == SUN_EVENT_SUNSET: + brightness = lerp( + dt.timestamp() - ts_event, + x1=-light, + x2=+dark, + y1=self.max_brightness, + y2=self.min_brightness, + ) + return clamp(brightness, self.min_brightness, self.max_brightness) + + def brightness_pct(self, dt: datetime.datetime, is_sleep: bool) -> float: + """Calculate the brightness in %.""" + if is_sleep: + return self.sleep_brightness + assert self.brightness_mode in ("default", "linear", "tanh") + if self.brightness_mode == "default": + return self._brightness_pct_default(dt) + if self.brightness_mode == "linear": + return self._brightness_pct_linear(dt) + if self.brightness_mode == "tanh": + return self._brightness_pct_tanh(dt) + return None + + def color_temp_kelvin(self, sun_position: float) -> int: + """Calculate the color temperature in Kelvin.""" + if sun_position > 0: + delta = self.max_color_temp - self.min_color_temp + ct = (delta * sun_position) + self.min_color_temp + return 5 * round(ct / 5) # round to nearest 5 + if sun_position == 0 or not self.adapt_until_sleep: + return self.min_color_temp + if self.adapt_until_sleep and sun_position < 0: + delta = abs(self.min_color_temp - self.sleep_color_temp) + ct = (delta * abs(1 + sun_position)) + self.sleep_color_temp + return 5 * round(ct / 5) # round to nearest 5 + msg = "Should not happen" + raise ValueError(msg) + + def brightness_and_color( + self, + dt: datetime.datetime, + is_sleep: bool, + ) -> dict[str, Any]: + """Calculate the brightness and color.""" + sun_position = self.sun.sun_position(dt) + rgb_color: tuple[float, float, float] + # Variable `force_rgb_color` is needed for RGB color after sunset (if enabled) + force_rgb_color = False + brightness_pct = self.brightness_pct(dt, is_sleep) + if is_sleep: + color_temp_kelvin = self.sleep_color_temp + rgb_color = self.sleep_rgb_color + elif ( + self.sleep_rgb_or_color_temp == "rgb_color" + and self.adapt_until_sleep + and sun_position < 0 + ): + # Feature requested in + # https://github.com/basnijholt/adaptive-lighting/issues/624 + # This will result in a perceptible jump in color at sunset and sunrise + # because the `color_temperature_to_rgb` function is not 100% accurate. + min_color_rgb = color_temperature_to_rgb(self.min_color_temp) + rgb_color = lerp_color_hsv( + min_color_rgb, + self.sleep_rgb_color, + sun_position, + ) + color_temp_kelvin = self.color_temp_kelvin(sun_position) + force_rgb_color = True + else: + color_temp_kelvin = self.color_temp_kelvin(sun_position) + rgb_color = color_temperature_to_rgb(color_temp_kelvin) + # backwards compatibility for versions < 1.3.1 - see #403 + color_temp_mired: float = math.floor(1000000 / color_temp_kelvin) + xy_color: tuple[float, float] = color_RGB_to_xy(*rgb_color) + hs_color: tuple[float, float] = color_xy_to_hs(*xy_color) + return { + "brightness_pct": brightness_pct, + "color_temp_kelvin": color_temp_kelvin, + "color_temp_mired": color_temp_mired, + "rgb_color": rgb_color, + "xy_color": xy_color, + "hs_color": hs_color, + "sun_position": sun_position, + "force_rgb_color": force_rgb_color, + } + + def get_settings( + self, + is_sleep, + transition, + ) -> dict[str, float | int | tuple[float, float] | tuple[float, float, float]]: + """Get all light settings. + + Calculating all values takes <0.5ms. + """ + dt = utcnow() + timedelta(seconds=transition or 0) + return self.brightness_and_color(dt, is_sleep) + + +def find_a_b(x1: float, x2: float, y1: float, y2: float) -> tuple[float, float]: + """Compute the values of 'a' and 'b' for a scaled and shifted tanh function. + + Given two points (x1, y1) and (x2, y2), this function calculates the coefficients 'a' and 'b' + for a tanh function of the form y = 0.5 * (tanh(a * (x - b)) + 1) that passes through these points. + + The derivation is as follows: + + 1. Start with the equation of the tanh function: + y = 0.5 * (tanh(a * (x - b)) + 1) + + 2. Rearrange the equation to isolate tanh: + tanh(a * (x - b)) = 2*y - 1 + + 3. Take the inverse tanh (or artanh) on both sides to solve for 'a' and 'b': + a * (x - b) = artanh(2*y - 1) + + 4. Plug in the points (x1, y1) and (x2, y2) to get two equations. + Using these, we can solve for 'a' and 'b' as: + a = (artanh(2*y2 - 1) - artanh(2*y1 - 1)) / (x2 - x1) + b = x1 - (artanh(2*y1 - 1) / a) + + Parameters + ---------- + x1 + x-coordinate of the first point. + x2 + x-coordinate of the second point. + y1 + y-coordinate of the first point (should be between 0 and 1). + y2 + y-coordinate of the second point (should be between 0 and 1). + + Returns + ------- + a + Coefficient 'a' for the tanh function. + b + Coefficient 'b' for the tanh function. + + Notes + ----- + The values of y1 and y2 should lie between 0 and 1, inclusive. + + """ + a = (math.atanh(2 * y2 - 1) - math.atanh(2 * y1 - 1)) / (x2 - x1) + b = x1 - (math.atanh(2 * y1 - 1) / a) + return a, b + + +def scaled_tanh( + x: float, + x1: float, + x2: float, + y1: float = 0.05, + y2: float = 0.95, + y_min: float = 0.0, + y_max: float = 100.0, +) -> float: + """Apply a scaled and shifted tanh function to a given input. + + This function represents a transformation of the tanh function that scales and shifts + the output to lie between y_min and y_max. For values of 'x' close to 'x1' and 'x2' + (used to calculate 'a' and 'b'), the output of this function will be close to 'y_min' + and 'y_max', respectively. + + The equation of the function is as follows: + y = y_min + (y_max - y_min) * 0.5 * (tanh(a * (x - b)) + 1) + + Parameters + ---------- + x + The input to the function. + x1 + x-coordinate of the first point. + x2 + x-coordinate of the second point. + y1 + y-coordinate of the first point (should be between 0 and 1). Defaults to 0.05. + y2 + y-coordinate of the second point (should be between 0 and 1). Defaults to 0.95. + y_min + The minimum value of the output range. Defaults to 0. + y_max + The maximum value of the output range. Defaults to 100. + + Returns + ------- + float: The output of the function, which lies in the range [y_min, y_max]. + + """ + a, b = find_a_b(x1, x2, y1, y2) + return y_min + (y_max - y_min) * 0.5 * (math.tanh(a * (x - b)) + 1) + + +def lerp_color_hsv( + rgb1: tuple[float, float, float], + rgb2: tuple[float, float, float], + t: float, +) -> tuple[int, int, int]: + """Linearly interpolate between two RGB colors in HSV color space.""" + t = abs(t) + assert 0 <= t <= 1 + + # Convert RGB to HSV + hsv1 = colorsys.rgb_to_hsv(*[x / 255.0 for x in rgb1]) + hsv2 = colorsys.rgb_to_hsv(*[x / 255.0 for x in rgb2]) + + # Linear interpolation in HSV space + hsv = ( + hsv1[0] + t * (hsv2[0] - hsv1[0]), + hsv1[1] + t * (hsv2[1] - hsv1[1]), + hsv1[2] + t * (hsv2[2] - hsv1[2]), + ) + + # Convert back to RGB + rgb = tuple(int(round(x * 255)) for x in colorsys.hsv_to_rgb(*hsv)) + assert all(0 <= x <= 255 for x in rgb), f"Invalid RGB color: {rgb}" + return cast(tuple[int, int, int], rgb) + + +def lerp(x, x1, x2, y1, y2): + """Linearly interpolate between two values.""" + return y1 + (x - x1) * (y2 - y1) / (x2 - x1) + + +def clamp(value: float, minimum: float, maximum: float) -> float: + """Clamp value between minimum and maximum.""" + return max(minimum, min(value, maximum)) diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt deleted file mode 100644 index e788711f..00000000 --- a/webapp/requirements-locked.txt +++ /dev/null @@ -1,77 +0,0 @@ -# -# This file is autogenerated by pip-compile with Python 3.11 -# by the following command: -# -# pip-compile --output-file=requirements-locked.txt requirements.txt -# -anyio==4.7.0 - # via - # starlette - # watchfiles -appdirs==1.4.4 - # via - # shiny - # shinylive -asgiref==3.8.1 - # via shiny -astral==2.2 - # via -r requirements.txt -click==8.1.7 - # via - # shiny - # shinylive - # uvicorn -h11==0.14.0 - # via uvicorn -htmltools==0.6.0 - # via - # shiny - # shinyswatch -idna==3.10 - # via anyio -linkify-it-py==2.0.3 - # via shiny -markdown-it-py==3.0.0 - # via - # mdit-py-plugins - # shiny -mdit-py-plugins==0.4.2 - # via shiny -mdurl==0.1.2 - # via markdown-it-py -packaging==24.2 - # via - # htmltools - # shinyswatch -python-multipart==0.0.19 - # via shiny -pytz==2024.2 - # via astral -shiny==1.2.1 - # via - # -r requirements.txt - # shinylive - # shinyswatch -shinylive==0.7.1 - # via -r requirements.txt -shinyswatch==0.8.0 - # via -r requirements.txt -sniffio==1.3.1 - # via anyio -starlette==0.41.3 - # via shiny -typing-extensions==4.12.2 - # via - # htmltools - # shiny - # shinyswatch -uc-micro-py==1.0.3 - # via linkify-it-py -uvicorn==0.32.1 - # via shiny -watchfiles==1.0.0 - # via shiny -websockets==14.1 - # via shiny -xstatic-bootswatch==3.3.7.0 - # via shinyswatch diff --git a/webapp/requirements.txt b/webapp/requirements.txt index 413a85d1..cbcadafc 100644 --- a/webapp/requirements.txt +++ b/webapp/requirements.txt @@ -1,4 +1,6 @@ -shinylive==0.7.1 +# This file was autogenerated by uv via the following command: +# uv pip compile --output-file=requirements.txt requirements.txt.in astral==2.2 -shinyswatch==0.8.0 -shiny==1.2.1 + # via -r requirements.txt.in +pytz==2023.3.post1 + # via astral diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in new file mode 100644 index 00000000..39c93a83 --- /dev/null +++ b/webapp/requirements.txt.in @@ -0,0 +1 @@ +astral==2.2