From a247a02b3745ceb742f92b597eb7dffa1766e1f2 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Dec 2023 23:58:14 -0800
Subject: [PATCH 001/361] docs: add kylebjordahl as a contributor for bug, and
code (#866)
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
---
.all-contributorsrc | 3 ++-
README.md | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 9d410308..b38dac23 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -600,7 +600,8 @@
"avatar_url": "https://avatars.githubusercontent.com/u/3489222?v=4",
"profile": "https://github.com/kylebjordahl",
"contributions": [
- "code"
+ "code",
+ "bug"
]
},
{
diff --git a/README.md b/README.md
index 54adc03e..544b03b5 100644
--- a/README.md
+++ b/README.md
@@ -547,7 +547,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Z-weapon 🌍 |
-  Kyle Bjordahl 💻 |
+  Kyle Bjordahl 💻 🐛 |
 Olek Bruks 🌍 |
 Gabriele Baldassarre 🌍 |
 Pepijn Baart 🌍 |
From c3e4b77c7f11ff18ecff9db75fa968df3f8d7582 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 9 Dec 2023 07:46:12 +0100
Subject: [PATCH 002/361] Translations update from Hosted Weblate (#867)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Translated using Weblate (Russian)
Currently translated at 80.3% (123 of 153 strings)
Co-authored-by: Artem Pastukhov
Co-authored-by: Hosted Weblate
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ru/
Translation: Adaptive Lighting/Adaptive Lighting
* Added translation using Weblate (Japanese)
Co-authored-by: Hosted Weblate
Co-authored-by: pantan-cymk
* Translated using Weblate (Hungarian)
Currently translated at 48.3% (74 of 153 strings)
Added translation using Weblate (Hungarian)
Co-authored-by: Hosted Weblate
Co-authored-by: LUKÁCS Miklós
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/hu/
Translation: Adaptive Lighting/Adaptive Lighting
* Added translation using Weblate (Finnish)
Co-authored-by: Eero Konttaniemi
Co-authored-by: Hosted Weblate
* Translated using Weblate (Slovak)
Currently translated at 56.8% (87 of 153 strings)
Added translation using Weblate (Slovak)
Co-authored-by: Hosted Weblate
Co-authored-by: Martin Štefany
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/sk/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Urdu)
Currently translated at 100.0% (153 of 153 strings)
Added translation using Weblate (Urdu)
Co-authored-by: Hosted Weblate
Co-authored-by: yousaf465
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ur/
Translation: Adaptive Lighting/Adaptive Lighting
---------
Co-authored-by: Artem Pastukhov
Co-authored-by: pantan-cymk
Co-authored-by: LUKÁCS Miklós
Co-authored-by: Eero Konttaniemi
Co-authored-by: Martin Štefany
Co-authored-by: yousaf465
---
.../adaptive_lighting/translations/fi.json | 1 +
.../adaptive_lighting/translations/hu.json | 41 ++++
.../adaptive_lighting/translations/ja.json | 1 +
.../adaptive_lighting/translations/ru.json | 80 ++++++-
.../adaptive_lighting/translations/sk.json | 52 +++++
.../adaptive_lighting/translations/ur.json | 202 ++++++++++++++++++
6 files changed, 375 insertions(+), 2 deletions(-)
create mode 100644 custom_components/adaptive_lighting/translations/fi.json
create mode 100644 custom_components/adaptive_lighting/translations/hu.json
create mode 100644 custom_components/adaptive_lighting/translations/ja.json
create mode 100644 custom_components/adaptive_lighting/translations/sk.json
create mode 100644 custom_components/adaptive_lighting/translations/ur.json
diff --git a/custom_components/adaptive_lighting/translations/fi.json b/custom_components/adaptive_lighting/translations/fi.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/fi.json
@@ -0,0 +1 @@
+{}
diff --git a/custom_components/adaptive_lighting/translations/hu.json b/custom_components/adaptive_lighting/translations/hu.json
new file mode 100644
index 00000000..1844163d
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/hu.json
@@ -0,0 +1,41 @@
+{
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "sleep_color_temp": "Színhőmérséklet alvó üzemmódban (amikor a `sleep_rgb_or_color_temp` értéke `color_temp`) Kelvinben megadva. 😴"
+ },
+ "data": {
+ "max_brightness": "max_brightness: Maximális fényerő százalékban megadva. 💡"
+ },
+ "title": "Adaptív világítás beállításai"
+ }
+ }
+ },
+ "title": "Adaptív világítás",
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "entity_id": {
+ "description": "A kapcsoló entitásazonosítója. 📝"
+ },
+ "max_brightness": {
+ "description": "Maximális fényerő százalékban megadva. 💡"
+ },
+ "max_color_temp": {
+ "description": "Leghidegebb színhőmérséklet Kelvinben megadva. ❄️"
+ }
+ }
+ },
+ "set_manual_control": {
+ "description": "Jelölje meg, hogy egy lámpa „kézi vezérlésű”-e."
+ }
+ },
+ "config": {
+ "step": {
+ "user": {
+ "title": "Válasszon nevet az Adaptív világítás példánynak"
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/ja.json b/custom_components/adaptive_lighting/translations/ja.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/ja.json
@@ -0,0 +1 @@
+{}
diff --git a/custom_components/adaptive_lighting/translations/ru.json b/custom_components/adaptive_lighting/translations/ru.json
index 2e160f9e..57a554e1 100644
--- a/custom_components/adaptive_lighting/translations/ru.json
+++ b/custom_components/adaptive_lighting/translations/ru.json
@@ -20,7 +20,7 @@
"title": "Настройки Adaptive Lighting",
"description": "Все настройки компонента Adaptive Lighting. Названия опций соответствуют настройкам в YAML. Параметры не отображаются, если в конфигурации YAML определена запись adaptive_lighting.",
"data": {
- "lights": "Осветительные приборы",
+ "lights": "Осветительные приборы: список источников света, которыми нужно управлять (может быть пустым). 🌟",
"initial_transition": "initial_transition: Начальный переход, когда свет переключается с 'off' на 'on'. (секунды)",
"sleep_transition": "sleep_transition: Когда прибор переходит в Режима Сна (Sleep Mode) и 'sleep_state' изменяется. (секунды)",
"interval": "interval: Интервал между обновлениями переключателя. (секунды)",
@@ -40,7 +40,36 @@
"take_over_control": "take_over_control: Если что-либо, кроме Adaptive Lighting, вызывает службу 'light.turn_on', когда свет уже включен, прекратить адаптацию этого осветительного прибора, пока он (или переключатель) не переключится off -> on.",
"detect_non_ha_changes": "detect_non_ha_changes: Обнаруживает все изменения на >10% примененные к освещению (также и из-за пределов Home Assistant), требует включения 'take_over_control' (вызывает 'homeassistant.update_entity' каждый 'interval'!)",
"transition": "Время перехода при применении изменения к источникам света. (секунды)",
- "adapt_delay": "Время ожидания между включением света и применением адаптации. Может помочь избежать мерцания. (секунды)"
+ "adapt_delay": "Время ожидания между включением света и применением адаптации. Может помочь избежать мерцания. (секунды)",
+ "multi_light_intercept": "multi_light_intercept: перехватывает и адаптирует вызовы `light.turn_on`, нацеленные на несколько источников света. ➗⚠️ Это может привести к разделению одного вызова `light.turn_on` на несколько вызовов, например, когда освещение включено в разные выключатели. Требуется, чтобы `перехват` был включен.",
+ "adapt_only_on_bare_turn_on": "Adapt_only_on_bare_turn_on: При первоначальном включении света. Если установлено значение «true», AL адаптируется только в том случае, если «light.turn_on» вызывается без указания цвета или яркости. ❌🌈 Это, например, предотвращает адаптацию при активации сцены. Если false, AL адаптируется независимо от наличия цвета или яркости в исходных service_data. Требуется включить take_over_control. 🕵️ ",
+ "skip_redundant_commands": "Skip_redundant_commands: Пропустить отправку команд адаптации, целевое состояние которых уже равно известному состоянию источника света. Минимизирует сетевой трафик и улучшает скорость адаптации в некоторых ситуациях. 📉Отключите, если физические состояния освещения не синхронизируются с записанным состоянием HA.",
+ "intercept": "intercept: перехватывать и адаптировать вызовы `light.turn_on` для обеспечения мгновенной адаптации цвета и яркости. 🏎️ Отключите источники света, которые не поддерживают `light.turn_on` с цветом и яркостью.",
+ "include_config_in_attributes": "include_config_in_attributes: отображать все параметры в качестве атрибутов на переключателе в Home Assistant, если установлено значение `true`. 📝"
+ },
+ "data_description": {
+ "sleep_rgb_or_color_temp": "Используйте либо `\"rgb_color\"`, либо `\"color_temp\"` в спящем режиме. 🌙",
+ "sleep_color_temp": "Цветовая температура в спящем режиме (используется, когда параметр `sleep_rgb_or_color_temp` имеет значение `color_temp`) в Кельвинах. 😴",
+ "sleep_transition": "Длительность перехода при переключении \"спящего режима\" в секундах. 😴",
+ "autoreset_control_seconds": "Автоматический сброс ручного управления через несколько секунд. Установите значение 0, чтобы отключить. ⏲️",
+ "min_sunset_time": "Устанавливает самое раннее время виртуального заката (ЧЧ:ММ:СС), чтобы обеспечить более поздние закаты. 🌇",
+ "sleep_brightness": "Процент яркости света в спящем режиме. 😴",
+ "min_sunrise_time": "Устанавливает самое раннее время виртуального восхода солнца (ЧЧ:ММ:СС), чтобы обеспечить возможность более позднего восхода солнца. 🌅",
+ "interval": "Частота адаптации освещения в секундах. 🔄",
+ "adapt_delay": "Время ожидания (в секундах) между включением света и применением изменений адаптивного освещения. Возможно поможет избежать мерцания. ⏲️",
+ "sleep_rgb_color": "Цвет RGB в спящем режиме (используется, когда параметр `sleep_rgb_or_color_temp` имеет значение \"rgb_color\"). 🌈",
+ "sunrise_offset": "Регулирует время восхода солнца с положительным или отрицательным смещением в секундах. ⏰",
+ "transition": "Продолжительность перехода при смене освещения, в секундах. 🕑",
+ "brightness_mode": "Режим яркости для использования. Возможные значения: `default`, `linear` и `tanh` (используются `brightness_mode_time_dark` и `brightness_mode_time_light`). 📈",
+ "brightness_mode_time_light": "(Игнорируется, если `brightness_mode='default'`) Продолжительность в секундах увеличения/уменьшения яркости после/до восхода/заката. 📈📉.",
+ "sunset_offset": "Регулирует время заката с помощью положительного или отрицательного смещения в секундах. ⏰",
+ "sunset_time": "Устанавливает фиксированное время (ЧЧ:ММ:СС) для заката. 🌇",
+ "max_sunset_time": "Устанавливает последнее время виртуального заката (ЧЧ:ММ:СС), чтобы обеспечить более ранние закаты. 🌇",
+ "sunrise_time": "Устанавливает фиксированное время (ЧЧ:ММ:СС) восхода солнца. 🌅",
+ "initial_transition": "Продолжительность первого перехода, когда освещение переключается с `выключено` на `включено` в секундах. ⏲️",
+ "brightness_mode_time_dark": "(Игнорируется, если `brightness_mode='default'`) Продолжительность в секундах увеличения/уменьшения яркости до/после восхода/заката. 📈📉",
+ "max_sunrise_time": "Устанавливает последнее время виртуального восхода солнца (ЧЧ:ММ:СС), что позволит восходить раньше. 🌅",
+ "send_split_delay": "Задержка (миллисекунды) между отдельными командами поворота для источников света, которые не поддерживают одновременную настройку яркости и цвета. ⏲️"
}
}
},
@@ -48,5 +77,52 @@
"option_error": "Ошибка в настройках!",
"entity_missing": "Выбранный индикатор не найден"
}
+ },
+ "services": {
+ "apply": {
+ "fields": {
+ "entity_id": {
+ "description": "`entity_id` переключателя с применяемыми настройками. 📝"
+ },
+ "lights": {
+ "description": "Источник света (или список источников света), к которому нужно применить настройки. 💡"
+ }
+ },
+ "description": "Применяет текущие настройки адаптивного освещения к источникам света."
+ },
+ "change_switch_settings": {
+ "fields": {
+ "max_sunrise_time": {
+ "description": "Устанавливает самое раннее время виртуального заката (ЧЧ:ММ:СС), чтобы обеспечить более поздние закаты. 🌇"
+ },
+ "min_brightness": {
+ "description": "Минимальный процент яркости. 💡"
+ },
+ "sunrise_time": {
+ "description": "Устанавливает фиксированное время (ЧЧ:ММ:СС) восхода солнца. 🌅"
+ },
+ "include_config_in_attributes": {
+ "description": "Показывать все параметры в качестве атрибутов переключателя в Home Assistant, если установлено значение `true`. 📝"
+ },
+ "max_brightness": {
+ "description": "Максимальный процент яркости. 💡"
+ },
+ "sleep_rgb_color": {
+ "description": "Цвет RGB в спящем режиме (используется, когда параметр `sleep_rgb_or_color_temp` имеет значение \"rgb_color\"). 🌈"
+ },
+ "use_defaults": {
+ "description": "Устанавливает значения по умолчанию, не указанные в этом вызове службы. Варианты: \"current\" (по умолчанию, сохраняются текущие значения), \"factory\" (сброс к документированным настройкам по умолчанию) или \"configuration\" (возврат к настройкам конфигурации по умолчанию). ⚙️"
+ },
+ "sunset_time": {
+ "description": "Устанавливает фиксированное время (ЧЧ:ММ:СС) для заката. 🌇"
+ },
+ "min_sunset_time": {
+ "description": "Устанавливает самое раннее время виртуального заката (ЧЧ:ММ:СС), чтобы обеспечить более поздние закаты. 🌇"
+ }
+ }
+ },
+ "set_manual_control": {
+ "description": "Отметьте, контролируется ли свет вручную."
+ }
}
}
diff --git a/custom_components/adaptive_lighting/translations/sk.json b/custom_components/adaptive_lighting/translations/sk.json
new file mode 100644
index 00000000..802e30fd
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/sk.json
@@ -0,0 +1,52 @@
+{
+ "options": {
+ "step": {
+ "init": {
+ "data": {
+ "detect_non_ha_changes": "detect_non_ha_changes: Deteguje a zastaví prispôbovanie pre zmeny mimo `light.turn_on`. Vyžaduje zapnutie `take_over_control`. 🕵️ Upozornenie: ⚠️ Niektoré svetlá môžu falošne indikovať zapnutý stav, čo spôsobí, že sa svetlo neočakávane zapne. Ak narazíte na tento problém, funkciu vypnite.",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Len pri čistom zapnutí svetiel. Pri nastavení `true` prispôsobí Adaptívne osvetlenie svetlá len pri zavolaní služby `light.turn_on` bez parametrov jasu alebo teploty svetla. ❌🌈 Napríklad: zamedzí to prispôsobovaniu ak je aktivovaná scéna. Pri nastavení `false` dôjde k prispôsobeniu nezávisle na tom či sú parametre jasu alebo teploty svetla prítomné v`service_data`. Vyžaduje zapnutie `take_over_control`. 🕵️ ",
+ "separate_turn_on_commands": "separate_turn_on_commands: Použiť samostatné volania služby `light.turn_on` pre nastavenie teploty svetla a jasu (môže byť potrebné pre niektoré typy svetiel). 🔀",
+ "max_color_temp": "max_color_temp: Najstudenejšia teplota svetla v Kelvinoch. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Ak je to možné, preferovať nastavenie cez RGB než nastavením teploty svetla. 🌈",
+ "max_brightness": "max_brightness: Najvyšší jas (v %). 💡",
+ "only_once": "only_once: Prispôsobiť svetlá iba pri zapnutí (`true`) alebo prispôsobovať ich priebežne (`false`). 🔄",
+ "take_over_control": "take_over_control: Ak sú svetlá zapnuté a prispôsobované a niečo zavolá službu `light.turn_on`, dôjde k vypnutiu Adaptívneho osvetlenia. Poznámka: Zapnutie tejto voľby spôsobí volanie služby `homeassistant.update_entity` každý `interval`! 🔒",
+ "lights": "svetlá: Zoznam svetiel (entity_id), ktoré majú byť ovládané (môže byť prázdny). 🌟",
+ "min_brightness": "min_brightness: Najnižší jas (v %). 💡",
+ "min_color_temp": "min_color_temp: Najteplejšia teplota svetla v Kelvinoch. 🔥",
+ "transition_until_sleep": "transition_until_sleep: Keď je funkcia povolená, Adaptívne osvetlenie bude považovať nastavenia režimu spánku ako minimum, a na tieto hodnoty prejde po západe slnka. 🌙"
+ },
+ "data_description": {
+ "sunset_time": "Nastaviť pevný čas (HH:MM:SS) pre západ slnka. 🌇",
+ "sunrise_time": "Nastaviť pevný čas (HH:MM:SS) pre východ slnka. 🌅"
+ },
+ "title": "Nastavenia Adaptívneho osvetlenia",
+ "description": "Nastavte komponentu Adaptívneho osvetlenia. Názvy nastavení sú zhodné s názvami v súbore YAML. Ak ste túto položku nastavili už v YAML, tak tu sa nezobrazia žiadne možnosti nastavenia. Interaktívne grafy, ktoré zobrazujú vplyv nastavení, navštívte [túto webovú aplikáciu](https://basnijholt.github.io/adaptive-lighting). Ďalšie informácie nájdete v [oficiálnej dokumentácii](https://github.com/basnijholt/adaptive-lighting#readme)."
+ }
+ }
+ },
+ "title": "Adaptívne osvetlenie",
+ "config": {
+ "step": {
+ "user": {
+ "description": "Každá inštancia môže obsahovať viacero svetiel!",
+ "title": "Vyberte názov inštancie Adaptívneho osvetlenia"
+ }
+ },
+ "abort": {
+ "already_configured": "Toto zariadenie už je nastavené"
+ }
+ },
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sunrise_time": {
+ "description": "Nastaviť pevný čas (HH:MM:SS) pre východ slnka. 🌅"
+ },
+ "sunset_time": {
+ "description": "Nastaviť pevný čas (HH:MM:SS) pre západ slnka. 🌇"
+ }
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/ur.json b/custom_components/adaptive_lighting/translations/ur.json
new file mode 100644
index 00000000..67f3d3e0
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/ur.json
@@ -0,0 +1,202 @@
+{
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sleep_brightness": {
+ "description": "نیند کے موڈ میں روشنی کی چمک کا فیصد. 😴"
+ },
+ "detect_non_ha_changes": {
+ "description": "غیر light.turn_on ریاست کی تبدیلیوں کے لئے موافقت کا پتہ لگاتا ہے اور روکتا ہے۔ 'take_over_control' کو فعال کرنے کی ضرورت ہے۔ 🕵️ احتیاط: ⚠️ کچھ لائٹس غلط طور پر 'آن' حالت کی نشاندہی کر سکتی ہیں ، جس کے نتیجے میں لائٹس غیر متوقع طور پر آن ہوسکتی ہیں۔ اگر آپ کو اس طرح کے مسائل کا سامنا کرنا پڑتا ہے تو اس خصوصیت کو غیر فعال کریں۔"
+ },
+ "sunrise_offset": {
+ "description": "طلوع آفتاب کے وقت کو سیکنڈوں میں مثبت یا منفی آفسیٹ کے ساتھ ایڈجسٹ کریں۔ ⏰"
+ },
+ "max_sunrise_time": {
+ "description": "تازہ ترین مجازی طلوع آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) سیٹ کریں ، جس سے قبل طلوع آفتاب کی اجازت ملتی ہے۔ 🌅"
+ },
+ "sleep_color_temp": {
+ "description": "کیلون میں نیند کے موڈ میں رنگ کا درجہ حرارت (جب 'sleep_rgb_or_color_temp' 'color_temp' ہوتا ہے) میں استعمال ہوتا ہے۔ 😴"
+ },
+ "min_brightness": {
+ "description": "کم سے کم چمک کا فیصد. 💡"
+ },
+ "min_color_temp": {
+ "description": "کیلون میں گرم ترین رنگ کا درجہ حرارت. 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "نیند کے موڈ میں \"rgb_color\" یا \"color_temp\" کا استعمال کریں۔ 🌙"
+ },
+ "turn_on_lights": {
+ "description": "کیا ان لائٹس کو آن کرنا ہے جو فی الحال بند ہیں۔ 🔆"
+ },
+ "initial_transition": {
+ "description": "پہلی منتقلی کا دورانیہ جب لائٹس سیکنڈوں میں 'بند' سے 'آن' میں تبدیل ہوجاتی ہیں۔ ⏲️"
+ },
+ "entity_id": {
+ "description": "سوئچ کی اینٹیٹی آئی ڈی۔ 📝"
+ },
+ "sunrise_time": {
+ "description": "طلوع آفتاب کے لئے ایک مقررہ وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں۔ 🌅"
+ },
+ "include_config_in_attributes": {
+ "description": "'سچ' پر سیٹ ہونے پر ہوم اسسٹنٹ میں سوئچ پر تمام اختیارات بطور خصوصیات دکھائیں۔ 📝"
+ },
+ "max_brightness": {
+ "description": "زیادہ سے زیادہ چمک کا فیصد. 💡"
+ },
+ "sleep_rgb_color": {
+ "description": "نیند کے موڈ میں آر جی بی رنگ (جب 'sleep_rgb_or_color_temp' \"rgb_color\" ہوتا ہے تو استعمال کیا جاتا ہے). 🌈"
+ },
+ "take_over_control": {
+ "description": "اگر کوئی دوسرا ذریعہ 'light.turn_on' کا نام دیتا ہے تو ایڈاپٹو لائٹنگ کو غیر فعال کریں جب لائٹس آن ہیں اور اسے اپنایا جارہا ہے۔ نوٹ کریں کہ یہ ہر 'وقفے' کو 'homeassistant.update_entity' کہتا ہے! 🔒"
+ },
+ "sleep_transition": {
+ "description": "منتقلی کا دورانیہ جب \"نیند کا موڈ\" سیکنڈوں میں طے کیا جاتا ہے۔ 😴"
+ },
+ "autoreset_control_seconds": {
+ "description": "کئی سیکنڈ کے بعد دستی کنٹرول کو خود بخود ری سیٹ کریں۔ غیر فعال کرنے کے لئے 0 پر سیٹ کریں۔ ⏲️"
+ },
+ "adapt_delay": {
+ "description": "لائٹ آن ہونے اور ایڈاپٹو لائٹنگ کے درمیان انتظار کا وقت (سیکنڈ) تبدیلیاں لاگو کرتا ہے۔ جھلکنے سے بچنے میں مدد مل سکتی ہے۔ ⏲️"
+ },
+ "only_once": {
+ "description": "روشنیوں کو صرف اس وقت ڈھالیں جب وہ آن ہوں (`سچ`) یا انہیں ڈھالتے رہیں (`غلط`)۔ 🔄"
+ },
+ "use_defaults": {
+ "description": "اس سروس کال میں متعین نہ ہونے والی ڈیفالٹ اقدار سیٹ کرتا ہے۔ اختیارات: \"موجودہ\" (ڈیفالٹ، موجودہ اقدار کو برقرار رکھتا ہے)، \"فیکٹری\" (دستاویزی ڈیفالٹ میں ری سیٹ) ، یا \"کنفیگریشن\" (سوئچ کنفگ ڈیفالٹس پر واپس آجاتا ہے)۔ ⚙️"
+ },
+ "separate_turn_on_commands": {
+ "description": "رنگ اور چمک کے لئے علیحدہ 'light.turn_on' کا استعمال کریں ، جو کچھ روشنی کی اقسام کے لئے ضروری ہے۔ 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "جب ممکن ہو تو روشنی کے رنگ کے درجہ حرارت پر آر جی بی رنگ ایڈجسٹمنٹ کو ترجیح دیں یا نہیں۔ 🌈"
+ },
+ "max_color_temp": {
+ "description": "کیلون میں سرد ترین رنگ کا درجہ حرارت. ❄️"
+ },
+ "sunset_offset": {
+ "description": "غروب آفتاب کے وقت کو سیکنڈوں میں مثبت یا منفی آفسیٹ کے ساتھ ایڈجسٹ کریں۔ ⏰"
+ },
+ "send_split_delay": {
+ "description": "ان روشنیوں کے لئے 'separate_turn_on_commands' کے درمیان تاخیر (ایم ایس) جو بیک وقت چمک اور رنگ کی ترتیب کی حمایت نہیں کرتی ہیں۔ ⏲️"
+ },
+ "sunset_time": {
+ "description": "غروب آفتاب کے لئے ایک مقررہ وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں۔ 🌇"
+ },
+ "transition": {
+ "description": "جب روشنیاں تبدیل ہوتی ہیں تو منتقلی کا دورانیہ ، سیکنڈوں میں۔ 🕑"
+ },
+ "min_sunset_time": {
+ "description": "سب سے پہلے مجازی غروب آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں ، جس سے بعد میں غروب آفتاب کی اجازت ملتی ہے۔ 🌇"
+ }
+ },
+ "description": "سوئچ میں آپ جو بھی ترتیبات چاہتے ہیں اسے تبدیل کریں۔ یہاں تمام اختیارات وہی ہیں جو کنفگ بہاؤ میں ہیں۔"
+ },
+ "apply": {
+ "fields": {
+ "entity_id": {
+ "description": "لاگو کرنے کے لئے ترتیبات کے ساتھ سوئچ کا 'entity_id'۔ 📝"
+ },
+ "adapt_brightness": {
+ "description": "کیا روشنی کی چمک کو ڈھالنا ہے۔ 🌞"
+ },
+ "turn_on_lights": {
+ "description": "کیا ان لائٹس کو آن کرنا ہے جو فی الحال بند ہیں۔ 🔆"
+ },
+ "adapt_color": {
+ "description": "کیا معاون لائٹس پر رنگ کو ڈھالنا ہے۔ 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "جب ممکن ہو تو روشنی کے رنگ کے درجہ حرارت پر آر جی بی رنگ ایڈجسٹمنٹ کو ترجیح دیں یا نہیں۔ 🌈"
+ },
+ "lights": {
+ "description": "ترتیبات کو لاگو کرنے کے لیے روشنی (یا لائٹس کی فہرست)۔ 💡"
+ },
+ "transition": {
+ "description": "جب روشنیاں تبدیل ہوتی ہیں تو منتقلی کا دورانیہ ، سیکنڈوں میں۔ 🕑"
+ }
+ },
+ "description": "روشنیوں پر موجودہ مطابقت پذیر روشنی کی ترتیبات کا اطلاق ہوتا ہے۔"
+ },
+ "set_manual_control": {
+ "fields": {
+ "manual_control": {
+ "description": "کیا روشنی کو \"manual_control\" کی فہرست سے شامل کرنا ہے (\"سچ\") یا (\"غلط\") ہٹانا ہے۔ 🔒"
+ },
+ "entity_id": {
+ "description": "سوئچ کا 'entity_id' جس میں روشنی کو 'دستی طور پر کنٹرول' کے طور پر نشان زد کرنا ہے۔ 📝"
+ },
+ "lights": {
+ "description": "لائٹس کے entity_id ، اگر واضح نہیں ہیں تو ، سوئچ میں موجود تمام لائٹس منتخب کی جاتی ہیں۔ 💡"
+ }
+ },
+ "description": "نشان لگائیں کہ آیا روشنی کو 'دستی طور پر کنٹرول' کیا جاتا ہے۔"
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "sleep_rgb_or_color_temp": "نیند کے موڈ میں \"rgb_color\" یا \"color_temp\" کا استعمال کریں۔ 🌙",
+ "sleep_color_temp": "کیلون میں نیند کے موڈ میں رنگ کا درجہ حرارت (جب 'sleep_rgb_or_color_temp' 'color_temp' ہوتا ہے) میں استعمال ہوتا ہے۔ 😴",
+ "sleep_transition": "Duration of transition when \"sleep mode\" is toggled in seconds. 😴",
+ "autoreset_control_seconds": "کئی سیکنڈ کے بعد دستی کنٹرول کو خود بخود ری سیٹ کریں۔ غیر فعال کرنے کے لئے 0 پر سیٹ کریں۔ ⏲️",
+ "min_sunset_time": "سب سے پہلے مجازی غروب آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں ، جس سے بعد میں غروب آفتاب کی اجازت ملتی ہے۔ 🌇",
+ "sleep_brightness": "نیند کے موڈ میں روشنی کی چمک کا فیصد. 😴",
+ "min_sunrise_time": "ابتدائی مجازی طلوع آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں ، جس سے بعد میں طلوع آفتاب کی اجازت ملتی ہے۔ 🌅",
+ "interval": "روشنیوں کو سیکنڈوں میں ڈھالنے کی فریکوئنسی۔ 🔄",
+ "adapt_delay": "لائٹ آن ہونے اور ایڈاپٹو لائٹنگ کے درمیان انتظار کا وقت (سیکنڈ) تبدیلیاں لاگو کرتا ہے۔ جھلکنے سے بچنے میں مدد مل سکتی ہے۔ ⏲️",
+ "sleep_rgb_color": "نیند کے موڈ میں آر جی بی رنگ (جب 'sleep_rgb_or_color_temp' \"rgb_color\" ہوتا ہے تو استعمال کیا جاتا ہے). 🌈",
+ "sunrise_offset": "طلوع آفتاب کے وقت کو سیکنڈوں میں مثبت یا منفی آفسیٹ کے ساتھ ایڈجسٹ کریں۔ ⏰",
+ "transition": "جب روشنیاں تبدیل ہوتی ہیں تو منتقلی کا دورانیہ ، سیکنڈوں میں۔ 🕑",
+ "brightness_mode": "استعمال کرنے کے لئے چمک کا موڈ۔ ممکنہ قدریں 'ڈیفالٹ'، 'لکیری' اور 'تن' ہیں ('brightness_mode_time_dark' اور 'brightness_mode_time_light' کا استعمال کرتی ہیں)۔ 📈",
+ "brightness_mode_time_light": "(اگر 'brightness_mode='ڈیفالٹ') سورج طلوع ہونے کے بعد / اس سے پہلے / غروب آفتاب سے پہلے چمک کو بڑھانے کے لئے سیکنڈوں میں دورانیہ۔ 📈📉.",
+ "sunset_offset": "غروب آفتاب کے وقت کو سیکنڈوں میں مثبت یا منفی آفسیٹ کے ساتھ ایڈجسٹ کریں۔ ⏰",
+ "sunset_time": "غروب آفتاب کے لئے ایک مقررہ وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں۔ 🌇",
+ "max_sunset_time": "تازہ ترین مجازی غروب آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) سیٹ کریں ، جس سے قبل غروب آفتاب کی اجازت ملتی ہے۔ 🌇",
+ "sunrise_time": "طلوع آفتاب کے لئے ایک مقررہ وقت (ایچ ایچ: ایم ایم: ایس ایس) مقرر کریں۔ 🌅",
+ "initial_transition": "پہلی منتقلی کا دورانیہ جب لائٹس سیکنڈوں میں 'بند' سے 'آن' میں تبدیل ہوجاتی ہیں۔ ⏲️",
+ "brightness_mode_time_dark": "(اگر 'brightness_mode='ڈیفالٹ') سورج طلوع ہونے سے پہلے / غروب آفتاب سے پہلے / بعد میں چمک کو بڑھانے کے لئے سیکنڈ میں دورانیہ۔ 📈📉",
+ "max_sunrise_time": "تازہ ترین مجازی طلوع آفتاب کا وقت (ایچ ایچ: ایم ایم: ایس ایس) سیٹ کریں ، جس سے قبل طلوع آفتاب کی اجازت ملتی ہے۔ 🌅",
+ "send_split_delay": "ان روشنیوں کے لئے 'separate_turn_on_commands' کے درمیان تاخیر (ایم ایس) جو بیک وقت چمک اور رنگ کی ترتیب کی حمایت نہیں کرتی ہیں۔ ⏲️"
+ },
+ "data": {
+ "detect_non_ha_changes": "detect_non_ha_changes: غیر light.turn_on ریاست کی تبدیلیوں کے لئے موافقت کا پتہ لگاتا ہے اور روکتا ہے۔ 'take_over_control' کو فعال کرنے کی ضرورت ہے۔ 🕵️ احتیاط: ⚠️ کچھ لائٹس غلط طور پر 'آن' حالت کی نشاندہی کر سکتی ہیں ، جس کے نتیجے میں لائٹس غیر متوقع طور پر آن ہوسکتی ہیں۔ اگر آپ کو اس طرح کے مسائل کا سامنا کرنا پڑتا ہے تو اس خصوصیت کو غیر فعال کریں۔",
+ "multi_light_intercept": "multi_light_intercept: 'light.turn_on' کالز کو روکیں اور ان کے مطابق ڈھالیں جو متعدد روشنیوں کو نشانہ بناتی ہیں۔ ➗⚠️ اس کے نتیجے میں ایک ہی 'light.turn_on' کال کو متعدد کالز میں تقسیم کیا جاسکتا ہے ، مثال کے طور پر ، جب لائٹس مختلف سوئچوں میں ہوتی ہیں۔ 'انٹرسیپٹ' کو فعال کرنے کی ضرورت ہے۔",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: شروع میں لائٹس آن کرتے وقت۔ اگر 'true' پر سیٹ کیا جاتا ہے، AL صرف اس صورت میں موافق ہوتا ہے جب رنگ یا چمک کی وضاحت کیے بغیر 'light.turn_on' کو مدعو کیا جاتا ہے۔ ❌🌈 یہ مثال کے طور پر، کسی منظر کو چالو کرتے وقت موافقت کو روکتا ہے۔ اگر 'غلط'، AL ابتدائی `سروس_ڈیٹا` میں رنگ یا چمک کی موجودگی سے قطع نظر موافقت کرتا ہے۔ 'ٹیک_اوور_کنٹرول' کو فعال کرنے کی ضرورت ہے۔ 🕵️ ",
+ "skip_redundant_commands": "skip_redundant_commands: موافقت کے احکامات بھیجنے سے گریز کریں جن کی ہدف کی حالت پہلے سے ہی روشنی کی معلوم حالت کے برابر ہے۔ نیٹ ورک ٹریفک کو کم سے کم کرتا ہے اور کچھ حالات میں موافقت کی ذمہ داری کو بہتر بناتا ہے۔ 📉اگر جسمانی روشنی کی حالت یں ایچ اے کی ریکارڈ شدہ حالت کے ساتھ مطابقت سے باہر ہوجاتی ہیں تو غیر فعال کریں۔",
+ "separate_turn_on_commands": "separate_turn_on_commands: رنگ اور چمک کے لئے الگ الگ 'light.turn_on' کا استعمال کریں، جو کچھ روشنی کی اقسام کے لئے ضروری ہے. 🔀",
+ "max_color_temp": "max_color_temp: کیلون میں سرد ترین رنگ کا درجہ حرارت۔ ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: جب ممکن ہو تو روشنی کے رنگ کے درجہ حرارت پر آر جی بی رنگ ایڈجسٹمنٹ کو ترجیح دیں یا نہیں۔ 🌈",
+ "max_brightness": "max_brightness: زیادہ سے زیادہ چمک کا فیصد. 💡",
+ "intercept": "انٹرسیپٹ: 'light.turn_on' کالز کو فوری طور پر رنگ اور چمک کے مطابقت پذیری کو قابل بنانے کے لئے روکیں اور اپنائیں۔ 🏎️ ایسی روشنیوں کو غیر فعال کریں جو رنگ اور چمک کے ساتھ 'light.turn_on' کی حمایت نہیں کرتی ہیں۔",
+ "only_once": "only_once: لائٹس کو صرف اس وقت ڈھالیں جب وہ آن ہوں ('سچ') یا انہیں اپناتے رہیں ('جھوٹ')۔ 🔄",
+ "take_over_control": "take_over_control: اگر کوئی دوسرا ذریعہ 'light.turn_on' کا نام دیتا ہے تو ایڈاپٹو لائٹنگ کو غیر فعال کریں جب لائٹس آن ہیں اور اسے اپنایا جارہا ہے۔ نوٹ کریں کہ یہ ہر 'وقفے' کو 'homeassistant.update_entity' کہتا ہے! 🔒",
+ "lights": "لائٹس: کنٹرول کی جانے والی روشنی کے entity_ids کی فہرست (خالی ہوسکتی ہے). 🌟",
+ "min_brightness": "min_brightness: کم سے کم چمک کا فیصد. 💡",
+ "min_color_temp": "min_color_temp: کیلون میں گرم ترین رنگ کا درجہ حرارت. 🔥",
+ "transition_until_sleep": "transition_until_sleep: جب فعال کیا جاتا ہے تو ، ایڈاپٹو لائٹنگ نیند کی ترتیبات کو کم سے کم تصور کرے گی ، غروب آفتاب کے بعد ان اقدار میں منتقل ہوگی۔ 🌙",
+ "include_config_in_attributes": "include_config_in_attributes: 'سچ' پر سیٹ ہونے پر ہوم اسسٹنٹ میں سوئچ پر خصوصیات کے طور پر تمام اختیارات دکھائیں۔ 📝"
+ },
+ "title": "مطابقت پذیر روشنی کے اختیارات",
+ "description": "ایک مطابقت پذیر لائٹنگ جزو تشکیل دیں۔ آپشن کے نام YAML کی ترتیبات کے ساتھ مطابقت رکھتے ہیں۔ اگر آپ نے YAML میں اس اندراج کی وضاحت کی ہے تو ، یہاں کوئی آپشن ظاہر نہیں ہوگا۔ انٹرایکٹو گراف کے لئے جو پیرامیٹر کے اثرات کو ظاہر کرتے ہیں ، ملاحظہ کریں [اس ویب ایپ] (https://basnijholt.github.io/adaptive-lighting)۔ مزید تفصیلات کے لئے ، [سرکاری دستاویزات] (https://github.com/basnijholt/adaptive-lighting#readme) ملاحظہ کریں۔"
+ }
+ },
+ "error": {
+ "option_error": "غیر قانونی آپشن",
+ "entity_missing": "ہوم اسسٹنٹ سے ایک یا ایک سے زیادہ منتخب لائٹ ادارے غائب ہیں"
+ }
+ },
+ "title": "مطابقت پذیر روشنی",
+ "config": {
+ "step": {
+ "user": {
+ "description": "ہر مثال میں متعدد روشنیاں ہوسکتی ہیں!",
+ "title": "ایڈاپٹو لائٹنگ مثال کے لئے ایک نام منتخب کریں"
+ }
+ },
+ "abort": {
+ "already_configured": "یہ آلہ پہلے ہی تشکیل دیا گیا ہے"
+ }
+ }
+}
From 96558c2c69a4d77b4099b8852def5f14e47d7230 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:46:34 -0800
Subject: [PATCH 003/361] docs: add pastukhov as a contributor for translation
(#870)
* 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 b38dac23..11cdac33 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -630,6 +630,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "pastukhov",
+ "name": "Artem Pastukhov",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3490616?v=4",
+ "profile": "http://ovoi.io",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 544b03b5..46584c36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -551,6 +551,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Olek Bruks 🌍 |
 Gabriele Baldassarre 🌍 |
 Pepijn Baart 🌍 |
+  Artem Pastukhov 🌍 |
From 556cde6c42d51748885f9def9c79f8a78262c6a3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:47:08 -0800
Subject: [PATCH 004/361] docs: add mstefany as a contributor for translation
(#872)
* 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 11cdac33..2b993e65 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -639,6 +639,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "mstefany",
+ "name": "Martin Štefany",
+ "avatar_url": "https://avatars.githubusercontent.com/u/57348587?v=4",
+ "profile": "https://stefany.eu",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 46584c36..14da28ce 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -552,6 +552,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Gabriele Baldassarre 🌍 |
 Pepijn Baart 🌍 |
 Artem Pastukhov 🌍 |
+  Martin Štefany 🌍 |
From 4fbf9ead90889564cabcc327817af5761ec93267 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:47:37 -0800
Subject: [PATCH 005/361] docs: add quenthal as a contributor for translation
(#873)
* 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 2b993e65..9d1ab295 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -648,6 +648,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "quenthal",
+ "name": "quenthal",
+ "avatar_url": "https://avatars.githubusercontent.com/u/17827203?v=4",
+ "profile": "https://github.com/quenthal",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 14da28ce..5fd48dd5 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -554,6 +554,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Artem Pastukhov 🌍 |
 Martin Štefany 🌍 |
+
+  quenthal 🌍 |
+
From 7c85895f31bcdee45a00b173512b6c50a23f628d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:47:56 -0800
Subject: [PATCH 006/361] docs: add Luki72 as a contributor for translation
(#874)
* 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 9d1ab295..b8d80fbc 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -657,6 +657,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "Luki72",
+ "name": "Luki72",
+ "avatar_url": "https://avatars.githubusercontent.com/u/22493116?v=4",
+ "profile": "https://github.com/Luki72",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 5fd48dd5..06aa561d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -556,6 +556,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 quenthal 🌍 |
+  Luki72 🌍 |
From e3ca3aa0810f6f6a6b380ac9a75a4cdf061df7ec Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:48:16 -0800
Subject: [PATCH 007/361] docs: add pantan-cymk as a contributor for
translation (#875)
* 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 b8d80fbc..8f6393cb 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -666,6 +666,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "pantan-cymk",
+ "name": "pantan-cymk",
+ "avatar_url": "https://avatars.githubusercontent.com/u/87476229?v=4",
+ "profile": "https://github.com/pantan-cymk",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 06aa561d..f969ba46 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -557,6 +557,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 quenthal 🌍 |
 Luki72 🌍 |
+  pantan-cymk 🌍 |
From 6ff114b855c4491eddedf8e7234a10538bddfdc0 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 8 Dec 2023 22:49:21 -0800
Subject: [PATCH 008/361] docs: add yousaf465 as a contributor for translation
(#876)
* 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 8f6393cb..b8777397 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -675,6 +675,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "yousaf465",
+ "name": "yousaf465",
+ "avatar_url": "https://avatars.githubusercontent.com/u/83491212?v=4",
+ "profile": "https://github.com/yousaf465",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index f969ba46..a4a120bd 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -558,6 +558,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 quenthal 🌍 |
 Luki72 🌍 |
 pantan-cymk 🌍 |
+  yousaf465 🌍 |
From 1bb52379e6b51405cbf31b05b36e9607224b786f Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Sat, 9 Dec 2023 01:13:02 -0800
Subject: [PATCH 009/361] [pre-commit.ci] pre-commit autoupdate (#826)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.1 → v0.1.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.1...v0.1.6)
- [github.com/psf/black: 23.10.0 → 23.11.0](https://github.com/psf/black/compare/23.10.0...23.11.0)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
.pre-commit-config.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 835445c3..098bd9b2 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.1.1
+ rev: v0.1.6
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 23.10.0
+ rev: 23.11.0
hooks:
- id: black
From 1601a22dc238a21f46ac6c04c8e7b6f9645474b1 Mon Sep 17 00:00:00 2001
From: Pierre Belanger
Date: Mon, 18 Dec 2023 23:08:29 -0500
Subject: [PATCH 010/361] README.md - Add note to access UI (#884)
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index a4a120bd..b1ea55d9 100644
--- a/README.md
+++ b/README.md
@@ -79,7 +79,7 @@ The `adaptive_lighting.manual_control` event is fired when a light is marked as
## :gear: Configuration
-Adaptive Lighting supports configuration through both YAML and the frontend (**Configuration** -> **Integrations** -> **Adaptive Lighting**, **Adaptive Lighting** -> **Options**), with identical option names in both methods.
+Adaptive Lighting supports configuration through both YAML and the frontend (**Settings** -> **Devices and Services** -> **Adaptive Lighting**, **Adaptive Lighting** -> **Options**), with identical option names in both methods.
```yaml
# Example configuration.yaml entry
@@ -87,6 +87,7 @@ adaptive_lighting:
lights:
- light.living_room_lights
```
+Note: If you plan to strictly use the UI, the `adaptive_lighting:` entry must still be added to the YAML.
Transform your home's atmosphere with Adaptive Lighting 🏠, and experience the benefits of intelligent, sun-synchronized lighting today!
From 4de96afcd0227adfcc838e843ae2d8dd40d6dc43 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Mon, 18 Dec 2023 20:11:21 -0800
Subject: [PATCH 011/361] docs: add baylanger as a contributor for doc (#885)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index b8777397..d2f81350 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -684,6 +684,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "baylanger",
+ "name": "Pierre Belanger",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5240348?v=4",
+ "profile": "https://github.com/baylanger",
+ "contributions": [
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index b1ea55d9..59ae6524 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -560,6 +560,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Luki72 🌍 |
 pantan-cymk 🌍 |
 yousaf465 🌍 |
+  Pierre Belanger 📖 |
From 88a8a6d00e4aab2e4019fbb7e47dbd5049d81a59 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 20 Dec 2023 07:12:52 -0800
Subject: [PATCH 012/361] pin shiny in requirements.txt (#887)
---
webapp/requirements.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index 4a287a69..29f55dec 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -1,3 +1,4 @@
shinylive
astral==2.2
shinyswatch
+shiny==0.6.0
From 3118e6f308b13927049c764f8131bf7d62ea56f6 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 20 Dec 2023 07:15:20 -0800
Subject: [PATCH 013/361] pin click in requirements.txt
---
webapp/requirements.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index 29f55dec..25248916 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -2,3 +2,4 @@ shinylive
astral==2.2
shinyswatch
shiny==0.6.0
+click==8.1.3
From 9f8eb97cfc8e1b6d99a47cdc11874f4aff2e009d Mon Sep 17 00:00:00 2001
From: Nilesh
Date: Fri, 5 Jan 2024 17:20:19 -0800
Subject: [PATCH 014/361] Fix webapp not loading (#895)
---
webapp/requirements.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index 25248916..16afaf2e 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -2,4 +2,4 @@ shinylive
astral==2.2
shinyswatch
shiny==0.6.0
-click==8.1.3
+click==8.1.7
From 99cbe75f30fc26c02e3eebc17c6095462b6f634e Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Fri, 5 Jan 2024 17:38:29 -0800
Subject: [PATCH 015/361] Pin compatible requirements (#896)
---
webapp/requirements.txt | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index 16afaf2e..54732c09 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -1,5 +1,4 @@
-shinylive
+shinylive==0.1.1
astral==2.2
-shinyswatch
-shiny==0.6.0
-click==8.1.7
+shinyswatch==0.3.1
+shiny==0.5.0
From a47f7ce49f91bd624f1a3186beeb70ac4b7c0f09 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Fri, 5 Jan 2024 17:51:10 -0800
Subject: [PATCH 016/361] Add requirements-locked.txt for WebApp (#897)
---
.github/workflows/deploy-webapp.yml | 2 +-
webapp/requirements-locked.txt | 77 +++++++++++++++++++++++++++++
2 files changed, 78 insertions(+), 1 deletion(-)
create mode 100644 webapp/requirements-locked.txt
diff --git a/.github/workflows/deploy-webapp.yml b/.github/workflows/deploy-webapp.yml
index 629902b5..51cbab81 100644
--- a/.github/workflows/deploy-webapp.yml
+++ b/.github/workflows/deploy-webapp.yml
@@ -39,7 +39,7 @@ jobs:
- name: Install Dependencies
run: |
- pip install -r webapp/requirements.txt
+ pip install -r webapp/requirements-locked.txt
- name: Build the WebAssembly app
run: |
diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt
new file mode 100644
index 00000000..e965a1b5
--- /dev/null
+++ b/webapp/requirements-locked.txt
@@ -0,0 +1,77 @@
+#
+# 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.2.0
+ # via
+ # starlette
+ # watchfiles
+appdirs==1.4.4
+ # via
+ # shiny
+ # shinylive
+asgiref==3.7.2
+ # 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.5.1
+ # via
+ # shiny
+ # shinyswatch
+idna==3.6
+ # via anyio
+linkify-it-py==2.0.2
+ # via shiny
+markdown-it-py==3.0.0
+ # via
+ # mdit-py-plugins
+ # shiny
+mdit-py-plugins==0.4.0
+ # via shiny
+mdurl==0.1.2
+ # via markdown-it-py
+packaging==23.2
+ # via
+ # htmltools
+ # shinyswatch
+python-multipart==0.0.6
+ # via shiny
+pytz==2023.3.post1
+ # via astral
+shiny==0.5.0
+ # via
+ # -r requirements.txt
+ # shinylive
+ # shinyswatch
+shinylive==0.1.1
+ # via -r requirements.txt
+shinyswatch==0.3.1
+ # via -r requirements.txt
+sniffio==1.3.0
+ # via anyio
+starlette==0.34.0
+ # via shiny
+typing-extensions==4.9.0
+ # via
+ # htmltools
+ # shiny
+ # shinyswatch
+uc-micro-py==1.0.2
+ # via linkify-it-py
+uvicorn==0.25.0
+ # via shiny
+watchfiles==0.21.0
+ # via shiny
+websockets==12.0
+ # via shiny
+xstatic-bootswatch==3.3.7.0
+ # via shinyswatch
From 95a59438b65d4644b3a51e4b0dd5b4b9253a8521 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 5 Feb 2024 14:13:13 -0800
Subject: [PATCH 017/361] [pre-commit.ci] pre-commit autoupdate (#882)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.6 → v0.2.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.6...v0.2.0)
- [github.com/psf/black: 23.11.0 → 24.1.1](https://github.com/psf/black/compare/23.11.0...24.1.1)
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
.github/update-services.py | 3 +-
.github/update-strings.py | 3 +-
.pre-commit-config.yaml | 4 +-
.../adaptive_lighting/__init__.py | 1 +
.../adaptive_lighting/adaptation_utils.py | 1 +
.../adaptive_lighting/color_and_brightness.py | 3 ++
.../adaptive_lighting/config_flow.py | 1 +
custom_components/adaptive_lighting/const.py | 48 +++++++++----------
.../adaptive_lighting/hass_utils.py | 1 +
.../adaptive_lighting/helpers.py | 1 +
custom_components/adaptive_lighting/switch.py | 1 +
test_dependencies.py | 1 +
tests/conftest.py | 1 +
tests/test_config_flow.py | 1 +
tests/test_init.py | 1 +
tests/test_switch.py | 1 +
webapp/homeassistant_util_color.py | 1 +
17 files changed, 45 insertions(+), 28 deletions(-)
diff --git a/.github/update-services.py b/.github/update-services.py
index ee001beb..9ea1860f 100644
--- a/.github/update-services.py
+++ b/.github/update-services.py
@@ -1,4 +1,5 @@
"""Creates a services.yaml file with the latest docs."""
+
import sys
from pathlib import Path
@@ -6,7 +7,7 @@ import yaml
sys.path.append(str(Path(__file__).parent.parent))
-from custom_components.adaptive_lighting import const # noqa: E402
+from custom_components.adaptive_lighting import const
services_filename = Path("custom_components") / "adaptive_lighting" / "services.yaml"
with open(services_filename) as f: # noqa: PTH123
diff --git a/.github/update-strings.py b/.github/update-strings.py
index f90ac437..d25a7af2 100644
--- a/.github/update-strings.py
+++ b/.github/update-strings.py
@@ -1,4 +1,5 @@
"""Update strings.json and en.json from const.py."""
+
import json
import sys
from pathlib import Path
@@ -8,7 +9,7 @@ import yaml
sys.path.append(str(Path(__file__).parent.parent))
-from custom_components.adaptive_lighting import const # noqa: E402
+from custom_components.adaptive_lighting import const
folder = Path("custom_components") / "adaptive_lighting"
strings_fname = folder / "strings.json"
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 098bd9b2..9a1c5f2f 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.1.6
+ rev: v0.2.0
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 23.11.0
+ rev: 24.1.1
hooks:
- id: black
diff --git a/custom_components/adaptive_lighting/__init__.py b/custom_components/adaptive_lighting/__init__.py
index 98c2e94f..a235d70f 100644
--- a/custom_components/adaptive_lighting/__init__.py
+++ b/custom_components/adaptive_lighting/__init__.py
@@ -1,4 +1,5 @@
"""Adaptive Lighting integration in Home-Assistant."""
+
import logging
from typing import Any
diff --git a/custom_components/adaptive_lighting/adaptation_utils.py b/custom_components/adaptive_lighting/adaptation_utils.py
index 593a746b..595911f0 100644
--- a/custom_components/adaptive_lighting/adaptation_utils.py
+++ b/custom_components/adaptive_lighting/adaptation_utils.py
@@ -1,4 +1,5 @@
"""Utility functions for adaptation commands."""
+
import logging
from collections.abc import AsyncGenerator
from dataclasses import dataclass
diff --git a/custom_components/adaptive_lighting/color_and_brightness.py b/custom_components/adaptive_lighting/color_and_brightness.py
index 9441e9e6..52386bf7 100644
--- a/custom_components/adaptive_lighting/color_and_brightness.py
+++ b/custom_components/adaptive_lighting/color_and_brightness.py
@@ -1,4 +1,5 @@
"""Switch for the Adaptive Lighting integration."""
+
from __future__ import annotations
import bisect
@@ -432,6 +433,7 @@ def find_a_b(x1: float, x2: float, y1: float, y2: float) -> tuple[float, float]:
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)
@@ -477,6 +479,7 @@ def scaled_tanh(
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)
diff --git a/custom_components/adaptive_lighting/config_flow.py b/custom_components/adaptive_lighting/config_flow.py
index 8f82582a..f0098937 100644
--- a/custom_components/adaptive_lighting/config_flow.py
+++ b/custom_components/adaptive_lighting/config_flow.py
@@ -1,4 +1,5 @@
"""Config flow for Adaptive Lighting integration."""
+
import logging
import homeassistant.helpers.config_validation as cv
diff --git a/custom_components/adaptive_lighting/const.py b/custom_components/adaptive_lighting/const.py
index cf93cee6..79d571e2 100644
--- a/custom_components/adaptive_lighting/const.py
+++ b/custom_components/adaptive_lighting/const.py
@@ -50,9 +50,9 @@ DOCS[CONF_INITIAL_TRANSITION] = (
)
CONF_SLEEP_TRANSITION, DEFAULT_SLEEP_TRANSITION = "sleep_transition", 1
-DOCS[
- CONF_SLEEP_TRANSITION
-] = 'Duration of transition when "sleep mode" is toggled in seconds. 😴'
+DOCS[CONF_SLEEP_TRANSITION] = (
+ 'Duration of transition when "sleep mode" is toggled in seconds. 😴'
+)
CONF_INTERVAL, DEFAULT_INTERVAL = "interval", 90
DOCS[CONF_INTERVAL] = "Frequency to adapt the lights, in seconds. 🔄"
@@ -112,30 +112,30 @@ DOCS[CONF_SLEEP_COLOR_TEMP] = (
)
CONF_SLEEP_RGB_COLOR, DEFAULT_SLEEP_RGB_COLOR = "sleep_rgb_color", [255, 56, 0]
-DOCS[
- CONF_SLEEP_RGB_COLOR
-] = 'RGB color in sleep mode (used when `sleep_rgb_or_color_temp` is "rgb_color"). 🌈'
+DOCS[CONF_SLEEP_RGB_COLOR] = (
+ 'RGB color in sleep mode (used when `sleep_rgb_or_color_temp` is "rgb_color"). 🌈'
+)
CONF_SLEEP_RGB_OR_COLOR_TEMP, DEFAULT_SLEEP_RGB_OR_COLOR_TEMP = (
"sleep_rgb_or_color_temp",
"color_temp",
)
-DOCS[
- CONF_SLEEP_RGB_OR_COLOR_TEMP
-] = 'Use either `"rgb_color"` or `"color_temp"` in sleep mode. 🌙'
+DOCS[CONF_SLEEP_RGB_OR_COLOR_TEMP] = (
+ 'Use either `"rgb_color"` or `"color_temp"` in sleep mode. 🌙'
+)
CONF_SUNRISE_OFFSET, DEFAULT_SUNRISE_OFFSET = "sunrise_offset", 0
-DOCS[
- CONF_SUNRISE_OFFSET
-] = "Adjust sunrise time with a positive or negative offset in seconds. ⏰"
+DOCS[CONF_SUNRISE_OFFSET] = (
+ "Adjust sunrise time with a positive or negative offset in seconds. ⏰"
+)
CONF_SUNRISE_TIME = "sunrise_time"
DOCS[CONF_SUNRISE_TIME] = "Set a fixed time (HH:MM:SS) for sunrise. 🌅"
CONF_MIN_SUNRISE_TIME = "min_sunrise_time"
-DOCS[
- CONF_MIN_SUNRISE_TIME
-] = "Set the earliest virtual sunrise time (HH:MM:SS), allowing for later sunrises. 🌅"
+DOCS[CONF_MIN_SUNRISE_TIME] = (
+ "Set the earliest virtual sunrise time (HH:MM:SS), allowing for later sunrises. 🌅"
+)
CONF_MAX_SUNRISE_TIME = "max_sunrise_time"
DOCS[CONF_MAX_SUNRISE_TIME] = (
@@ -144,22 +144,22 @@ DOCS[CONF_MAX_SUNRISE_TIME] = (
)
CONF_SUNSET_OFFSET, DEFAULT_SUNSET_OFFSET = "sunset_offset", 0
-DOCS[
- CONF_SUNSET_OFFSET
-] = "Adjust sunset time with a positive or negative offset in seconds. ⏰"
+DOCS[CONF_SUNSET_OFFSET] = (
+ "Adjust sunset time with a positive or negative offset in seconds. ⏰"
+)
CONF_SUNSET_TIME = "sunset_time"
DOCS[CONF_SUNSET_TIME] = "Set a fixed time (HH:MM:SS) for sunset. 🌇"
CONF_MIN_SUNSET_TIME = "min_sunset_time"
-DOCS[
- CONF_MIN_SUNSET_TIME
-] = "Set the earliest virtual sunset time (HH:MM:SS), allowing for later sunsets. 🌇"
+DOCS[CONF_MIN_SUNSET_TIME] = (
+ "Set the earliest virtual sunset time (HH:MM:SS), allowing for later sunsets. 🌇"
+)
CONF_MAX_SUNSET_TIME = "max_sunset_time"
-DOCS[
- CONF_MAX_SUNSET_TIME
-] = "Set the latest virtual sunset time (HH:MM:SS), allowing for earlier sunsets. 🌇"
+DOCS[CONF_MAX_SUNSET_TIME] = (
+ "Set the latest virtual sunset time (HH:MM:SS), allowing for earlier sunsets. 🌇"
+)
CONF_BRIGHTNESS_MODE, DEFAULT_BRIGHTNESS_MODE = "brightness_mode", "default"
DOCS[CONF_BRIGHTNESS_MODE] = (
diff --git a/custom_components/adaptive_lighting/hass_utils.py b/custom_components/adaptive_lighting/hass_utils.py
index cc3257ce..c87d481f 100644
--- a/custom_components/adaptive_lighting/hass_utils.py
+++ b/custom_components/adaptive_lighting/hass_utils.py
@@ -1,4 +1,5 @@
"""Utility functions for HA core."""
+
import logging
from collections.abc import Awaitable, Callable
diff --git a/custom_components/adaptive_lighting/helpers.py b/custom_components/adaptive_lighting/helpers.py
index 2e7ba23e..fa3af6ef 100644
--- a/custom_components/adaptive_lighting/helpers.py
+++ b/custom_components/adaptive_lighting/helpers.py
@@ -34,6 +34,7 @@ def int_to_base36(num: int) -> str:
>>> base36_num = int_to_base36(num)
>>> print(base36_num)
'2N9'
+
"""
alphanumeric_chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 9aec8ba1..06cd2f87 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -1,4 +1,5 @@
"""Switch for the Adaptive Lighting integration."""
+
from __future__ import annotations
import asyncio
diff --git a/test_dependencies.py b/test_dependencies.py
index f8fbf5b9..a07f9ee6 100644
--- a/test_dependencies.py
+++ b/test_dependencies.py
@@ -1,4 +1,5 @@
"""Extracts the dependencies of the components required for testing."""
+
from collections import defaultdict
from pathlib import Path
diff --git a/tests/conftest.py b/tests/conftest.py
index 14f7e644..4b61832d 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -1,4 +1,5 @@
"""Fixtures for testing."""
+
import os
import sys
diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py
index 22384143..4242417a 100644
--- a/tests/test_config_flow.py
+++ b/tests/test_config_flow.py
@@ -1,4 +1,5 @@
"""Test Adaptive Lighting config flow."""
+
from homeassistant import data_entry_flow
from homeassistant.config_entries import SOURCE_IMPORT
from homeassistant.const import CONF_NAME
diff --git a/tests/test_init.py b/tests/test_init.py
index bb0cf977..b6c82673 100644
--- a/tests/test_init.py
+++ b/tests/test_init.py
@@ -1,4 +1,5 @@
"""Tests for Adaptive Lighting integration."""
+
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import CONF_NAME
from homeassistant.setup import async_setup_component
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 018c8965..8664433c 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -1,4 +1,5 @@
"""Tests for Adaptive Lighting switches."""
+
# pylint: disable=protected-access
import asyncio
import itertools
diff --git a/webapp/homeassistant_util_color.py b/webapp/homeassistant_util_color.py
index 33df5cf3..c1541f4c 100644
--- a/webapp/homeassistant_util_color.py
+++ b/webapp/homeassistant_util_color.py
@@ -1,4 +1,5 @@
"""Color util methods."""
+
# Slightly modified from homeassistant.util.color at
# https://github.com/home-assistant/core/blob/798fb3e31a6ba87358adc93a4c5b772b64451712/homeassistant/util/color.py#L14
# to remove the dependency on homeassistant.util.color in sun.py
From 087b445c5a4e08f96633ffbbe068cde38328cc92 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 12 Feb 2024 14:59:44 -0800
Subject: [PATCH 018/361] [pre-commit.ci] pre-commit autoupdate (#922)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.2.0 → v0.2.1](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.0...v0.2.1)
- [github.com/psf/black: 24.1.1 → 24.2.0](https://github.com/psf/black/compare/24.1.1...24.2.0)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
---
.pre-commit-config.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9a1c5f2f..acb6dd76 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.2.0
+ rev: v0.2.1
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 24.1.1
+ rev: 24.2.0
hooks:
- id: black
From 44b517155fd1c5558149742b06997aea55a0c0f6 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:47:14 -0800
Subject: [PATCH 019/361] docs: add jansigu as a contributor for translation
(#924)
* 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 d2f81350..66897461 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -693,6 +693,15 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "jansigu",
+ "name": "Jan-Sigurd Sørensen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8410766?v=4",
+ "profile": "http://www.jan-sigurd.com",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 59ae6524..c80377a6 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -561,6 +561,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 pantan-cymk 🌍 |
 yousaf465 🌍 |
 Pierre Belanger 📖 |
+  Jan-Sigurd Sørensen 🌍 |
From 9d72f0334394f27cb807f36e158f27569ae53c71 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:47:56 -0800
Subject: [PATCH 020/361] docs: add EF01 as a contributor for translation
(#925)
* 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 66897461..a11a461a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -702,6 +702,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "EF01",
+ "name": "EF01",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20759250?v=4",
+ "profile": "https://github.com/EF01",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index c80377a6..0fbef7dc 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -562,6 +562,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 yousaf465 🌍 |
 Pierre Belanger 📖 |
 Jan-Sigurd Sørensen 🌍 |
+  EF01 🌍 |
From cf672a2c51405007df10aeafea11403c3aa5ecef Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:48:47 -0800
Subject: [PATCH 021/361] docs: add MrSnakeSPb as a contributor for translation
(#926)
* 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 a11a461a..94424f86 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -711,6 +711,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "MrSnakeSPb",
+ "name": "Mr Snake",
+ "avatar_url": "https://avatars.githubusercontent.com/u/68160409?v=4",
+ "profile": "https://github.com/MrSnakeSPb",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 0fbef7dc..748f49a8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -564,6 +564,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Jan-Sigurd Sørensen 🌍 |
 EF01 🌍 |
+
+  Mr Snake 🌍 |
+
From bd20939a48958be6f31d9d6206ed934ba31232b3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:49:26 -0800
Subject: [PATCH 022/361] docs: add hungrymachine1 as a contributor for
translation (#927)
* 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 94424f86..1fde1f55 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -720,6 +720,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "hungrymachine1",
+ "name": "hungrymachine1",
+ "avatar_url": "https://avatars.githubusercontent.com/u/73683742?v=4",
+ "profile": "https://github.com/hungrymachine1",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 748f49a8..bf9a65ae 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -566,6 +566,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Mr Snake 🌍 |
+  hungrymachine1 🌍 |
From d991a99b837b080d017a18bb072157482cd790d3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:50:40 -0800
Subject: [PATCH 023/361] docs: add 4D4M-Github as a contributor for
translation (#928)
* 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 1fde1f55..de2dbc2a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -729,6 +729,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "4D4M-Github",
+ "name": "4D4M-Github",
+ "avatar_url": "https://avatars.githubusercontent.com/u/123521171?v=4",
+ "profile": "https://github.com/4D4M-Github",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index bf9a65ae..4cbf2ba7 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -567,6 +567,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Mr Snake 🌍 |
 hungrymachine1 🌍 |
+  4D4M-Github 🌍 |
From 8e1a89efdfedb2c8d58fc4ad0ade04b73dff1d06 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:51:06 -0800
Subject: [PATCH 024/361] docs: add sayaivan as a contributor for translation
(#929)
* 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 de2dbc2a..2e0733f7 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -738,6 +738,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "sayaivan",
+ "name": "Ivan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/49090860?v=4",
+ "profile": "https://github.com/sayaivan",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 4cbf2ba7..91dd9ac6 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -568,6 +568,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Mr Snake 🌍 |
 hungrymachine1 🌍 |
 4D4M-Github 🌍 |
+  Ivan 🌍 |
From ef54669e9a8418880d8d814ecea63d12b0a51fb9 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:51:33 -0800
Subject: [PATCH 025/361] docs: add Fllorent0D as a contributor for translation
(#930)
* 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 2e0733f7..54bf4372 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -747,6 +747,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "Fllorent0D",
+ "name": "Florent Cardoen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/13313104?v=4",
+ "profile": "https://www.floca.be",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 91dd9ac6..4791e437 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -569,6 +569,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 hungrymachine1 🌍 |
 4D4M-Github 🌍 |
 Ivan 🌍 |
+  Florent Cardoen 🌍 |
From e6ea8eee7d7ab4a0ff13d31d54683daa805ea662 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:52:10 -0800
Subject: [PATCH 026/361] docs: add moemeli as a contributor for translation
(#931)
* 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 54bf4372..1e0eb60c 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -756,6 +756,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "moemeli",
+ "name": "moemeli",
+ "avatar_url": "https://avatars.githubusercontent.com/u/73445184?v=4",
+ "profile": "https://github.com/moemeli",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 4791e437..12dc6b8e 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -570,6 +570,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 4D4M-Github 🌍 |
 Ivan 🌍 |
 Florent Cardoen 🌍 |
+  moemeli 🌍 |
From a1ce600db188b623f15eb586db5968f371898ee7 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 17 Feb 2024 10:52:33 -0800
Subject: [PATCH 027/361] docs: add saya6k as a contributor for translation
(#932)
* 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 1e0eb60c..e4aa63a4 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -765,6 +765,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "saya6k",
+ "name": "saya6k",
+ "avatar_url": "https://avatars.githubusercontent.com/u/63517312?v=4",
+ "profile": "https://github.com/saya6k",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 12dc6b8e..b5fa6293 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -571,6 +571,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Ivan 🌍 |
 Florent Cardoen 🌍 |
 moemeli 🌍 |
+  saya6k 🌍 |
From 9fbc5ec0ad85793495563e450995175360a0e6d9 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 17 Feb 2024 19:56:12 +0100
Subject: [PATCH 028/361] Translations update from Hosted Weblate (#879)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Translated using Weblate (Danish)
Currently translated at 85.6% (131 of 153 strings)
Co-authored-by: Emil Friis Osmann
Co-authored-by: Hosted Weblate
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/da/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Russian)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Mr Snake
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ru/
Translation: Adaptive Lighting/Adaptive Lighting
* Added translation using Weblate (Bengali)
Co-authored-by: Hosted Weblate
Co-authored-by: Jarif Ansath Aorko
* Translated using Weblate (Japanese)
Currently translated at 48.3% (74 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: pantan-cymk
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ja/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Czech)
Currently translated at 100.0% (153 of 153 strings)
Translated using Weblate (Czech)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Martin Štefany
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/cs/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Hungarian)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Szalay Ádám
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/hu/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Indonesian)
Currently translated at 100.0% (153 of 153 strings)
Added translation using Weblate (Indonesian)
Co-authored-by: Hosted Weblate
Co-authored-by: Ivan D. Firmansyah
Co-authored-by: sayaivan
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/id/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (French)
Currently translated at 100.0% (153 of 153 strings)
Translated using Weblate (French)
Currently translated at 84.9% (130 of 153 strings)
Co-authored-by: Florent Cardoen
Co-authored-by: Hosted Weblate
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/fr/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Finnish)
Currently translated at 56.8% (87 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Mikko Eloranta
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/fi/
Translation: Adaptive Lighting/Adaptive Lighting
* Added translation using Weblate (Korean)
Co-authored-by: saya6k
* Translated using Weblate (Slovak)
Currently translated at 98.0% (150 of 153 strings)
Translated using Weblate (Slovak)
Currently translated at 98.0% (150 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Martin Štefany
Co-authored-by: Unambiguous
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/sk/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Norwegian Bokmål)
Currently translated at 100.0% (153 of 153 strings)
Translated using Weblate (Norwegian Bokmål)
Currently translated at 58.1% (89 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Jan-Sigurd Sørensen
Co-authored-by: Stian Lindvik
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/nb_NO/
Translation: Adaptive Lighting/Adaptive Lighting
---------
Co-authored-by: Emil Friis Osmann
Co-authored-by: Mr Snake
Co-authored-by: Jarif Ansath Aorko
Co-authored-by: pantan-cymk
Co-authored-by: Martin Štefany
Co-authored-by: Szalay Ádám
Co-authored-by: Ivan D. Firmansyah
Co-authored-by: Florent Cardoen
Co-authored-by: Mikko Eloranta
Co-authored-by: saya6k
Co-authored-by: Unambiguous
Co-authored-by: Jan-Sigurd Sørensen
Co-authored-by: Stian Lindvik
---
.../adaptive_lighting/translations/bn.json | 1 +
.../adaptive_lighting/translations/cs.json | 54 ++--
.../adaptive_lighting/translations/da.json | 116 +++++++-
.../adaptive_lighting/translations/fi.json | 71 ++++-
.../adaptive_lighting/translations/fr.json | 97 ++++++-
.../adaptive_lighting/translations/hu.json | 173 +++++++++++-
.../adaptive_lighting/translations/id.json | 202 ++++++++++++++
.../adaptive_lighting/translations/ja.json | 40 ++-
.../adaptive_lighting/translations/ko.json | 1 +
.../adaptive_lighting/translations/nb.json | 256 ++++++++++++++----
.../adaptive_lighting/translations/ru.json | 94 ++++++-
.../adaptive_lighting/translations/sk.json | 169 +++++++++++-
12 files changed, 1179 insertions(+), 95 deletions(-)
create mode 100644 custom_components/adaptive_lighting/translations/bn.json
create mode 100644 custom_components/adaptive_lighting/translations/id.json
create mode 100644 custom_components/adaptive_lighting/translations/ko.json
diff --git a/custom_components/adaptive_lighting/translations/bn.json b/custom_components/adaptive_lighting/translations/bn.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/bn.json
@@ -0,0 +1 @@
+{}
diff --git a/custom_components/adaptive_lighting/translations/cs.json b/custom_components/adaptive_lighting/translations/cs.json
index 1f533935..3a7d9788 100644
--- a/custom_components/adaptive_lighting/translations/cs.json
+++ b/custom_components/adaptive_lighting/translations/cs.json
@@ -17,13 +17,13 @@
"options": {
"step": {
"init": {
- "title": "Nastavení adaptivního osvětlení",
+ "title": "Nastavení Adaptivního osvětlení",
"description": "Všechna nastavení komponenty Adaptivního osvětlení. Názvy možností odpovídají nastavení YAML. Pokud máte v konfiguraci YAML definovánu položku 'adaptive_lighting', nezobrazí se žádné možnosti.",
"data": {
- "lights": "osvětlení",
- "initial_transition": "initial_transition: Prodlení pro změnu z 'vypnuto' do 'zapnuto' (sekundy)",
- "sleep_transition": "sleep_transition: Prodleva pro přepnutí do „režimu spánku“ (sekundy)",
- "interval": "interval: Prodleva pro změny osvětlení (v sekundách)",
+ "lights": "lights: Seznam světel (entity_id), které mají být ovládané (může být prázdný). 🌟",
+ "initial_transition": "",
+ "sleep_transition": "",
+ "interval": "",
"max_brightness": "max_brightness: Nejvyšší jas osvětlení během cyklu. (%)",
"max_color_temp": "max_color_temp: Nejchladnější odstín cyklu teploty barev. (Kelvin)",
"min_brightness": "min_brightness: Nejnižší jas osvětlení během cyklu. (%)",
@@ -31,24 +31,24 @@
"only_once": "only_once: Přizpůsobení osvětlení pouze při rozsvícení.",
"prefer_rgb_color": "prefer_rgb_color: Upřednostněte použití 'rgb_color' před 'color_temp'.",
"separate_turn_on_commands": "separate_turn_on_commands: Oddělení příkazů pro každý atribut (barva, jas, atd.) v atributu 'light.turn_on' (vyžadováno pro některá světla).",
- "send_split_delay": "send_split_delay: prodleva mezi příkazy (milisekundy), když je použit atribut 'separate_turn_on_commands'. Může zajistit správné zpracování obou příkazů.",
- "sleep_brightness": "sleep_brightness, Nastavení jasu pro režim spánku. (%)",
- "sleep_rgb_or_color_temp": "sleep_rgb_or_color_temp, použijte 'rgb_color' nebo 'color_temp'",
- "sleep_rgb_color": "sleep_rgb_color, v RGB",
- "sleep_color_temp": "sleep_color_temp: Nastavení teploty barev pro režim spánku. (v Kelvinech)",
- "sunrise_offset": "sunrise_offset: Jak dlouho před (-) nebo po (+) definovat bod cyklu východu slunce (+/- v sekundách)",
- "sunrise_time": "sunrise_time: Manuální přepsání času východu slunce, pokud je „None“, použije se skutečný čas východu slunce ve vaší lokalitě (HH:MM:SS)",
- "max_sunrise_time": "max_sunrise_time: Ruční přepsání nejpozdějšího času východu slunce, pokud je „None“, použije se skutečný čas východu slunce vaší lokality (HH:MM:SS)",
- "sunset_offset": "sunset_offset: Jak dlouho před (-) nebo po (+) definovat bod cyklu západu slunce (+/- v sekundách)",
- "sunset_time": "sunset_time: Ruční přepsání času západu slunce, pokud je „None“, použije se skutečný čas západu slunce vaší lokality (HH:MM:SS)",
- "min_sunset_time": "min_sunset_time: Ruční přepsání nejdřívějšího času západu slunce, pokud je „None“, použije se skutečný čas západu slunce vaší lokality (HH:MM:SS)",
+ "send_split_delay": "",
+ "sleep_brightness": "",
+ "sleep_rgb_or_color_temp": "",
+ "sleep_rgb_color": "",
+ "sleep_color_temp": "",
+ "sunrise_offset": "",
+ "sunrise_time": "",
+ "max_sunrise_time": "",
+ "sunset_offset": "",
+ "sunset_time": "",
+ "min_sunset_time": "",
"take_over_control": "take_over_control: Je-li volán 'light.turn_on' z jiného zdroje, než Adaptivním osvětlením, když je světlo již rozsvíceno, přestaňte toto světlo ovládat, dokud není vypnuto -> zapnuto (nebo i vypínačem).",
"detect_non_ha_changes": "detect_non_ha_changes: detekuje všechny změny >10% provedených pro osvětlení (také mimo HA), vyžaduje povolení atributu 'take_over_control' (každý 'interval' spouští 'homeassistant.update_entity'!)",
- "transition": "transition: doba přechodu při změně osvětlení (sekundy)",
- "adapt_delay": "adapt_delay: prodleva mezi zapnutím světla ( sekundy) a projevem změny v Adaptivní osvětlení. Může předcházet blikání.",
+ "transition": "",
+ "adapt_delay": "",
"transition_until_sleep": "transition_until_sleep: Pokud je zapnuto, Adaptive Lighting bude zacházet s nastavením spánku jako s minimem, na tyto hodnoty přejde po západu slunce. 🌙",
"multi_light_intercept": "multi_light_intercept: Zachytí a přizpůsobí volání `light.turn_on`, která se zaměřují na více světel. ➗⚠️ To může vést k rozdělení jednoho volání `light.turn_on` na více volání, např. když jsou světla v různých vypínačích. Vyžaduje, aby bylo povoleno `intercept`.",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Při prvním zapnutí světel. Je-li nastaveno na `true`, AL se přizpůsobí pouze tehdy, je-li vyvoláno `light.turn_on` bez zadání barvy nebo jasu. ❌🌈 Tím se např. zabrání přizpůsobení při aktivaci scény. Pokud je `false`, AL se přizpůsobí bez ohledu na přítomnost barvy nebo jasu v počátečních `service_data`. Vyžaduje zapnutí funkce `take_over_control`. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Jenom při prvním zapnutí světel. Je-li nastaveno na `true`, AL udělá přizpůsobení pouze tehdy, je-li vyvoláno `light.turn_on` bez zadání barvy nebo jasu. ❌🌈 Tím se zabrání přizpůsobení např. při aktivaci scény. Pokud je `false`, AL udělá přizpůsobení bez ohledu na přítomnost barvy nebo jasu `service_data` volání. Vyžaduje zapnutí `take_over_control`. 🕵️ ",
"skip_redundant_commands": "skip_redundant_commands: Přeskočí odesílání adaptačních příkazů, jejichž cílový stav se již rovná známému stavu světla. Minimalizuje síťový provoz a v některých situacích zlepšuje odezvu adaptace. 📉Zakažte, pokud se fyzické stavy světel dostanou mimo synchronizaci se zaznamenaným stavem HA.",
"intercept": "intercept: Zachytit a přizpůsobit volání `light.turn_on` a umožnit tak okamžité přizpůsobení barev a jasu. 🏎️ Zakažte pro světla, která nepodporují `light.turn_on` s barvou a jasem najednou.",
"include_config_in_attributes": "include_config_in_attributes: Zobrazit všechny možnosti jako atributy přepínače v Home Assistant, pokud je nastaveno na `true`. 📝"
@@ -59,16 +59,16 @@
"sleep_transition": "Doba trvání přechodu do režimu spánku v sekundách. 😴",
"autoreset_control_seconds": "Automatické resetování ručního ovládání po určitém počtu sekund. Nastavením na 0 se vypne. ⏲️",
"min_sunset_time": "Nastavte nejbližší virtuální čas západu slunce (HH:MM:SS), abyste mohli nastavit pozdější západ slunce. 🌅",
- "sleep_brightness": "Jas světel v procentech během režimu spánku",
+ "sleep_brightness": "Jas světel během režimu spánku (v %). 😴",
"min_sunrise_time": "Nastavte nejbližší virtuální čas východu slunce (HH:MM:SS), abyste mohli nastavit pozdější východ slunce. 🌅",
"interval": "Frekvence přizpůsobení světel v sekundách. 🔄",
"adapt_delay": "Doba čekání (v sekundách) mezi zapnutím světla a změnou adaptivního osvětlení. Mohlo by to pomoci zabránit blikání. ⏲️",
"sleep_rgb_color": "RGB barva v režimu spánku (používané když `sleep_rgb_or_color_temp` je \"rgb_color\"). 🌈",
- "sunrise_offset": "Upravte čas východu slunce s pozitivním nebo negativním posunem v sekundách. ⏰",
+ "sunrise_offset": "Upravte čas východu slunce o sekundy dopředu nebo dozadu. ⏰",
"transition": "Doba trvání přechodu změny světel v sekundách. 🕑",
"brightness_mode": "Výběr režimu jasu. Možné hodnoty jsou `default`, `linear` a `tanh` (používá `brightness_mode_time_dark` a `brightness_mode_time_light`). 📈",
"brightness_mode_time_light": "(Ignorováno, pokud `brightness_mode='default'`) Doba trvání v sekundách pro zvýšení/snížení jasu po/před východem/západem slunce. 📈📉.",
- "sunset_offset": "Nastavte čas západu slunce s kladným nebo záporným posunem v sekundách. ⏰",
+ "sunset_offset": "Upravte čas západu slunce o sekundy dopředu nebo dozadu. ⏰",
"sunset_time": "Nastavit pevný čas (HH:MM:SS) pro západ slunce. 🌅",
"max_sunset_time": "Nastavte nejpozdější virtuální čas západu slunce (HH:MM:SS), což umožňuje dřívější západ slunce. 🌅",
"sunrise_time": "Nastavit pevný čas (HH:MM:SS) pro východ slunce. 🌅",
@@ -88,13 +88,13 @@
"change_switch_settings": {
"fields": {
"sleep_brightness": {
- "description": "Jas světel v procentech během režimu spánku"
+ "description": "Jas světel během režimu spánku (v %). 😴"
},
"detect_non_ha_changes": {
"description": "Zjistí a zastaví adaptace při změnách stavu, které nejsou ve stavu `light.turn_on`. Nutno mít zapnutou funkci `take_over_control`. 🕵️ Upozornění: ⚠️ Některá světla mohou falešně indikovat stav 'zapnuto', což může vést k neočekávanému zapnutí světel. Pokud se s takovými problémy setkáte, zakažte tuto funkci."
},
"sunrise_offset": {
- "description": "Upravte čas východu slunce s pozitivním nebo negativním posunem v sekundách. ⏰"
+ "description": "Upravte čas východu slunce o sekundy dopředu nebo dozadu. ⏰"
},
"max_sunrise_time": {
"description": "Nastavte nejpozdější virtuální čas východu slunce (HH:MM:SS), což umožňuje dřívější východ slunce. 🌅"
@@ -145,7 +145,7 @@
"description": "Doba čekání (v sekundách) mezi zapnutím světla a změnou adaptivního osvětlení. Mohlo by to pomoci zabránit blikání."
},
"only_once": {
- "description": "Přizpůsobit světla pouze při zapnutí(`true`) nebo je nechat pokaždé přizpůsobit (`false`). 🔄"
+ "description": "Přizpůsobit světla pouze při zapnutí (`true`) nebo je průběžně přizpůsobovat (`false`). 🔄"
},
"use_defaults": {
"description": "Nastaví výchozí hodnoty, které nebyly zadány v tomto volání služby. Možnosti: \"stávající\" (výchozí, zachovává aktuální hodnoty), \"výchozí\" (obnovuje do výchozích hodnot) nebo \"konfigurace\" (vrací výchozí hodnoty konfigurace přepínače). ⚙️"
@@ -160,7 +160,7 @@
"description": "Nejchladnější teplota barvy v Kelvinech. ❄️"
},
"sunset_offset": {
- "description": "Nastavte čas západu slunce s kladným nebo záporným posunem v sekundách. ⏰"
+ "description": "Upravte čas západu slunce o sekundy dopředu nebo dozadu. ⏰"
},
"send_split_delay": {
"description": "Zpoždění (ms) mezi příkazy `separate_turn_on_commands` pro světla, která nepodporují současné nastavení jasu a barvy. ⏲️"
@@ -195,7 +195,7 @@
"description": "Zda upřednostnit nastavení barev RGB před teplotou barev světla, pokud je to možné. 🌈"
},
"lights": {
- "description": "Světlo (nebo seznam světel), na které se má nastavení použít. 💡"
+ "description": "Světlo (nebo seznam světel), na které se má nastavení aplikovat. 💡"
},
"transition": {
"description": "Doba trvání přechodu změny světel v sekundách. 🕑"
diff --git a/custom_components/adaptive_lighting/translations/da.json b/custom_components/adaptive_lighting/translations/da.json
index 5b63c115..f0ff8742 100644
--- a/custom_components/adaptive_lighting/translations/da.json
+++ b/custom_components/adaptive_lighting/translations/da.json
@@ -38,7 +38,28 @@
"sunset_time": "sunset_time: Manuel overstyring af solnedgangstidspunktet, hvis 'None', bruges det egentlige tidspunkt for din lokation. (HH:MM:SS)",
"take_over_control": "take_over_control: Hvis andet end Adaptiv Belysning kalder 'light.turn_on' på et lys der allerede er tændt, afbryd adaptering af lyset indtil at det tændes igen.",
"detect_non_ha_changes": "detect_non_ha_changes: Registrer alle ændringer på >10% på et lys (også udenfor HA), kræver at 'take_over_control' er slået til (kalder 'homeassistant.update_entity' hvert 'interval'!)",
- "transition": "Overgangsperiode når en ændring i lyset udføres (i sekunder)"
+ "transition": "Overgangsperiode når en ændring i lyset udføres (i sekunder)",
+ "transition_until_sleep": "overgang_til_sove: Når aktiveret, vil adaptiv belysning behandle søvnindstillinger som minimum, og overgår til disse værdier efter solnedgang. 🌙",
+ "adapt_only_on_bare_turn_on": "tilpas_kun_ved_enkelt_tænd: Når du tænder lys for første gang. Hvis indstillet til 'true', tilpasser AL kun, hvis 'lys.tænd' er kaldt uden at angive farve eller lysstyrke. ❌🌈 Dette forhindrer f.eks. tilpasning, når du aktiverer en scene. Hvis indstillet til 'false' tilpasser AL sig uanset tilstanden af farve eller lysstyrke i den oprindelige 'service_data'. Har brug for at 'take_over_control' er aktiveret. 🕵️ "
+ },
+ "data_description": {
+ "interval": "Frekvens til at tilpasse lysene, i sekunder. 🔄",
+ "sleep_brightness": "Lysstyrkeprocent af lys i søvntilstand. 😴",
+ "transition": "Varighed af overgang, når lys ændres, i sekunder. 🕑",
+ "sleep_rgb_or_color_temp": "Brug enten `\"rgb_farve\"` eller `\"farve_temp\"` i søvntilstand. 🌙",
+ "sleep_transition": "Varigheden af overgangen, når \"sovetilstand\" skiftes, i sekunder. 😴",
+ "sunrise_time": "Sæt en fast tid (HH:MM:SS) for solopgang. 🌅",
+ "sunset_time": "Sæt en fast tid (HH:MM:SS) for solnedgang. 🌇",
+ "min_sunrise_time": "Indstil den tidligste virtuelle solopgangstid (HH:MM:SS), hvilket giver mulighed for senere solopgange. 🌅",
+ "max_sunrise_time": "Indstil den seneste virtuelle solopgangstid (HH:MM:SS), hvilket giver mulighed for tidligere solopgange. 🌅",
+ "autoreset_control_seconds": "Nulstil automatisk den manuelle styring efter et antal sekunder. Indstil til 0 for at deaktivere. ⏲️",
+ "min_sunset_time": "Indstil den tidligste virtuelle solnedgangstid (HH:MM:SS), hvilket giver mulighed for senere solnedgange. 🌇",
+ "adapt_delay": "Ventetid (sekunder) mellem lyset tændes og Adaptive Lighting anvender ændringer. Kan hjælpe med at undgå flimren. ⏲️",
+ "sunset_offset": "Juster solnedgang tid med et positivt eller negativt offset, i sekunder. ⏰",
+ "sunrise_offset": "Juster solopgangstiden med en positiv eller negativ offset på få sekunder. ⏰",
+ "max_sunset_time": "Indstil den seneste virtuelle solnedgangstid (HH:MM:SS), hvilket giver mulighed for tidligere solnedgange. 🌇",
+ "sleep_color_temp": "Farvetemperatur i søvntilstand (bruges når `sleep_rgb_or_color_temp` er `color_temp`) i Kelvin. 😴",
+ "brightness_mode": "Lysstyrketilstand til brug. Mulige værdier er \"default\", \"linear\" og \"tanh\" (bruger \"brightness_mode_time_dark\" og \"brightness_mode_time_light\"). 📈"
}
}
},
@@ -46,5 +67,98 @@
"option_error": "Ugyldig indstilling",
"entity_missing": "Et udvalgt lys blev ikke fundet "
}
+ },
+ "services": {
+ "apply": {
+ "description": "Anvender de aktuelle Adaptive Lighting indstillinger på lys.",
+ "fields": {
+ "prefer_rgb_color": {
+ "description": "Om man vil foretrække RGB-farvejustering frem for lysfarvetemperatur, når det er muligt. 🌈"
+ },
+ "transition": {
+ "description": "Varighed af overgang, når lys ændres, i sekunder. 🕑"
+ },
+ "turn_on_lights": {
+ "description": "Om lys der i øjeblikket er slukket, skal tændes. 🔆"
+ },
+ "adapt_brightness": {
+ "description": "Om lysstyrken skal tilpasses. 🌞"
+ },
+ "lights": {
+ "description": "Et lys (eller liste over lys) som indstillingerne skal anvendes til. 💡"
+ },
+ "adapt_color": {
+ "description": "Om farven på støttelys skal tilpasses. 🌈"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "fields": {
+ "entity_id": {
+ "description": "Entity ID af kontakten. 📝"
+ },
+ "turn_on_lights": {
+ "description": "Om lys der i øjeblikket er slukket, skal tændes. 🔆"
+ },
+ "sleep_transition": {
+ "description": "Varigheden af overgangen, når \"sovetilstand\" skiftes, i sekunder. 😴"
+ },
+ "only_once": {
+ "description": "Tilpas kun lys, når de er tændt ('sand'), eller fortsæt med at tilpasse dem ('falsk'). 🔄"
+ },
+ "prefer_rgb_color": {
+ "description": "Om man vil foretrække RGB-farvejustering frem for lysfarvetemperatur, når det er muligt. 🌈"
+ },
+ "sleep_brightness": {
+ "description": "Lysstyrkeprocent af lys i søvntilstand. 😴"
+ },
+ "sunrise_time": {
+ "description": "Sæt en fast tid (HH:MM:SS) til solopgang. 🌅"
+ },
+ "sunrise_offset": {
+ "description": "Juster solopgangstiden med et positivt eller negativt offset, i sekunder. ⏰"
+ },
+ "sunset_offset": {
+ "description": "Juster solnedgang tid med et positivt eller negativt offset, i sekunder. ⏰"
+ },
+ "sunset_time": {
+ "description": "Sæt en fast tid (HH:MM:SS) for solnedgang. 🌇"
+ },
+ "max_sunrise_time": {
+ "description": "Indstil den seneste virtuelle solopgangstid (HH:MM:SS), hvilket giver mulighed for tidligere solopgange. 🌅"
+ },
+ "min_sunset_time": {
+ "description": "Indstil den tidligste virtuelle solnedgangstid (HH:MM:SS), hvilket giver mulighed for senere solnedgange. 🌇"
+ },
+ "transition": {
+ "description": "Varighed af overgang, når lys ændres, i sekunder. 🕑"
+ },
+ "autoreset_control_seconds": {
+ "description": "Nulstil automatisk den manuelle styring efter et antal sekunder. Indstil til 0 for at deaktivere. ⏲️"
+ },
+ "adapt_delay": {
+ "description": "Ventetid (sekunder) mellem lyset tændes og Adaptive Lighting anvender ændringer. Kan hjælpe med at undgå flimren. ⏲️"
+ },
+ "max_brightness": {
+ "description": "Maksimal lysstyrkeprocent. 💡"
+ },
+ "max_color_temp": {
+ "description": "Koldeste farvetemperatur i Kelvin. ❄️"
+ },
+ "min_brightness": {
+ "description": "Mindste lysstyrkeprocent. 💡"
+ },
+ "min_color_temp": {
+ "description": "Varmste farvetemperatur i Kelvin. 🔥"
+ },
+ "sleep_color_temp": {
+ "description": "Farvetemperatur i søvntilstand (bruges når `sleep_rgb_or_color_temp` er `color_temp`) i Kelvin. 😴"
+ }
+ },
+ "description": "Skift de indstillinger du ønsker i kontakten. Alle muligheder her er de samme som i konfigurationsflowet."
+ },
+ "set_manual_control": {
+ "description": "Markér om et lys er 'manuelt kontrolleret'."
+ }
}
}
diff --git a/custom_components/adaptive_lighting/translations/fi.json b/custom_components/adaptive_lighting/translations/fi.json
index 0967ef42..7acd9578 100644
--- a/custom_components/adaptive_lighting/translations/fi.json
+++ b/custom_components/adaptive_lighting/translations/fi.json
@@ -1 +1,70 @@
-{}
+{
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sleep_brightness": {
+ "description": "Valojen kirkkausmäärä prosenteissa unitilassa (sleep mode)."
+ },
+ "sunrise_offset": {
+ "description": "Muuta auringonnousun aikaa positiivisella tai negatiivisella korjauksella määritettynä sekunneissa."
+ },
+ "initial_transition": {
+ "description": "Ensimmäisen siirtymän kesto sekunneissa, kun valot kytketään 'off'-tilasta 'on'-tilaan."
+ },
+ "autoreset_control_seconds": {
+ "description": "Resetoi manuaalisen ohjauksen automaattisesti määritetyn sekuntimäärän jälkeen. Aseta arvoon 0 jos et halua käyttää asetusta."
+ },
+ "only_once": {
+ "description": "Adaptoi valoja vain kun ne kytketään päälle ('true') tai adaptoi niitä jatkuvasti ('false')"
+ },
+ "max_color_temp": {
+ "description": "Kylmin värilämpötila Kelvin-asteikolla."
+ },
+ "sunset_offset": {
+ "description": "Muuta auringonlaskun aikaa positiivisella tai negatiivisella korjauksella määritettynä sekunneissa."
+ },
+ "send_split_delay": {
+ "description": "Viive (ms) `separate_turn_on_commands` välillä valoille, jotka eivät tue yhtäaikaista kirkkauden ja värilämpötilan säätöä."
+ },
+ "transition": {
+ "description": "Valojen siirtymän kesto sekunneissa, kun valaistusta muutetaan."
+ }
+ }
+ },
+ "apply": {
+ "description": "Asettaa nykyiset Adaptiivisen Valaistuksen asetukset valoihin.",
+ "fields": {
+ "lights": {
+ "description": "Valo (tai lista valoista) joihin näitä asetuksia sovelletaan."
+ },
+ "transition": {
+ "description": "Valojen siirtymän kesto sekunneissa, kun valaistusta muutetaan."
+ }
+ }
+ }
+ },
+ "title": "Adaptiivinen valaistus",
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "autoreset_control_seconds": "Resetoi manuaalisen ohjauksen automaattisesti määritetyn sekuntimäärän jälkeen. Aseta arvoon 0 jos et halua käyttää asetusta.",
+ "sleep_brightness": "Valojen kirkkausmäärä prosenteissa unitilassa (sleep mode).",
+ "sunrise_offset": "Muuta auringonnousun aikaa positiivisella tai negatiivisella korjauksella määritettynä sekunneissa.",
+ "transition": "Valojen siirtymän kesto sekunneissa, kun valaistusta muutetaan.",
+ "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öä."
+ }
+ }
+ }
+ },
+ "config": {
+ "step": {
+ "user": {
+ "title": "Valitse nimi tälle Adaptiivisen Valaistuksen esiintymälle"
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/fr.json b/custom_components/adaptive_lighting/translations/fr.json
index 26728081..a3bc6bc5 100644
--- a/custom_components/adaptive_lighting/translations/fr.json
+++ b/custom_components/adaptive_lighting/translations/fr.json
@@ -40,7 +40,12 @@
"take_over_control": "take_over_control : Si quelque chose d'autre que l'éclairage adaptatif appelle « light.turn_on » alors qu'une lampe est déjà allumée, cesser d'adapter cette lampe jusqu'à ce qu'elle (ou le commutateur) soit éteinte puis rallumée.",
"detect_non_ha_changes": "detect_non_ha_changes : Détecter tout changement de plus de 10 % appliqué aux lampes (même en dehors de HA). Nécessite que « take_over_control » soit activé. (Appelle « homeassistant.update_entity » tous les « interval » !)",
"transition": "transition : Durée de la transition (en secondes) des changements appliqués aux lampes.",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Quand on allume les lumières au départ. Si le paramètre est < < vrai > > , AL s ' adapte uniquement si l ' on invoque < < light.turn_on > > sans préciser la couleur ou la luminosité. ❌ Ceci, par exemple, empêche l'adaptation lors de l'activation d'une scène. Si `false`, AL s'adapte indépendamment de la présence de couleur ou de luminosité dans le `service_data' initial. Besoins `take_over_control` activé. 🕵∫ "
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Quand on allume les lumières au départ. Si le paramètre est < < vrai > > , AL s ' adapte uniquement si l ' on invoque < < light.turn_on > > sans préciser la couleur ou la luminosité. ❌ Ceci, par exemple, empêche l'adaptation lors de l'activation d'une scène. Si `false`, AL s'adapte indépendamment de la présence de couleur ou de luminosité dans le `service_data' initial. Besoins `take_over_control` activé. 🕵∫ ",
+ "multi_light_intercept": "multi_light_intercept : Intercepte et adapte les appels à `light.turn_on` qui ciblent plusieurs lumières. ➗⚠️ Cela peut entraîner la division d'un seul appel `light.turn_on` en plusieurs appels, par exemple, lorsque les lumières sont dans différents interrupteurs. Nécessite que `intercept` soit activé.",
+ "intercept": "intercept : Intercepter et adapter les appels à `light.turn_on` pour permettre une adaptation instantanée de la couleur et de la luminosité. 🏎️ Désactivez cette option pour les lumières qui ne prennent pas en charge `light.turn_on` avec couleur et luminosité.",
+ "include_config_in_attributes": "include_config_in_attributes : Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur `true`. 📝",
+ "skip_redundant_commands": "skip_redundant_commands : Évite d'envoyer des commandes d'adaptation lorsque l'état cible est déjà égal à l'état connu de la lumière. Minimise le trafic réseau et améliore la réactivité de l'adaptation dans certaines situations. 📉 Désactivez si les états physiques des lumières ne correspondent pas à l'état enregistré de Home Assistant.",
+ "transition_until_sleep": "transition_until_sleep : Lorsqu'activée, l'Éclairage Adaptatif considérera les paramètres de sommeil comme le minimum, effectuant la transition vers ces valeurs après le coucher du soleil. 🌙"
},
"data_description": {
"interval": "Fréquence d'adaptation des lumières, en secondes. 🔄",
@@ -53,7 +58,18 @@
"sunrise_offset": "Ajuster l'heure du lever de soleil avec un décalage positif ou négatif en secondes. ⏰",
"transition": "Durée de la transition des changements lumineux, en secondes. 🕑",
"initial_transition": "Durée de la première transition des lampes passant de `off` à `on` en secondes. ⏲️",
- "sleep_transition": "Durée de la transition quand le \"mode sommeil\" est déclenché en secondes. 😴"
+ "sleep_transition": "Durée de la transition quand le \"mode sommeil\" est déclenché en secondes. 😴",
+ "min_sunset_time": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil ultérieurs. 🌇",
+ "sleep_rgb_color": "Couleur RGB en mode sommeil (utilisée lorsque `sleep_rgb_or_color_temp` est `rgb_color`). 🌈",
+ "brightness_mode_time_light": "(Ignoré si `brightness_mode='default'`) La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
+ "sunset_time": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌅",
+ "sunrise_time": "Définir une heure fixe (HH:MM:SS) pour le lever du soleil. 🌅",
+ "brightness_mode_time_dark": "(Ignoré si brightness_mode='default') La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
+ "sleep_rgb_or_color_temp": "Utilisez soit `\"rgb_color\"` soit `\"color_temp\"` en mode sommeil. 🌙",
+ "min_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus précoce (HH:MM:SS), permettant des levers de soleil ultérieurs. 🌅",
+ "adapt_delay": "Temps d'attente (en secondes) entre l'allumage de la lumière et l'application des changements par l'Éclairage Adaptatif. Peut aider à éviter les scintillements. ⏲️",
+ "max_sunset_time": "Définir l'heure virtuelle de coucher du soleil la plus tardive (HH:MM:SS), permettant des couchers de soleil plus précoces. 🌇",
+ "max_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus précoces. 🌅"
}
}
},
@@ -103,6 +119,54 @@
},
"sleep_transition": {
"description": "Durée de la transition quand le \"mode sommeil\" est déclenché en secondes. 😴"
+ },
+ "min_brightness": {
+ "description": "Pourcentage de luminosité minimum. 💡"
+ },
+ "sunrise_time": {
+ "description": "Définir une heure fixe (HH:MM:SS) pour le lever du soleil. 🌅"
+ },
+ "max_brightness": {
+ "description": "Pourcentage de luminosité maximale. 💡"
+ },
+ "take_over_control": {
+ "description": "Désactiver l'Éclairage Adaptatif si une autre source appelle `light.turn_on` lorsque les lumières sont allumées et en cours d'adaptation. Notez que cela appelle `homeassistant.update_entity` à chaque `intervalles` ! 🔒"
+ },
+ "use_defaults": {
+ "description": "Définit les valeurs par défaut non spécifiées dans cet appel de service. Options : \"current\" (par défaut, conserve les valeurs actuelles), \"factory\" (réinitialise aux valeurs par défaut documentées) ou \"configuration\" (revient aux valeurs par défaut de la configuration de l'interrupteur). ⚙️"
+ },
+ "sunset_time": {
+ "description": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌅"
+ },
+ "min_sunset_time": {
+ "description": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil ultérieurs. 🌇"
+ },
+ "max_sunrise_time": {
+ "description": "Définir l'heure virtuelle du lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus précoces. 🌅"
+ },
+ "min_color_temp": {
+ "description": "Température de couleur la plus chaude en Kelvin. 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Utilisez soit `\"rgb_color\"` soit `\"color_temp\"` en mode sommeil. 🌙"
+ },
+ "turn_on_lights": {
+ "description": "Indique s'il faut allumer les lumières qui sont actuellement éteintes. 🔆"
+ },
+ "include_config_in_attributes": {
+ "description": "Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur `true`. 📝"
+ },
+ "sleep_rgb_color": {
+ "description": "Couleur RGB en mode sommeil (utilisée lorsque `sleep_rgb_or_color_temp` est `rgb_color`). 🌈"
+ },
+ "adapt_delay": {
+ "description": "Temps d'attente (en secondes) entre l'allumage de la lumière et l'application des changements par l'Éclairage Adaptatif. Peut aider à éviter les scintillements. ⏲️"
+ },
+ "separate_turn_on_commands": {
+ "description": "Utilisez des appels distincts à `light.turn_on` pour la couleur et la luminosité, nécessaire pour certains types de lumières. 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "Indique s'il faut privilégier l'ajustement de la couleur RGB plutôt que la température de couleur de la lumière lorsque c'est possible. 🌈"
}
},
"description": "Changez les réglages que vous souhaitez dans le commutateur. Toutes les options ici sont les mêmes que dans le flux de configuration."
@@ -115,8 +179,37 @@
},
"transition": {
"description": "Durée de la transition des changements lumineux, en secondes. 🕑"
+ },
+ "entity_id": {
+ "description": "L'`entity_id` de l'interrupteur avec les paramètres à appliquer. 📝"
+ },
+ "adapt_brightness": {
+ "description": "Indique s'il faut adapter la luminosité de la lumière. 🌞"
+ },
+ "turn_on_lights": {
+ "description": "Indique s'il faut allumer les lumières qui sont actuellement éteintes. 🔆"
+ },
+ "adapt_color": {
+ "description": "Indique s'il faut adapter la couleur sur les lumières compatibles. 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "Indique s'il faut privilégier l'ajustement de la couleur RGB plutôt que la température de couleur de la lumière lorsque c'est possible. 🌈"
}
}
+ },
+ "set_manual_control": {
+ "fields": {
+ "lights": {
+ "description": "entity_id(s) des lumières, si non spécifié, toutes les lumières dans le commutateur sont sélectionnées. 💡"
+ },
+ "manual_control": {
+ "description": "Indique s'il faut ajouter (\"true\") ou retirer (\"false\") la lumière de la liste \"manual_control\". 🔒"
+ },
+ "entity_id": {
+ "description": "L'`entity_id` de l'interrupteur dans lequel (dé)marquer la lumière comme étant `manuellement contrôlée`. 📝"
+ }
+ },
+ "description": "Indiquer si une lumière est 'manuellement contrôlée'."
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/hu.json b/custom_components/adaptive_lighting/translations/hu.json
index 1844163d..3af17eff 100644
--- a/custom_components/adaptive_lighting/translations/hu.json
+++ b/custom_components/adaptive_lighting/translations/hu.json
@@ -3,13 +3,54 @@
"step": {
"init": {
"data_description": {
- "sleep_color_temp": "Színhőmérséklet alvó üzemmódban (amikor a `sleep_rgb_or_color_temp` értéke `color_temp`) Kelvinben megadva. 😴"
+ "sleep_color_temp": "Színhőmérséklet alvó üzemmódban (amikor a `sleep_rgb_or_color_temp` értéke `color_temp`) Kelvinben megadva. 😴",
+ "sleep_rgb_or_color_temp": "Az `\"rgb_color\" vagy a `\"color_temp\" használata alvó üzemmódban. 🌙",
+ "sleep_transition": "Az transition időtartama az \"alvó üzemmód\" kapcsolásakor másodpercben. 😴",
+ "autoreset_control_seconds": "Automatikusan visszaállítja a kézi vezérlést néhány másodperc után. A letiltáshoz állítsa 0-ra. ⏲️",
+ "min_sunset_time": "Állítsa be a legkorábbi virtuális naplemente időpontját (HH:MM:SS), lehetővé téve a későbbi naplementéket. 🌇",
+ "sleep_brightness": "Az alvó üzemmódban lévő lights fényerejének százalékos értéke. 😴",
+ "min_sunrise_time": "Állítsa be a legkorábbi virtuális napfelkelte időpontját (HH:MM:SS), lehetővé téve a későbbi napfelkeltét. 🌅",
+ "interval": "Gyakoriság a lights illesztéséhez, másodpercekben. 🔄",
+ "adapt_delay": "Várakozási idő (másodpercben) a világítás bekapcsolása és az Adaptív világítás alkalmazása között. Segíthet elkerülni a villódzást. ⏲️",
+ "sleep_rgb_color": "RGB szín alvó üzemmódban (akkor érvényes, ha a `sleep_rgb_or_color_temp` értéke \"rgb_color\"). 🌈",
+ "sunrise_offset": "A napfelkelte idejének beállítása pozitív vagy negatív eltolással másodpercekben. ⏰",
+ "transition": "Az transition időtartama, amikor a lights változnak, másodpercben. 🕑",
+ "brightness_mode": "Használandó fényerő üzemmód. A lehetséges értékek: `default`, `linear` és `tanh` (a `brightness_mode_time_dark` és `brightness_mode_time_light` értékeket használja). 📈",
+ "brightness_mode_time_light": "(Figyelmen kívül hagyva, ha `brightness_mode='default'`) A fényerő növelésének/csökkentésének időtartama másodpercben napfelkelte/napnyugta után/előtt. 📈📉.",
+ "sunset_offset": "A naplemente idejének beállítása pozitív vagy negatív eltolással másodpercekben. ⏰",
+ "sunset_time": "Állítson be egy fix időpontot (HH:MM:SS) a naplementéhez. 🌇",
+ "max_sunset_time": "A legkésőbbi virtuális napnyugta időpontjának beállítása (HH:MM:SS), amely lehetővé teszi a korábbi naplementéket. 🌇",
+ "sunrise_time": "Állítson be egy fix időpontot (HH:MM:SS) a napfelkeltéhez. 🌅",
+ "initial_transition": "Az első transition időtartama, amikor a lights \"kikapcsolt\" állapotból \"bekapcsolt\" állapotba váltanak, másodpercben. ⏲️",
+ "brightness_mode_time_dark": "(Figyelmen kívül hagyva, ha `brightness_mode='default'`) A fényerő növelésének/csökkentésének időtartama másodpercben napfelkelte/napnyugta után/előtt. 📈📉.",
+ "max_sunrise_time": "A legkésőbbi virtuális napfelkelte időpontjának beállítása (HH:MM:SS), amely lehetővé teszi a korábbi napfelkeltét. 🌅",
+ "send_split_delay": "Késleltetés (ms-ban) a `separate_turn_on_commands` (különálló_bekapcsolási_parancsok) között olyan lights esetében, amelyek nem támogatják a fényerő és a szín egyidejű beállítását. ⏲️"
},
"data": {
- "max_brightness": "max_brightness: Maximális fényerő százalékban megadva. 💡"
+ "max_brightness": "max_brightness: Maximális fényerő százalékban megadva. 💡",
+ "detect_non_ha_changes": "detect_non_ha_changes: `Világítás: Bekapcsolás`- szolgáltatás meghívástól eltérő állapotváltozások esetén észleli és leállítja az illesztéseket. A `take_over_control` beállítás engedélyezése szükséges. 🕵️ Vigyázat: ⚠️ Egyes lights tévesen jelezhetik a \"bekapcsolt\" állapotot, ami váratlanul bekapcsolódó lámpákhoz vezethet. Ha ilyen problémákat tapasztal, tiltsa le ezt a funkciót.",
+ "multi_light_intercept": "multi_light_intercept: `Világítás: Bekapcsolás` szolgáltatás hívások elfogása és adaptálása, amelyek több fényt céloznak meg. ➗⚠️ Ez azt eredményezheti, hogy egyetlen `Világítás: Bekapcsolás` szolgáltatás hívás több hívásra oszlik fel, pl. ha a lights különböző kapcsolókban vannak. Az `elfogás` engedélyezése szükséges.",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Kizárólag a bekapcsoláskor érvényes. A beállítást \"igaz\"-ra állítva, az AL csak akkor végzi az illesztést, amennyiben a \"Világítás: Bekapcsolás\" szolgáltatás meghívása a szín és fényerő paraméterek megadása nélkül történik.❌🌈 Ez pl. alkalmas az illesztés felfüggesztésére egy jelenet aktiválásakor. \"Hamis\" beállítás esetén az AL elvégzi a kezdeti illesztést a szín és fényerő paraméterek meghívásától függetlenül. A használatához engedélyezve kell lennie a \"take_over_control\" beállításnak. 🕵️ ",
+ "skip_redundant_commands": "skip_redundant_commands: Az olyan adaptációs parancsok küldésének kihagyása, amelyek célállapota már megegyezik a fény ismert állapotával. Minimalizálja a hálózati forgalmat, és bizonyos helyzetekben javítja az adaptációs reakciókészséget. 📉Kapcsolja ki, ha a fizikai fényállapotok nem szinkronizálódnak a HA rögzített állapotával.",
+ "separate_turn_on_commands": "separate_turn_on_commands: Elkülönített `Világítás: Bekapcsolás` hívásokat használ a szín és a fényerő beállításához, ami néhány világítás típusnál szükséges. 🔀",
+ "max_color_temp": "max_color_temp: A leghidegebb színhőmérséklet kelvinben. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Lehetőség szerint az RGB színbeállítás előnyben részesítése a fény színhőmérsékletével szemben. 🌈",
+ "intercept": "elfogás: `Világítás: Bekapcsolás` szolgáltatás hívások elfogása és adaptálása a színek és a fényerő azonnali illesztésének lehetővé tétele érdekében. 🏎️ Letiltja az olyan lights esetében, amelyek nem támogatják a `Világítás: Bekapcsolás` szolgáltatás színnel és fényerővel történő szín- és fényerőszabályozását.",
+ "only_once": "only_once: lights illesztése kizárólag, amikor azok be vannak kapcsolva (`igaz`) vagy tartsa folyamatosan illesztve őket (`false`). 🔄",
+ "take_over_control": "take_over_control: Adaptív világítás kikapcsolása, amennyiben más forrásból érkező `Világítás: Bekapcsolás` szolgáltatás hívás történik, miközben a fények be vannak kapcsolva és illesztve vannak. Vegye figyelembe, hogy ez minden `interval`-ban meghívja a `homeassistant.update_entity`-t! 🔒",
+ "lights": "lights: Az entity_id-k listája, amelyeket az AL vezéreljen (üresen is maradhat).🌟",
+ "min_brightness": "min_brightness: Minimális fényerő százalékban. 💡",
+ "min_color_temp": "min_color_temp: A legmelegebb színhőmérséklet Kelvinben. 🔥",
+ "transition_until_sleep": "transition_until_sleep: Ha engedélyezve van, az Adaptív világítás az alvó mód beállításokat minimálisnak tekinti, és napnyugta után ezekre az értékekre vált át. 🌙",
+ "include_config_in_attributes": "include_config_in_attributes: A kapcsoló összes opciójának attribútumként való megjelenítése a Home Assistantben, ha a beállítás értéke `igaz`. 📝"
},
- "title": "Adaptív világítás beállításai"
+ "title": "Adaptív világítás beállításai",
+ "description": "Egy Adaptív világítás komponens konfigurálása. Az opciók nevei a YAML-beállításokhoz igazodnak. Ha ezt a bejegyzést YAML-ben definiálta, itt nem jelennek meg beállítások. A paraméterek hatásait bemutató interaktív grafikonokért látogasson el [erre a webes alkalmazásra](https://basnijholt.github.io/adaptive-lighting). További részletekért olvasd el a [hivatalos dokumentációt](https://github.com/basnijholt/adaptive-lighting#readme)."
}
+ },
+ "error": {
+ "option_error": "Érvénytelen beállítás",
+ "entity_missing": "Egy vagy több kiválasztott világítás entitás hiányzik a Home Assistantból"
}
},
"title": "Adaptív világítás",
@@ -24,18 +65,138 @@
},
"max_color_temp": {
"description": "Leghidegebb színhőmérséklet Kelvinben megadva. ❄️"
+ },
+ "sleep_brightness": {
+ "description": "Az alvó üzemmódban lévő lights fényerejének százalékos értéke. 😴"
+ },
+ "detect_non_ha_changes": {
+ "description": "`Világítás: Bekapcsolás`- szolgáltatás meghívástól eltérő állapotváltozások esetén észleli és leállítja az illesztéseket. A `take_over_control` beállítás engedélyezése szükséges. 🕵️ Vigyázat: ⚠️ Egyes lights tévesen jelezhetik a \"bekapcsolt\" állapotot, ami váratlanul bekapcsolódó lámpákhoz vezethet. Ha ilyen problémákat tapasztal, tiltsa le ezt a funkciót."
+ },
+ "sunrise_offset": {
+ "description": "A napfelkelte idejének beállítása pozitív vagy negatív eltolással másodpercekben. ⏰"
+ },
+ "max_sunrise_time": {
+ "description": "A legkésőbbi virtuális napfelkelte időpontjának beállítása (HH:MM:SS), amely lehetővé teszi a korábbi napfelkeltét. 🌅"
+ },
+ "sleep_color_temp": {
+ "description": "Színhőmérséklet alvó üzemmódban (akkor használatos, ha a `sleep_rgb_or_color_temp` a `color_temp`-re van állítva) kelvinben. 😴"
+ },
+ "min_brightness": {
+ "description": "Minimális fényerő százalékban. 💡"
+ },
+ "min_color_temp": {
+ "description": "A legmelegebb színhőmérséklet Kelvinben. 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Az `\"rgb_color\" vagy a `\"color_temp\" használata alvó üzemmódban. 🌙"
+ },
+ "turn_on_lights": {
+ "description": "A jelenleg kikapcsolt fények bekapcsolása. 🔆"
+ },
+ "initial_transition": {
+ "description": "Az első transition időtartama, amikor a lights \"kikapcsolt\" állapotból \"bekapcsolt\" állapotba váltanak, másodpercben. ⏲️"
+ },
+ "sunrise_time": {
+ "description": "Állítson be egy fix időpontot (HH:MM:SS) a napfelkeltéhez. 🌅"
+ },
+ "include_config_in_attributes": {
+ "description": "Az összes beállítás megjelenítése a kapcsoló attribútumaként a Home Assistantban, ha a beállítás `igaz`. 📝"
+ },
+ "sleep_rgb_color": {
+ "description": "RGB szín alvó üzemmódban (akkor érvényes, ha a `sleep_rgb_or_color_temp` értéke \"rgb_color\"). 🌈"
+ },
+ "take_over_control": {
+ "description": "Az Adaptív világítás letiltása, ha egy másik forrásból érkező `Világítás: Bekapcsolás` hívja, miközben a világítás be van kapcsolva és AL által illesztve van. Vegye figyelembe, hogy ez minden \"interval\"-ban meghívja a `homeassistant.update_entity`-t! 🔒"
+ },
+ "sleep_transition": {
+ "description": "Az transition időtartama az \"alvó üzemmód\" kapcsolásakor másodpercben. 😴"
+ },
+ "autoreset_control_seconds": {
+ "description": "Automatikusan visszaállítja a kézi vezérlést néhány másodperc után. A letiltáshoz állítsa 0-ra. ⏲️"
+ },
+ "adapt_delay": {
+ "description": "Várakozási idő (másodpercben) a világítás bekapcsolása és az Adaptív világítás alkalmazása között. Segíthet elkerülni a villódzást. ⏲️"
+ },
+ "only_once": {
+ "description": "A lights illesztése csak a bekapcsoláskor egy alkalommal (\"igaz\") vagy folyamatosan történjen a bekapcsolás után is (\"hamis\")."
+ },
+ "use_defaults": {
+ "description": "Beállítja az ebben a szolgáltatáshívásban meg nem adott alapértelmezett értékeket. Opciók: \"(alapértelmezett, megtartja az aktuális értékeket), \"gyári\" (visszaállítja a dokumentált alapértelmezett értékeket) vagy \"konfiguráció\" (visszaállítja a kapcsoló konfigurációjának alapértelmezett értékeit). ⚙️"
+ },
+ "separate_turn_on_commands": {
+ "description": "Elkülönített `Világítás: Bekapcsolás` szolgáltatás hívások használata a szín és a fényerő számára, ami néhány világítás típusnál szükséges. 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "Lehetőség szerint az RGB színbeállítás előnyben részesítése a fény színhőmérsékletével szemben. 🌈"
+ },
+ "sunset_offset": {
+ "description": "A naplemente idejének beállítása pozitív vagy negatív eltolással másodpercekben. ⏰"
+ },
+ "send_split_delay": {
+ "description": "Késleltetés (ms-ban) a `separate_turn_on_commands` (különálló_bekapcsolási_parancsok) között olyan lights esetében, amelyek nem támogatják a fényerő és a szín egyidejű beállítását. ⏲️"
+ },
+ "sunset_time": {
+ "description": "Állítson be egy fix időpontot (HH:MM:SS) a naplementéhez. 🌇"
+ },
+ "transition": {
+ "description": "Az transition időtartama, amikor a lights változnak, másodpercben. 🕑"
+ },
+ "min_sunset_time": {
+ "description": "Állítsa be a legkorábbi virtuális naplemente időpontját (HH:MM:SS), lehetővé téve a későbbi naplementéket. 🌇"
+ }
+ },
+ "description": "Módosítsa a kapcsolóban a kívánt beállításokat. Itt minden beállítás ugyanaz, mint a konfigurációs folyamban."
+ },
+ "set_manual_control": {
+ "description": "Jelölje meg, hogy egy lámpa „kézi vezérlésű”-e.",
+ "fields": {
+ "manual_control": {
+ "description": "A világítás hozzáadása (\"true\") vagy eltávolítása (\"false\") a \"manual_control\" listából. 🔒"
+ },
+ "entity_id": {
+ "description": "A kapcsoló `entity_id`-je, amelyben a lámpát \"kézi vezérlésűnek\" kell jelölni. 📝"
+ },
+ "lights": {
+ "description": "a lights entity_id-je(i), ha nincs megadva, a kapcsoló összes lights ki lesz választva. 💡"
}
}
},
- "set_manual_control": {
- "description": "Jelölje meg, hogy egy lámpa „kézi vezérlésű”-e."
+ "apply": {
+ "fields": {
+ "entity_id": {
+ "description": "Az alkalmazandó beállításokat tartalmazó kapcsoló `entity_id`-je. 📝"
+ },
+ "adapt_brightness": {
+ "description": "A világítás fényerejének beállítása. 🌞"
+ },
+ "turn_on_lights": {
+ "description": "A jelenleg kikapcsolt lights bekapcsolása. 🔆"
+ },
+ "adapt_color": {
+ "description": "A lights által támogatott színek beállítása. 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "Lehetőség szerint az RGB színbeállítás előnyben részesítése a fény színhőmérsékletével szemben. 🌈"
+ },
+ "lights": {
+ "description": "A világítás (vagy a világítások listája), amelyre a beállításokat alkalmazni kell.💡"
+ },
+ "transition": {
+ "description": "Az transition időtartama, amikor a lights változnak, másodpercben. 🕑"
+ }
+ },
+ "description": "Az aktuális Adaptív világítás beállításokat alkalmazza a lights-ra."
}
},
"config": {
"step": {
"user": {
- "title": "Válasszon nevet az Adaptív világítás példánynak"
+ "title": "Válasszon nevet az Adaptív világítás példánynak",
+ "description": "Minden integrációs tétel több lights-t is tartalmazhat!"
}
+ },
+ "abort": {
+ "already_configured": "Ez az eszköz már be van állítva"
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/id.json b/custom_components/adaptive_lighting/translations/id.json
new file mode 100644
index 00000000..2474796b
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/id.json
@@ -0,0 +1,202 @@
+{
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sleep_brightness": {
+ "description": "Persentase kecerahan lampu dalam mode tidur. 😴"
+ },
+ "detect_non_ha_changes": {
+ "description": "Mendeteksi dan menghentikan adaptasi untuk perubahan status non-`light.turn_on`. Perlu mengaktifkan `take_over_control`. 🕵️ Perhatian: ⚠️ Beberapa lampu mungkin salah menunjukkan status 'hidup' yang dapat mengakibatkan lampu menyala secara tidak terduga. Nonaktifkan fitur ini jika Anda mengalami masalah seperti itu."
+ },
+ "sunrise_offset": {
+ "description": "Sesuaikan waktu matahari terbit dengan offset positif atau negatif dalam hitungan detik. ⏰"
+ },
+ "max_sunrise_time": {
+ "description": "Atur waktu matahari terbit virtual terkini (HH:MM:SS), memungkinkan matahari terbit lebih cepat. 🌅"
+ },
+ "sleep_color_temp": {
+ "description": "Suhu warna dalam mode tidur (digunakan ketika `sleep_rgb_or_color_temp` adalah `color_temp`) dalam Kelvin. 😴"
+ },
+ "min_brightness": {
+ "description": "Persentase kecerahan minimum. 💡"
+ },
+ "min_color_temp": {
+ "description": "Suhu warna terhangat dalam Kelvin. 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Gunakan `\"rgb_color\"` atau `\"color_temp\"` dalam mode tidur. 🌙"
+ },
+ "turn_on_lights": {
+ "description": "Kalau ingin menyalakan lampu yang sedang mati. 🔆"
+ },
+ "initial_transition": {
+ "description": "Durasi transisi pertama saat lampu berubah dari `mati` ke `hidup` dalam hitungan detik. ⏲️"
+ },
+ "entity_id": {
+ "description": "ID Entitas sakelar. 📝"
+ },
+ "sunrise_time": {
+ "description": "Tetapkan waktu tetap (HH:MM:SS) untuk matahari terbit. 🌅"
+ },
+ "include_config_in_attributes": {
+ "description": "Tampilkan semua opsi sebagai atribut pada sakelar di Home Assistant ketika diatur ke `true`. 📝"
+ },
+ "max_brightness": {
+ "description": "Persentase kecerahan maksimum. 💡"
+ },
+ "sleep_rgb_color": {
+ "description": "Warna RGB dalam mode tidur (digunakan ketika `sleep_rgb_or_color_temp` adalah \"rgb_color\"). 🌈"
+ },
+ "take_over_control": {
+ "description": "Nonaktifkan Pencahayaan Adaptif jika sumber lain memanggil `light.turn_on` saat lampu menyala dan sedang diadaptasi. Perhatikan bahwa ini memanggil `homeassistant.update_entity` setiap `interval`! 🔒"
+ },
+ "sleep_transition": {
+ "description": "Durasi transisi ketika \"mode tidur\" diubah, dalam hitungan detik. 😴"
+ },
+ "autoreset_control_seconds": {
+ "description": "Secara otomatis mengatur ulang kontrol manual setelah beberapa detik. Setel ke 0 untuk menonaktifkan. ⏲️"
+ },
+ "adapt_delay": {
+ "description": "Waktu tunggu (detik) antara lampu menyala dan penerapan ubahan Pencahayaan Adaptif. Mungkin membantu untuk menghindari kedipan. ⏲️"
+ },
+ "only_once": {
+ "description": "Sesuaikan lampu hanya saat menyala (`true`) atau terus sesuaikan (`false`). 🔄"
+ },
+ "use_defaults": {
+ "description": "Menetapkan nilai bawaan yang tidak ditentukan dalam panggilan layanan ini. Opsi: \"current\" (bawaan, mempertahankan nilai saat ini), \"factory\" (direset ke nilai bawaan yang terdokumentasi), atau \"configuration\" (kembali ke nilai bawaan konfigurasi sakelar). ⚙️"
+ },
+ "separate_turn_on_commands": {
+ "description": "Gunakan panggilan `light.turn_on` terpisah untuk warna dan kecerahan, diperlukan untuk beberapa jenis lampu. 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "Kalau lebih memilih penyesuaian warna RGB dibandingkan suhu warna terang jika memungkinkan. 🌈"
+ },
+ "max_color_temp": {
+ "description": "Suhu warna terdingin dalam Kelvin. ❄️"
+ },
+ "sunset_offset": {
+ "description": "Sesuaikan waktu matahari terbenam dengan offset positif atau negatif dalam hitungan detik. ⏰"
+ },
+ "send_split_delay": {
+ "description": "Waktu tunda (ms) antara `separate_turn_on_commands` untuk lampu yang tidak mendukung pengaturan kecerahan dan warna secara bersamaan. ⏲️"
+ },
+ "sunset_time": {
+ "description": "Tetapkan waktu tetap (HH:MM:SS) untuk matahari terbenam. 🌇"
+ },
+ "transition": {
+ "description": "Durasi transisi saat lampu berganti, dalam hitungan detik. 🕑"
+ },
+ "min_sunset_time": {
+ "description": "Tetapkan waktu matahari terbenam virtual paling awal (HH:MM:SS), memungkinkan matahari terbenam di kemudian waktu. 🌇"
+ }
+ },
+ "description": "Ubah pengaturan apa pun yang Anda inginkan di sakelar. Semua opsi di sini sama seperti pada alur konfigurasi."
+ },
+ "apply": {
+ "fields": {
+ "entity_id": {
+ "description": "`eEntity_id` sakelar dengan pengaturan yang akan diterapkan. 📝"
+ },
+ "adapt_brightness": {
+ "description": "Kalau ingin menyesuaikan kecerahan lampu. 🌞"
+ },
+ "turn_on_lights": {
+ "description": "Kalau ingin menyalakan lampu yang sedang mati. 🔆"
+ },
+ "adapt_color": {
+ "description": "Kalau ingin menyesuaikan warna pada lampu pendukung. 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "Kalau lebih memilih penyesuaian warna RGB dibandingkan suhu warna terang jika memungkinkan. 🌈"
+ },
+ "lights": {
+ "description": "Lampu (atau daftar lampu) untuk menerapkan pengaturan. 💡"
+ },
+ "transition": {
+ "description": "Durasi transisi saat lampu berganti, dalam hitungan detik. 🕑"
+ }
+ },
+ "description": "Menerapkan pengaturan Pencahayaan Adaptif saat ini ke lampu."
+ },
+ "set_manual_control": {
+ "fields": {
+ "manual_control": {
+ "description": "Kalau ingin menambahkan (\"true\") atau menghapus (\"false\") lampu dari daftar \"manual_control\". 🔒"
+ },
+ "entity_id": {
+ "description": "`entity_id` dari sakelar yang digunakan untuk membatalkan penandaan lampu sebagai `manually controlled`. 📝"
+ },
+ "lights": {
+ "description": "entity_id(s) lampu, jika tidak ditentukan, semua lampu di sakelar dipilih. 💡"
+ }
+ },
+ "description": "Tandai kalau lampu 'dikontrol secara manual'."
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "sleep_rgb_or_color_temp": "Gunakan `\"rgb_color\"` atau `\"color_temp\"` dalam mode tidur. 🌙",
+ "sleep_color_temp": "Suhu warna dalam mode tidur (digunakan ketika `sleep_rgb_or_color_temp` adalah `color_temp`) dalam Kelvin. 😴",
+ "sleep_transition": "Durasi transisi ketika \"mode tidur\" diubah, dalam hitungan detik. 😴",
+ "autoreset_control_seconds": "Secara otomatis mengatur ulang kontrol manual setelah beberapa detik. Setel ke 0 untuk menonaktifkan. ⏲️",
+ "min_sunset_time": "Tetapkan waktu matahari terbenam virtual paling awal (HH:MM:SS), memungkinkan matahari terbenam di kemudian waktu. 🌇",
+ "sleep_brightness": "Persentase kecerahan lampu dalam mode tidur. 😴",
+ "min_sunrise_time": "Tetapkan waktu matahari terbit virtual paling awal (HH:MM:SS), memungkinkan matahari terbit di kemudian waktu. 🌅",
+ "interval": "Frekuensi untuk menyesuaikan lampu, dalam hitungan detik. 🔄",
+ "adapt_delay": "Waktu tunggu (detik) antara lampu menyala dan penerapan ubahan Pencahayaan Adaptif. Mungkin membantu untuk menghindari kedipan. ⏲️",
+ "sleep_rgb_color": "Warna RGB dalam mode tidur (digunakan ketika `sleep_rgb_or_color_temp` adalah \"rgb_color\"). 🌈",
+ "sunrise_offset": "Sesuaikan waktu matahari terbit dengan offset positif atau negatif dalam hitungan detik. ⏰",
+ "transition": "Durasi transisi saat lampu berganti, dalam hitungan detik. 🕑",
+ "brightness_mode": "Mode kecerahan untuk digunakan. Nilai yang memungkinkan adalah `default`, `linear`, dan `tanh` (menggunakan `brightness_mode_time_dark` dan `brightness_mode_time_light`). 📈",
+ "brightness_mode_time_light": "(Ignored if `brightness_mode='default'`) Durasi dalam hitungan detik untuk meningkatkan/menurunkan kecerahan setelah/sebelum matahari terbit/terbenam. 📈📉.",
+ "sunset_offset": "Sesuaikan waktu matahari terbenam dengan offset positif atau negatif dalam hitungan detik. ⏰",
+ "sunset_time": "Tetapkan waktu tetap (HH:MM:SS) untuk matahari terbenam. 🌇",
+ "max_sunset_time": "Atur waktu matahari terbenam virtual terkini (HH:MM:SS), memungkinkan matahari terbenam lebih cepat. 🌇",
+ "sunrise_time": "Tetapkan waktu tetap (HH:MM:SS) untuk matahari terbit. 🌅",
+ "initial_transition": "Durasi transisi pertama saat lampu berubah dari `mati` ke `hidup` dalam hitungan detik. ⏲️",
+ "brightness_mode_time_dark": "(Diabaikan jika `brightness_mode='default'`) Durasi dalam hitungan detik untuk meningkatkan/menurunkan kecerahan sebelum/sesudah matahari terbit/terbenam. 📈📉",
+ "max_sunrise_time": "Atur waktu matahari terbit virtual terkini (HH:MM:SS), memungkinkan matahari terbit lebih cepat. 🌅",
+ "send_split_delay": "Waktu tunda (ms) antara `separate_turn_on_commands` untuk lampu yang tidak mendukung pengaturan kecerahan dan warna secara bersamaan. ⏲️"
+ },
+ "data": {
+ "detect_non_ha_changes": "detect_non_ha_changes: Mendeteksi dan menghentikan adaptasi untuk perubahan status non-`light.turn_on`. Perlu mengaktifkan `take_over_control`. 🕵️ Perhatian: ⚠️ Beberapa lampu mungkin salah menunjukkan status 'hidup' yang dapat mengakibatkan lampu menyala secara tidak terduga. Nonaktifkan fitur ini jika Anda mengalami masalah seperti itu.",
+ "multi_light_intercept": "multi_light_intercept: Cegat dan sesuaikan panggilan `light.turn_on` yang menargetkan banyak lampu. ➗⚠️ Hal ini dapat mengakibatkan satu panggilan `light.turn_on` terpecah menjadi beberapa panggilan, misalnya saat lampu berada di sakelar yang berbeda. Membutuhkan `intercept` untuk diaktifkan.",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Saat menyalakan lampu pada awalnya. Jika disetel ke `true`, Pencahayaan Adaptif hanya beradaptasi jika `light.turn_on` dipanggil tanpa menentukan warna atau kecerahan. ❌🌈 Misalnya mencegah adaptasi saat mengaktifkan scene. Jika `false`, Pencahayaan Adaptif beradaptasi terlepas dari keberadaan warna atau kecerahan di `service_data` awal. Perlu mengaktifkan `take_over_control`. 🕵️ ",
+ "skip_redundant_commands": "skip_redundant_commands: Lewati pengiriman perintah adaptasi yang status targetnya sudah sama dengan status cahaya yang diketahui. Meminimalkan lalu lintas jaringan dan meningkatkan respons adaptasi dalam beberapa situasi. 📉Nonaktifkan jika status cahaya fisik tidak sinkron dengan status rekaman HA.",
+ "separate_turn_on_commands": "separate_turn_on_commands: Gunakan panggilan `light.turn_on` terpisah untuk warna dan kecerahan, diperlukan untuk beberapa jenis lampu. 🔀",
+ "max_color_temp": "max_color_temp: Suhu warna terdingin dalam Kelvin. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Kalau lebih memilih penyesuaian warna RGB dibandingkan suhu warna terang jika memungkinkan. 🌈",
+ "max_brightness": "max_brightness: Persentase kecerahan maksimum. 💡",
+ "intercept": "intercept: Cegat dan sesuaikan panggilan `light.turn_on` untuk mengaktifkan adaptasi warna dan kecerahan seketika. 🏎️ Nonaktifkan untuk lampu yang tidak mendukung `light.turn_on` dengan warna dan kecerahan.",
+ "only_once": "only_once: Sesuaikan lampu hanya saat menyala (`true`) atau terus sesuaikan (`false`). 🔄",
+ "take_over_control": "take_over_control: Nonaktifkan Pencahayaan Adaptif jika sumber lain memanggil `light.turn_on` saat lampu menyala dan sedang diadaptasi. Perhatikan bahwa ini memanggil `homeassistant.update_entity` setiap `interval`! 🔒",
+ "lights": "lights: Daftar entity_ids lampu yang akan dikontrol (boleh kosong). 🌟",
+ "min_brightness": "min_brightness: Persentase kecerahan minimum. 💡",
+ "min_color_temp": "min_color_temp: Suhu warna terhangat dalam Kelvin. 🔥",
+ "transition_until_sleep": "transition_until_sleep: Jika diaktifkan, Pencahayaan Adaptif akan menganggap pengaturan tidur sebagai minimum, dan beralih ke nilai ini setelah matahari terbenam. 🌙",
+ "include_config_in_attributes": "include_config_in_attributes: Tampilkan semua opsi sebagai atribut pada sakelar di Home Assistant ketika diatur ke `true`. 📝"
+ },
+ "title": "Opsi Pencahayaan Adaptif",
+ "description": "Konfigurasikan komponen Pencahayaan Adaptif. Nama opsi selaras dengan pengaturan YAML. Jika Anda telah menentukan entri ini di YAML, tidak ada opsi yang akan muncul di sini. Untuk grafik interaktif yang menunjukkan efek parameter, kunjungi [aplikasi web ini](https://basnijholt.github.io/adaptive-lighting). Untuk detail lebih lanjut, lihat [dokumentasi resmi](https://github.com/basnijholt/adaptive-lighting#readme)."
+ }
+ },
+ "error": {
+ "option_error": "Opsi tidak valid",
+ "entity_missing": "Satu atau lebih entitas cahaya yang dipilih hilang dari Home Assistant"
+ }
+ },
+ "title": "Pencahayaan Adaptif",
+ "config": {
+ "step": {
+ "user": {
+ "description": "Setiap instance dapat berisi banyak lampu!",
+ "title": "Pilih nama untuk instance Pencahayaan Adaptif"
+ }
+ },
+ "abort": {
+ "already_configured": "Perangkat ini sudah dikonfigurasi"
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/ja.json b/custom_components/adaptive_lighting/translations/ja.json
index 0967ef42..20cc082c 100644
--- a/custom_components/adaptive_lighting/translations/ja.json
+++ b/custom_components/adaptive_lighting/translations/ja.json
@@ -1 +1,39 @@
-{}
+{
+ "title": "適応型照明",
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sunrise_offset": {
+ "description": "日の出時間を基準に秒単位で正値もしくは負値で調整する。⏰"
+ },
+ "only_once": {
+ "description": "適応型照明を照明がオンになっているときのみ(`true`)それとも適応し続ける場合は(`false`)。"
+ },
+ "sunset_offset": {
+ "description": "日の入時間を基準に秒単位で正値もしくは負値で調整する。⏰"
+ }
+ }
+ },
+ "apply": {
+ "fields": {
+ "lights": {
+ "description": "適応する照明(か照明のリスト)の設定。 💡"
+ }
+ }
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "data": {
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: 最初に照明オンにするとき。`true`を設定すると、AL(適応型照明)は調色や明るさを指定せずや`light.turn_on`をしたときのみ適応します。❌🌈 例えば、適応型照明をシーンを有効にするときにしないようにする。`false`であれば、`service_data`に最初から、ALはシーンの状態に関係なく調色や明るさを適応する。`take_over_control`を有効にすることが必要。🕵️ "
+ },
+ "data_description": {
+ "sunrise_offset": "日の出時間を基準に秒単位で正値もしくは負値で調整する。⏰",
+ "sunset_offset": "日の入時間を基準に秒単位で正値もしくは負値で調整する。⏰"
+ },
+ "title": "適応型照明オプション"
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/ko.json b/custom_components/adaptive_lighting/translations/ko.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/ko.json
@@ -0,0 +1 @@
+{}
diff --git a/custom_components/adaptive_lighting/translations/nb.json b/custom_components/adaptive_lighting/translations/nb.json
index 7cfba678..8a8f6e1b 100644
--- a/custom_components/adaptive_lighting/translations/nb.json
+++ b/custom_components/adaptive_lighting/translations/nb.json
@@ -1,50 +1,214 @@
{
- "title":"Adaptiv Belysning",
- "config":{
- "step":{
- "user":{
- "title":"Velg et navn",
- "description":"Velg et navn for denne konfigurasjonen for adaptiv belysning - hver konfigurasjon kan inneholde flere lyskilder!",
- "data":{
- "name":"Navn"
- }
- }
- },
- "abort":{
- "already_configured":"Denne enheten er allerede konfigurert!"
+ "title": "Adaptiv Belysning",
+ "config": {
+ "step": {
+ "user": {
+ "title": "Velg et navn",
+ "description": "Velg et navn for denne konfigurasjonen for adaptiv belysning - hver konfigurasjon kan inneholde flere lyskilder!",
+ "data": {
+ "name": "Navn"
+ }
}
- },
- "options":{
- "step":{
- "init":{
- "title":"Adaptiv Belysning Innstillinger",
- "description":"Alle innstillinger for en adaptiv belysning konfigurasjon. Innstillingene er identiske med innstillingene for YAML konfigurasjon. Ingen innstillinger vises dersom du har definert adaptive_lighting i din YAML konfigurasjon.",
- "data":{
- "lights":"Lys / Lyskilder",
- "initial_transition":"'initial_transition': overgangen (i sekunder) når lysene skrus av eller på - eller når 'sleep_state' endres",
- "interval":"'interval': tiden mellom oppdateringer (i sekunder)",
- "max_brightness":"'max_brightness': den høyeste lysstyrken (i prosent) på lysene i løpet av en syklus",
- "max_color_temp":"'max_color_temp': den høyeste fargetemperaturen (i kelvin) på lysene i løpet av en syklus",
- "min_brightness":"'min_brightness': den laveste lysstyrken (i prosent) på lysene i løpet av en syklus",
- "min_color_temp":"'min_color_temp': den laveste fargetemperaturen (i kelvin) på lysene i løpet av en syklus",
- "only_once":"'only_once': anvend innstillingene for adaptiv belysning kun når lysene skrus av eller på",
- "prefer_rgb_color":"'prefer_rgb_color': benytt rgb i stedet for fargetemperatur dersom det er mulig",
- "separate_turn_on_commands":"'separate_turn_on_commands': separer kommandone i 'light.turn_on' for hver attributt (farge, lysstyrke, osv.). Dette kan være nødvendig for enkelte typer lys / lyskilder",
- "sleep_brightness":"'sleep_brightness': lysstyrken på lysene (i prosent) når 'sleep_mode' (søvnmodus) er aktiv",
- "sleep_color_temp":"'sleep_color_temp': fargetemperaturen på lysene (i kelvin) når 'sleep_mode' (søvnmodus) er aktiv",
- "sunrise_offset":"'sunrise_offset': hvor lenge før (-) eller etter (+) tidspunktet solen står opp (lokalt) skal defineres som soloppgang (i sekunder)",
- "sunrise_time":"'sunrise_time': definer tidspunktet for soloppgang manuelt (i følgende format: TT:MM:SS)",
- "sunset_offset":"'sunset_offset': hvor lenge før (-) eller etter (+) tidspunktet solen går ned (lokalt) skal defineres som solnedgang (i sekunder)",
- "sunset_time":"'sunset_time': definer tidspunktet for solnedgang manuelt (i følgende format: TT:MM:SS - f. eks: '20:30:00' vil definere tidspunktet for solnegang som halv-ni på kvelden)",
- "take_over_control":"'take_over_control': dersom en annen tjeneste enn adaptiv belysning skrur lysene av eller på, vil automatisk adaptering av lyset stoppes inntil lyset (eller den tilhørende bryteren for adaptiv belysning) blir slått av - og på igjen",
- "detect_non_ha_changes":"'detect_non_ha_changes': registrerer alle endringer i lysstyrke over 10% med opprinnelse utenfor Home Assistant - krever at 'take_over_control' er aktivert (OBS: tilkaller 'homeassistant.update_entity' ved hvert 'interval'!)",
- "transition":"'transition': varigheten (i sekunder) på overgangen når lysene oppdateres "
- }
- }
- },
- "error":{
- "option_error":"En eller flere valgte innstillinger er ugyldige",
- "entity_missing": "Et utvalgt lys ble ikke funnet"
+ },
+ "abort": {
+ "already_configured": "Denne enheten er allerede konfigurert!"
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "title": "Adaptiv Belysning Innstillinger",
+ "description": "Alle innstillinger for en adaptiv belysning konfigurasjon. Innstillingene er identiske med innstillingene for YAML konfigurasjon. Ingen innstillinger vises dersom du har definert adaptive_lighting i din YAML konfigurasjon.",
+ "data": {
+ "lights": "Lys / Lyskilder",
+ "initial_transition": "'initial_transition': overgangen (i sekunder) når lysene skrus av eller på - eller når 'sleep_state' endres",
+ "interval": "'interval': tiden mellom oppdateringer (i sekunder)",
+ "max_brightness": "'max_brightness': den høyeste lysstyrken (i prosent) på lysene i løpet av en syklus",
+ "max_color_temp": "'max_color_temp': den høyeste fargetemperaturen (i kelvin) på lysene i løpet av en syklus",
+ "min_brightness": "'min_brightness': den laveste lysstyrken (i prosent) på lysene i løpet av en syklus",
+ "min_color_temp": "'min_color_temp': den laveste fargetemperaturen (i kelvin) på lysene i løpet av en syklus",
+ "only_once": "'only_once': anvend innstillingene for adaptiv belysning kun når lysene skrus av eller på",
+ "prefer_rgb_color": "'prefer_rgb_color': benytt rgb i stedet for fargetemperatur dersom det er mulig",
+ "separate_turn_on_commands": "'separate_turn_on_commands': separer kommandone i 'light.turn_on' for hver attributt (farge, lysstyrke, osv.). Dette kan være nødvendig for enkelte typer lys / lyskilder",
+ "sleep_brightness": "'sleep_brightness': lysstyrken på lysene (i prosent) når 'sleep_mode' (søvnmodus) er aktiv",
+ "sleep_color_temp": "'sleep_color_temp': fargetemperaturen på lysene (i kelvin) når 'sleep_mode' (søvnmodus) er aktiv",
+ "sunrise_offset": "'sunrise_offset': hvor lenge før (-) eller etter (+) tidspunktet solen står opp (lokalt) skal defineres som soloppgang (i sekunder)",
+ "sunrise_time": "'sunrise_time': definer tidspunktet for soloppgang manuelt (i følgende format: TT:MM:SS)",
+ "sunset_offset": "'sunset_offset': hvor lenge før (-) eller etter (+) tidspunktet solen går ned (lokalt) skal defineres som solnedgang (i sekunder)",
+ "sunset_time": "'sunset_time': definer tidspunktet for solnedgang manuelt (i følgende format: TT:MM:SS - f. eks: '20:30:00' vil definere tidspunktet for solnegang som halv-ni på kvelden)",
+ "take_over_control": "'take_over_control': dersom en annen tjeneste enn adaptiv belysning skrur lysene av eller på, vil automatisk adaptering av lyset stoppes inntil lyset (eller den tilhørende bryteren for adaptiv belysning) blir slått av - og på igjen",
+ "detect_non_ha_changes": "'detect_non_ha_changes': registrerer alle endringer i lysstyrke over 10% med opprinnelse utenfor Home Assistant - krever at 'take_over_control' er aktivert (OBS: tilkaller 'homeassistant.update_entity' ved hvert 'interval'!)",
+ "transition": "'transition': varigheten (i sekunder) på overgangen når lysene oppdateres ",
+ "transition_until_sleep": "transition_until_sleep: Når aktivert, Adaptive lightning vil behandle sove innstillingene som minimum, bevege seg til disse verdiene etter solnedgang.",
+ "skip_redundant_commands": "skip_redundant_commands: Dropp sending av tilpassnings kommandoer hvor målets tilstand allerede er lik den kjente tilstanden til lyset. Minimerer nettverk trafikk og forbedrer tilpasningens responsitivitet i noen situasjoner. Skru av hvis fysisk tilstand til lyset er ute av synkronisering med HA´s registrere tilstand.",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_on: Når lysene skrues på. Hvis satt til \"sann\", AL vil bare hvis \"light.turn_on\" er aktivert uten spesifisert farge og styrke. Dette f.eks. forhindrer aktivering når en scene aktiveres. Hvis \"false\", AL vil aktivere uansett om farge og stryke er satt av i opprinnelig \"service_data\". Trenger \"take_over_control\" er aktivert. ",
+ "intercept": "Bryt: Bryt og tilpass `light.turn_on` kall for å aktivere umiddelbar farge og styrke tilpassning. Deaktiver for lys som ikke støtter `light.turn_on` med farge og styrke.",
+ "multi_light_intercept": "multi_light_incept: Avskjære og tilpasse \"light.turn_on\" kall til flere lyskilder. Dette kan medføre oppsplitting av et enkelt \"light.turn_on\" kall til flere kall, f.eks når lys tilhører flere brytere. Dette krever at \"intercept\" er aktivert.",
+ "include_config_in_attributes": "include_config_in_attributes: Vis alle valg som attributes på bryteren i Home Assistant når satt til `true`."
+ },
+ "data_description": {
+ "sunrise_offset": "Juster soloppgang tidspunkt med en positiv eller negativ forskyvning i sekunder. ⏰",
+ "sunset_offset": "Juster soloppgang tidspunkt med en positiv eller negativ forskyvning i sekunder. ⏰",
+ "sleep_rgb_or_color_temp": "Bruk enten `\"rgb_color\"` eller `\"color_temp\"` i sove modus.",
+ "sleep_rgb_color": "RGB farger i sove modus (brukes når \"sleep_rgb_or_color_temp\" er \"rgb_color\")",
+ "sleep_brightness": "Lysstyrkeprosent på lysene i sove modus.",
+ "sleep_color_temp": "Fargetemperatur i sove modus (brukes når `sleep_rgb_or_color_temp` er `color_temp`) i Kelvin.",
+ "initial_transition": "Varighet på første overgang når lysene endres fra `off` til `on` i sekunder.",
+ "transition": "Varighet på overgang når lysene endres, i sekunder.",
+ "interval": "Frekvens til å tilpasse lys, i sekunder.",
+ "sunset_time": "Sett et fast tidspunkt (TT:MM:SS) for solnedgang.",
+ "sleep_transition": "Varighet på overgang når \"sleep mode\" er aktivert i sekunder.",
+ "sunrise_time": "Sett et fast tidspunkt (TT:MM:SS) for soloppgang.",
+ "min_sunrise_time": "Sett tidligste virituelle tidspunkt for soloppgang (TT:MM:SS), muliggjør for senere soloppganger",
+ "max_sunrise_time": "Sett det seneste virituelle tidspunktet for soloppgang (TT:MM:SS), muliggjør for tidligere soloppganger.",
+ "min_sunset_time": "Sett det tidligste virituelle tidspunktet for solnedgang (TT:MM:SS), muliggjør for senere solnedgang.",
+ "max_sunset_time": "Sett det seneste virituelle tidspunktet for solnedgang (TT:MM:SS), muliggjør for tidligere solnedgang.",
+ "brightness_mode": "Hvilken lysstyrke moduse skal brukes. Mulige verdier er `default`, `linear`, and `tanh` (bruker `brightness_mode_time_dark` og `brightness_mode_time_light`).",
+ "send_split_delay": "Forsinkelse (ms) mellom `separate_turn_on_commands` for lys som ikke støtter simultane styrke og farge innstillinger.",
+ "adapt_delay": "Ventetid (sekunder) mellom at lyset skrues på og Adaptive Lightning sender endringer. Kan hjelpe til for å unngå blinking.",
+ "autoreset_control_seconds": "Automatisk reset manuell kontroll etter et gitt antall sekunder. Sett til 0 for å skru av.",
+ "brightness_mode_time_light": "(Ignorere hvis `brightness_mode='default'`) Varigheten i sekunder for å justere opp/ned lysstyrken før/etter soloppgang/solnedgang.",
+ "brightness_mode_time_dark": "(Ignorere hvis `brightness_mode='default'`) Varigheten i sekunder for å justere opp/ned lysstyrken før/etter soloppgang/solnedgang."
+ }
}
- }
+ },
+ "error": {
+ "option_error": "En eller flere valgte innstillinger er ugyldige",
+ "entity_missing": "Et utvalgt lys ble ikke funnet"
+ }
+ },
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sunrise_offset": {
+ "description": "Juster soloppgang tidspunkt med en positiv eller negativ forskyvning i sekunder. ⏰"
+ },
+ "only_once": {
+ "description": "Tilpass lys kun når dei er skrudd på (`true`) eller fortsett å tilpasse dei (`false`)"
+ },
+ "sunset_offset": {
+ "description": "Juster soloppgang tidspunkt med en positiv eller negativ forskyvning i sekunder. ⏰"
+ },
+ "use_defaults": {
+ "description": "Sett default verdier ikke spesifisert i dette service kallet. Muligheter: \"current\" (default, fortsetter med nåværende verdier), \"factory\" (nullstiller til dokumenterte defaults), eller \"configuration\" (går tilbake til bryter defaults)."
+ },
+ "include_config_in_attributes": {
+ "description": "Vis alle muligheter som valg på bryteren i Home Assistant når satt til \"true\"."
+ },
+ "initial_transition": {
+ "description": "Varighet på første overgang når lysene endres fra `off` til `on` i sekunder."
+ },
+ "entity_id": {
+ "description": "Bryterens Entity ID."
+ },
+ "sleep_transition": {
+ "description": "Varighet på overgang når \"sleep mode\" er aktivert i sekunder."
+ },
+ "max_brightness": {
+ "description": "Maksimal lysstyrke prosent."
+ },
+ "separate_turn_on_commands": {
+ "description": "Bruk separat `light.turn_on` kall for farge og styrke, nødvendig for noen typer lys."
+ },
+ "min_color_temp": {
+ "description": "Varmeste farge temperatur i Kelvin."
+ },
+ "prefer_rgb_color": {
+ "description": "Foretrekke RGB farge inntsillinger over lysets fargetemperatur innstilling når mulig."
+ },
+ "max_color_temp": {
+ "description": "Kaldeste farge temperatur i Kelvin."
+ },
+ "min_brightness": {
+ "description": "Minste lysstyrke prosent."
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Bruk enten `\"rgb_color\"` eller `\"color_temp\"` i sove modus."
+ },
+ "sleep_brightness": {
+ "description": "Lysstyrkeprosent på lysene i sove modus."
+ },
+ "send_split_delay": {
+ "description": "Forsinkelse (ms) mellom `separate_turn_on_commands` for lys som ikke støtter simultane styrke og farge innstillinger."
+ },
+ "sleep_rgb_color": {
+ "description": "RGB farger i sove modus (brukes når \"sleep_rgb_or_color_temp\" er \"rgb_color\")"
+ },
+ "sleep_color_temp": {
+ "description": "Fargetemperatur i sove modus (brukes når `sleep_rgb_or_color_temp` er `color_temp`) i Kelvin."
+ },
+ "sunrise_time": {
+ "description": "Sett et fast tidspunkt (TT:MM:SS) for soloppgang."
+ },
+ "sunset_time": {
+ "description": "Set et fast tidspunkt (TT:MM:SS) for solnedgang"
+ },
+ "max_sunrise_time": {
+ "description": "Sett det seneste virituelle tidspunktet for soloppgang (TT:MM:SS), muliggjør for tidligere soloppganger."
+ },
+ "min_sunset_time": {
+ "description": "Sett det tidligeste virituelle tidspunktet for solnedgang (TT:MM:SS), muliggjør for senere solnedgang."
+ },
+ "detect_non_ha_changes": {
+ "description": "Detekterer og stopper tilpasningen for ikke-`light.turn_on` tilstander . Trenger `take_over_control` aktivert. Advarsel: Noen lys kan gi falske signal om 'on' tilstand, som kan medføre at lysene skrur seg på av seg selv. Skru av denne funksjonen om dette inntreffer."
+ },
+ "autoreset_control_seconds": {
+ "description": "Automatisk reset manuell kontroll etter et gitt antall sekunder. Sett til 0 for å skru av."
+ },
+ "transition": {
+ "description": "Varighet på overgang når lysene endres, i sekunder."
+ },
+ "adapt_delay": {
+ "description": "Ventetid (sekunder) mellom at lyset skrues på og Adaptive Lightning sender endringer. Kan hjelpe til for å unngå blinking."
+ },
+ "turn_on_lights": {
+ "description": "Skru på lys som fortiden er skrudd av."
+ },
+ "take_over_control": {
+ "description": "Skrur av Adaptive Lightning hvis en annen kilde kaller `light.turn_on` mens lysene er på og blir styrt. Merk at dette kaller `homeassistant.update_entity` hvert eneste`interval`!"
+ }
+ },
+ "description": "Endre hvilken som helst innstilling i bryteren. Alle valg er det samme som i konfigurasjons prosessen."
+ },
+ "apply": {
+ "fields": {
+ "lights": {
+ "description": "Et lys (eller ei liste av lys) instillingene skal påvirke. 💡"
+ },
+ "entity_id": {
+ "description": "\"entity_id\" på bryteren hvor innstillingene skal legges til."
+ },
+ "transition": {
+ "description": "Varighet på overgang når lysene endres, i sekunder."
+ },
+ "adapt_brightness": {
+ "description": "Om å tilpasse styrken til lyset."
+ },
+ "adapt_color": {
+ "description": "Om å tilpasse fargen på støttelysene."
+ },
+ "prefer_rgb_color": {
+ "description": "Foretrekke RGB farge inntsillinger over lysets fargetemperatur innstilling når mulig."
+ },
+ "turn_on_lights": {
+ "description": "Skru på lys som fortiden er skrudd av."
+ }
+ },
+ "description": "Aktiver nåværende Adaptive Lighting innstillinger til lysene."
+ },
+ "set_manual_control": {
+ "fields": {
+ "entity_id": {
+ "description": "\"entity_id\" på bryteren som skal (u)markeres med at lyset er \"manuelt kontrollert\""
+ },
+ "manual_control": {
+ "description": "Enten å legge til (\"true\") eller fjerne (\"false\") lys fra \"manual_control\" listen."
+ },
+ "lights": {
+ "description": "entity_id(s) til lysene, hvis ikke spesifisert, alle lys i bryteren som er valgt."
+ }
+ },
+ "description": "Marker om et lys er 'manually controlled'"
+ }
+ }
}
diff --git a/custom_components/adaptive_lighting/translations/ru.json b/custom_components/adaptive_lighting/translations/ru.json
index 57a554e1..fd4a4b55 100644
--- a/custom_components/adaptive_lighting/translations/ru.json
+++ b/custom_components/adaptive_lighting/translations/ru.json
@@ -45,7 +45,8 @@
"adapt_only_on_bare_turn_on": "Adapt_only_on_bare_turn_on: При первоначальном включении света. Если установлено значение «true», AL адаптируется только в том случае, если «light.turn_on» вызывается без указания цвета или яркости. ❌🌈 Это, например, предотвращает адаптацию при активации сцены. Если false, AL адаптируется независимо от наличия цвета или яркости в исходных service_data. Требуется включить take_over_control. 🕵️ ",
"skip_redundant_commands": "Skip_redundant_commands: Пропустить отправку команд адаптации, целевое состояние которых уже равно известному состоянию источника света. Минимизирует сетевой трафик и улучшает скорость адаптации в некоторых ситуациях. 📉Отключите, если физические состояния освещения не синхронизируются с записанным состоянием HA.",
"intercept": "intercept: перехватывать и адаптировать вызовы `light.turn_on` для обеспечения мгновенной адаптации цвета и яркости. 🏎️ Отключите источники света, которые не поддерживают `light.turn_on` с цветом и яркостью.",
- "include_config_in_attributes": "include_config_in_attributes: отображать все параметры в качестве атрибутов на переключателе в Home Assistant, если установлено значение `true`. 📝"
+ "include_config_in_attributes": "include_config_in_attributes: отображать все параметры в качестве атрибутов на переключателе в Home Assistant, если установлено значение `true`. 📝",
+ "transition_until_sleep": "transition_until_sleep: когда включено, адаптивное освещение будет рассматривать настройки сна как минимальные, переходя к этим значениям после захода солнца. 🌙"
},
"data_description": {
"sleep_rgb_or_color_temp": "Используйте либо `\"rgb_color\"`, либо `\"color_temp\"` в спящем режиме. 🌙",
@@ -86,6 +87,21 @@
},
"lights": {
"description": "Источник света (или список источников света), к которому нужно применить настройки. 💡"
+ },
+ "adapt_brightness": {
+ "description": "Нужно ли адаптировать яркость света. 🌞"
+ },
+ "turn_on_lights": {
+ "description": "Включать ли свет, который в данный момент выключен. 🔆"
+ },
+ "adapt_color": {
+ "description": "Нужно ли адаптировать цвет, если поддерживается источником света. 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "Предпочитать ли настройку цвета RGB цветовой температуре света, когда это возможно. 🌈"
+ },
+ "transition": {
+ "description": "Длительность плавного перехода при смене освещения, в секундах. 🕑"
}
},
"description": "Применяет текущие настройки адаптивного освещения к источникам света."
@@ -118,11 +134,83 @@
},
"min_sunset_time": {
"description": "Устанавливает самое раннее время виртуального заката (ЧЧ:ММ:СС), чтобы обеспечить более поздние закаты. 🌇"
+ },
+ "sleep_brightness": {
+ "description": "Процент яркости света в режиме сна. 😴"
+ },
+ "detect_non_ha_changes": {
+ "description": "Обнаруживает и останавливает адаптацию для изменений состояния, отличных от `light.turn_on`. Требуется включить `take_over_control`. 🕵️ Внимание: ⚠️ Некоторые индикаторы могут ошибочно указывать включенное состояние, что может привести к неожиданному включению света. Отключите эту функцию, если у вас возникнут такие проблемы."
+ },
+ "sunrise_offset": {
+ "description": "Отрегулируйте время восхода солнца с положительным или отрицательным смещением в секундах. ⏰"
+ },
+ "sleep_color_temp": {
+ "description": "Цветовая температура в режиме сна (используется, когда параметр «sleep_rgb_or_color_temp» имеет значение «color_temp») в Кельвинах. 😴"
+ },
+ "min_color_temp": {
+ "description": "Самая теплая цветовая температура в Кельвинах. 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Используйте либо «rgb_color», либо «color_temp» в режиме сна. 🌙"
+ },
+ "turn_on_lights": {
+ "description": "Включать ли свет, который в данный момент выключен. 🔆"
+ },
+ "initial_transition": {
+ "description": "Длительность первого плавного перехода, когда освещение переключается с «выключено» на «включено» в секундах. ⏲️"
+ },
+ "entity_id": {
+ "description": "Сущность `Entity ID` переключателя `switch`. 📝"
+ },
+ "take_over_control": {
+ "description": "Отключите адаптивное освещение, если другой источник вызывает `light.turn_on`, когда освещение включено и адаптируется. Обратите внимание, что это вызывает `homeassistant.update_entity` каждый `interval` интервал! 🔒"
+ },
+ "sleep_transition": {
+ "description": "Длительность плавного перехода при переключении «спящего режима» в секундах. 😴"
+ },
+ "autoreset_control_seconds": {
+ "description": "Автоматический сброс ручного управления через Х секунд. Установите значение 0, чтобы отключить. ⏲️"
+ },
+ "adapt_delay": {
+ "description": "Время ожидания (в секундах) между включением света и применением адаптивного освещения. Может помочь избежать мерцаний. ⏲️"
+ },
+ "only_once": {
+ "description": "Адаптировать освещение только тогда, когда оно включено («true») или продолжать его адаптировать («false»). 🔄"
+ },
+ "separate_turn_on_commands": {
+ "description": "Используйте отдельные вызовы `light.turn_on` для цвета и яркости, требуется для некоторых типов освещения. 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "Предпочитать ли настройку цвета RGB цветовой температуре света, когда это возможно. 🌈"
+ },
+ "max_color_temp": {
+ "description": "Самая холодная цветовая температура в Кельвинах. ❄️"
+ },
+ "sunset_offset": {
+ "description": "Отрегулируйте время заката с помощью положительного или отрицательного смещения в секундах. ⏰"
+ },
+ "send_split_delay": {
+ "description": "Задержка (мс) между отдельными командами поворота `separate_turn_on_commands` для источников света, которые не поддерживают одновременную настройку яркости и цвета. ⏲️"
+ },
+ "transition": {
+ "description": "Длительность плавного перехода при смене освещения, в секундах. 🕑"
}
- }
+ },
+ "description": "Измените переключателями настройки, которые вам подходят. Все параметры здесь такие же, как и в процессе настройки."
},
"set_manual_control": {
- "description": "Отметьте, контролируется ли свет вручную."
+ "description": "Отметьте, контролируется ли свет вручную.",
+ "fields": {
+ "manual_control": {
+ "description": "Добавлять («true») или удалять («false») свет из списка «ручного упрваления». 🔒"
+ },
+ "entity_id": {
+ "description": "Сущность `entity_id` переключателя для выбора ручного управления `manually controlled`. 📝"
+ },
+ "lights": {
+ "description": "Сущность(и) `entity_id` источников света, если не указано, выбираются все источники света в переключателе. 💡"
+ }
+ }
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/sk.json b/custom_components/adaptive_lighting/translations/sk.json
index 802e30fd..11ad8844 100644
--- a/custom_components/adaptive_lighting/translations/sk.json
+++ b/custom_components/adaptive_lighting/translations/sk.json
@@ -6,23 +6,51 @@
"detect_non_ha_changes": "detect_non_ha_changes: Deteguje a zastaví prispôbovanie pre zmeny mimo `light.turn_on`. Vyžaduje zapnutie `take_over_control`. 🕵️ Upozornenie: ⚠️ Niektoré svetlá môžu falošne indikovať zapnutý stav, čo spôsobí, že sa svetlo neočakávane zapne. Ak narazíte na tento problém, funkciu vypnite.",
"adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Len pri čistom zapnutí svetiel. Pri nastavení `true` prispôsobí Adaptívne osvetlenie svetlá len pri zavolaní služby `light.turn_on` bez parametrov jasu alebo teploty svetla. ❌🌈 Napríklad: zamedzí to prispôsobovaniu ak je aktivovaná scéna. Pri nastavení `false` dôjde k prispôsobeniu nezávisle na tom či sú parametre jasu alebo teploty svetla prítomné v`service_data`. Vyžaduje zapnutie `take_over_control`. 🕵️ ",
"separate_turn_on_commands": "separate_turn_on_commands: Použiť samostatné volania služby `light.turn_on` pre nastavenie teploty svetla a jasu (môže byť potrebné pre niektoré typy svetiel). 🔀",
- "max_color_temp": "max_color_temp: Najstudenejšia teplota svetla v Kelvinoch. ❄️",
- "prefer_rgb_color": "prefer_rgb_color: Ak je to možné, preferovať nastavenie cez RGB než nastavením teploty svetla. 🌈",
+ "max_color_temp": "max_color_temp: Najvyššia teplota svetla (v ˚K). ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Či preferovať nastavenie cez RGB než nastavením teploty svetla, ak je to možné. 🌈",
"max_brightness": "max_brightness: Najvyšší jas (v %). 💡",
"only_once": "only_once: Prispôsobiť svetlá iba pri zapnutí (`true`) alebo prispôsobovať ich priebežne (`false`). 🔄",
"take_over_control": "take_over_control: Ak sú svetlá zapnuté a prispôsobované a niečo zavolá službu `light.turn_on`, dôjde k vypnutiu Adaptívneho osvetlenia. Poznámka: Zapnutie tejto voľby spôsobí volanie služby `homeassistant.update_entity` každý `interval`! 🔒",
"lights": "svetlá: Zoznam svetiel (entity_id), ktoré majú byť ovládané (môže byť prázdny). 🌟",
"min_brightness": "min_brightness: Najnižší jas (v %). 💡",
- "min_color_temp": "min_color_temp: Najteplejšia teplota svetla v Kelvinoch. 🔥",
- "transition_until_sleep": "transition_until_sleep: Keď je funkcia povolená, Adaptívne osvetlenie bude považovať nastavenia režimu spánku ako minimum, a na tieto hodnoty prejde po západe slnka. 🌙"
+ "min_color_temp": "min_color_temp: Najnižšia teplota svetla (v ˚K). 🔥",
+ "transition_until_sleep": "transition_until_sleep: Keď je funkcia povolená, Adaptívne osvetlenie bude považovať nastavenia režimu spánku ako minimum, a na tieto hodnoty prejde po západe slnka. 🌙",
+ "multi_light_intercept": "multi_light_intercept: Zachytiť a prispôsobiť volanie služby`light.turn_on`, ktoré ovlyvňuje viacero svetiel. ➗⚠️ Toto môže spôsobiť rozdelenie jedného volania `light.turn_on`na viacero volaní, napr. ak sú svetlá pod rôznymi prepínačmi adaptívneho osvetlenia. Vyžaduje zapnutie `intercept`.",
+ "skip_redundant_commands": "skip_redundant_commands: Preskočiť odoslanie prispôsobovacích príkazov, ktorých cieľový stav je zhodný s posledným známym stavom. Nastavenie minimalizuje sieťovú prevádzku a v niektorých prípadoch môže zlepšiť odozvu prispôsobovania. 📉 Vypnite, pokiaľ skutočný stav svetiel prestáva odpovedať stavu zaznamenanom v HA.",
+ "intercept": "intercept: Zachytiť a prispôsobiť volania `light.turn_on`, aby došlo k okamžitému prispôsobeniu jasu a teploty svetla. 🏎️ Vypnite pre svetlá, ktoré nepodporujú `light.turn_on` s teplotou svetla a jasom zároveň.",
+ "include_config_in_attributes": "include_config_in_attributes: Zobraziť všetky nastavenia ako atribúty prepínača v Home Assistant. 📝"
},
"data_description": {
"sunset_time": "Nastaviť pevný čas (HH:MM:SS) pre západ slnka. 🌇",
- "sunrise_time": "Nastaviť pevný čas (HH:MM:SS) pre východ slnka. 🌅"
+ "sunrise_time": "Nastaviť pevný čas (HH:MM:SS) pre východ slnka. 🌅",
+ "sleep_rgb_or_color_temp": "V režime spánku použiť `\"rgb_color\"` alebo `\"color_temp\"`. 🌙",
+ "sleep_color_temp": "Teplota svetla (v ˚K) v režime spánku (pokiaľ `sleep_rgb_or_color_temp` je `color_temp`). 😴",
+ "sleep_transition": "Trvanie prechodu do alebo z režimu spánku (v sekundách). 😴",
+ "autoreset_control_seconds": "Automaticky ukončiť manuálne ovládanie po zadanom množtve sekúnd. Pre vypnutie nastavte 0. ⏲️",
+ "min_sunset_time": "Nastavte najskorší možný virtuálny západ slnka (HH:MM:SS). Umožňuje neskorší západ slnka. 🌅",
+ "sleep_brightness": "Jas svetiel pri režime spánku (v %). 😴",
+ "min_sunrise_time": "Nastavte najskorší možný virtuálny východ slnka (HH:MM:SS). Umožňuje neskorší východ slnka. 🌅",
+ "interval": "Frekvencia s akou prispôsobovať svetlá (v sekundách). 🔄",
+ "adapt_delay": "Pauza (v sekundách) medzi zapnutím svetla a aplikáciou zmien Adaptívneho osvetlenia. Môže pomôcť zabrániť blikaniu. ⏲️",
+ "sleep_rgb_color": "Farba svetla RGB v režime spánku (pokiaľ `sleep_rgb_or_color_temp` je `rgb_color `). 🌈",
+ "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. 📈📉",
+ "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). ⏲️",
+ "brightness_mode_time_dark": "(Ignorované ak `brightness_mode='default'`) Čas na zvýšenie/zníženie jasu po udalosti/pred udalosťou východu/západu slnka. 📈📉",
+ "max_sunrise_time": "Nastavte najneskorší možný virtuálny východ slnka (HH:MM:SS). Umožňuje skorší východ slnka. 🌅",
+ "send_split_delay": "Pauza (v ms) medzi príkazmi pri zapnutom `separate_turn_on_commands` pre svetlá, ktoré nepodporujú súčasné nastavenie jasu a teploty svetla. ⏲️"
},
"title": "Nastavenia Adaptívneho osvetlenia",
- "description": "Nastavte komponentu Adaptívneho osvetlenia. Názvy nastavení sú zhodné s názvami v súbore YAML. Ak ste túto položku nastavili už v YAML, tak tu sa nezobrazia žiadne možnosti nastavenia. Interaktívne grafy, ktoré zobrazujú vplyv nastavení, navštívte [túto webovú aplikáciu](https://basnijholt.github.io/adaptive-lighting). Ďalšie informácie nájdete v [oficiálnej dokumentácii](https://github.com/basnijholt/adaptive-lighting#readme)."
+ "description": "Nastavte komponentu Adaptívneho osvetlenia. Názvy nastavení sú zhodné s názvami v súbore YAML. Ak ste túto položku nastavili už v YAML, tak tu sa nezobrazia žiadne možnosti nastavenia. Interaktívne grafy, ktoré zobrazujú vplyv nastavení, nájdete na [tejto webovej aplikácii](https://basnijholt.github.io/adaptive-lighting). Ďalšie informácie nájdete v [oficiálnej dokumentácii](https://github.com/basnijholt/adaptive-lighting#readme)."
}
+ },
+ "error": {
+ "option_error": "Neplatné nastavenie",
+ "entity_missing": "V Home Assistant chýba jedno alebo viac vybraných svetiel"
}
},
"title": "Adaptívne osvetlenie",
@@ -30,7 +58,10 @@
"step": {
"user": {
"description": "Každá inštancia môže obsahovať viacero svetiel!",
- "title": "Vyberte názov inštancie Adaptívneho osvetlenia"
+ "title": "Vyberte názov inštancie Adaptívneho osvetlenia",
+ "data": {
+ "name": "Názov"
+ }
}
},
"abort": {
@@ -45,8 +76,130 @@
},
"sunset_time": {
"description": "Nastaviť pevný čas (HH:MM:SS) pre západ slnka. 🌇"
+ },
+ "sleep_brightness": {
+ "description": "Jas svetiel pri režime spánku (v %). 😴"
+ },
+ "sunrise_offset": {
+ "description": "Upravte čas východu slnka o sekundy vpred alebo vzad. ⏰"
+ },
+ "max_sunrise_time": {
+ "description": "Nastavte najneskorší možný virtuálny východ slnka (HH:MM:SS). Umožňuje skorší východ slnka. 🌅"
+ },
+ "sleep_color_temp": {
+ "description": "Teplota svetla (v ˚K) v režime spánku (pokiaľ `sleep_rgb_or_color_temp` je `color_temp`). 😴"
+ },
+ "min_brightness": {
+ "description": "Najnižší jas (v %). 💡"
+ },
+ "min_color_temp": {
+ "description": "Najnižšia teplota svetla (v ˚K). 🔥"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "V režime spánku použiť `\"rgb_color\"` alebo `\"color_temp\"`. 🌙"
+ },
+ "turn_on_lights": {
+ "description": "Či sa majú zapnúť svetlá, ktoré sú momentálne vypnuté. 🔆"
+ },
+ "initial_transition": {
+ "description": "Trvanie prvého prechodu, keď sú svetlá zapnuté z `off` na `on` (v sekundách). ⏲️"
+ },
+ "entity_id": {
+ "description": "ID prepínača. 📝"
+ },
+ "include_config_in_attributes": {
+ "description": "Zobraziť všetky nastavenia ako atribúty prepínača v Home Assistant. 📝"
+ },
+ "max_brightness": {
+ "description": "Najvyšší jas (v %). 💡"
+ },
+ "sleep_rgb_color": {
+ "description": "Farba svetla RGB v režime spánku (pokiaľ `sleep_rgb_or_color_temp` je `rgb_color `). 🌈"
+ },
+ "take_over_control": {
+ "description": "Ak sú svetlá zapnuté a prispôsobované a niečo zavolá službu `light.turn_on`, dôjde k vypnutiu Adaptívneho osvetlenia. Poznámka: Zapnutie tejto voľby spôsobí volanie služby `homeassistant.update_entity` každý `interval`! 🔒"
+ },
+ "sleep_transition": {
+ "description": "Trvanie prechodu do alebo z režimu spánku (v sekundách). 😴"
+ },
+ "autoreset_control_seconds": {
+ "description": "Automaticky ukončiť manuálne ovládanie po zadanom množtve sekúnd. Pre vypnutie nastavte 0. ⏲️"
+ },
+ "adapt_delay": {
+ "description": "Pauza (v sekundách) medzi zapnutím svetla a aplikáciou zmien Adaptívneho osvetlenia. Môže pomôcť zabrániť blikaniu. ⏲️"
+ },
+ "only_once": {
+ "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). ⚙️"
+ },
+ "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). 🔀"
+ },
+ "prefer_rgb_color": {
+ "description": "Či preferovať nastavenie cez RGB než nastavením teploty svetla, ak je to možné. 🌈"
+ },
+ "max_color_temp": {
+ "description": "Najvyššia teplota svetla (v ˚K). ❄️"
+ },
+ "sunset_offset": {
+ "description": "Upravte čas západu slnka o sekundy vpred alebo vzad. ⏰"
+ },
+ "send_split_delay": {
+ "description": "Pauza (v ms) medzi príkazmi pri zapnutom `separate_turn_on_commands` pre svetlá, ktoré nepodporujú súčasné nastavenie jasu a teploty svetla. ⏲️"
+ },
+ "transition": {
+ "description": "Trvanie prechodu, keď sú svetlá zmenené (v sekundách). ⏲️"
+ },
+ "min_sunset_time": {
+ "description": "Nastavte najskorší možný virtuálny západ slnka (HH:MM:SS). Umožňuje neskorší západ slnka. 🌅"
+ },
+ "detect_non_ha_changes": {
+ "description": "Detekuje a zastaví prispôsobovanie pre iné zmeny stavov než `light.turn_on`. Vyžaduje zapnuté `take_over_control`. 🕵️ Upozornenie: ⚠️ Niektoré svetlá môžu nesprávne indikovať stav 'on', čo môže spôsobiť neočakávané zapnutie svetiel. Vypnite toto nastavenie, ak sa takéto problémy objavia."
}
- }
+ },
+ "description": "Zmeňte ľubovoľné nastavenie prepínača. Všetky možnosti sú rovnaké ako v config flow."
+ },
+ "apply": {
+ "fields": {
+ "entity_id": {
+ "description": "`entity_id` prepínača, na ktorý sa majú aplikovať zmeny. 📝"
+ },
+ "adapt_brightness": {
+ "description": "Či prispôsobiť jas svetla. 🌞"
+ },
+ "turn_on_lights": {
+ "description": "Či sa majú zapnúť svetlá, ktoré sú momentálne vypnuté. 🔆"
+ },
+ "adapt_color": {
+ "description": "Či prispôsobiť teplotu svetla na podporovaných svetlách. 🌈"
+ },
+ "prefer_rgb_color": {
+ "description": "Či preferovať nastavenie cez RGB než nastavením teploty svetla, ak je to možné. 🌈"
+ },
+ "lights": {
+ "description": "Svetlo (alebo zoznam svetiel), na ktoré sa má nastavenie aplikovať. 💡"
+ },
+ "transition": {
+ "description": "Trvanie prechodu, keď sú svetlá zmenené (v sekundách). ⏲️"
+ }
+ },
+ "description": "Aplikuje na svetlá súčasné nastavenie Adaptívneho osvetlenia."
+ },
+ "set_manual_control": {
+ "fields": {
+ "manual_control": {
+ "description": "Či pridať (`true`) alebo odobrať (`false`) svetlo zo zoznamu \"manuálne ovládaných\". 🔒"
+ },
+ "entity_id": {
+ "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": "Či označiť svetlo ako \"manuálne ovládané\"."
}
}
}
From 30e1c8d1904366d95da57d1a6d6e91d1f5a381ca Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 17 Feb 2024 11:00:52 -0800
Subject: [PATCH 029/361] Revert translations deleted by @mstefany (#933)
---
.../adaptive_lighting/translations/cs.json | 28 +++++++++----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git a/custom_components/adaptive_lighting/translations/cs.json b/custom_components/adaptive_lighting/translations/cs.json
index 3a7d9788..74291134 100644
--- a/custom_components/adaptive_lighting/translations/cs.json
+++ b/custom_components/adaptive_lighting/translations/cs.json
@@ -21,9 +21,9 @@
"description": "Všechna nastavení komponenty Adaptivního osvětlení. Názvy možností odpovídají nastavení YAML. Pokud máte v konfiguraci YAML definovánu položku 'adaptive_lighting', nezobrazí se žádné možnosti.",
"data": {
"lights": "lights: Seznam světel (entity_id), které mají být ovládané (může být prázdný). 🌟",
- "initial_transition": "",
- "sleep_transition": "",
- "interval": "",
+ "initial_transition": "initial_transition: Prodlení pro změnu z 'vypnuto' do 'zapnuto' (sekundy)",
+ "sleep_transition": "sleep_transition: Prodleva pro přepnutí do „režimu spánku“ (sekundy)",
+ "interval": "interval: Prodleva pro změny osvětlení (v sekundách)",
"max_brightness": "max_brightness: Nejvyšší jas osvětlení během cyklu. (%)",
"max_color_temp": "max_color_temp: Nejchladnější odstín cyklu teploty barev. (Kelvin)",
"min_brightness": "min_brightness: Nejnižší jas osvětlení během cyklu. (%)",
@@ -31,17 +31,17 @@
"only_once": "only_once: Přizpůsobení osvětlení pouze při rozsvícení.",
"prefer_rgb_color": "prefer_rgb_color: Upřednostněte použití 'rgb_color' před 'color_temp'.",
"separate_turn_on_commands": "separate_turn_on_commands: Oddělení příkazů pro každý atribut (barva, jas, atd.) v atributu 'light.turn_on' (vyžadováno pro některá světla).",
- "send_split_delay": "",
- "sleep_brightness": "",
- "sleep_rgb_or_color_temp": "",
- "sleep_rgb_color": "",
- "sleep_color_temp": "",
- "sunrise_offset": "",
- "sunrise_time": "",
- "max_sunrise_time": "",
- "sunset_offset": "",
- "sunset_time": "",
- "min_sunset_time": "",
+ "send_split_delay": "send_split_delay: prodleva mezi příkazy (milisekundy), když je použit atribut 'separate_turn_on_commands'. Může zajistit správné zpracování obou příkazů.",
+ "sleep_brightness": "sleep_brightness, Nastavení jasu pro režim spánku. (%)",
+ "sleep_rgb_or_color_temp": "sleep_rgb_or_color_temp, použijte 'rgb_color' nebo 'color_temp'",
+ "sleep_rgb_color": "sleep_rgb_color, v RGB",
+ "sleep_color_temp": "sleep_color_temp: Nastavení teploty barev pro režim spánku. (v Kelvinech)",
+ "sunrise_offset": "sunrise_offset: Jak dlouho před (-) nebo po (+) definovat bod cyklu východu slunce (+/- v sekundách)",
+ "sunrise_time": "sunrise_time: Manuální přepsání času východu slunce, pokud je „None“, použije se skutečný čas východu slunce ve vaší lokalitě (HH:MM:SS)",
+ "max_sunrise_time": "max_sunrise_time: Ruční přepsání nejpozdějšího času východu slunce, pokud je „None“, použije se skutečný čas východu slunce vaší lokality (HH:MM:SS)",
+ "sunset_offset": "sunset_offset: Jak dlouho před (-) nebo po (+) definovat bod cyklu západu slunce (+/- v sekundách)",
+ "sunset_time": "sunset_time: Ruční přepsání času západu slunce, pokud je „None“, použije se skutečný čas západu slunce vaší lokality (HH:MM:SS)",
+ "min_sunset_time": "min_sunset_time: Ruční přepsání nejdřívějšího času západu slunce, pokud je „None“, použije se skutečný čas západu slunce vaší lokality (HH:MM:SS)",
"take_over_control": "take_over_control: Je-li volán 'light.turn_on' z jiného zdroje, než Adaptivním osvětlením, když je světlo již rozsvíceno, přestaňte toto světlo ovládat, dokud není vypnuto -> zapnuto (nebo i vypínačem).",
"detect_non_ha_changes": "detect_non_ha_changes: detekuje všechny změny >10% provedených pro osvětlení (také mimo HA), vyžaduje povolení atributu 'take_over_control' (každý 'interval' spouští 'homeassistant.update_entity'!)",
"transition": "",
From bc8c94081a9df71275ad6f29d4c2d275c462c538 Mon Sep 17 00:00:00 2001
From: saya6k <63517312+saya6k@users.noreply.github.com>
Date: Sun, 18 Feb 2024 04:03:14 +0900
Subject: [PATCH 030/361] add Korean translation (#923)
* add Korean translation
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* fix
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
Co-authored-by: Bas Nijholt
---
.../adaptive_lighting/translations/ko.json | 270 +++++++++++++++++-
1 file changed, 269 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/translations/ko.json b/custom_components/adaptive_lighting/translations/ko.json
index 0967ef42..f4418fd5 100644
--- a/custom_components/adaptive_lighting/translations/ko.json
+++ b/custom_components/adaptive_lighting/translations/ko.json
@@ -1 +1,269 @@
-{}
+{
+ "title": "적응형 조명",
+ "config": {
+ "step": {
+ "user": {
+ "title": "적응형 조명 인스턴스 이름 선택",
+ "description": "각 인스턴스는 여러 조명을 포함할 수 있습니다!",
+ "data": {
+ "name": "이름"
+ }
+ }
+ },
+ "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": "조명: 제어될 조명 entity_ids의 목록 (비어 있을 수 있음). 🌟",
+ "interval": "간격",
+ "transition": "전환",
+ "initial_transition": "초기 전환",
+ "min_brightness": "최소 밝기: 밝기 최소 퍼센트. 💡",
+ "max_brightness": "최대 밝기: 밝기 최대 퍼센트. 💡",
+ "min_color_temp": "최소 색온도: 켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
+ "max_color_temp": "최대 색온도: 켈빈으로 표시된 가장 차가운 색온도. ❄️",
+ "prefer_rgb_color": "RGB 색상 선호: 가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "sleep_brightness": "수면 밝기",
+ "sleep_rgb_or_color_temp": "수면 rgb_or_color_temp",
+ "sleep_color_temp": "수면 색온도",
+ "sleep_rgb_color": "수면 RGB 색상",
+ "sleep_transition": "수면 전환",
+ "transition_until_sleep": "수면까지 전환: 활성화되면, 적응형 조명은 수면 설정을 최소값으로 취급하고 일몰 후 이 값으로 전환합니다. 🌙",
+ "sunrise_time": "일출 시간",
+ "min_sunrise_time": "최소 일출 시간",
+ "max_sunrise_time": "최대 일출 시간",
+ "sunrise_offset": "일출 오프셋",
+ "sunset_time": "일몰 시간",
+ "min_sunset_time": "최소 일몰 시간",
+ "max_sunset_time": "최대 일몰 시간",
+ "sunset_offset": "일몰 오프셋",
+ "brightness_mode": "밝기 모드",
+ "brightness_mode_time_dark": "어두울 때 밝기 모드 시간",
+ "brightness_mode_time_light": "밝을 때 밝기 모드 시간",
+ "take_over_control": "제어 인계: 다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
+ "detect_non_ha_changes": "비HA 변경 감지: `light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
+ "autoreset_control_seconds": "자동 제어 리셋 초",
+ "only_once": "한 번만: 조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
+ "adapt_only_on_bare_turn_on": "초기 켜짐 시 조정만: 조명을 처음 켤 때. `true`로 설정하면 `light.turn_on`이 색상이나 밝기를 지정하지 않고 호출될 때만 AL이 조정합니다. ❌🌈 예를 들어, 장면을 활성화할 때 조정을 방지합니다. `false`로 설정하면, AL은 초기 `service_data`에 색상이나 밝기의 존재 여부와 관계없이 조정합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️",
+ "separate_turn_on_commands": "분리된 켜기 명령 사용: 일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
+ "send_split_delay": "분할 전송 지연",
+ "adapt_delay": "조정 지연",
+ "skip_redundant_commands": "중복 명령 건너뛰기: 목표 상태가 이미 조명의 알려진 상태와 동일한 조정 명령을 보내지 않습니다. 네트워크 트래픽을 최소화하고 일부 상황에서 조정 반응성을 향상시킵니다. 📉 물리적 조명 상태가 HA의 기록된 상태와 동기화되지 않는 경우 비활성화하세요.",
+ "intercept": "가로채기: 색상과 밝기의 즉각적인 조정을 가능하게 하기 위해 `light.turn_on` 호출을 가로챕니다. 🏎️ 색상과 밝기를 지원하지 않는 조명에 대해 비활성화합니다.",
+ "multi_light_intercept": "다중 조명 가로채기: 여러 조명을 대상으로 하는 `light.turn_on` 호출을 가로채고 조정합니다. ➗⚠️ 이는 단일 `light.turn_on` 호출을 여러 호출로 분할할 수 있음을 의미합니다. 예를 들어, 조명이 다른 스위치에 있을 때. `intercept`가 활성화되어 있어야 합니다.",
+ "include_config_in_attributes": "속성에 구성 포함: `true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝"
+ },
+ "data_description": {
+ "interval": "조명을 조정하는 빈도, 초 단위. 🔄",
+ "transition": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
+ "initial_transition": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
+ "sleep_brightness": "수면 모드에서 조명의 밝기 퍼센트. 😴",
+ "sleep_rgb_or_color_temp": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
+ "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": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
+ "brightness_mode": "사용할 밝기 모드. 가능한 값은 `default`, `linear`, `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈",
+ "brightness_mode_time_dark": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 전/후에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉",
+ "brightness_mode_time_light": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 후/전에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉.",
+ "autoreset_control_seconds": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
+ "send_split_delay": "`separate_turn_on_commands`에 대한 호출 사이의 지연 시간(밀리초)으로, 밝기와 색상을 동시에 설정하지 않는 조명에 대한 지연. ⏲️",
+ "adapt_delay": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️"
+ }
+ }
+ },
+ "error": {
+ "option_error": "잘못된 옵션",
+ "entity_missing": "선택한 하나 이상의 조명 엔티티가 Home Assistant에서 누락됨"
+ }
+ },
+ "services": {
+ "apply": {
+ "name": "적용",
+ "description": "현재 적응형 조명 설정을 조명에 적용합니다.",
+ "fields": {
+ "entity_id": {
+ "description": "설정을 적용할 스위치의 `entity_id`. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "설정을 적용할 조명(또는 조명 목록). 💡",
+ "name": "lights"
+ },
+ "transition": {
+ "description": "조명 변경 시 전환 기간, 초 단위. 🕑",
+ "name": "transition"
+ },
+ "adapt_brightness": {
+ "description": "조명의 밝기를 조정할지 여부. 🌞",
+ "name": "adapt_brightness"
+ },
+ "adapt_color": {
+ "description": "지원하는 조명의 색상을 조정할지 여부. 🌈",
+ "name": "adapt_color"
+ },
+ "prefer_rgb_color": {
+ "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "turn_on_lights": {
+ "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
+ "name": "turn_on_lights"
+ }
+ }
+ },
+ "set_manual_control": {
+ "name": "수동 제어 설정",
+ "description": "조명이 '수동 제어됨'으로 표시되었는지 여부를 표시합니다.",
+ "fields": {
+ "entity_id": {
+ "description": "`수동 제어됨`으로 (표시 해제)할 스위치의 `entity_id`. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "조명의 entity_id(들), 지정하지 않으면 스위치의 모든 조명이 선택됩니다. 💡",
+ "name": "lights"
+ },
+ "manual_control": {
+ "description": "\"수동 제어\" 목록에서 조명을 추가(\"true\") 또는 제거(\"false\")할지 여부. 🔒",
+ "name": "manual_control"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "name": "스위치 설정 변경",
+ "description": "스위치에서 원하는 모든 설정을 변경하세요. 여기에 있는 모든 옵션은 구성 흐름에서와 같습니다.",
+ "fields": {
+ "entity_id": {
+ "description": "스위치의 Entity ID. 📝",
+ "name": "entity_id"
+ },
+ "use_defaults": {
+ "description": "이 서비스 호출에서 지정되지 않은 기본값을 설정합니다. 옵션: \"현재\"(기본값, 현재 값을 유지), \"공장\"(문서화된 기본값으로 재설정), 또는 \"구성\"(스위치 구성 기본값으로 되돌림). ⚙️",
+ "name": "use_defaults"
+ },
+ "include_config_in_attributes": {
+ "description": "`true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝",
+ "name": "include_config_in_attributes"
+ },
+ "turn_on_lights": {
+ "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
+ "name": "turn_on_lights"
+ },
+ "initial_transition": {
+ "description": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
+ "name": "initial_transition"
+ },
+ "sleep_transition": {
+ "description": "\"수면 모드\"가 전환될 때 전환 기간, 초 단위. 😴",
+ "name": "sleep_transition"
+ },
+ "max_brightness": {
+ "description": "최대 밝기 퍼센트. 💡",
+ "name": "max_brightness"
+ },
+ "max_color_temp": {
+ "description": "켈빈으로 표시된 가장 차가운 색온도. ❄️",
+ "name": "max_color_temp"
+ },
+ "min_brightness": {
+ "description": "최소 밝기 퍼센트. 💡",
+ "name": "min_brightness"
+ },
+ "min_color_temp": {
+ "description": "켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
+ "name": "min_color_temp"
+ },
+ "only_once": {
+ "description": "조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
+ "name": "only_once"
+ },
+ "prefer_rgb_color": {
+ "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "separate_turn_on_commands": {
+ "description": "일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
+ "name": "separate_turn_on_commands"
+ },
+ "send_split_delay": {
+ "description": "밝기와 색상을 동시에 설정하지 않는 조명에 대한 `separate_turn_on_commands` 호출 사이의 지연 시간(밀리초). ⏲️",
+ "name": "send_split_delay"
+ },
+ "sleep_brightness": {
+ "description": "수면 모드에서 조명의 밝기 퍼센트. 😴",
+ "name": "sleep_brightness"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
+ "name": "sleep_rgb_or_color_temp"
+ },
+ "sleep_rgb_color": {
+ "description": "수면 모드에서 RGB 색상 (sleep_rgb_or_color_temp가 \"rgb_color\"일 때 사용). 🌈",
+ "name": "sleep_rgb_color"
+ },
+ "sleep_color_temp": {
+ "description": "수면 모드에서 색온도 (sleep_rgb_or_color_temp가 `color_temp`일 때 사용) 켈빈 단위. 😴",
+ "name": "sleep_color_temp"
+ },
+ "sunrise_offset": {
+ "description": "양수 또는 음수 오프셋(초)으로 일출 시간을 조정. ⏰",
+ "name": "sunrise_offset"
+ },
+ "sunrise_time": {
+ "description": "일출 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌅",
+ "name": "sunrise_time"
+ },
+ "sunset_offset": {
+ "description": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
+ "name": "sunset_offset"
+ },
+ "sunset_time": {
+ "description": "일몰 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌇",
+ "name": "sunset_time"
+ },
+ "max_sunrise_time": {
+ "description": "가장 늦은 가상 일출 시간 (HH:MM:SS)을 설정하여 더 일찍 일출을 허용. 🌅",
+ "name": "max_sunrise_time"
+ },
+ "min_sunset_time": {
+ "description": "가장 이른 가상 일몰 시간 (HH:MM:SS)을 설정하여 더 늦은 일몰을 허용. 🌇",
+ "name": "min_sunset_time"
+ },
+ "take_over_control": {
+ "description": "다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
+ "name": "take_over_control"
+ },
+ "detect_non_ha_changes": {
+ "description": "`light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
+ "name": "detect_non_ha_changes"
+ },
+ "transition": {
+ "description": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
+ "name": "transition"
+ },
+ "adapt_delay": {
+ "description": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️",
+ "name": "adapt_delay"
+ },
+ "autoreset_control_seconds": {
+ "description": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
+ "name": "autoreset_control_seconds"
+ }
+ }
+ }
+ }
+}
From 92aa50411a60e9779db035af5f3ad4d491336c6f Mon Sep 17 00:00:00 2001
From: droans <49721649+droans@users.noreply.github.com>
Date: Wed, 21 Feb 2024 16:10:00 -0500
Subject: [PATCH 031/361] Test that switch is on before updating time listeners
(#936)
Co-authored-by: Michael Carroll
---
custom_components/adaptive_lighting/switch.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 06cd2f87..cf38d21f 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -359,7 +359,8 @@ async def handle_change_switch_settings(
# deep copy the defaults so we don't modify the original dicts
switch._set_changeable_settings(data=data, defaults=deepcopy(defaults))
- switch._update_time_interval_listener()
+ if switch.is_on:
+ switch._update_time_interval_listener()
_LOGGER.debug(
"Called 'adaptive_lighting.change_switch_settings' service with '%s'",
From b02c3f8024b1ea2a220aed86fa86cf3014af5ce0 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Wed, 21 Feb 2024 13:10:39 -0800
Subject: [PATCH 032/361] docs: add droans as a contributor for code (#937)
* 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 e4aa63a4..6ce6817a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -774,6 +774,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "droans",
+ "name": "droans",
+ "avatar_url": "https://avatars.githubusercontent.com/u/49721649?v=4",
+ "profile": "https://github.com/droans",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index b5fa6293..b59d6097 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -573,6 +573,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 moemeli 🌍 |
 saya6k 🌍 |
+
+  droans 💻 |
+
From 8fe532748af57d65b592171f00760b27c36fd847 Mon Sep 17 00:00:00 2001
From: Jonathan Kang
Date: Mon, 4 Mar 2024 03:38:31 +0800
Subject: [PATCH 033/361] Do not adapt lights that are turned on with an effect
(#844)
* Do not adapt lights that are turned on with an effect
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
custom_components/adaptive_lighting/switch.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index cf38d21f..23ca14f9 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -2654,7 +2654,10 @@ class AdaptiveLightingManager:
entity_id,
service_data,
)
- if any(attr in service_data for attr in COLOR_ATTRS | BRIGHTNESS_ATTRS):
+ if any(
+ attr in service_data
+ for attr in COLOR_ATTRS | BRIGHTNESS_ATTRS | {ATTR_EFFECT}
+ ):
self.mark_as_manual_control(entity_id)
return True
return False
From 36a5a51405d30e36d0344ecc95a8adbb45a79755 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 3 Mar 2024 11:38:58 -0800
Subject: [PATCH 034/361] docs: add JonathanKang as a contributor for code
(#941)
* 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 6ce6817a..78faf634 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -783,6 +783,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "JonathanKang",
+ "name": "Jonathan Kang",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5607743?v=4",
+ "profile": "http://blogs.gnome.org/jonathankang/",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index b59d6097..b4c8560c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -575,6 +575,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 droans 💻 |
+  Jonathan Kang 💻 |
From f2a124c30f53e67ea8606adeabd83df84c7a5c51 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 3 Mar 2024 15:09:18 -0800
Subject: [PATCH 035/361] Update Ruff to be used in tests (#943)
* Update Ruff config
* Rerun ruff
---
.ruff.toml | 30 ++++-
tests/conftest.py | 2 +-
tests/test_adaptation_utils.py | 36 +++--
tests/test_color_and_brightness.py | 18 +--
tests/test_config_flow.py | 6 +-
tests/test_init.py | 3 +-
tests/test_switch.py | 204 +++++++++++++++++++----------
7 files changed, 197 insertions(+), 102 deletions(-)
diff --git a/.ruff.toml b/.ruff.toml
index 6ebfec62..fe94764b 100644
--- a/.ruff.toml
+++ b/.ruff.toml
@@ -1,7 +1,7 @@
# The contents of this file is based on https://github.com/home-assistant/core/blob/dev/pyproject.toml
target-version = "py310"
-
+[lint]
select = ["ALL"]
# All the ones without a comment were the ones that are currently violated
@@ -23,18 +23,36 @@ ignore = [
"SLF001", # Private member accessed
]
-[per-file-ignores]
-"tests/*.py" = ["ALL"]
+[lint.per-file-ignores]
+"tests/*.py" = [
+ "ARG001", # Unused function argument: `call`
+ "D100", # Missing docstring in public module
+ "D103", # Missing docstring in public function
+ "D205", # 1 blank line required between summary line and description
+ "D400", # First line should end with a period
+ "D415", # First line should end with a period, question mark, or
+ "DTZ001", # The use of `datetime.datetime()` without `tzinfo`
+ "ERA001", # Found commented-out code
+ "FBT003", # Boolean positional value in function call
+ "FIX002", # Line contains TODO, consider resolving the issue
+ "G004", # Logging statement uses f-string
+ "PLR0915", # Too many statements (94 > 50)
+ "PT004", # Fixture `cleanup` does not return anything, add leading underscore
+ "PT007", # Wrong values type in `@pytest.mark.parametrize` expected `list` of
+ "S311", # Standard pseudo-random generators are not suitable for cryptographic
+ "TD002", # Missing author in TODO; try: `# TODO(): ...` or `# TODO
+ "TD003", # Missing issue link on the line following this TODO
+]
".github/*py" = ["INP001"]
"webapp/homeassistant_util_color.py" = ["ALL"]
"webapp/app.py" = ["INP001", "DTZ011", "A002"]
"custom_components/adaptive_lighting/homeassistant_util_color.py" = ["ALL"]
-[flake8-pytest-style]
+[lint.flake8-pytest-style]
fixture-parentheses = false
-[pyupgrade]
+[lint.pyupgrade]
keep-runtime-typing = true
-[mccabe]
+[lint.mccabe]
max-complexity = 25
diff --git a/tests/conftest.py b/tests/conftest.py
index 4b61832d..79b83fb6 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -17,4 +17,4 @@ if "HA_CLONE" in os.environ:
@pytest.fixture(autouse=True)
def auto_enable_custom_integrations(enable_custom_integrations):
- yield
+ return
diff --git a/tests/test_adaptation_utils.py b/tests/test_adaptation_utils.py
index 20db5037..8e36a181 100644
--- a/tests/test_adaptation_utils.py
+++ b/tests/test_adaptation_utils.py
@@ -2,6 +2,7 @@
from unittest.mock import Mock
+import pytest
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
ATTR_COLOR_TEMP_KELVIN,
@@ -9,7 +10,6 @@ from homeassistant.components.light import (
)
from homeassistant.const import ATTR_ENTITY_ID, STATE_ON
from homeassistant.core import Context, State
-import pytest
from custom_components.adaptive_lighting.adaptation_utils import (
ServiceData,
@@ -22,7 +22,7 @@ from custom_components.adaptive_lighting.adaptation_utils import (
@pytest.mark.parametrize(
- "input_data,expected_data_list",
+ ("input_data", "expected_data_list"),
[
(
{"foo": 1},
@@ -72,7 +72,7 @@ async def test_split_service_call_data(input_data, expected_data_list):
@pytest.mark.parametrize(
- "service_data,state,service_data_expected",
+ ("service_data", "state", "service_data_expected"),
[
(
{ATTR_ENTITY_ID: "light.test", ATTR_BRIGHTNESS: 10, ATTR_TRANSITION: 2},
@@ -97,14 +97,16 @@ async def test_split_service_call_data(input_data, expected_data_list):
],
)
async def test_remove_redundant_attributes(
- service_data: ServiceData, state: State | None, service_data_expected: ServiceData
+ service_data: ServiceData,
+ state: State | None,
+ service_data_expected: ServiceData,
):
"""Test filtering of service data."""
assert _remove_redundant_attributes(service_data, state) == service_data_expected
@pytest.mark.parametrize(
- "service_data,expected_relevant",
+ ("service_data", "expected_relevant"),
[
(
{ATTR_ENTITY_ID: "light.test"},
@@ -125,14 +127,15 @@ async def test_remove_redundant_attributes(
],
)
async def test_has_relevant_service_data_attributes(
- service_data: ServiceData, expected_relevant: bool
+ service_data: ServiceData,
+ expected_relevant: bool,
):
"""Test the determination of relevancy of service data"""
assert _has_relevant_service_data_attributes(service_data) == expected_relevant
@pytest.mark.parametrize(
- "service_datas,filter_by_state,service_datas_expected",
+ ("service_datas", "filter_by_state", "service_datas_expected"),
[
(
[{ATTR_ENTITY_ID: "light.test"}],
@@ -198,11 +201,12 @@ async def test_create_service_call_data_iterator(
hass_states_mock,
):
"""Test the generator function for correct enumeration and filtering."""
-
generated_service_datas = [
data
async for data in _create_service_call_data_iterator(
- hass_states_mock, service_datas, filter_by_state
+ hass_states_mock,
+ service_datas,
+ filter_by_state,
)
]
@@ -215,7 +219,13 @@ async def test_create_service_call_data_iterator(
@pytest.mark.parametrize(
- "service_data,split,filter_by_state,service_datas_expected,sleep_time_expected",
+ (
+ "service_data",
+ "split",
+ "filter_by_state",
+ "service_datas_expected",
+ "sleep_time_expected",
+ ),
[
(
{
@@ -230,7 +240,7 @@ async def test_create_service_call_data_iterator(
ATTR_ENTITY_ID: "light.test",
ATTR_BRIGHTNESS: 10,
ATTR_COLOR_TEMP_KELVIN: 4000,
- }
+ },
],
1.2,
),
@@ -266,7 +276,7 @@ async def test_create_service_call_data_iterator(
{
ATTR_ENTITY_ID: "light.test",
ATTR_COLOR_TEMP_KELVIN: 4000,
- }
+ },
],
1.2,
),
@@ -282,7 +292,7 @@ async def test_create_service_call_data_iterator(
{
ATTR_ENTITY_ID: "light.test",
ATTR_COLOR_TEMP_KELVIN: 4000,
- }
+ },
],
0.7,
),
diff --git a/tests/test_color_and_brightness.py b/tests/test_color_and_brightness.py
index a199f939..b8398a71 100644
--- a/tests/test_color_and_brightness.py
+++ b/tests/test_color_and_brightness.py
@@ -1,13 +1,15 @@
-import pytest
-from custom_components.adaptive_lighting.color_and_brightness import (
- SunEvents,
- SUN_EVENT_SUNRISE,
- SUN_EVENT_NOON,
-)
import datetime as dt
+import zoneinfo
+
+import pytest
from astral import LocationInfo
from astral.location import Location
-import zoneinfo
+
+from custom_components.adaptive_lighting.color_and_brightness import (
+ SUN_EVENT_NOON,
+ SUN_EVENT_SUNRISE,
+ SunEvents,
+)
# Create a mock astral_location object
location = Location(LocationInfo())
@@ -31,7 +33,7 @@ def tzinfo_and_location(request):
timezone=timezone,
latitude=lat,
longitude=long,
- )
+ ),
)
return tzinfo, location
diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py
index 4242417a..1678e3d4 100644
--- a/tests/test_config_flow.py
+++ b/tests/test_config_flow.py
@@ -20,7 +20,8 @@ DEFAULT_DATA = {key: default for key, default, _ in VALIDATION_TUPLES}
async def test_flow_manual_configuration(hass):
"""Test that config flow works."""
result = await hass.config_entries.flow.async_init(
- DOMAIN, context={"source": "user"}
+ DOMAIN,
+ context={"source": "user"},
)
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
@@ -28,7 +29,8 @@ async def test_flow_manual_configuration(hass):
assert result["handler"] == "adaptive_lighting"
result = await hass.config_entries.flow.async_configure(
- result["flow_id"], user_input={CONF_NAME: "living room"}
+ result["flow_id"],
+ user_input={CONF_NAME: "living room"},
)
assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
assert result["title"] == "living room"
diff --git a/tests/test_init.py b/tests/test_init.py
index b6c82673..19710d57 100644
--- a/tests/test_init.py
+++ b/tests/test_init.py
@@ -14,7 +14,7 @@ async def test_setup_with_config(hass):
config = {
adaptive_lighting.DOMAIN: {
adaptive_lighting.CONF_NAME: DEFAULT_NAME,
- }
+ },
}
assert await async_setup_component(hass, adaptive_lighting.DOMAIN, config)
assert adaptive_lighting.DOMAIN in hass.data
@@ -22,7 +22,6 @@ async def test_setup_with_config(hass):
async def test_successful_config_entry(hass):
"""Test that Adaptive Lighting is configured successfully."""
-
entry = MockConfigEntry(
domain=adaptive_lighting.DOMAIN,
data={CONF_NAME: DEFAULT_NAME},
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 8664433c..9585c960 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -2,14 +2,19 @@
# pylint: disable=protected-access
import asyncio
-import itertools
-from copy import deepcopy
+import contextlib
import datetime
import logging
+from copy import deepcopy
from random import randint
from typing import Any
from unittest.mock import Mock, patch
+import homeassistant.config as config_util
+import homeassistant.util.dt as dt_util
+import pytest
+import ulid_transform
+import voluptuous.error
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
ATTR_BRIGHTNESS_PCT,
@@ -17,11 +22,10 @@ from homeassistant.components.light import (
ATTR_RGB_COLOR,
ATTR_TRANSITION,
ATTR_XY_COLOR,
+ SERVICE_TURN_OFF,
)
from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
-from homeassistant.components.light import SERVICE_TURN_OFF
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
-import homeassistant.config as config_util
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import (
ATTR_AREA_ID,
@@ -41,24 +45,21 @@ from homeassistant.helpers import entity_registry
from homeassistant.helpers.entity_platform import async_get_platforms
from homeassistant.setup import async_setup_component
from homeassistant.util.color import color_temperature_mired_to_kelvin
-import homeassistant.util.dt as dt_util
-import pytest
from pytest_homeassistant_custom_component.common import (
MockConfigEntry,
mock_area_registry,
)
-import ulid_transform
-import voluptuous.error
from custom_components.adaptive_lighting.adaptation_utils import (
AdaptationData,
_create_service_call_data_iterator,
)
+from custom_components.adaptive_lighting.color_and_brightness import lerp_color_hsv
from custom_components.adaptive_lighting.const import (
ADAPT_BRIGHTNESS_SWITCH,
ADAPT_COLOR_SWITCH,
- CONF_TAKE_OVER_CONTROL,
ATTR_ADAPTIVE_LIGHTING_MANAGER,
+ CONF_ADAPT_ONLY_ON_BARE_TURN_ON,
CONF_ADAPT_UNTIL_SLEEP,
CONF_AUTORESET_CONTROL,
CONF_BRIGHTNESS_MODE,
@@ -69,13 +70,14 @@ from custom_components.adaptive_lighting.const import (
CONF_MANUAL_CONTROL,
CONF_MAX_BRIGHTNESS,
CONF_MIN_COLOR_TEMP,
- CONF_PREFER_RGB_COLOR,
CONF_MULTI_LIGHT_INTERCEPT,
+ CONF_PREFER_RGB_COLOR,
CONF_SEPARATE_TURN_ON_COMMANDS,
CONF_SLEEP_RGB_OR_COLOR_TEMP,
CONF_SUNRISE_OFFSET,
CONF_SUNRISE_TIME,
CONF_SUNSET_TIME,
+ CONF_TAKE_OVER_CONTROL,
CONF_TRANSITION,
CONF_TURN_ON_LIGHTS,
CONF_USE_DEFAULTS,
@@ -89,20 +91,18 @@ from custom_components.adaptive_lighting.const import (
SERVICE_CHANGE_SWITCH_SETTINGS,
SERVICE_SET_MANUAL_CONTROL,
SLEEP_MODE_SWITCH,
- CONF_ADAPT_ONLY_ON_BARE_TURN_ON,
UNDO_UPDATE_LISTENER,
)
from custom_components.adaptive_lighting.switch import (
CONF_INTERCEPT,
+ AdaptiveLightingManager,
AdaptiveSwitch,
_attributes_have_changed,
color_difference_redmean,
create_context,
- AdaptiveLightingManager,
is_our_context,
is_our_context_id,
)
-from custom_components.adaptive_lighting.color_and_brightness import lerp_color_hsv
_LOGGER = logging.getLogger(__name__)
@@ -206,7 +206,7 @@ async def setup_lights(hass: HomeAssistant, with_group: bool = False):
"name": "Light Group",
"unique_id": "light_group",
"all": "false",
- }
+ },
)
await async_setup_component(
@@ -319,7 +319,10 @@ def create_transition_events(
ATTR_ENTITY_ID: light,
"old_state": State(light, "on", attributes=last),
"new_state": State(
- light, "on", attributes=attributes, context=create_random_context()
+ light,
+ "on",
+ attributes=attributes,
+ context=create_random_context(),
),
}
all_events.append(event_data)
@@ -351,9 +354,13 @@ async def test_adaptive_lighting_switches(hass):
assert len(data.keys()) == 5
-@pytest.mark.parametrize("lat,long,timezone", LAT_LONG_TZS)
+@pytest.mark.parametrize(("lat", "long", "timezone"), LAT_LONG_TZS)
async def test_adaptive_lighting_time_zones_with_default_settings(
- hass, lat, long, timezone, reset_time_zone # pylint: disable=redefined-outer-name
+ hass,
+ lat,
+ long,
+ timezone,
+ reset_time_zone, # pylint: disable=redefined-outer-name
):
"""Test setting up the Adaptive Lighting switches with different timezones."""
await config_util.async_process_ha_core_config(
@@ -363,11 +370,11 @@ async def test_adaptive_lighting_time_zones_with_default_settings(
_, switch = await setup_switch(hass, {})
# Shouldn't raise an exception ever
await switch._update_attrs_and_maybe_adapt_lights(
- context=switch.create_context("test")
+ context=switch.create_context("test"),
)
-@pytest.mark.parametrize("lat,long,timezone", LAT_LONG_TZS)
+@pytest.mark.parametrize(("lat", "long", "timezone"), LAT_LONG_TZS)
async def test_adaptive_lighting_time_zones_and_sun_settings(
hass,
lat,
@@ -466,7 +473,7 @@ async def test_light_settings(hass):
light_states = [hass.states.get(light) for light in lights]
for state in light_states:
assert state.attributes[ATTR_BRIGHTNESS] == round(
- 255 * switch._settings[ATTR_BRIGHTNESS_PCT] / 100
+ 255 * switch._settings[ATTR_BRIGHTNESS_PCT] / 100,
)
last_service_data = switch.manager.last_service_data[state.entity_id]
assert state.attributes[ATTR_BRIGHTNESS] == last_service_data[ATTR_BRIGHTNESS]
@@ -500,7 +507,9 @@ async def test_light_settings(hass):
return_value=time,
):
await switch._update_attrs_and_maybe_adapt_lights(
- context=context, transition=0, force=True
+ context=context,
+ transition=0,
+ force=True,
)
await hass.async_block_till_done()
return [hass.states.get(light) for light in lights]
@@ -564,7 +573,7 @@ async def test_manager_not_tracking_untracked_lights(hass):
blocking=True,
)
await switch._update_attrs_and_maybe_adapt_lights(
- context=switch.create_context("test")
+ context=switch.create_context("test"),
)
await hass.async_block_till_done()
assert light not in switch.manager.lights
@@ -573,7 +582,9 @@ async def test_manager_not_tracking_untracked_lights(hass):
@pytest.mark.parametrize("adapt_only_on_bare_turn_on", [True, False])
@pytest.mark.parametrize("proactive_service_call_adaptation", [True, False])
async def test_manual_control(
- hass, adapt_only_on_bare_turn_on, proactive_service_call_adaptation
+ hass,
+ adapt_only_on_bare_turn_on,
+ proactive_service_call_adaptation,
):
"""Test the 'manual control' tracking."""
switch, (light, *_) = await setup_lights_and_switch(
@@ -698,7 +709,8 @@ async def test_manual_control(
)
ptp_kelvin = kelvin_range[1] - kelvin_range[0]
await turn_light(
- True, color_temp_kelvin=(light._attr_color_temp + 100) % ptp_kelvin
+ True,
+ color_temp_kelvin=(light._attr_color_temp + 100) % ptp_kelvin,
)
assert manual_control[ENTITY_LIGHT_1]
await switch.adapt_brightness_switch.async_turn_on() # turn on again
@@ -736,10 +748,10 @@ async def test_manual_control(
# Check that when no lights are specified, all are reset
await change_manual_control(True, {CONF_LIGHTS: switch.lights})
- assert all([manual_control[eid] for eid in switch.lights])
+ assert all(manual_control[eid] for eid in switch.lights)
# do not pass "lights" so reset all
await change_manual_control(False, {})
- assert all([not manual_control[eid] for eid in switch.lights])
+ assert all(not manual_control[eid] for eid in switch.lights)
# Turn off light and turn on using adaptive_lighting.apply
await turn_light(False)
@@ -760,7 +772,8 @@ async def test_manual_control(
async def test_auto_reset_manual_control(hass):
switch, (light, *_) = await setup_lights_and_switch(
- hass, {CONF_AUTORESET_CONTROL: 0.1}
+ hass,
+ {CONF_AUTORESET_CONTROL: 0.1},
)
context = switch.create_context("test") # needs to be passed to update method
manual_control = switch.manager.manual_control
@@ -779,7 +792,10 @@ async def test_auto_reset_manual_control(hass):
await hass.async_block_till_done()
await update()
_LOGGER.debug(
- "Turn light %s to state %s, to %s", light.entity_id, state, kwargs
+ "Turn light %s to state %s, to %s",
+ light.entity_id,
+ state,
+ kwargs,
)
_LOGGER.debug("Start test auto reset manual control")
@@ -886,7 +902,8 @@ async def test_switch_off_on_off(hass):
async def update():
await switch._update_attrs_and_maybe_adapt_lights(
- context=switch.create_context("test"), transition=0
+ context=switch.create_context("test"),
+ transition=0,
)
await hass.async_block_till_done()
@@ -943,20 +960,24 @@ def test_attributes_have_changed():
ATTR_RGB_COLOR: (255, 0, 0),
ATTR_COLOR_TEMP_KELVIN: 300,
}
- kwargs = dict(
- light="light.test",
- adapt_brightness=True,
- adapt_color=True,
- context=Context(),
- )
+ kwargs = {
+ "light": "light.test",
+ "adapt_brightness": True,
+ "adapt_color": True,
+ "context": Context(),
+ }
assert not _attributes_have_changed(
- old_attributes=attributes_1, new_attributes=attributes_1, **kwargs
+ old_attributes=attributes_1,
+ new_attributes=attributes_1,
+ **kwargs,
)
for key, value in attributes_2.items():
attrs = dict(attributes_1)
attrs[key] = value
assert _attributes_have_changed(
- old_attributes=attributes_1, new_attributes=attrs, **kwargs
+ old_attributes=attributes_1,
+ new_attributes=attrs,
+ **kwargs,
)
_LOGGER.debug("Test switch from color_temp to rgb_color")
assert not _attributes_have_changed(
@@ -985,8 +1006,7 @@ def test_attributes_have_changed():
async def test_state_change_handlers(hass):
- """
- Test AdaptiveLightingManager's EVENT_STATE_CHANGED listener.
+ """Test AdaptiveLightingManager's EVENT_STATE_CHANGED listener.
======================
Sequence of events:
1. Transition from sleep mode to normal.
@@ -1005,7 +1025,9 @@ async def test_state_change_handlers(hass):
async def set_brightness(val: int):
# 'Unsafe' set but we know what we're doing.
hass.states.async_set(
- ENTITY_LIGHT_1, "on", {ATTR_BRIGHTNESS: val, ATTR_SUPPORTED_FEATURES: 1}
+ ENTITY_LIGHT_1,
+ "on",
+ {ATTR_BRIGHTNESS: val, ATTR_SUPPORTED_FEATURES: 1},
)
await hass.async_block_till_done()
# Call code in AdaptiveLightingManager
@@ -1016,7 +1038,7 @@ async def test_state_change_handlers(hass):
ATTR_ENTITY_ID: ENTITY_LIGHT_1,
"state": "on",
ATTR_BRIGHTNESS: val,
- }
+ },
},
)
await hass.async_block_till_done()
@@ -1057,7 +1079,9 @@ async def test_state_change_handlers(hass):
# 2 Adapt from sleep with a 'transition'.
await switch.sleep_mode_switch.async_turn_off()
await switch._update_attrs_and_maybe_adapt_lights(
- context=context, force=False, transition=0
+ context=context,
+ force=False,
+ transition=0,
)
await hass.async_block_till_done()
current_service_data = switch.manager.last_service_data
@@ -1077,7 +1101,10 @@ async def test_state_change_handlers(hass):
ATTR_ENTITY_ID: light,
"old_state": State(light, "on", attributes=last_service_data),
"new_state": State(
- light, "on", attributes=current_service_data, context=context
+ light,
+ "on",
+ attributes=current_service_data,
+ context=context,
),
},
)
@@ -1131,14 +1158,16 @@ async def test_state_change_handlers(hass):
await asyncio.sleep(transition_used / 3)
# Ensure the timer still exists
timer = listener.transition_timers.get(ENTITY_LIGHT_1)
- assert timer and timer.is_running()
+ assert timer
+ assert timer.is_running()
last_service_data = deepcopy(current_service_data)
await update()
assert not switch.manager.manual_control[ENTITY_LIGHT_1]
await update()
assert not switch.manager.manual_control[ENTITY_LIGHT_1]
timer = listener.transition_timers.get(ENTITY_LIGHT_1)
- assert timer and timer.is_running()
+ assert timer
+ assert timer.is_running()
# Ensure the light did not adapt during the transition.
assert last_service_data == current_service_data
@@ -1231,7 +1260,7 @@ async def test_offset_too_large(hass):
"""Test that update fails when the offset is too large."""
_, switch = await setup_switch(hass, {CONF_SUNRISE_OFFSET: 3600 * 12})
await switch._update_attrs_and_maybe_adapt_lights(
- context=switch.create_context("test")
+ context=switch.create_context("test"),
)
await hass.async_block_till_done()
@@ -1261,7 +1290,8 @@ async def test_async_update_at_interval_action(hass):
async def test_separate_turn_on_commands(hass, separate_turn_on_commands):
"""Test 'separate_turn_on_commands' argument."""
switch, (light, *_) = await setup_lights_and_switch(
- hass, {CONF_SEPARATE_TURN_ON_COMMANDS: separate_turn_on_commands}
+ hass,
+ {CONF_SEPARATE_TURN_ON_COMMANDS: separate_turn_on_commands},
)
# We just turn sleep mode on and off which should change the
# brightness and color. We don't test whether the number are exactly
@@ -1301,10 +1331,13 @@ async def test_area(hass):
area_registry.async_create("test_area")
entity = entity_registry.async_get(hass).async_get_or_create(
- LIGHT_DOMAIN, "template", light.unique_id
+ LIGHT_DOMAIN,
+ "template",
+ light.unique_id,
)
entity = entity_registry.async_get(hass).async_update_entity(
- entity.entity_id, area_id="test_area"
+ entity.entity_id,
+ area_id="test_area",
)
_LOGGER.debug("test_area entity: %s", entity)
await hass.services.async_call(
@@ -1379,7 +1412,7 @@ async def test_change_switch_settings_service(hass):
# testing with "configuration" and setting a new value
await change_switch_settings(
- **{CONF_USE_DEFAULTS: "configuration", CONF_MIN_COLOR_TEMP: 3000}
+ **{CONF_USE_DEFAULTS: "configuration", CONF_MIN_COLOR_TEMP: 3000},
)
assert switch._sun_light_settings.min_color_temp == 3000
@@ -1429,16 +1462,17 @@ async def test_service_calls_task_cancellation(hass):
switch.manager.cancel_ongoing_adaptation_calls(entity_id)
- try:
+ with contextlib.suppress(asyncio.CancelledError):
await task
- except asyncio.CancelledError:
- pass
assert task.cancelled()
async def _turn_on_and_track_event_contexts(
- hass: HomeAssistant, context_id: str, entity_id, return_full_events: bool = False
+ hass: HomeAssistant,
+ context_id: str,
+ entity_id,
+ return_full_events: bool = False,
):
context = Context(id=context_id)
event_context_ids = []
@@ -1483,7 +1517,9 @@ async def test_proactive_adaptation(hass):
)
event_context_ids = await _turn_on_and_track_event_contexts(
- hass, "test_context", ENTITY_LIGHT_3
+ hass,
+ "test_context",
+ ENTITY_LIGHT_3,
)
# Expect a single service call
@@ -1518,7 +1554,9 @@ async def test_proactive_adaptation_with_separate_commands(hass):
)
event_context_ids = await _turn_on_and_track_event_contexts(
- hass, "test_context", ENTITY_LIGHT_3
+ hass,
+ "test_context",
+ ENTITY_LIGHT_3,
)
# Expect two service calls
@@ -1575,7 +1613,9 @@ async def test_proactive_adaptation_transition_override(hass):
)
with patch.object(
- light3, "async_turn_on", wraps=light3.async_turn_on
+ light3,
+ "async_turn_on",
+ wraps=light3.async_turn_on,
) as patched_async_turn_on:
await hass.services.async_call(
LIGHT_DOMAIN,
@@ -1604,7 +1644,7 @@ async def test_proactive_adaptation_transition_override(hass):
async def setup_proactive_multiple_lights_two_switches(hass):
- lights_instances = await setup_lights(hass)
+ await setup_lights(hass)
# Setup switches
lights = [
ENTITY_LIGHT_1,
@@ -1628,10 +1668,12 @@ async def setup_proactive_multiple_lights_two_switches(hass):
CONF_INTERCEPT: True,
}
_, switch1 = await setup_switch(
- hass, {CONF_NAME: "switch1", CONF_LIGHTS: [ENTITY_LIGHT_1], **defaults}
+ hass,
+ {CONF_NAME: "switch1", CONF_LIGHTS: [ENTITY_LIGHT_1], **defaults},
)
_, switch2 = await setup_switch(
- hass, {CONF_NAME: "switch2", CONF_LIGHTS: [ENTITY_LIGHT_2], **defaults}
+ hass,
+ {CONF_NAME: "switch2", CONF_LIGHTS: [ENTITY_LIGHT_2], **defaults},
)
assert hass.states.get(switch1.entity_id).state == STATE_ON
assert hass.states.get(switch2.entity_id).state == STATE_ON
@@ -1645,7 +1687,10 @@ async def test_proactive_multiple_lights_all_at_once(hass):
_LOGGER.debug("Start test_proactive_multiple_lights_all_at_once")
# Setup demo lights and turn on
events = await _turn_on_and_track_event_contexts(
- hass, "test1", lights, return_full_events=True
+ hass,
+ "test1",
+ lights,
+ return_full_events=True,
)
assert len(events) == 3, events
@@ -1670,7 +1715,10 @@ async def test_proactive_multiple_lights_all_at_once(hass):
# Turn on second time even though already on
events = await _turn_on_and_track_event_contexts(
- hass, "test2", lights, return_full_events=True
+ hass,
+ "test2",
+ lights,
+ return_full_events=True,
)
assert len(events) == 1, events
assert events[0].context.id == "test2"
@@ -1704,7 +1752,10 @@ async def test_proactive_multiple_lights_turn_on_managed_lights_only(hass):
_LOGGER.debug("Start test_proactive_multiple_lights_all_at_once")
# Setup demo lights and turn on
events = await _turn_on_and_track_event_contexts(
- hass, "test1", lights[:-1], return_full_events=True
+ hass,
+ "test1",
+ lights[:-1],
+ return_full_events=True,
)
assert len(events) == 2, events
@@ -1725,7 +1776,10 @@ async def test_proactive_multiple_lights_one_switch_and_one_skipped(hass):
_LOGGER.debug("Start test_proactive_multiple_lights_all_at_once")
# Setup demo lights and turn on
events = await _turn_on_and_track_event_contexts(
- hass, "test1", two_lights, return_full_events=True
+ hass,
+ "test1",
+ two_lights,
+ return_full_events=True,
)
assert len(events) == 2, events
@@ -1752,10 +1806,14 @@ async def test_two_switches_for_single_light(hass):
"""
extra_conf = {CONF_INTERCEPT: True}
switch1, (light1, *_) = await setup_lights_and_switch(
- hass, extra_conf | {CONF_NAME: "switch1"}, all_lights=True
+ hass,
+ extra_conf | {CONF_NAME: "switch1"},
+ all_lights=True,
)
switch2, (light2, *_) = await setup_lights_and_switch(
- hass, extra_conf | {CONF_NAME: "switch2"}, all_lights=True
+ hass,
+ extra_conf | {CONF_NAME: "switch2"},
+ all_lights=True,
)
assert light1 is light2
@@ -1946,7 +2004,7 @@ async def test_light_group(
await hass.async_block_till_done()
await switch._update_attrs_and_maybe_adapt_lights(
- context=switch.create_context("test")
+ context=switch.create_context("test"),
)
await hass.async_block_till_done()
@@ -1968,7 +2026,10 @@ async def test_light_group(
assert not switch.manager.manual_control["light.light_4"]
assert not switch.manager.manual_control["light.light_5"]
events = await _turn_on_and_track_event_contexts(
- hass, "testing", "light.light_group", return_full_events=True
+ hass,
+ "testing",
+ "light.light_group",
+ return_full_events=True,
)
if proactive_service_call_adaptation and multi_light_intercept:
await asyncio.gather(*switch.manager.adaptation_tasks)
@@ -2022,7 +2083,10 @@ async def test_light_group(
# light_group is expanded, with a :skpp: context_id, this goes trhough another iteration,
# and then the light_group is adapted.
events = await _turn_on_and_track_event_contexts(
- hass, "testing", entity_ids, return_full_events=True
+ hass,
+ "testing",
+ entity_ids,
+ return_full_events=True,
)
if proactive_service_call_adaptation and multi_light_intercept:
await asyncio.gather(*switch.manager.adaptation_tasks)
@@ -2047,7 +2111,7 @@ async def test_light_group(
@pytest.mark.parametrize("brightness_mode", ["linear", "tanh"])
-@pytest.mark.parametrize("dark,light", ([900, 1800], [1800, 900], [1800, 1800]))
+@pytest.mark.parametrize(("dark", "light"), ([900, 1800], [1800, 900], [1800, 1800]))
async def test_brightness_mode(hass, brightness_mode, dark, light):
"""Test brightness mode.
From e4e1aa7d37e86e6adb654808db0a04a87ce9c931 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 6 Apr 2024 10:13:13 +0200
Subject: [PATCH 036/361] Use Python 3.12 in
.github/workflows/update-readme.yml (#961)
---
.github/workflows/update-readme.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml
index 8fca3d77..74f5e242 100644
--- a/.github/workflows/update-readme.yml
+++ b/.github/workflows/update-readme.yml
@@ -20,7 +20,7 @@ jobs:
- name: Install Home Assistant
uses: ./.github/workflows/install_dependencies
with:
- python-version: "3.11"
+ python-version: "3.12"
- name: Install markdown-code-runner and README code dependencies
run: |
From 9eae1501d3fcda2cfdb479b25d8864e7dfb75833 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 6 Apr 2024 10:14:54 +0200
Subject: [PATCH 037/361] Test HA core v2023.6 until v2024.2 (#942)
* Test HA core v2023.6 until v2024.2
* Use Python 3.12
* Add components.ffmpeg
* Revert "VS Code Dev Container (dev & test environment) (#605)"
This reverts commit 6283158ff730644f76d8007c70edbf0ffd6846fe.
* Fix
* revert
* fi
* simplify
* Fix
* fixes
* fix
* rev
* Rename test
* fix
* fix all
* fix
* revert
---
.github/workflows/pytest.yaml | 29 +++++++--
Dockerfile | 7 +--
test_dependencies.py | 1 +
tests/conftest.py | 20 ------
tests/test_adaptation_utils.py | 19 +++---
tests/test_color_and_brightness.py | 3 +-
tests/test_config_flow.py | 10 +--
tests/test_hass_utils.py | 9 ++-
tests/test_init.py | 9 ++-
tests/test_switch.py | 98 ++++++++++++++++--------------
10 files changed, 104 insertions(+), 101 deletions(-)
delete mode 100644 tests/conftest.py
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index ba7eb1a7..750fba04 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -27,10 +27,26 @@ jobs:
- python-version: "3.10"
core-version: "2023.4.6"
- python-version: "3.10"
- core-version: "2023.5.2"
+ core-version: "2023.5.4"
- python-version: "3.11"
- core-version: "2023.6.1"
+ core-version: "2023.6.3"
- python-version: "3.11"
+ core-version: "2023.7.3"
+ - python-version: "3.11"
+ core-version: "2023.8.4"
+ - python-version: "3.11"
+ core-version: "2023.9.3"
+ - python-version: "3.11"
+ core-version: "2023.10.5"
+ - python-version: "3.11"
+ core-version: "2023.11.3"
+ - python-version: "3.11"
+ core-version: "2023.12.4"
+ - python-version: "3.11"
+ core-version: "2024.1.6"
+ - python-version: "3.11"
+ core-version: "2024.2.5"
+ - python-version: "3.12"
core-version: "dev"
steps:
- name: Check out code from GitHub
@@ -56,6 +72,11 @@ jobs:
run: |
cd core
+ # Link homeassitant.components.adaptive_lighting
+ cd homeassistant/components
+ ln -fs ../../../custom_components/adaptive_lighting adaptive_lighting
+ cd -
+
# Link adaptive_lighting tests
cd tests/components/
ln -fs ../../../tests adaptive_lighting
@@ -71,10 +92,8 @@ jobs:
-qq \
--timeout=9 \
--durations=10 \
- --cov="custom_components.adaptive_lighting" \
+ --cov="homeassistant" \
--cov-report=xml \
-o console_output_style=count \
-p no:sugar \
tests/components/adaptive_lighting
- env:
- HA_CLONE: true
diff --git a/Dockerfile b/Dockerfile
index 4baac59a..916d1021 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -27,7 +27,8 @@ RUN pip3 install -r /core/requirements.txt --use-pep517 && \
COPY . /app/
# Setup symlinks in core
-RUN ln -s /app/tests /core/tests/components/adaptive_lighting && \
+RUN ln -s /app/custom_components/adaptive_lighting /core/homeassistant/components/adaptive_lighting && \
+ ln -s /app/tests /core/tests/components/adaptive_lighting && \
# For test_dependencies.py
ln -s /core /app/core
@@ -38,8 +39,6 @@ WORKDIR /core
# Make 'custom_components/adaptive_lighting' imports available to tests
ENV PYTHONPATH="${PYTHONPATH}:/app"
-# Enable testing against HA clone (instead of pytest_homeassistant_custom_component)
-ENV HA_CLONE=true
ENTRYPOINT ["python3", \
# Enable Python development mode
@@ -53,7 +52,7 @@ ENTRYPOINT ["python3", \
# Print the 10 slowest tests
"--durations=10", \
# Measure code coverage for the 'homeassistant' package
- "--cov=custom_components.adaptive_lighting", \
+ "--cov='homeassistant'", \
# Generate an XML report of the code coverage
"--cov-report=xml", \
# Generate an HTML report of the code coverage
diff --git a/test_dependencies.py b/test_dependencies.py
index a07f9ee6..96377cee 100644
--- a/test_dependencies.py
+++ b/test_dependencies.py
@@ -36,6 +36,7 @@ required = [
"components.stream",
"components.conversation", # only available after HA≥2023.2
"components.cloud",
+ "components.ffmpeg", # needed since 2024.1
]
to_install = [package for r in required for package in deps[r]]
diff --git a/tests/conftest.py b/tests/conftest.py
deleted file mode 100644
index 79b83fb6..00000000
--- a/tests/conftest.py
+++ /dev/null
@@ -1,20 +0,0 @@
-"""Fixtures for testing."""
-
-import os
-import sys
-
-import pytest
-
-# Tests in the dev enviromentment use the pytest_homeassistant_custom_component instead of
-# a cloned HA core repo for a simple and clean structure. To still test against a HA core
-# clone (e.g. the dev branch for which no pytest_homeassistant_custom_component exists
-# because HA does not publish dev snapshot packages), set the HA_CLONE env variable.
-if "HA_CLONE" in os.environ:
- # Rewire the testing package to the cloned test modules. See the test `Dockerfile`
- # for setup details.
- sys.modules["pytest_homeassistant_custom_component"] = __import__("tests")
-
-
-@pytest.fixture(autouse=True)
-def auto_enable_custom_integrations(enable_custom_integrations):
- return
diff --git a/tests/test_adaptation_utils.py b/tests/test_adaptation_utils.py
index 8e36a181..10774fa2 100644
--- a/tests/test_adaptation_utils.py
+++ b/tests/test_adaptation_utils.py
@@ -3,15 +3,7 @@
from unittest.mock import Mock
import pytest
-from homeassistant.components.light import (
- ATTR_BRIGHTNESS,
- ATTR_COLOR_TEMP_KELVIN,
- ATTR_TRANSITION,
-)
-from homeassistant.const import ATTR_ENTITY_ID, STATE_ON
-from homeassistant.core import Context, State
-
-from custom_components.adaptive_lighting.adaptation_utils import (
+from homeassistant.components.adaptive_lighting.adaptation_utils import (
ServiceData,
_create_service_call_data_iterator,
_has_relevant_service_data_attributes,
@@ -19,6 +11,13 @@ from custom_components.adaptive_lighting.adaptation_utils import (
_split_service_call_data,
prepare_adaptation_data,
)
+from homeassistant.components.light import (
+ ATTR_BRIGHTNESS,
+ ATTR_COLOR_TEMP_KELVIN,
+ ATTR_TRANSITION,
+)
+from homeassistant.const import ATTR_ENTITY_ID, STATE_ON
+from homeassistant.core import Context, State
@pytest.mark.parametrize(
@@ -130,7 +129,7 @@ async def test_has_relevant_service_data_attributes(
service_data: ServiceData,
expected_relevant: bool,
):
- """Test the determination of relevancy of service data"""
+ """Test the determination of relevancy of service data."""
assert _has_relevant_service_data_attributes(service_data) == expected_relevant
diff --git a/tests/test_color_and_brightness.py b/tests/test_color_and_brightness.py
index b8398a71..6c76175f 100644
--- a/tests/test_color_and_brightness.py
+++ b/tests/test_color_and_brightness.py
@@ -4,8 +4,7 @@ import zoneinfo
import pytest
from astral import LocationInfo
from astral.location import Location
-
-from custom_components.adaptive_lighting.color_and_brightness import (
+from homeassistant.components.adaptive_lighting.color_and_brightness import (
SUN_EVENT_NOON,
SUN_EVENT_SUNRISE,
SunEvents,
diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py
index 1678e3d4..1a9e8fbf 100644
--- a/tests/test_config_flow.py
+++ b/tests/test_config_flow.py
@@ -1,11 +1,7 @@
"""Test Adaptive Lighting config flow."""
from homeassistant import data_entry_flow
-from homeassistant.config_entries import SOURCE_IMPORT
-from homeassistant.const import CONF_NAME
-from pytest_homeassistant_custom_component.common import MockConfigEntry
-
-from custom_components.adaptive_lighting.const import (
+from homeassistant.components.adaptive_lighting.const import (
CONF_SUNRISE_TIME,
CONF_SUNSET_TIME,
DEFAULT_NAME,
@@ -13,6 +9,10 @@ from custom_components.adaptive_lighting.const import (
NONE_STR,
VALIDATION_TUPLES,
)
+from homeassistant.config_entries import SOURCE_IMPORT
+from homeassistant.const import CONF_NAME
+
+from tests.common import MockConfigEntry
DEFAULT_DATA = {key: default for key, default, _ in VALIDATION_TUPLES}
diff --git a/tests/test_hass_utils.py b/tests/test_hass_utils.py
index 9f044d8a..4be4c88d 100644
--- a/tests/test_hass_utils.py
+++ b/tests/test_hass_utils.py
@@ -2,16 +2,15 @@
from unittest.mock import AsyncMock
+from homeassistant.components.adaptive_lighting.adaptation_utils import ServiceData
+from homeassistant.components.adaptive_lighting.hass_utils import (
+ setup_service_call_interceptor,
+)
from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
from homeassistant.const import SERVICE_TURN_ON
from homeassistant.core import ServiceCall
from homeassistant.util.read_only_dict import ReadOnlyDict
-from custom_components.adaptive_lighting.adaptation_utils import ServiceData
-from custom_components.adaptive_lighting.hass_utils import (
- setup_service_call_interceptor,
-)
-
async def test_setup_service_call_interceptor(hass):
"""Test setup and removal of service call interceptor."""
diff --git a/tests/test_init.py b/tests/test_init.py
index 19710d57..6bbfd599 100644
--- a/tests/test_init.py
+++ b/tests/test_init.py
@@ -1,12 +1,15 @@
"""Tests for Adaptive Lighting integration."""
+from homeassistant.components import adaptive_lighting
+from homeassistant.components.adaptive_lighting.const import (
+ DEFAULT_NAME,
+ UNDO_UPDATE_LISTENER,
+)
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import CONF_NAME
from homeassistant.setup import async_setup_component
-from pytest_homeassistant_custom_component.common import MockConfigEntry
-from custom_components import adaptive_lighting
-from custom_components.adaptive_lighting.const import DEFAULT_NAME, UNDO_UPDATE_LISTENER
+from tests.common import MockConfigEntry
async def test_setup_with_config(hass):
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 9585c960..9c2f254f 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -15,47 +15,14 @@ import homeassistant.util.dt as dt_util
import pytest
import ulid_transform
import voluptuous.error
-from homeassistant.components.light import (
- ATTR_BRIGHTNESS,
- ATTR_BRIGHTNESS_PCT,
- ATTR_COLOR_TEMP_KELVIN,
- ATTR_RGB_COLOR,
- ATTR_TRANSITION,
- ATTR_XY_COLOR,
- SERVICE_TURN_OFF,
-)
-from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
-from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
-from homeassistant.config_entries import ConfigEntryState
-from homeassistant.const import (
- ATTR_AREA_ID,
- ATTR_ENTITY_ID,
- ATTR_SUPPORTED_FEATURES,
- CONF_LIGHTS,
- CONF_NAME,
- EVENT_CALL_SERVICE,
- EVENT_STATE_CHANGED,
- SERVICE_TOGGLE,
- SERVICE_TURN_ON,
- STATE_OFF,
- STATE_ON,
-)
-from homeassistant.core import Context, Event, HomeAssistant, State
-from homeassistant.helpers import entity_registry
-from homeassistant.helpers.entity_platform import async_get_platforms
-from homeassistant.setup import async_setup_component
-from homeassistant.util.color import color_temperature_mired_to_kelvin
-from pytest_homeassistant_custom_component.common import (
- MockConfigEntry,
- mock_area_registry,
-)
-
-from custom_components.adaptive_lighting.adaptation_utils import (
+from homeassistant.components.adaptive_lighting.adaptation_utils import (
AdaptationData,
_create_service_call_data_iterator,
)
-from custom_components.adaptive_lighting.color_and_brightness import lerp_color_hsv
-from custom_components.adaptive_lighting.const import (
+from homeassistant.components.adaptive_lighting.color_and_brightness import (
+ lerp_color_hsv,
+)
+from homeassistant.components.adaptive_lighting.const import (
ADAPT_BRIGHTNESS_SWITCH,
ADAPT_COLOR_SWITCH,
ATTR_ADAPTIVE_LIGHTING_MANAGER,
@@ -93,7 +60,7 @@ from custom_components.adaptive_lighting.const import (
SLEEP_MODE_SWITCH,
UNDO_UPDATE_LISTENER,
)
-from custom_components.adaptive_lighting.switch import (
+from homeassistant.components.adaptive_lighting.switch import (
CONF_INTERCEPT,
AdaptiveLightingManager,
AdaptiveSwitch,
@@ -103,6 +70,39 @@ from custom_components.adaptive_lighting.switch import (
is_our_context,
is_our_context_id,
)
+from homeassistant.components.light import (
+ ATTR_BRIGHTNESS,
+ ATTR_BRIGHTNESS_PCT,
+ ATTR_COLOR_TEMP_KELVIN,
+ ATTR_RGB_COLOR,
+ ATTR_TRANSITION,
+ ATTR_XY_COLOR,
+ SERVICE_TURN_OFF,
+)
+from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
+from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
+from homeassistant.components.template.light import LightTemplate
+from homeassistant.config_entries import ConfigEntryState
+from homeassistant.const import (
+ ATTR_AREA_ID,
+ ATTR_ENTITY_ID,
+ ATTR_SUPPORTED_FEATURES,
+ CONF_LIGHTS,
+ CONF_NAME,
+ EVENT_CALL_SERVICE,
+ EVENT_STATE_CHANGED,
+ SERVICE_TOGGLE,
+ SERVICE_TURN_ON,
+ STATE_OFF,
+ STATE_ON,
+)
+from homeassistant.core import Context, Event, HomeAssistant, State
+from homeassistant.helpers import entity_registry
+from homeassistant.helpers.entity_platform import async_get_platforms
+from homeassistant.setup import async_setup_component
+from homeassistant.util.color import color_temperature_mired_to_kelvin
+
+from tests.common import MockConfigEntry, mock_area_registry
_LOGGER = logging.getLogger(__name__)
@@ -234,7 +234,11 @@ async def setup_lights(hass: HomeAssistant, with_group: bool = False):
return lights
-async def setup_lights_and_switch(hass, extra_conf=None, all_lights: bool = False):
+async def setup_lights_and_switch(
+ hass,
+ extra_conf=None,
+ all_lights: bool = False,
+) -> tuple[AdaptiveSwitch, list[LightTemplate]]:
"""Create switch and demo lights."""
# Setup demo lights and turn on
lights_instances = await setup_lights(hass)
@@ -411,7 +415,7 @@ async def test_adaptive_lighting_time_zones_and_sun_settings(
async def patch_time_and_update(time):
with patch(
- "custom_components.adaptive_lighting.color_and_brightness.utcnow",
+ "homeassistant.components.adaptive_lighting.color_and_brightness.utcnow",
return_value=time,
):
await switch._update_attrs_and_maybe_adapt_lights(context=context)
@@ -503,7 +507,7 @@ async def test_light_settings(hass):
async def patch_time_and_get_updated_states(time):
with patch(
- "custom_components.adaptive_lighting.color_and_brightness.utcnow",
+ "homeassistant.components.adaptive_lighting.color_and_brightness.utcnow",
return_value=time,
):
await switch._update_attrs_and_maybe_adapt_lights(
@@ -1324,7 +1328,7 @@ async def test_separate_turn_on_commands(hass, separate_turn_on_commands):
assert sleep_color_temp != color_temp
-async def test_area(hass):
+async def test_light_switch_in_specific_area(hass):
switch, (light, *_) = await setup_lights_and_switch(hass)
area_registry = mock_area_registry(hass)
@@ -1611,7 +1615,6 @@ async def test_proactive_adaptation_transition_override(hass):
},
True,
)
-
with patch.object(
light3,
"async_turn_on",
@@ -1632,6 +1635,7 @@ async def test_proactive_adaptation_transition_override(hass):
)
# Assert that default is used when no transition is specified in service call
+ assert patched_async_turn_on.call_args_list, patched_async_turn_on.call_args_list
kwargs = patched_async_turn_on.call_args_list[0].kwargs
assert set({ATTR_TRANSITION: 123}.items()).issubset(kwargs.items())
@@ -1815,7 +1819,7 @@ async def test_two_switches_for_single_light(hass):
extra_conf | {CONF_NAME: "switch2"},
all_lights=True,
)
- assert light1 is light2
+ assert light1.entity_id == light2.entity_id
# One switch controls brightness the other color
await switch1.adapt_color_switch.async_turn_off()
@@ -1897,7 +1901,7 @@ async def test_adapt_until_sleep_and_rgb_colors(hass):
async def patch_time_and_update(time):
with patch(
- "custom_components.adaptive_lighting.color_and_brightness.utcnow",
+ "homeassistant.components.adaptive_lighting.color_and_brightness.utcnow",
return_value=time,
):
await switch._update_attrs_and_maybe_adapt_lights(context=context)
@@ -2160,7 +2164,7 @@ async def test_brightness_mode(hass, brightness_mode, dark, light):
async def patch_time_and_update(time):
with patch(
- "custom_components.adaptive_lighting.color_and_brightness.utcnow",
+ "homeassistant.components.adaptive_lighting.color_and_brightness.utcnow",
return_value=time,
):
await switch._update_attrs_and_maybe_adapt_lights(context=context)
From 2f31b42cb2a852aab8e14c222cc296d79fc23a36 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 6 Apr 2024 11:25:47 +0200
Subject: [PATCH 038/361] Fix `devcontainer` and testing `Dockerfile` (#962)
* Fix permissions for `scripts/setup`
* Add new script
* Use script
* Update Dockerfile
* Rename and clone
* Perms
* Fix
* fi
---
.devcontainer.json | 2 +-
.../workflows/install_dependencies/action.yml | 9 +--------
Dockerfile | 13 ++++---------
scripts/install_ha | 16 ++++++++++++++++
scripts/setup | 8 --------
scripts/setup-devcontainer | 11 +++++++++++
6 files changed, 33 insertions(+), 26 deletions(-)
create mode 100755 scripts/install_ha
delete mode 100644 scripts/setup
create mode 100755 scripts/setup-devcontainer
diff --git a/.devcontainer.json b/.devcontainer.json
index d842d1dd..14778469 100644
--- a/.devcontainer.json
+++ b/.devcontainer.json
@@ -1,7 +1,7 @@
{
"name": "basnijholt/adaptive_lighting",
"image": "mcr.microsoft.com/vscode/devcontainers/python:0-3.11-bullseye",
- "postCreateCommand": "scripts/setup",
+ "postCreateCommand": "scripts/setup-devcontainer",
"forwardPorts": [
8123
],
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 3041698b..16c0a6ec 100644
--- a/.github/workflows/install_dependencies/action.yml
+++ b/.github/workflows/install_dependencies/action.yml
@@ -34,11 +34,4 @@ runs:
- name: Install dependencies
shell: bash
run: |
- echo "::warning::### WARNING! Deprecation warnings muted with option '--use-pep517' please address this at some point in pytest.yaml. ###"
- pip install -r core/requirements.txt --use-pep517
- # because they decided to pull codecov the package from PyPI...
- sed -i '/codecov/d' core/requirements_test.txt
- pip install -r core/requirements_test.txt --use-pep517
- pip install -e core/ --use-pep517
- pip install ulid-transform # this is in Adaptive-lighting's manifest.json
- pip install $(python test_dependencies.py) --use-pep517
+ ./scripts/install_ha
diff --git a/Dockerfile b/Dockerfile
index 916d1021..d3c5c79b 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.11-buster
+FROM python:3.12-bookworm
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y \
@@ -16,12 +16,7 @@ RUN apt-get update && \
&& rm -rf /var/lib/apt/lists/*
# Clone home-assistant/core
-RUN git clone --depth 1 https://github.com/home-assistant/core.git /core
-
-# Install home-assistant/core dependencies
-RUN pip3 install -r /core/requirements.txt --use-pep517 && \
- pip3 install -r /core/requirements_test.txt --use-pep517 && \
- pip3 install -e /core/ --use-pep517
+RUN git clone --depth 1 --branch dev https://github.com/home-assistant/core.git /core
# Copy the Adaptive Lighting repository
COPY . /app/
@@ -32,8 +27,8 @@ RUN ln -s /app/custom_components/adaptive_lighting /core/homeassistant/component
# For test_dependencies.py
ln -s /core /app/core
-# Install dependencies of components that Adaptive Lighting depends on
-RUN pip3 install $(python3 /app/test_dependencies.py) --use-pep517
+# Install home-assistant/core dependencies
+RUN /app/scripts/install_ha
WORKDIR /core
diff --git a/scripts/install_ha b/scripts/install_ha
new file mode 100755
index 00000000..c38fe351
--- /dev/null
+++ b/scripts/install_ha
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -ex
+cd "$(dirname "$0")/.."
+
+pip install -r core/requirements.txt --use-pep517
+
+if grep -q 'codecov' core/requirements_test.txt; then
+ # Older HA versions still have `codecov` in `requirements_test.txt`
+ # however it is removed from PyPI, so we cannot install it
+ sed -i '/codecov/d' core/requirements_test.txt
+fi
+pip install -r core/requirements_test.txt --use-pep517
+
+pip install -e core/ --use-pep517
+pip install ulid-transform # this is in Adaptive-lighting's manifest.json
+pip install $(python test_dependencies.py) --use-pep517
diff --git a/scripts/setup b/scripts/setup
deleted file mode 100644
index 0688d70d..00000000
--- a/scripts/setup
+++ /dev/null
@@ -1,8 +0,0 @@
-#!/usr/bin/env bash
-
-set -e
-
-cd "$(dirname "$0")/.."
-
-python3 -m pip install --requirement requirements.txt
-pre-commit install-hooks
diff --git a/scripts/setup-devcontainer b/scripts/setup-devcontainer
new file mode 100755
index 00000000..9571972b
--- /dev/null
+++ b/scripts/setup-devcontainer
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -e
+cd "$(dirname "$0")/.."
+
+# Clone only if the folder doesn't exist
+if [[ ! -d "core" ]]; then
+ git clone --depth 1 --branch dev https://github.com/home-assistant/core.git
+fi
+
+./scripts/install_ha
+pre-commit install-hooks
From a38865644814b7c634cbec0884626324a8b1b01c Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 6 Apr 2024 11:31:30 +0200
Subject: [PATCH 039/361] Remove `--use-pep517` from `pip install` and change
Python version in devcontainer (#963)
* Remove --use-pep517 from pip install
* Update Python version of devcontainer
---
.devcontainer.json | 2 +-
scripts/install_ha | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/.devcontainer.json b/.devcontainer.json
index 14778469..9b9ba58b 100644
--- a/.devcontainer.json
+++ b/.devcontainer.json
@@ -1,6 +1,6 @@
{
"name": "basnijholt/adaptive_lighting",
- "image": "mcr.microsoft.com/vscode/devcontainers/python:0-3.11-bullseye",
+ "image": "mcr.microsoft.com/vscode/devcontainers/python:3.12",
"postCreateCommand": "scripts/setup-devcontainer",
"forwardPorts": [
8123
diff --git a/scripts/install_ha b/scripts/install_ha
index c38fe351..efe0bd25 100755
--- a/scripts/install_ha
+++ b/scripts/install_ha
@@ -2,15 +2,15 @@
set -ex
cd "$(dirname "$0")/.."
-pip install -r core/requirements.txt --use-pep517
+pip install -r core/requirements.txt
if grep -q 'codecov' core/requirements_test.txt; then
# Older HA versions still have `codecov` in `requirements_test.txt`
# however it is removed from PyPI, so we cannot install it
sed -i '/codecov/d' core/requirements_test.txt
fi
-pip install -r core/requirements_test.txt --use-pep517
+pip install -r core/requirements_test.txt
-pip install -e core/ --use-pep517
+pip install -e core/
pip install ulid-transform # this is in Adaptive-lighting's manifest.json
-pip install $(python test_dependencies.py) --use-pep517
+pip install $(python test_dependencies.py)
From 14bb0b4c5f7550538751e3a604bc2d5dbbd7dd35 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 6 Apr 2024 04:04:46 -0700
Subject: [PATCH 040/361] docs: add scuricvladimir as a contributor for
translation (#964)
* 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 78faf634..d8769f64 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -792,6 +792,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "scuricvladimir",
+ "name": "scuricvladimir",
+ "avatar_url": "https://avatars.githubusercontent.com/u/46634162?v=4",
+ "profile": "https://github.com/scuricvladimir",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index b4c8560c..19e82ad8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -576,6 +576,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 droans 💻 |
 Jonathan Kang 💻 |
+  scuricvladimir 🌍 |
From 7eb2d00ab9c6eddf613d9de424505adaaf2a4440 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 6 Apr 2024 04:05:28 -0700
Subject: [PATCH 041/361] docs: add Welsyntoffie as a contributor for
translation (#965)
* 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 d8769f64..18da4e3a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -801,6 +801,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "Welsyntoffie",
+ "name": "Pieter",
+ "avatar_url": "https://avatars.githubusercontent.com/u/47089904?v=4",
+ "profile": "https://github.com/Welsyntoffie",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 19e82ad8..6fa47a25 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -577,6 +577,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 droans 💻 |
 Jonathan Kang 💻 |
 scuricvladimir 🌍 |
+  Pieter 🌍 |
From 6dae5641a2613c991aca3455d8deaa740991f986 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 6 Apr 2024 04:05:48 -0700
Subject: [PATCH 042/361] docs: add san80068259 as a contributor for
translation (#966)
* 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 18da4e3a..a6bf2e8c 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -810,6 +810,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "san80068259",
+ "name": "san80068259",
+ "avatar_url": "https://avatars.githubusercontent.com/u/68324107?v=4",
+ "profile": "https://github.com/san80068259",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 6fa47a25..3044445d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -578,6 +578,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Jonathan Kang 💻 |
 scuricvladimir 🌍 |
 Pieter 🌍 |
+  san80068259 🌍 |
From a36b0c343099bf47aa813ae8d9be1354d06d2adb Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 6 Apr 2024 13:06:17 +0200
Subject: [PATCH 043/361] Translations update from Hosted Weblate (#946)
* Translated using Weblate (Croatian)
Currently translated at 44.4% (68 of 153 strings)
Added translation using Weblate (Croatian)
Co-authored-by: Hosted Weblate
Co-authored-by: scuricvladimir
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/hr/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Afrikaans)
Currently translated at 49.0% (75 of 153 strings)
Added translation using Weblate (Afrikaans)
Co-authored-by: Hosted Weblate
Co-authored-by: Pieter Bezuidenhout
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/af/
Translation: Adaptive Lighting/Adaptive Lighting
* Added translation using Weblate (Chinese (Traditional))
Co-authored-by: Hosted Weblate
Co-authored-by: chris lin
---------
Co-authored-by: scuricvladimir
Co-authored-by: Pieter Bezuidenhout
Co-authored-by: chris lin
---
.../adaptive_lighting/translations/af.json | 40 +++++++++++++++++++
.../adaptive_lighting/translations/hr.json | 19 +++++++++
.../translations/zh_Hant.json | 1 +
3 files changed, 60 insertions(+)
create mode 100644 custom_components/adaptive_lighting/translations/af.json
create mode 100644 custom_components/adaptive_lighting/translations/hr.json
create mode 100644 custom_components/adaptive_lighting/translations/zh_Hant.json
diff --git a/custom_components/adaptive_lighting/translations/af.json b/custom_components/adaptive_lighting/translations/af.json
new file mode 100644
index 00000000..4a0cd87a
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/af.json
@@ -0,0 +1,40 @@
+{
+ "services": {
+ "apply": {
+ "description": "Pas die huidige Adaptive Lighting-instellings op ligte toe.",
+ "fields": {
+ "lights": {
+ "description": "'n Lig (of lys van ligte) om die instellings op toe te pas. 💡"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "fields": {
+ "only_once": {
+ "description": "Pas ligte net aan wanneer hulle aangeskakel is (`true`) of hou aan om dit aan te pas (`false`)"
+ },
+ "sunrise_offset": {
+ "description": "Pas sonsopkomstyd aan met 'n positiewe of negatiewe afwyking in sekondes. ⏰"
+ },
+ "sunset_offset": {
+ "description": "Pas sonsondergangtyd aan met 'n positiewe of negatiewe afwyking in sekondes. ⏰"
+ }
+ }
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "title": "Aanpasbare beligting opsies",
+ "data": {
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Wanneer ligte aanvanklik aangeskakel word. As dit op \"true\" gestel is, pas AL slegs aan as \"light.turn_on\" opgeroep word sonder om kleur of helderheid te spesifiseer. ❌🌈 Dit verhoed bv. aanpassing wanneer 'n toneel geaktiveer word. As `onwaar`, pas AL aan ongeag die teenwoordigheid van kleur of helderheid in die aanvanklike `diens_data`. Moet `oorname_beheer` geaktiveer moet word. 🕵️ "
+ },
+ "data_description": {
+ "sunrise_offset": "Pas sonsopkomstyd aan met 'n positiewe of negatiewe afwyking in sekondes. ⏰",
+ "sunset_offset": "Pas sonsondergangtyd aan met 'n positiewe of negatiewe afwyking in sekondes. ⏰"
+ }
+ }
+ }
+ },
+ "title": "Aanpasbare beligting"
+}
diff --git a/custom_components/adaptive_lighting/translations/hr.json b/custom_components/adaptive_lighting/translations/hr.json
new file mode 100644
index 00000000..7347cda1
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/hr.json
@@ -0,0 +1,19 @@
+{
+ "options": {
+ "step": {
+ "init": {
+ "title": "Opcije prilagodljivog osvjetljenja"
+ }
+ }
+ },
+ "title": "prilagodi svjetlinu",
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "only_once": {
+ "description": "Prilagodi svjetla samo kada su uključena (true) ili ih neprestano prilagođavaj (false). 🔄"
+ }
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/zh_Hant.json b/custom_components/adaptive_lighting/translations/zh_Hant.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/zh_Hant.json
@@ -0,0 +1 @@
+{}
From 47cbda5c5e484a203328184f2d871b1722cd2107 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 6 Apr 2024 19:05:18 +0200
Subject: [PATCH 044/361] Add versions to matrix and fix area test (#967)
---
.github/workflows/pytest.yaml | 4 +++
test_dependencies.py | 1 +
tests/test_switch.py | 61 ++++++++++++++++++++++++++++++++---
3 files changed, 61 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 750fba04..59a46c1c 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -46,6 +46,10 @@ jobs:
core-version: "2024.1.6"
- python-version: "3.11"
core-version: "2024.2.5"
+ - python-version: "3.12"
+ core-version: "2024.3.3"
+ - python-version: "3.12"
+ core-version: "2024.4.1"
- python-version: "3.12"
core-version: "dev"
steps:
diff --git a/test_dependencies.py b/test_dependencies.py
index 96377cee..b92ff1fb 100644
--- a/test_dependencies.py
+++ b/test_dependencies.py
@@ -39,5 +39,6 @@ required = [
"components.ffmpeg", # needed since 2024.1
]
to_install = [package for r in required for package in deps[r]]
+to_install.append("flaky")
print(" ".join(to_install)) # noqa: T201
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 9c2f254f..a6c4a2a8 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -5,6 +5,7 @@ import asyncio
import contextlib
import datetime
import logging
+from collections import OrderedDict
from copy import deepcopy
from random import randint
from typing import Any
@@ -15,6 +16,7 @@ import homeassistant.util.dt as dt_util
import pytest
import ulid_transform
import voluptuous.error
+from flaky import flaky
from homeassistant.components.adaptive_lighting.adaptation_utils import (
AdaptationData,
_create_service_call_data_iterator,
@@ -96,13 +98,15 @@ from homeassistant.const import (
STATE_OFF,
STATE_ON,
)
+from homeassistant.const import __version__ as ha_version
from homeassistant.core import Context, Event, HomeAssistant, State
+from homeassistant.helpers import area_registry as ar
from homeassistant.helpers import entity_registry
from homeassistant.helpers.entity_platform import async_get_platforms
from homeassistant.setup import async_setup_component
from homeassistant.util.color import color_temperature_mired_to_kelvin
-from tests.common import MockConfigEntry, mock_area_registry
+from tests.common import MockConfigEntry
_LOGGER = logging.getLogger(__name__)
@@ -774,6 +778,7 @@ async def test_manual_control(
assert not manual_control[ENTITY_LIGHT_1]
+@flaky(max_runs=3, min_passes=1)
async def test_auto_reset_manual_control(hass):
switch, (light, *_) = await setup_lights_and_switch(
hass,
@@ -1328,11 +1333,57 @@ async def test_separate_turn_on_commands(hass, separate_turn_on_commands):
assert sleep_color_temp != color_temp
+# Vendored in this function as it was broken
+# https://github.com/home-assistant/core/pull/112150 (my PR and reported issue)
+# Then removed: https://github.com/home-assistant/core/pull/112172
+# Then re-added: https://github.com/home-assistant/core/pull/113453
+# This version is no longer the same as the one in HA because of the many changes
+# that have been made in 2024.
+def mock_area_registry(
+ hass: HomeAssistant,
+) -> ar.AreaRegistry:
+ """Mock the Area Registry."""
+ registry = ar.AreaRegistry(hass)
+ registry._area_data = {}
+ area_kwargs = {
+ "name": "Test Area",
+ "normalized_name": "test-area",
+ "id": "test-area",
+ "picture": None,
+ }
+ year, month = (int(x) for x in ha_version.split(".")[:2])
+ dt = datetime.date(year, month, 1)
+ if dt >= datetime.date(2023, 1, 1):
+ area_kwargs["aliases"] = {}
+ if dt >= datetime.date(2024, 2, 1):
+ area_kwargs["icon"] = None
+ if dt >= datetime.date(2024, 3, 1):
+ area_kwargs["floor_id"] = "test-floor"
+
+ # This mess... 🤯
+ if dt >= datetime.date(2024, 2, 1) and dt != datetime.date(2024, 4, 1):
+ # 2024.4 removed AreaRegistryItems and then added it back in 2024.5:
+ # https://github.com/home-assistant/core/pull/114777
+ registry.areas = ar.AreaRegistryItems()
+ elif dt == datetime.date(2024, 4, 1):
+ from homeassistant.helpers.normalized_name_base_registry import (
+ NormalizedNameBaseRegistryItems,
+ )
+
+ registry.areas = NormalizedNameBaseRegistryItems()
+ else:
+ registry.areas = OrderedDict()
+
+ area = ar.AreaEntry(**area_kwargs)
+ registry.areas[area.id] = area
+ hass.data[ar.DATA_REGISTRY] = registry
+ return registry
+
+
async def test_light_switch_in_specific_area(hass):
switch, (light, *_) = await setup_lights_and_switch(hass)
- area_registry = mock_area_registry(hass)
- area_registry.async_create("test_area")
+ mock_area_registry(hass)
entity = entity_registry.async_get(hass).async_get_or_create(
LIGHT_DOMAIN,
@@ -1341,9 +1392,9 @@ async def test_light_switch_in_specific_area(hass):
)
entity = entity_registry.async_get(hass).async_update_entity(
entity.entity_id,
- area_id="test_area",
+ area_id="test-area",
)
- _LOGGER.debug("test_area entity: %s", entity)
+ _LOGGER.debug("test-area entity: %s", entity)
await hass.services.async_call(
LIGHT_DOMAIN,
SERVICE_TURN_ON,
From d23f6ec63a713e9428328023bd405fcf2b7c4fd2 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 7 Apr 2024 14:01:05 +0200
Subject: [PATCH 045/361] Fix
`test_proactive_adaptation_with_separate_commands` (#970)
* Add link script
* Set run_immediately=False
* Add await hass.async_block_till_done()
* Use scripts/link
* Rename scripts
* Links in devcontainer
* Install from setup script
---
.../workflows/install_dependencies/action.yml | 3 ++-
.github/workflows/pytest.yaml | 24 -------------------
.github/workflows/update-readme.yml | 5 ----
Dockerfile | 7 ++----
custom_components/adaptive_lighting/switch.py | 3 +++
requirements.txt | 10 --------
scripts/{install_ha => setup-dependencies} | 0
scripts/setup-devcontainer | 9 ++++++-
scripts/setup-symlinks | 13 ++++++++++
tests/test_switch.py | 1 +
10 files changed, 29 insertions(+), 46 deletions(-)
delete mode 100644 requirements.txt
rename scripts/{install_ha => setup-dependencies} (100%)
create mode 100755 scripts/setup-symlinks
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 16c0a6ec..badc6566 100644
--- a/.github/workflows/install_dependencies/action.yml
+++ b/.github/workflows/install_dependencies/action.yml
@@ -34,4 +34,5 @@ runs:
- name: Install dependencies
shell: bash
run: |
- ./scripts/install_ha
+ ./scripts/setup-dependencies
+ ./scripts/setup-symlinks
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 59a46c1c..ed5de50c 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -62,30 +62,6 @@ jobs:
python-version: ${{ matrix.python-version }}
core-version: ${{ matrix.core-version }}
- - name: Click here for troubleshooting steps if tests break again.
- run: |
- echo "::notice::### If tests fail, try these debug steps: ###"
- echo "::notice::### 1. Replace '-qq' from .github/workflow/pytest.yaml. with '-v' for extra verbosity. ###"
- echo "::notice::### 2. Push or run action again. ###"
- echo "::notice::### 3. Check for any log messages in github actions resembling the following using CTRL+F ###
- echo "::notice::### 4. ERROR:homeassistant.setup:Setup failed for 'component': Unable to import component: No module named ''module'' ###"
- echo "::notice::### 5. add 'component'.'module' (without the '') from the above log into the 'required' list inside of 'test_dependencies.py' ###"
- echo "::notice::### 6. Try again! If more issues persist they should be easily solvable by reading the verbose logs now. ###"
-
- - name: Link custom_components/adaptive_lighting
- run: |
- cd core
-
- # Link homeassitant.components.adaptive_lighting
- cd homeassistant/components
- ln -fs ../../../custom_components/adaptive_lighting adaptive_lighting
- cd -
-
- # Link adaptive_lighting tests
- cd tests/components/
- ln -fs ../../../tests adaptive_lighting
- cd -
-
- name: Run pytest
timeout-minutes: 60
run: |
diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml
index 74f5e242..bf85fce3 100644
--- a/.github/workflows/update-readme.yml
+++ b/.github/workflows/update-readme.yml
@@ -26,11 +26,6 @@ jobs:
run: |
pip install markdown-code-runner==1.0.0 pandas tabulate
- - name: Link custom_components/adaptive_lighting
- run: |
- cd core/homeassistant/components
- ln -fs ../../../custom_components/adaptive_lighting adaptive_lighting
-
- name: Run markdown-code-runner
run: markdown-code-runner --debug README.md
diff --git a/Dockerfile b/Dockerfile
index d3c5c79b..5232b4d9 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -22,13 +22,10 @@ RUN git clone --depth 1 --branch dev https://github.com/home-assistant/core.git
COPY . /app/
# Setup symlinks in core
-RUN ln -s /app/custom_components/adaptive_lighting /core/homeassistant/components/adaptive_lighting && \
- ln -s /app/tests /core/tests/components/adaptive_lighting && \
- # For test_dependencies.py
- ln -s /core /app/core
+RUN ln -s /core /app/core && /app/scripts/setup-symlinks
# Install home-assistant/core dependencies
-RUN /app/scripts/install_ha
+RUN /app/scripts/setup-dependencies
WORKDIR /core
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 23ca14f9..9408d90b 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -952,6 +952,7 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
self.hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STARTED,
self._setup_listeners,
+ run_immediately=False,
)
last_state: State | None = await self.async_get_last_state()
is_new_entry = last_state is None # newly added to HA
@@ -1658,10 +1659,12 @@ class AdaptiveLightingManager:
self.hass.bus.async_listen(
EVENT_CALL_SERVICE,
self.turn_on_off_event_listener,
+ run_immediately=False,
),
self.hass.bus.async_listen(
EVENT_STATE_CHANGED,
self.state_changed_event_listener,
+ run_immediately=False,
),
]
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index c560a858..00000000
--- a/requirements.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-colorlog==6.7.0
-pip>=21.0,<23.2
-ruff==0.0.265
-pre-commit
-
-# Install HA and test dependencies (pytest, coverage)
-# To pin the dev container to a specific HA version, set this dependency
-# to the adequate version (add `==`) and rebuild the dev container.
-# See https://github.com/MatthewFlamm/pytest-homeassistant-custom-component/releases for version mappings.
-pytest-homeassistant-custom-component
diff --git a/scripts/install_ha b/scripts/setup-dependencies
similarity index 100%
rename from scripts/install_ha
rename to scripts/setup-dependencies
diff --git a/scripts/setup-devcontainer b/scripts/setup-devcontainer
index 9571972b..563d26ef 100755
--- a/scripts/setup-devcontainer
+++ b/scripts/setup-devcontainer
@@ -7,5 +7,12 @@ if [[ ! -d "core" ]]; then
git clone --depth 1 --branch dev https://github.com/home-assistant/core.git
fi
-./scripts/install_ha
+pip install \
+ colorlog==6.7.0 \
+ pip>=21.0,<23.2 \
+ ruff==0.0.265 \
+ pre-commit
+
+./scripts/setup-dependencies
+./scripts/setup-symlinks
pre-commit install-hooks
diff --git a/scripts/setup-symlinks b/scripts/setup-symlinks
new file mode 100755
index 00000000..91026b3a
--- /dev/null
+++ b/scripts/setup-symlinks
@@ -0,0 +1,13 @@
+#!/usr/bin/env bash
+set -ex
+cd "$(dirname "$0")/.."
+
+# Link custom components
+cd core/homeassistant/components/
+ln -fs ../../../custom_components/adaptive_lighting adaptive_lighting
+cd -
+
+# Link tests
+cd core/tests/components/
+ln -fs ../../../tests/ adaptive_lighting
+cd -
diff --git a/tests/test_switch.py b/tests/test_switch.py
index a6c4a2a8..e582a031 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -1684,6 +1684,7 @@ async def test_proactive_adaptation_transition_override(hass):
{ATTR_ENTITY_ID: ENTITY_LIGHT_3, ATTR_TRANSITION: 456},
blocking=True,
)
+ await hass.async_block_till_done()
# Assert that default is used when no transition is specified in service call
assert patched_async_turn_on.call_args_list, patched_async_turn_on.call_args_list
From d427b18b483786b524d64bef762d2a223b8a1813 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Sun, 7 Apr 2024 14:22:22 +0200
Subject: [PATCH 046/361] [pre-commit.ci] pre-commit autoupdate (#935)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.2.1 → v0.3.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.1...v0.3.5)
- [github.com/psf/black: 24.2.0 → 24.3.0](https://github.com/psf/black/compare/24.2.0...24.3.0)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
.pre-commit-config.yaml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index acb6dd76..9a7a0a9e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.2.1
+ rev: v0.3.5
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 24.2.0
+ rev: 24.3.0
hooks:
- id: black
From edf04271315a66199d02590082e3c8f21cd3095e Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 7 Apr 2024 14:25:47 +0200
Subject: [PATCH 047/361] Update version in manifest.json (1.21.0) (#971)
---
custom_components/adaptive_lighting/manifest.json | 2 +-
scripts/setup-devcontainer | 3 +--
2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 7461e73d..96cec4ac 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.20.0"
+ "version": "1.21.0"
}
diff --git a/scripts/setup-devcontainer b/scripts/setup-devcontainer
index 563d26ef..11fdd106 100755
--- a/scripts/setup-devcontainer
+++ b/scripts/setup-devcontainer
@@ -10,8 +10,7 @@ fi
pip install \
colorlog==6.7.0 \
pip>=21.0,<23.2 \
- ruff==0.0.265 \
- pre-commit
+ ruff==0.0.265
./scripts/setup-dependencies
./scripts/setup-symlinks
From 1a2cd7399d99a8dece62d6ad1c99cc7a5448c855 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Tue, 9 Apr 2024 08:59:18 +0200
Subject: [PATCH 048/361] Fix for HA <= 2024.3, closes #973 (#974)
* Fix for HA <= 2024.3, closes #973
* Link
---
custom_components/adaptive_lighting/manifest.json | 2 +-
custom_components/adaptive_lighting/switch.py | 8 +++++++-
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 96cec4ac..2ec04e27 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.21.0"
+ "version": "1.21.1"
}
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 9408d90b..2b23c71c 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -60,6 +60,7 @@ from homeassistant.const import (
STATE_OFF,
STATE_ON,
)
+from homeassistant.const import __version__ as ha_version
from homeassistant.core import (
CALLBACK_TYPE,
Context,
@@ -949,10 +950,15 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
if self.hass.is_running:
await self._setup_listeners()
else:
+ kw = {}
+ year, month = (int(x) for x in ha_version.split(".")[:2])
+ if (year, month) >= (2024, 4):
+ # Added in https://github.com/home-assistant/core/pull/113020
+ kw["run_immediately"] = False
self.hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STARTED,
self._setup_listeners,
- run_immediately=False,
+ **kw,
)
last_state: State | None = await self.async_get_last_state()
is_new_entry = last_state is None # newly added to HA
From b746e5f19ccc34346f34cd97f54197e7c534ded9 Mon Sep 17 00:00:00 2001
From: Frosh
Date: Sun, 12 May 2024 20:32:46 +0200
Subject: [PATCH 049/361] Remove deprecated 'run_immediately' (#991)
---
custom_components/adaptive_lighting/switch.py | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 2b23c71c..23ca14f9 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -60,7 +60,6 @@ from homeassistant.const import (
STATE_OFF,
STATE_ON,
)
-from homeassistant.const import __version__ as ha_version
from homeassistant.core import (
CALLBACK_TYPE,
Context,
@@ -950,15 +949,9 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
if self.hass.is_running:
await self._setup_listeners()
else:
- kw = {}
- year, month = (int(x) for x in ha_version.split(".")[:2])
- if (year, month) >= (2024, 4):
- # Added in https://github.com/home-assistant/core/pull/113020
- kw["run_immediately"] = False
self.hass.bus.async_listen_once(
EVENT_HOMEASSISTANT_STARTED,
self._setup_listeners,
- **kw,
)
last_state: State | None = await self.async_get_last_state()
is_new_entry = last_state is None # newly added to HA
@@ -1665,12 +1658,10 @@ class AdaptiveLightingManager:
self.hass.bus.async_listen(
EVENT_CALL_SERVICE,
self.turn_on_off_event_listener,
- run_immediately=False,
),
self.hass.bus.async_listen(
EVENT_STATE_CHANGED,
self.state_changed_event_listener,
- run_immediately=False,
),
]
From 82f2b8f82edfb5805a5f86ed27159d0616f7f514 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 12 May 2024 11:33:39 -0700
Subject: [PATCH 050/361] docs: add erdnaxela02 as a contributor for code
(#992)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index a6bf2e8c..efaf4bcd 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -819,6 +819,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "erdnaxela02",
+ "name": "Frosh",
+ "avatar_url": "https://avatars.githubusercontent.com/u/21007415?v=4",
+ "profile": "https://github.com/erdnaxela02",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 3044445d..a22769fb 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -579,6 +579,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 scuricvladimir 🌍 |
 Pieter 🌍 |
 san80068259 🌍 |
+  Frosh 💻 |
From 514bb4de2ad945297084d28ac26be624414aa4c9 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Mon, 13 May 2024 17:49:43 +0200
Subject: [PATCH 051/361] Translations update from Hosted Weblate (#981)
* Added translation using Weblate (Romanian)
Co-authored-by: Vlad Radu
* Translated using Weblate (Portuguese)
Currently translated at 56.8% (87 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Rafael Miranda
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/pt/
Translation: Adaptive Lighting/Adaptive Lighting
---------
Co-authored-by: Vlad Radu
Co-authored-by: Rafael Miranda
---
custom_components/adaptive_lighting/translations/pt.json | 2 +-
custom_components/adaptive_lighting/translations/ro.json | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 custom_components/adaptive_lighting/translations/ro.json
diff --git a/custom_components/adaptive_lighting/translations/pt.json b/custom_components/adaptive_lighting/translations/pt.json
index 11184a20..bc4c82d2 100644
--- a/custom_components/adaptive_lighting/translations/pt.json
+++ b/custom_components/adaptive_lighting/translations/pt.json
@@ -7,7 +7,7 @@
"description": "Ajustar a hora do nascer do sol com um offset positivo ou negativo em segundos. ⏰"
},
"only_once": {
- "description": "Adaptar as luzes apenas quando estão ligadas (`true`) ou continuar a adaptá-las (`false`)."
+ "description": "Adaptar as luzes apenas quando estas estão ligadas (`true`) ou continuar a adaptá-las (`false`)."
},
"sunset_offset": {
"description": "Ajustar a hora do pôr do sol com um offset positivo ou negativo em segundos. ⏰"
diff --git a/custom_components/adaptive_lighting/translations/ro.json b/custom_components/adaptive_lighting/translations/ro.json
new file mode 100644
index 00000000..0967ef42
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/ro.json
@@ -0,0 +1 @@
+{}
From 470b245c6ec59444fb50df8a08d19ba31a26e30e Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Mon, 13 May 2024 08:50:07 -0700
Subject: [PATCH 052/361] docs: add rafaeltmiranda as a contributor for
translation (#993)
* 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 efaf4bcd..e0347277 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -828,6 +828,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "rafaeltmiranda",
+ "name": "Rafael Miranda",
+ "avatar_url": "https://avatars.githubusercontent.com/u/47206949?v=4",
+ "profile": "https://www.linkedin.com/in/rafaeltmiranda/",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index a22769fb..2ef03c14 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -580,6 +580,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Pieter 🌍 |
 san80068259 🌍 |
 Frosh 💻 |
+  Rafael Miranda 🌍 |
From cb289a0548ab065ff63ca4e1e8543fd727f50e92 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Mon, 13 May 2024 08:50:34 -0700
Subject: [PATCH 053/361] docs: add rVlad93 as a contributor for translation
(#994)
* 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 e0347277..8d713542 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -837,6 +837,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "rVlad93",
+ "name": "rVlad93",
+ "avatar_url": "https://avatars.githubusercontent.com/u/60452666?v=4",
+ "profile": "https://github.com/rVlad93",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 2ef03c14..d11d2734 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -582,6 +582,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Frosh 💻 |
 Rafael Miranda 🌍 |
+
+  rVlad93 🌍 |
+
From b1f8df6f142c83620beb282c2d67ee076bc55b19 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 13 May 2024 08:51:23 -0700
Subject: [PATCH 054/361] Bump to 1.21.2 in manifest.json (#995)
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 2ec04e27..de44df73 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.21.1"
+ "version": "1.21.2"
}
From 01f639f5bb877d3afae4846e7d895808fc1a635e Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 15 May 2024 09:02:37 -0700
Subject: [PATCH 055/361] Use `after_dependencies` to fix #950 (#999)
* Use `after_dependencies` to fix #950
* Sort manifest.json
* sort
---
custom_components/adaptive_lighting/manifest.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index de44df73..37d77e4a 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -1,6 +1,7 @@
{
"domain": "adaptive_lighting",
"name": "Adaptive Lighting",
+ "after_dependencies": ["light"],
"codeowners": ["@basnijholt", "@RubenKelevra", "@th3w1zard1", "@protyposis"],
"config_flow": true,
"dependencies": [],
@@ -8,5 +9,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.21.2"
+ "version": "1.21.3"
}
From 618e2ccf4a966f52725e62cbaf3fb5097a4fa1ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bj=C3=B6rn=20Ebbinghaus?=
Date: Wed, 15 May 2024 18:07:59 +0200
Subject: [PATCH 056/361] Add service to group switches (#998)
---
custom_components/adaptive_lighting/switch.py | 36 +++++++++++++++++--
1 file changed, 33 insertions(+), 3 deletions(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 23ca14f9..b4af97ed 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -54,6 +54,8 @@ from homeassistant.const import (
EVENT_CALL_SERVICE,
EVENT_HOMEASSISTANT_STARTED,
EVENT_STATE_CHANGED,
+ MAJOR_VERSION,
+ MINOR_VERSION,
SERVICE_TOGGLE,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
@@ -70,6 +72,12 @@ from homeassistant.core import (
callback,
)
from homeassistant.helpers import entity_platform, entity_registry
+
+if [MAJOR_VERSION, MINOR_VERSION] < [2023, 9]:
+ from homeassistant.helpers.entity import DeviceInfo
+else:
+ from homeassistant.helpers.device_registry import DeviceInfo
+from homeassistant.helpers.device_registry import DeviceEntryType
from homeassistant.helpers.event import (
async_track_state_change_event,
async_track_time_interval,
@@ -944,6 +952,17 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
"""Return true if adaptive lighting is on."""
return self._state
+ @property
+ def device_info(self) -> DeviceInfo:
+ """Return the device info, used to group this and adjacent entities in the UI."""
+ return DeviceInfo(
+ identifiers={
+ (DOMAIN, self._name),
+ },
+ name=self._name,
+ entry_type=DeviceEntryType.SERVICE,
+ )
+
async def async_added_to_hass(self) -> None:
"""Call when entity about to be added to hass."""
if self.hass.is_running:
@@ -1563,9 +1582,9 @@ class SimpleSwitch(SwitchEntity, RestoreEntity):
self._icon = icon
self._state: bool | None = None
self._which = which
- name = data[CONF_NAME]
- self._unique_id = f"{name}_{slugify(self._which)}"
- self._name = f"Adaptive Lighting {which}: {name}"
+ self._config_name = data[CONF_NAME]
+ self._unique_id = f"{self._config_name}_{slugify(self._which)}"
+ self._name = f"Adaptive Lighting {which}: {self._config_name}"
self._initial_state = initial_state
@property
@@ -1588,6 +1607,17 @@ class SimpleSwitch(SwitchEntity, RestoreEntity):
"""Return true if adaptive lighting is on."""
return self._state
+ @property
+ def device_info(self) -> DeviceInfo:
+ """Return the device info, used to group this and adjacent entities in the UI."""
+ return DeviceInfo(
+ identifiers={
+ (DOMAIN, self._config_name),
+ },
+ name=f"Adaptive Lighting: {self._config_name}",
+ entry_type=DeviceEntryType.SERVICE,
+ )
+
async def async_added_to_hass(self) -> None:
"""Call when entity about to be added to hass."""
last_state = await self.async_get_last_state()
From 18d0186e33b0a5903653ba4eb818ce5beae1139f Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Wed, 15 May 2024 09:08:49 -0700
Subject: [PATCH 057/361] docs: add MrEbbinghaus as a contributor for code
(#1000)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 8d713542..a1412330 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -846,6 +846,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "MrEbbinghaus",
+ "name": "Björn Ebbinghaus",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2965273?v=4",
+ "profile": "https://blog.ebbinghaus.me/",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index d11d2734..3093391f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -584,6 +584,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 rVlad93 🌍 |
+  Björn Ebbinghaus 💻 |
From 36115327da1646beaa54c9ec5ef739346d5cc87f Mon Sep 17 00:00:00 2001
From: Marck <18088281+Marck@users.noreply.github.com>
Date: Mon, 20 May 2024 17:14:11 +0200
Subject: [PATCH 058/361] Added light dependencies (#1003)
---
custom_components/adaptive_lighting/manifest.json | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 37d77e4a..accd3ff0 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -1,10 +1,9 @@
{
"domain": "adaptive_lighting",
"name": "Adaptive Lighting",
- "after_dependencies": ["light"],
"codeowners": ["@basnijholt", "@RubenKelevra", "@th3w1zard1", "@protyposis"],
"config_flow": true,
- "dependencies": [],
+ "dependencies": ["light"],
"documentation": "https://github.com/basnijholt/adaptive-lighting#readme",
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
From a0476632a50e85e369f95dffe474ec83425f0467 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 20 May 2024 08:15:00 -0700
Subject: [PATCH 059/361] Bump to 1.21.4
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index accd3ff0..08e7a20c 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.21.3"
+ "version": "1.21.4"
}
From 5a5529962858e84847e6702e2a352769e94804e9 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 20 May 2024 08:17:41 -0700
Subject: [PATCH 060/361] Bump to 1.22.0 (#1004)
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 08e7a20c..6d8c0f5f 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.21.4"
+ "version": "1.22.0"
}
From 5aa763fef3c08c7ebbf2408df52b47f8bef8b26c Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Mon, 20 May 2024 08:23:12 -0700
Subject: [PATCH 061/361] docs: add Marck as a contributor for code (#1005)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index a1412330..1f6e9028 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -855,6 +855,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "Marck",
+ "name": "Marck",
+ "avatar_url": "https://avatars.githubusercontent.com/u/18088281?v=4",
+ "profile": "https://github.com/Marck",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 3093391f..02adcde9 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -585,6 +585,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 rVlad93 🌍 |
 Björn Ebbinghaus 💻 |
+  Marck 💻 |
From 7987a4a825e8cd7724fa3708dacc0d0439ba2ba7 Mon Sep 17 00:00:00 2001
From: Lucho Gizdov
Date: Thu, 6 Jun 2024 18:15:25 +0300
Subject: [PATCH 062/361] Add Translations file for Bulgarian (#987)
---
.../adaptive_lighting/translations/bg.json | 269 ++++++++++++++++++
1 file changed, 269 insertions(+)
create mode 100644 custom_components/adaptive_lighting/translations/bg.json
diff --git a/custom_components/adaptive_lighting/translations/bg.json b/custom_components/adaptive_lighting/translations/bg.json
new file mode 100644
index 00000000..b88bbaae
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/bg.json
@@ -0,0 +1,269 @@
+{
+ "title": "Адаптивно осветление",
+ "config": {
+ "step": {
+ "user": {
+ "title": "Изберете име за инстанцията на Адаптивно осветление",
+ "description": "Всяка инстанция може да съдържа множество лампи!",
+ "data": {
+ "name": "Име"
+ }
+ }
+ },
+ "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": "lights: Списък от entity_ids на лампи за контрол (може да е празен). 🌟",
+ "interval": "интервал",
+ "transition": "преход",
+ "initial_transition": "начален преход",
+ "min_brightness": "min_brightness: Минимален процент на яркост. 💡",
+ "max_brightness": "max_brightness: Максимален процент на яркост. 💡",
+ "min_color_temp": "min_color_temp: Най-топла цветова температура в Келвини. 🔥",
+ "max_color_temp": "max_color_temp: Най-студена цветова температура в Келвини. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Дали да се предпочита RGB цветова корекция пред температура на светлината, когато е възможно. 🌈",
+ "sleep_brightness": "яркост при сън",
+ "sleep_rgb_or_color_temp": "RGB или цветова температура при сън",
+ "sleep_color_temp": "цветова температура при сън",
+ "sleep_rgb_color": "RGB цвят при сън",
+ "sleep_transition": "преход при сън",
+ "transition_until_sleep": "transition_until_sleep: Когато е активирано, Adaptive Lighting ще третира настройките за сън като минимум, преминавайки към тези стойности след залез. 🌙",
+ "sunrise_time": "време на изгрев",
+ "min_sunrise_time": "минимално време на изгрев",
+ "max_sunrise_time": "максимално време на изгрев",
+ "sunrise_offset": "отместване на изгрева",
+ "sunset_time": "време на залез",
+ "min_sunset_time": "минимално време на залез",
+ "max_sunset_time": "максимално време на залез",
+ "sunset_offset": "отместване на залеза",
+ "brightness_mode": "режим на яркост",
+ "brightness_mode_time_dark": "време на режим на яркост при тъмно",
+ "brightness_mode_time_light": "време на режим на яркост при светло",
+ "take_over_control": "take_over_control: Деактивира Adaptive Lighting, ако друг източник извика \"light.turn_on\", докато лампите са включени и се адаптират. Имайте предвид, че това извиква \"homeassistant.update_entity\" на всеки \"interval\"! 🔒",
+ "detect_non_ha_changes": "detect_non_ha_changes: Открива и спира адаптации за промени в състоянието, които не са \"light.turn_on\". Изисква \"take_over_control\" активиран. 🕵️ Внимание: ⚠️ Някои лампиможе лъжливо да указват 'включено' състояние, което може да доведе до неочаквано включване на лампите. Деактивирайте тази функция, ако се сблъскате с такива проблеми.",
+ "autoreset_control_seconds": "секунди за автоматично нулиране на контрола",
+ "only_once": "only_once: Адаптира лампите само когато са включени (\"true\") или продължава да ги адаптира (\"false\"). 🔄",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: При първоначално включване на лампите. Ако е зададено на \"true\", Адаптивно Осветление се адаптира само ако е извикано \"light.turn_on\" без указване на цвят или яркост. ❌🌈 Това например предотвратява адаптация при активиране на сцена. Ако е \"false\", Адаптивно Осветление се адаптира независимо от наличието на цвят или яркост в първоначалните \"service_data\". Изисква \"take_over_control\" активиран. 🕵️ ",
+ "separate_turn_on_commands": "separate_turn_on_commands: Използва отделни \"light.turn_on\" команди за цвят и яркост, необходими за някои типове светлини. 🔀",
+ "send_split_delay": "забавяне при изпращане на разделени",
+ "adapt_delay": "забавяне при адаптация",
+ "skip_redundant_commands": "skip_redundant_commands: Пропуска изпращането на команди за адаптация, чиято целева състояние вече е равно на известното състояние на светлината. Минимизира мрежовия трафик и подобрява отговорността на адаптацията в някои ситуации. 📉Деактивирайте, ако физическите състояния на лампите се разминават с записаното състояние на HA.",
+ "intercept": "intercept: Прихваща и адаптира \"light.turn_on\" повиквания, позволявайки моментална адаптация на цвета и яркостта. 🏎️ Деактивирайте за светлини, които не поддържат \"light.turn_on\" с цвят и яркост.",
+ "multi_light_intercept": "multi_light_intercept: Прихваща и адаптира \"light.turn_on\" повиквания, които целят множество светлини. ➗⚠️ Това може да доведе до разделяне на едно \"light.turn_on\" повикване на множество повиквания, например когато лампите са в различни превключватели. Изисква \"intercept\" да бъде активиран.",
+ "include_config_in_attributes": "include_config_in_attributes: Показва всички опции като атрибути на ключа в Home Assistant, когато е зададено на \"true\". 📝"
+ },
+ "data_description": {
+ "interval": "Честота за адаптиране на лампите, в секунди. 🔄",
+ "transition": "Продължителност на прехода, когато лампите се променят, в секунди. 🕑",
+ "initial_transition": "Продължителност на първия преход, когато лампите преминават от \"off\" на \"on\" в секунди. ⏲️",
+ "sleep_brightness": "Процент на яркостта на лампите в режим на сън. 😴",
+ "sleep_rgb_or_color_temp": "Използвайте или \"\"rgb_color\"\" или \"\"color_temp\"\" в режим на сън. 🌙",
+ "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": "Регулирайте времето на залез с положителен или отрицателен отместване в секунди. ⏰",
+ "brightness_mode": "Режим на яркост за използване. Възможни стойности са \"default\", \"linear\" и \"tanh\" (използва \"brightness_mode_time_dark\" и \"brightness_mode_time_light\"). 📈",
+ "brightness_mode_time_dark": "(Игнорира се, ако \"brightness_mode='default'\") Продължителност в секунди за увеличаване/намаляване на яркостта преди/след изгрев/залез. 📈📉",
+ "brightness_mode_time_light": "(Игнорира се, ако \"brightness_mode='default'\") Продължителност в секунди за увеличаване/намаляване на яркостта след/преди изгрев/залез. 📈📉.",
+ "autoreset_control_seconds": "Автоматично нулиране на ръчния контрол след определен брой секунди. Задайте на 0 за деактивиране. ⏲️",
+ "send_split_delay": "Забавяне (ms) между \"separate_turn_on_commands\" за светлини, които не поддържат едновременна настройка на яркост и цвят. ⏲️",
+ "adapt_delay": "Време за изчакване (секунди) между включване на светлината и прилагане на промени от Адаптивно Осветление. Може да помогне за избягване на трептене. ⏲️"
+ }
+ }
+ },
+ "error": {
+ "option_error": "Невалидна опция",
+ "entity_missing": "Една или повече избрани entity-та на лампилипсват от Home Assistant"
+ }
+ },
+ "services": {
+ "apply": {
+ "name": "приложи",
+ "description": "Прилага текущите настройки за Адаптивно осветление към лампите",
+ "fields": {
+ "entity_id": {
+ "description": "entity_id на ключа с настройките за прилагане. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "Светлина (или списък от светлини), към които да се приложат настройките. 💡",
+ "name": "lights"
+ },
+ "transition": {
+ "description": "Продължителност на прехода, когато лампите се променят, в секунди. 🕑",
+ "name": "transition"
+ },
+ "adapt_brightness": {
+ "description": "Дали да се адаптира яркостта на светлината. 🌞",
+ "name": "adapt_brightness"
+ },
+ "adapt_color": {
+ "description": "Дали да се адаптира цветът на лампите, които го поддържат. 🌈",
+ "name": "adapt_color"
+ },
+ "prefer_rgb_color": {
+ "description": "Дали да се предпочита RGB цветова корекция пред температура на светлината, когато е възможно. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "turn_on_lights": {
+ "description": "Дали да се включат лампите, които в момента са изключени. 🔆",
+ "name": "turn_on_lights"
+ }
+ }
+ },
+ "set_manual_control": {
+ "name": "set_manual_control",
+ "description": "Маркирай дали дадена светлина е с 'ръчно контролиранe'.",
+ "fields": {
+ "entity_id": {
+ "description": "entity_id на ключа, в който да се маркира или демаркира светлината като ръчно контролирана. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "entity_id(та) на лампите, ако не са посочени, всички лампи в ключа се избират. 💡",
+ "name": "lights"
+ },
+ "manual_control": {
+ "description": "Дали да се добави (\"true\") или премахне (\"false\") светлината от списъка \"manual_control\". 🔒",
+ "name": "manual_control"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "name": "change_switch_settings",
+ "description": "Променете всички настройки, които искате в ключа. Всички опции тук са същите като в потока на конфигурацията.",
+ "fields": {
+ "entity_id": {
+ "description": "Entity ID на ключа. 📝",
+ "name": "entity_id"
+ },
+ "use_defaults": {
+ "description": "Задава стойностите по подразбиране, които не са посочени в този обаждане на услугата. Опции: \"current\" (по подразбиране, запазва текущите стойности), \"factory\" (нулира до документирани стойности по подразбиране) или \"configuration\" (връща към стойностите по подразбиране на конфигурацията на превключвателя). ⚙️",
+ "name": "use_defaults"
+ },
+ "include_config_in_attributes": {
+ "description": "Показва всички опции като атрибути на ключа в Home Assistant, когато е зададено на \"true\". 📝",
+ "name": "include_config_in_attributes"
+ },
+ "turn_on_lights": {
+ "description": "Дали да се включат лампите, които в момента са изключени. 🔆",
+ "name": "turn_on_lights"
+ },
+ "initial_transition": {
+ "description": "Продължителност на първия преход, когато лампите преминават от 'изключено' на 'включено' в секунди. ⏲️",
+ "name": "initial_transition"
+ },
+ "sleep_transition": {
+ "description": "Продължителност на прехода, когато се превключва \"режим на сън\" в секунди. 😴",
+ "name": "sleep_transition"
+ },
+ "max_brightness": {
+ "description": "Максимален процент на яркост. 💡",
+ "name": "max_brightness"
+ },
+ "max_color_temp": {
+ "description": "Най-студена цветова температура в Келвини. ❄️",
+ "name": "max_color_temp"
+ },
+ "min_brightness": {
+ "description": "Минимален процент на яркост. 💡",
+ "name": "min_brightness"
+ },
+ "min_color_temp": {
+ "description": "Най-топла цветова температура в Келвини. 🔥",
+ "name": "min_color_temp"
+ },
+ "only_once": {
+ "description": "Адаптира лампите само когато са включени ('true') или продължава да ги адаптира ('false'). 🔄",
+ "name": "only_once"
+ },
+ "prefer_rgb_color": {
+ "description": "Дали да се предпочита RGB цветова корекция пред температура на светлината, когато е възможно. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "separate_turn_on_commands": {
+ "description": "Използвайте отделни light.turn_on повиквания за цвят и яркост, необходими за някои типове светлини. 🔀",
+ "name": "separate_turn_on_commands"
+ },
+ "send_split_delay": {
+ "description": "Забавяне (милисекунди) между \"separate_turn_on_commands\" за лампи, които не поддържат едновременна настройка на яркост и цвят. ⏲️",
+ "name": "send_split_delay"
+ },
+ "sleep_brightness": {
+ "description": "Процент на яркостта на лампите в режим на сън. 😴",
+ "name": "sleep_brightness"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Използвай \"rgb_color\" или \"color_temp\" в режим на сън. 🌙",
+ "name": "sleep_rgb_or_color_temp"
+ },
+ "sleep_rgb_color": {
+ "description": "RGB цвят в режим на сън (използва се, когато sleep_rgb_or_color_temp е \"rgb_color\"). 🌈",
+ "name": "sleep_rgb_color"
+ },
+ "sleep_color_temp": {
+ "description": "Цветова температура в режим на сън (използва се, когато sleep_rgb_or_color_temp е \"color_temp\") в Келвини. 😴",
+ "name": "sleep_color_temp"
+ },
+ "sunrise_offset": {
+ "description": "Коригирайте времето на изгрев с положително или отрицателно отместване в секунди. ⏰",
+ "name": "sunrise_offset"
+ },
+ "sunrise_time": {
+ "description": "Задайте фиксирано време (HH:MM:SS) за изгрев. 🌅",
+ "name": "sunrise_time"
+ },
+ "sunset_offset": {
+ "description": "Коригирайте времето на залез с положително или отрицателно отместване в секунди. ⏰",
+ "name": "sunset_offset"
+ },
+ "sunset_time": {
+ "description": "Задайте фиксирано време (HH:MM:SS) за залез. 🌇",
+ "name": "sunset_time"
+ },
+ "max_sunrise_time": {
+ "description": "Задайте най-късното виртуално време за изгрев (HH:MM:SS), което позволява по-ранни изгреви. 🌅",
+ "name": "max_sunrise_time"
+ },
+ "min_sunset_time": {
+ "description": "Задайте най-ранното виртуално време за изгрев (HH:MM:SS), което позволява по-ранни залези. 🌇",
+ "name": "min_sunset_time"
+ },
+ "take_over_control": {
+ "description": "Деактивирайте адаптивното осветление, ако друг източник извика 'light.turn_on', докато лампите са включени и се адаптират. Обърнете внимание, че това извиква homeassistant.update_entity на всеки interval! 🔒",
+ "name": "take_over_control"
+ },
+ "detect_non_ha_changes": {
+ "description": "Открива и спира адаптации за промени в състоянието, които не са 'light.turn_on'. Изисква активиран 'take_over_control'. 🕵️ Внимание: ⚠️ Някои лампи може лъжливо да указват състояние ‘включено’, което може да доведе до неочаквано включване на лампите. Деактивирайте тази функция, ако се сблъскате с такива проблеми.",
+ "name": "detect_non_ha_changes"
+ },
+ "transition": {
+ "description": "Продължителност на прехода, когато лампите се променят, в секунди. 🕑",
+ "name": "transition"
+ },
+ "adapt_delay": {
+ "description": "Време за изчакване (в секунди) между включването на светлината и прилагането на промените от адаптивното осветление. Може да помогне за избягване на премигване. ⏲️",
+ "name": "adapt_delay"
+ },
+ "autoreset_control_seconds": {
+ "description": "Автоматично нулиране на ръчното управление след определен брой секунди. Задайте на 0, за да деактивирате. ⏲️",
+ "name": "autoreset_control_seconds"
+ }
+ }
+ }
+ }
+}
From ca0c79e3df853326e0f147791ff825782537646c Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 6 Jun 2024 08:18:44 -0700
Subject: [PATCH 063/361] docs: add lachezar-gizdov as a contributor for
translation (#1013)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 1f6e9028..7ac2c652 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -864,6 +864,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "lachezar-gizdov",
+ "name": "Lucho Gizdov",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11273726?v=4",
+ "profile": "https://carmodsheaven.com",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 02adcde9..37b29dc3 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -586,6 +586,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 rVlad93 🌍 |
 Björn Ebbinghaus 💻 |
 Marck 💻 |
+  Lucho Gizdov 🌍 |
From 8e8c520dad81fdcf4359b1c2b6ce7665b99286a6 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Thu, 6 Jun 2024 17:22:10 +0200
Subject: [PATCH 064/361] Translated using Weblate (Romanian) (#997)
---
.../adaptive_lighting/translations/ro.json | 73 ++++++++++++++++++-
1 file changed, 72 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/translations/ro.json b/custom_components/adaptive_lighting/translations/ro.json
index 0967ef42..e0f7ec02 100644
--- a/custom_components/adaptive_lighting/translations/ro.json
+++ b/custom_components/adaptive_lighting/translations/ro.json
@@ -1 +1,72 @@
-{}
+{
+ "config": {
+ "step": {
+ "user": {
+ "description": "Fiecare instanţă poate conţine mai multe lumini!"
+ }
+ }
+ },
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "brightness_mode_time_light": "(Se ignoră dacă `modul_de_luminozitate='implicit'`) Durată în secunde a modificării luminozităţii în sus/jos cand poziţia sorelui este înainte sau după răsărit/apus.",
+ "sunrise_offset": "Ajustați ora răsăritului cu un decalaj pozitiv sau negativ în secunde.⏰",
+ "autoreset_control_seconds": "Resetare automată al controlului manual după un număr de secunde. Setaţi la 0 pentru a dezactiva.",
+ "brightness_mode": "Mod de luminozitate de utilizat. Valorile posibile sunt: 'implicit', 'liniar' şi 'hiperbolic' ( ultilizează 'mod_luminozitate_timp_de_noapte' şi 'mod_luminozitate_timp_de_zi').",
+ "sleep_brightness": "Procentul luminozităţii luminilor în modul 'somn'.",
+ "interval": "Frecvenţa adaptării luminilor, în secunde.",
+ "sunset_offset": "Ajustați ora răsăritului cu un decalaj pozitiv sau negativ în secunde."
+ },
+ "title": "Opţiuni Iluminare Adaptivă",
+ "data": {
+ "adapt_only_on_bare_turn_on": "adaptează_doar_la_comanda_de_arpindere: La aprinderea iniţială a luminilor. Dacă este activat, IA va adapta luminile doar dacă se invocă 'light.turn_on' fără a specifica culoarea sau luminozitatea. Aceasta, de exemplu, previne adaptarea atunci când se activează o scenă. Dacă este dezactivat,IA va adaptata luminile indiferent de prezența valorilor culorii sau luminozității în service_data. Necesită activarea opţiunii 'preia_controlul. "
+ }
+ }
+ }
+ },
+ "title": "Iluminare Adaptivă",
+ "services": {
+ "apply": {
+ "description": "Aplicaţi luminilor setările curente ale Iluminiării Adaptive luminilor.",
+ "fields": {
+ "lights": {
+ "description": "O lumină (sau listă de lumini) pentru care să se aplice setările."
+ }
+ }
+ },
+ "change_switch_settings": {
+ "fields": {
+ "entity_id": {
+ "description": "Numele entităţii."
+ },
+ "sleep_brightness": {
+ "description": "Procentul luminozităţii luminilor în modul 'somn'."
+ },
+ "sleep_transition": {
+ "description": "Durata de tranziție (în secunde) atunci când modul de „somn” este activat."
+ },
+ "autoreset_control_seconds": {
+ "description": "Resetare automată al controlului manual după un număr de secunde. Setaţi la 0 pentru a dezactiva."
+ },
+ "only_once": {
+ "description": "Adaptează luminile doar la pornire ('activat') sau adaptează continuu ('dezactivat')."
+ },
+ "sunrise_offset": {
+ "description": "Ajustați ora răsăritului cu un decalaj pozitiv sau negativ în secunde.⏰"
+ },
+ "sunset_offset": {
+ "description": "Ajustați ora apusului cu un decalaj pozitiv sau negativ în secunde."
+ }
+ },
+ "description": "Schimbați orice setări dorită în comutator. Toate opțiunile de aici sunt la fel ca în fluxul de configurare."
+ },
+ "set_manual_control": {
+ "fields": {
+ "lights": {
+ "description": "Numele luminii (luminilor) , dacă nu sunt specificate, sunt selectate toate luminile ce aparţin de comutator."
+ }
+ }
+ }
+ }
+}
From d3b2d00bf1568853fc963880a1203ef606cc5f88 Mon Sep 17 00:00:00 2001
From: MizterB <5458030+MizterB@users.noreply.github.com>
Date: Sun, 25 Aug 2024 12:00:14 -0400
Subject: [PATCH 065/361] Treat Hue groups as individual lights (#1037)
---
custom_components/adaptive_lighting/switch.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index b4af97ed..3b9448a9 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -638,7 +638,9 @@ def _expand_light_groups(
def _is_light_group(state: State) -> bool:
- return "entity_id" in state.attributes
+ return "entity_id" in state.attributes and not state.attributes.get(
+ "is_hue_group", False
+ )
@bind_hass
From 318d921b91706b2513b4aa2074af2f30e3f6d2f3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 09:00:56 -0700
Subject: [PATCH 066/361] docs: add MizterB as a contributor for code (#1039)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
custom_components/adaptive_lighting/switch.py | 3 ++-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 7ac2c652..55053f56 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -873,6 +873,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "MizterB",
+ "name": "MizterB",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5458030?v=4",
+ "profile": "https://github.com/MizterB",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 37b29dc3..4b4031ec 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -587,6 +587,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Björn Ebbinghaus 💻 |
 Marck 💻 |
 Lucho Gizdov 🌍 |
+  MizterB 💻 |
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 3b9448a9..98a33021 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -639,7 +639,8 @@ def _expand_light_groups(
def _is_light_group(state: State) -> bool:
return "entity_id" in state.attributes and not state.attributes.get(
- "is_hue_group", False
+ "is_hue_group",
+ False,
)
From fc46ed73b68f12146a9782b867e32d4cfe72b813 Mon Sep 17 00:00:00 2001
From: rwjack <59068073+rwjack@users.noreply.github.com>
Date: Sun, 25 Aug 2024 20:03:13 +0200
Subject: [PATCH 067/361] Fix #1017 (#1038)
---
custom_components/adaptive_lighting/switch.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 98a33021..893e7565 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -72,6 +72,7 @@ from homeassistant.core import (
callback,
)
from homeassistant.helpers import entity_platform, entity_registry
+from homeassistant.helpers.entity_component import async_update_entity
if [MAJOR_VERSION, MINOR_VERSION] < [2023, 9]:
from homeassistant.helpers.entity import DeviceInfo
@@ -2492,7 +2493,7 @@ class AdaptiveLightingManager:
# Ensure HASS is correctly updating your light's state with
# light.turn_on calls if any problems arise. This
# can happen e.g. using zigbee2mqtt with 'report: false' in device settings.
- await self.hass.helpers.entity_component.async_update_entity(light)
+ await async_update_entity(self.hass, light)
refreshed_state = self.hass.states.get(light)
assert refreshed_state is not None
From 7d265e9928fa6b2a223146ac81cdafa20735df5f Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 25 Aug 2024 11:21:01 -0700
Subject: [PATCH 068/361] Add more versions to testing matrix (#1040)
* Add more versions to testing matrix
* Update mypy-dev dep
* fix sed
---
.github/workflows/pytest.yaml | 10 +++-
README.md | 102 +++++++++++++++++-----------------
scripts/setup-dependencies | 5 ++
3 files changed, 65 insertions(+), 52 deletions(-)
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index ed5de50c..b03f0023 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -49,7 +49,15 @@ jobs:
- python-version: "3.12"
core-version: "2024.3.3"
- python-version: "3.12"
- core-version: "2024.4.1"
+ core-version: "2024.4.4"
+ - python-version: "3.12"
+ core-version: "2024.5.5"
+ - python-version: "3.12"
+ core-version: "2024.6.4"
+ - python-version: "3.12"
+ core-version: "2024.7.4"
+ - python-version: "3.12"
+ core-version: "2024.8.3"
- python-version: "3.12"
core-version: "dev"
steps:
diff --git a/README.md b/README.md
index 4b4031ec..94393aab 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/scripts/setup-dependencies b/scripts/setup-dependencies
index efe0bd25..ca14045d 100755
--- a/scripts/setup-dependencies
+++ b/scripts/setup-dependencies
@@ -9,6 +9,11 @@ if grep -q 'codecov' core/requirements_test.txt; then
# however it is removed from PyPI, so we cannot install it
sed -i '/codecov/d' core/requirements_test.txt
fi
+
+if grep -q 'mypy-dev==1.10.0a3' core/requirements_test.txt; then
+ # mypy-dev==1.10.0a3 seems to not be available anymore, HA 2024.4 and 2024.5 are affected
+ sed -i 's/mypy-dev==1.10.0a3/mypy-dev==1.10.0b1/' core/requirements_test.txt
+fi
pip install -r core/requirements_test.txt
pip install -e core/
From ac37b50330c87016bb6a50b7089c7511aa30acc3 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 25 Aug 2024 11:34:34 -0700
Subject: [PATCH 069/361] Update manifest.json with version
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 6d8c0f5f..bd92e6bd 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.22.0"
+ "version": "1.23.0"
}
From 981cc420ecf35fdfeed23fe40142545e629e4afb Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 25 Aug 2024 12:24:23 -0700
Subject: [PATCH 070/361] docs: add brietman as a contributor for translation
(#1042)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 55053f56..d8934e03 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -882,6 +882,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "brietman",
+ "name": "brietman",
+ "avatar_url": "https://avatars.githubusercontent.com/u/17436537?v=4",
+ "profile": "https://github.com/brietman",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 94393aab..296b4aca 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -588,6 +588,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Marck 💻 |
 Lucho Gizdov 🌍 |
 MizterB 💻 |
+  brietman 🌍 |
From ccf465251c5c17b8b2f021b5f57322f8f89baed7 Mon Sep 17 00:00:00 2001
From: chpego <38792705+chpego@users.noreply.github.com>
Date: Mon, 7 Oct 2024 07:42:03 +0200
Subject: [PATCH 071/361] Update bug-report.md (#1046)
fix url
---
.github/ISSUE_TEMPLATE/bug-report.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md
index 385259a6..548276d0 100644
--- a/.github/ISSUE_TEMPLATE/bug-report.md
+++ b/.github/ISSUE_TEMPLATE/bug-report.md
@@ -18,7 +18,7 @@ If you need help with using or configuring Adaptive Lighting, please [open a Q&A
Please confirm that you have completed the following steps:
- [ ] I have updated to the [latest Adaptive Lighting version](https://github.com/basnijholt/adaptive-lighting/releases) available in [HACS](https://hacs.xyz/).
-- [ ] I have reviewed the [Troubleshooting Section](https://github.com/basnijholt/adaptive-lighting#troubleshooting) in the [README](https://github.com/basnijholt/adaptive-lighting#readme).
+- [ ] I have reviewed the [Troubleshooting Section](https://github.com/basnijholt/adaptive-lighting#sos-troubleshooting) in the [README](https://github.com/basnijholt/adaptive-lighting#readme).
- [ ] (If using Zigbee2MQTT) I have read the [Zigbee2MQTT troubleshooting guide](https://github.com/basnijholt/adaptive-lighting#zigbee2mqtt) in the [README](https://github.com/basnijholt/adaptive-lighting#readme).
- [ ] I have checked the [V2 Roadmap](https://github.com/basnijholt/adaptive-lighting/discussions/291) and [open issues](https://github.com/basnijholt/adaptive-lighting/issues) to ensure my issue isn't a duplicate.
From 8899d0f5f41a38806dc5cf56cb5c4d9389c2dccd Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 5 Dec 2024 11:14:08 -0800
Subject: [PATCH 072/361] 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 073/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python-mu?=
=?UTF-8?q?ltipart=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 074/361] =?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 075/361] =?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 076/361] 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 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#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 🌍 |
 MizterB 💻 |
 brietman 🌍 |
+  தமிழ் நேரம் 🌍 |
From 111d9fc6b10adb8cb8fc4071a13b50d5a5277a8d Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Thu, 5 Dec 2024 20:27:50 +0100
Subject: [PATCH 077/361] 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 078/361] 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 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#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 🌍 |
 தமிழ் நேரம் 🌍 |
+
+  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 079/361] 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 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#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 🌍 |
+  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 080/361] 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 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#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 🌍 |
 immeteor2 🌍 |
+  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 081/361] 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 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#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 🌍 |
 immeteor2 🌍 |
 Patrick Bassut 🌍 |
+  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 082/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20websocket?=
=?UTF-8?q?s=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 083/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20watchfile?=
=?UTF-8?q?s=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 084/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20ubuntu=20?=
=?UTF-8?q?to=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 085/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20shiny=20t?=
=?UTF-8?q?o=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 086/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20release-d?=
=?UTF-8?q?rafter/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 087/361] =?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 088/361] =?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 089/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/se?=
=?UTF-8?q?tup-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 090/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/se?=
=?UTF-8?q?tup-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 091/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/lo?=
=?UTF-8?q?gin-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 092/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20docker/bu?=
=?UTF-8?q?ild-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 093/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/u?=
=?UTF-8?q?pload-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 094/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/s?=
=?UTF-8?q?etup-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 095/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/d?=
=?UTF-8?q?eploy-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 096/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/c?=
=?UTF-8?q?onfigure-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 097/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20uvicorn?=
=?UTF-8?q?=20to=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 098/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20typing-ex?=
=?UTF-8?q?tensions=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 099/361] =?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 100/361] =?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 101/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python=20?=
=?UTF-8?q?Docker=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 102/361] =?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 103/361] =?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 104/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20asgiref?=
=?UTF-8?q?=20to=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 105/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20anyio=20t?=
=?UTF-8?q?o=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 106/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/c?=
=?UTF-8?q?heckout=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 107/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20shinyswat?=
=?UTF-8?q?ch=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 108/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20uc-micro-?=
=?UTF-8?q?py=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 109/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20sniffio?=
=?UTF-8?q?=20to=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 110/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20python-mu?=
=?UTF-8?q?ltipart=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 111/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20pre-commi?=
=?UTF-8?q?t/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 112/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20mdit-py-p?=
=?UTF-8?q?lugins=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 113/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20linkify-i?=
=?UTF-8?q?t-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 114/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/c?=
=?UTF-8?q?heckout=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 c12b54e265b253dce4724ca6352e287fd1432eb4 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 5 Dec 2024 11:55:44 -0800
Subject: [PATCH 115/361] Use uv pip compile
---
webapp/requirements-locked.txt | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/webapp/requirements-locked.txt b/webapp/requirements-locked.txt
index e788711f..b946c919 100644
--- a/webapp/requirements-locked.txt
+++ b/webapp/requirements-locked.txt
@@ -1,9 +1,5 @@
-#
-# This file is autogenerated by pip-compile with Python 3.11
-# by the following command:
-#
-# pip-compile --output-file=requirements-locked.txt requirements.txt
-#
+# This file was autogenerated by uv via the following command:
+# uv pip compile --output-file=requirements-locked.txt requirements.txt
anyio==4.7.0
# via
# starlette
@@ -16,11 +12,15 @@ asgiref==3.8.1
# via shiny
astral==2.2
# via -r requirements.txt
+chevron==0.14.0
+ # via shinylive
click==8.1.7
# via
# shiny
# shinylive
# uvicorn
+future==1.0.0
+ # via lzstring
h11==0.14.0
# via uvicorn
htmltools==0.6.0
@@ -31,6 +31,8 @@ idna==3.10
# via anyio
linkify-it-py==2.0.3
# via shiny
+lzstring==1.0.4
+ # via shinylive
markdown-it-py==3.0.0
# via
# mdit-py-plugins
@@ -39,14 +41,29 @@ mdit-py-plugins==0.4.2
# via shiny
mdurl==0.1.2
# via markdown-it-py
+narwhals==1.15.2
+ # via shiny
+orjson==3.10.12
+ # via shiny
packaging==24.2
# via
# htmltools
+ # shiny
# shinyswatch
+prompt-toolkit==3.0.36
+ # via
+ # questionary
+ # shiny
python-multipart==0.0.19
# via shiny
pytz==2024.2
# via astral
+questionary==2.0.1
+ # via shiny
+setuptools==75.6.0
+ # via
+ # shiny
+ # shinylive
shiny==1.2.1
# via
# -r requirements.txt
@@ -64,6 +81,7 @@ typing-extensions==4.12.2
# via
# htmltools
# shiny
+ # shinylive
# shinyswatch
uc-micro-py==1.0.3
# via linkify-it-py
@@ -71,7 +89,7 @@ uvicorn==0.32.1
# via shiny
watchfiles==1.0.0
# via shiny
+wcwidth==0.2.13
+ # via prompt-toolkit
websockets==14.1
# via shiny
-xstatic-bootswatch==3.3.7.0
- # via shinyswatch
From 8fb9493a40a33155ceac7aea96200ee68a8831c1 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 5 Dec 2024 14:35:19 -0800
Subject: [PATCH 116/361] 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 @@ Dive into the simulator, experiment with different settings, and fine-tune the b
# 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 @@ app_ui = ui.page_fluid(
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
From 66b93eb3de7ee04993f47da97c02e78883d0df9d Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 5 Dec 2024 14:55:25 -0800
Subject: [PATCH 117/361] Add `webapp/__init__.py` (#1129)
---
webapp/__init__.py | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 webapp/__init__.py
diff --git a/webapp/__init__.py b/webapp/__init__.py
new file mode 100644
index 00000000..e69de29b
From b3e4d09b6b01115dd74b6cd73c27af57ffa6741c Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sat, 7 Dec 2024 11:29:05 -0800
Subject: [PATCH 118/361] Include core 2024.9.3 until 2024.12.0 in the tests
(#1130)
---
.github/workflows/pytest.yaml | 8 ++++++++
webapp/__init__.py | 1 +
2 files changed, 9 insertions(+)
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 4d7472de..68d4ff08 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -58,6 +58,14 @@ jobs:
core-version: "2024.7.4"
- python-version: "3.12"
core-version: "2024.8.3"
+ - python-version: "3.12"
+ core-version: "2024.9.3"
+ - python-version: "3.12"
+ core-version: "2024.10.4"
+ - python-version: "3.12"
+ core-version: "2024.11.3"
+ - python-version: "3.12"
+ core-version: "2024.12.0"
- python-version: "3.12"
core-version: "dev"
steps:
diff --git a/webapp/__init__.py b/webapp/__init__.py
index e69de29b..33dc1b66 100644
--- a/webapp/__init__.py
+++ b/webapp/__init__.py
@@ -0,0 +1 @@
+"""Shiny webapp for Adaptive Lighting."""
From 6d517fc913bea88e800ffdba6cad4cd953b18b98 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A1rton=20Mar=C3=A1z?=
Date: Wed, 1 Jan 2025 21:22:38 +0100
Subject: [PATCH 119/361] Remove trailing space from string in const.py (#1146)
---
custom_components/adaptive_lighting/const.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/const.py b/custom_components/adaptive_lighting/const.py
index 79d571e2..5f78c8fe 100644
--- a/custom_components/adaptive_lighting/const.py
+++ b/custom_components/adaptive_lighting/const.py
@@ -28,7 +28,7 @@ CONF_DETECT_NON_HA_CHANGES, DEFAULT_DETECT_NON_HA_CHANGES = (
)
DOCS[CONF_DETECT_NON_HA_CHANGES] = (
"Detects and halts adaptations for non-`light.turn_on` state changes. "
- "Needs `take_over_control` enabled. 🕵️ "
+ "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."
From 66561058ecd05f3c3fed3a6233d5fce4c4fa1aa3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 12:23:22 -0800
Subject: [PATCH 120/361] docs: add marazmarci as a contributor for code
(#1147)
* 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 a78192bc..4fbe022e 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -936,6 +936,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "marazmarci",
+ "name": "Márton Maráz",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1349654?v=4",
+ "profile": "https://github.com/marazmarci",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 78e8e260..5000fc36 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -596,6 +596,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 immeteor2 🌍 |
 Patrick Bassut 🌍 |
 Ricky Tigg 🌍 |
+  Márton Maráz 💻 |
From 2e2b9e55ef69384679b40c993688e316de969634 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?M=C3=A1rton=20Mar=C3=A1z?=
Date: Wed, 1 Jan 2025 23:18:54 +0100
Subject: [PATCH 121/361] Fix trailing spaces in const.py: restore correct one,
remove incorrect one (#1148)
* Fix trailing spaces in const.py: restore correct one, remove incorrect one
* Also remove trailing space from translations/en.json
* Also remove trailing space from strings.json
---
custom_components/adaptive_lighting/const.py | 4 ++--
custom_components/adaptive_lighting/strings.json | 2 +-
custom_components/adaptive_lighting/translations/en.json | 2 +-
3 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/custom_components/adaptive_lighting/const.py b/custom_components/adaptive_lighting/const.py
index 5f78c8fe..3fc9c5d4 100644
--- a/custom_components/adaptive_lighting/const.py
+++ b/custom_components/adaptive_lighting/const.py
@@ -28,7 +28,7 @@ CONF_DETECT_NON_HA_CHANGES, DEFAULT_DETECT_NON_HA_CHANGES = (
)
DOCS[CONF_DETECT_NON_HA_CHANGES] = (
"Detects and halts adaptations for non-`light.turn_on` state changes. "
- "Needs `take_over_control` enabled. 🕵️"
+ "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."
@@ -84,7 +84,7 @@ DOCS[CONF_ADAPT_ONLY_ON_BARE_TURN_ON] = (
"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. 🕵️ "
+ "Needs `take_over_control` enabled. 🕵️"
)
CONF_PREFER_RGB_COLOR, DEFAULT_PREFER_RGB_COLOR = "prefer_rgb_color", False
diff --git a/custom_components/adaptive_lighting/strings.json b/custom_components/adaptive_lighting/strings.json
index f6f6890b..a2724f6b 100644
--- a/custom_components/adaptive_lighting/strings.json
+++ b/custom_components/adaptive_lighting/strings.json
@@ -49,7 +49,7 @@
"detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
- "adapt_only_on_bare_turn_on": "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. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "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. 🕵️",
"separate_turn_on_commands": "separate_turn_on_commands: Use separate `light.turn_on` calls for color and brightness, needed for some light types. 🔀",
"send_split_delay": "send_split_delay",
"adapt_delay": "adapt_delay",
diff --git a/custom_components/adaptive_lighting/translations/en.json b/custom_components/adaptive_lighting/translations/en.json
index f55a6d88..9991d232 100644
--- a/custom_components/adaptive_lighting/translations/en.json
+++ b/custom_components/adaptive_lighting/translations/en.json
@@ -50,7 +50,7 @@
"detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
- "adapt_only_on_bare_turn_on": "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. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "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. 🕵️",
"separate_turn_on_commands": "separate_turn_on_commands: Use separate `light.turn_on` calls for color and brightness, needed for some light types. 🔀",
"send_split_delay": "send_split_delay",
"adapt_delay": "adapt_delay",
From bf7d109c9833c4404d212c3bab38b54ec7a25021 Mon Sep 17 00:00:00 2001
From: Daniel <49846893+danielbrunt57@users.noreply.github.com>
Date: Wed, 1 Jan 2025 14:19:31 -0800
Subject: [PATCH 122/361] fix: async entry setup (#1141)
* Update __init__.py
* Update strings.json
---
custom_components/adaptive_lighting/__init__.py | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/custom_components/adaptive_lighting/__init__.py b/custom_components/adaptive_lighting/__init__.py
index a235d70f..13c2d7d1 100644
--- a/custom_components/adaptive_lighting/__init__.py
+++ b/custom_components/adaptive_lighting/__init__.py
@@ -65,10 +65,7 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
undo_listener = config_entry.add_update_listener(async_update_options)
data[config_entry.entry_id] = {UNDO_UPDATE_LISTENER: undo_listener}
- for platform in PLATFORMS:
- hass.async_create_task(
- hass.config_entries.async_forward_entry_setup(config_entry, platform),
- )
+ await hass.config_entries.async_forward_entry_setups(config_entry, PLATFORMS)
return True
From 2b6c42d4a864fa1888324d9234a50e66010991e1 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Wed, 1 Jan 2025 23:22:24 +0100
Subject: [PATCH 123/361] Translations update from Hosted Weblate (#1145)
* Translated using Weblate (Croatian)
Currently translated at 47.7% (73 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: dex girl
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/hr/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Korean)
Currently translated at 99.3% (152 of 153 strings)
Co-authored-by: Anonymous
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ko/
Translation: Adaptive Lighting/Adaptive Lighting
---------
Co-authored-by: dex girl
---
.../adaptive_lighting/translations/hr.json | 15 +-
.../adaptive_lighting/translations/ko.json | 528 +++++++++---------
2 files changed, 278 insertions(+), 265 deletions(-)
diff --git a/custom_components/adaptive_lighting/translations/hr.json b/custom_components/adaptive_lighting/translations/hr.json
index 7347cda1..2f8e65ca 100644
--- a/custom_components/adaptive_lighting/translations/hr.json
+++ b/custom_components/adaptive_lighting/translations/hr.json
@@ -2,7 +2,14 @@
"options": {
"step": {
"init": {
- "title": "Opcije prilagodljivog osvjetljenja"
+ "title": "Opcije prilagodljivog osvjetljenja",
+ "data_description": {
+ "sunrise_offset": "Podesite vrijeme izlaska sunca s pozitivnim ili negativnim pomakom u sekundama. ⏰",
+ "sunset_offset": "Podesite vrijeme izlaska sunca s pozitivnim ili negativnim pomakom u sekundama. ⏰"
+ },
+ "data": {
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Prilikom početnog paljenja svjetla. Ako je postavljeno na \"true\", AL se prilagođava samo ako se \"light.turn_on\" pozove bez navođenja boje ili svjetline. ❌🌈 Ovo npr. sprječava prilagodbu prilikom aktiviranja scene. Ako je \"false\", AL se prilagođava bez obzira na prisutnost boje ili svjetline u početnim \"service_data\". Potrebno je omogućiti `take_over_control`. 🕵️ "
+ }
}
}
},
@@ -12,6 +19,12 @@
"fields": {
"only_once": {
"description": "Prilagodi svjetla samo kada su uključena (true) ili ih neprestano prilagođavaj (false). 🔄"
+ },
+ "sunrise_offset": {
+ "description": "Podesite vrijeme izlaska sunca s pozitivnim ili negativnim pomakom u sekundama. ⏰"
+ },
+ "sunset_offset": {
+ "description": "Podesite vrijeme izlaska sunca s pozitivnim ili negativnim pomakom u sekundama. ⏰"
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/ko.json b/custom_components/adaptive_lighting/translations/ko.json
index f4418fd5..8a628f70 100644
--- a/custom_components/adaptive_lighting/translations/ko.json
+++ b/custom_components/adaptive_lighting/translations/ko.json
@@ -1,269 +1,269 @@
{
- "title": "적응형 조명",
- "config": {
- "step": {
- "user": {
- "title": "적응형 조명 인스턴스 이름 선택",
- "description": "각 인스턴스는 여러 조명을 포함할 수 있습니다!",
- "data": {
- "name": "이름"
- }
- }
- },
- "abort": {
- "already_configured": "이 장치는 이미 구성되었습니다"
+ "title": "적응형 조명",
+ "config": {
+ "step": {
+ "user": {
+ "title": "적응형 조명 인스턴스 이름 선택",
+ "description": "각 인스턴스는 여러 조명을 포함할 수 있습니다!",
+ "data": {
+ "name": "이름"
}
+ }
},
- "options": {
- "step": {
- "init": {
- "title": "적응형 조명 옵션",
- "description": "적응형 조명 구성요소를 구성합니다. 옵션 이름은 YAML 설정과 일치합니다. 이 항목을 YAML에서 정의한 경우 여기에 옵션이 표시되지 않습니다. 매개변수 효과를 시연하는 인터랙티브 그래프는 [이 웹 앱](https://basnijholt.github.io/adaptive-lighting)에서 확인할 수 있습니다. 자세한 내용은 [공식 문서](https://github.com/basnijholt/adaptive-lighting#readme)를 참조하세요.",
- "data": {
- "lights": "조명: 제어될 조명 entity_ids의 목록 (비어 있을 수 있음). 🌟",
- "interval": "간격",
- "transition": "전환",
- "initial_transition": "초기 전환",
- "min_brightness": "최소 밝기: 밝기 최소 퍼센트. 💡",
- "max_brightness": "최대 밝기: 밝기 최대 퍼센트. 💡",
- "min_color_temp": "최소 색온도: 켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
- "max_color_temp": "최대 색온도: 켈빈으로 표시된 가장 차가운 색온도. ❄️",
- "prefer_rgb_color": "RGB 색상 선호: 가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
- "sleep_brightness": "수면 밝기",
- "sleep_rgb_or_color_temp": "수면 rgb_or_color_temp",
- "sleep_color_temp": "수면 색온도",
- "sleep_rgb_color": "수면 RGB 색상",
- "sleep_transition": "수면 전환",
- "transition_until_sleep": "수면까지 전환: 활성화되면, 적응형 조명은 수면 설정을 최소값으로 취급하고 일몰 후 이 값으로 전환합니다. 🌙",
- "sunrise_time": "일출 시간",
- "min_sunrise_time": "최소 일출 시간",
- "max_sunrise_time": "최대 일출 시간",
- "sunrise_offset": "일출 오프셋",
- "sunset_time": "일몰 시간",
- "min_sunset_time": "최소 일몰 시간",
- "max_sunset_time": "최대 일몰 시간",
- "sunset_offset": "일몰 오프셋",
- "brightness_mode": "밝기 모드",
- "brightness_mode_time_dark": "어두울 때 밝기 모드 시간",
- "brightness_mode_time_light": "밝을 때 밝기 모드 시간",
- "take_over_control": "제어 인계: 다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
- "detect_non_ha_changes": "비HA 변경 감지: `light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
- "autoreset_control_seconds": "자동 제어 리셋 초",
- "only_once": "한 번만: 조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
- "adapt_only_on_bare_turn_on": "초기 켜짐 시 조정만: 조명을 처음 켤 때. `true`로 설정하면 `light.turn_on`이 색상이나 밝기를 지정하지 않고 호출될 때만 AL이 조정합니다. ❌🌈 예를 들어, 장면을 활성화할 때 조정을 방지합니다. `false`로 설정하면, AL은 초기 `service_data`에 색상이나 밝기의 존재 여부와 관계없이 조정합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️",
- "separate_turn_on_commands": "분리된 켜기 명령 사용: 일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
- "send_split_delay": "분할 전송 지연",
- "adapt_delay": "조정 지연",
- "skip_redundant_commands": "중복 명령 건너뛰기: 목표 상태가 이미 조명의 알려진 상태와 동일한 조정 명령을 보내지 않습니다. 네트워크 트래픽을 최소화하고 일부 상황에서 조정 반응성을 향상시킵니다. 📉 물리적 조명 상태가 HA의 기록된 상태와 동기화되지 않는 경우 비활성화하세요.",
- "intercept": "가로채기: 색상과 밝기의 즉각적인 조정을 가능하게 하기 위해 `light.turn_on` 호출을 가로챕니다. 🏎️ 색상과 밝기를 지원하지 않는 조명에 대해 비활성화합니다.",
- "multi_light_intercept": "다중 조명 가로채기: 여러 조명을 대상으로 하는 `light.turn_on` 호출을 가로채고 조정합니다. ➗⚠️ 이는 단일 `light.turn_on` 호출을 여러 호출로 분할할 수 있음을 의미합니다. 예를 들어, 조명이 다른 스위치에 있을 때. `intercept`가 활성화되어 있어야 합니다.",
- "include_config_in_attributes": "속성에 구성 포함: `true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝"
- },
- "data_description": {
- "interval": "조명을 조정하는 빈도, 초 단위. 🔄",
- "transition": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
- "initial_transition": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
- "sleep_brightness": "수면 모드에서 조명의 밝기 퍼센트. 😴",
- "sleep_rgb_or_color_temp": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
- "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": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
- "brightness_mode": "사용할 밝기 모드. 가능한 값은 `default`, `linear`, `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈",
- "brightness_mode_time_dark": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 전/후에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉",
- "brightness_mode_time_light": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 후/전에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉.",
- "autoreset_control_seconds": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
- "send_split_delay": "`separate_turn_on_commands`에 대한 호출 사이의 지연 시간(밀리초)으로, 밝기와 색상을 동시에 설정하지 않는 조명에 대한 지연. ⏲️",
- "adapt_delay": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️"
- }
- }
- },
- "error": {
- "option_error": "잘못된 옵션",
- "entity_missing": "선택한 하나 이상의 조명 엔티티가 Home Assistant에서 누락됨"
- }
- },
- "services": {
- "apply": {
- "name": "적용",
- "description": "현재 적응형 조명 설정을 조명에 적용합니다.",
- "fields": {
- "entity_id": {
- "description": "설정을 적용할 스위치의 `entity_id`. 📝",
- "name": "entity_id"
- },
- "lights": {
- "description": "설정을 적용할 조명(또는 조명 목록). 💡",
- "name": "lights"
- },
- "transition": {
- "description": "조명 변경 시 전환 기간, 초 단위. 🕑",
- "name": "transition"
- },
- "adapt_brightness": {
- "description": "조명의 밝기를 조정할지 여부. 🌞",
- "name": "adapt_brightness"
- },
- "adapt_color": {
- "description": "지원하는 조명의 색상을 조정할지 여부. 🌈",
- "name": "adapt_color"
- },
- "prefer_rgb_color": {
- "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
- "name": "prefer_rgb_color"
- },
- "turn_on_lights": {
- "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
- "name": "turn_on_lights"
- }
- }
- },
- "set_manual_control": {
- "name": "수동 제어 설정",
- "description": "조명이 '수동 제어됨'으로 표시되었는지 여부를 표시합니다.",
- "fields": {
- "entity_id": {
- "description": "`수동 제어됨`으로 (표시 해제)할 스위치의 `entity_id`. 📝",
- "name": "entity_id"
- },
- "lights": {
- "description": "조명의 entity_id(들), 지정하지 않으면 스위치의 모든 조명이 선택됩니다. 💡",
- "name": "lights"
- },
- "manual_control": {
- "description": "\"수동 제어\" 목록에서 조명을 추가(\"true\") 또는 제거(\"false\")할지 여부. 🔒",
- "name": "manual_control"
- }
- }
- },
- "change_switch_settings": {
- "name": "스위치 설정 변경",
- "description": "스위치에서 원하는 모든 설정을 변경하세요. 여기에 있는 모든 옵션은 구성 흐름에서와 같습니다.",
- "fields": {
- "entity_id": {
- "description": "스위치의 Entity ID. 📝",
- "name": "entity_id"
- },
- "use_defaults": {
- "description": "이 서비스 호출에서 지정되지 않은 기본값을 설정합니다. 옵션: \"현재\"(기본값, 현재 값을 유지), \"공장\"(문서화된 기본값으로 재설정), 또는 \"구성\"(스위치 구성 기본값으로 되돌림). ⚙️",
- "name": "use_defaults"
- },
- "include_config_in_attributes": {
- "description": "`true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝",
- "name": "include_config_in_attributes"
- },
- "turn_on_lights": {
- "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
- "name": "turn_on_lights"
- },
- "initial_transition": {
- "description": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
- "name": "initial_transition"
- },
- "sleep_transition": {
- "description": "\"수면 모드\"가 전환될 때 전환 기간, 초 단위. 😴",
- "name": "sleep_transition"
- },
- "max_brightness": {
- "description": "최대 밝기 퍼센트. 💡",
- "name": "max_brightness"
- },
- "max_color_temp": {
- "description": "켈빈으로 표시된 가장 차가운 색온도. ❄️",
- "name": "max_color_temp"
- },
- "min_brightness": {
- "description": "최소 밝기 퍼센트. 💡",
- "name": "min_brightness"
- },
- "min_color_temp": {
- "description": "켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
- "name": "min_color_temp"
- },
- "only_once": {
- "description": "조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
- "name": "only_once"
- },
- "prefer_rgb_color": {
- "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
- "name": "prefer_rgb_color"
- },
- "separate_turn_on_commands": {
- "description": "일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
- "name": "separate_turn_on_commands"
- },
- "send_split_delay": {
- "description": "밝기와 색상을 동시에 설정하지 않는 조명에 대한 `separate_turn_on_commands` 호출 사이의 지연 시간(밀리초). ⏲️",
- "name": "send_split_delay"
- },
- "sleep_brightness": {
- "description": "수면 모드에서 조명의 밝기 퍼센트. 😴",
- "name": "sleep_brightness"
- },
- "sleep_rgb_or_color_temp": {
- "description": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
- "name": "sleep_rgb_or_color_temp"
- },
- "sleep_rgb_color": {
- "description": "수면 모드에서 RGB 색상 (sleep_rgb_or_color_temp가 \"rgb_color\"일 때 사용). 🌈",
- "name": "sleep_rgb_color"
- },
- "sleep_color_temp": {
- "description": "수면 모드에서 색온도 (sleep_rgb_or_color_temp가 `color_temp`일 때 사용) 켈빈 단위. 😴",
- "name": "sleep_color_temp"
- },
- "sunrise_offset": {
- "description": "양수 또는 음수 오프셋(초)으로 일출 시간을 조정. ⏰",
- "name": "sunrise_offset"
- },
- "sunrise_time": {
- "description": "일출 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌅",
- "name": "sunrise_time"
- },
- "sunset_offset": {
- "description": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
- "name": "sunset_offset"
- },
- "sunset_time": {
- "description": "일몰 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌇",
- "name": "sunset_time"
- },
- "max_sunrise_time": {
- "description": "가장 늦은 가상 일출 시간 (HH:MM:SS)을 설정하여 더 일찍 일출을 허용. 🌅",
- "name": "max_sunrise_time"
- },
- "min_sunset_time": {
- "description": "가장 이른 가상 일몰 시간 (HH:MM:SS)을 설정하여 더 늦은 일몰을 허용. 🌇",
- "name": "min_sunset_time"
- },
- "take_over_control": {
- "description": "다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
- "name": "take_over_control"
- },
- "detect_non_ha_changes": {
- "description": "`light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
- "name": "detect_non_ha_changes"
- },
- "transition": {
- "description": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
- "name": "transition"
- },
- "adapt_delay": {
- "description": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️",
- "name": "adapt_delay"
- },
- "autoreset_control_seconds": {
- "description": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
- "name": "autoreset_control_seconds"
- }
- }
- }
+ "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": "조명: 제어될 조명 entity_ids의 목록 (비어 있을 수 있음). 🌟",
+ "interval": "간격",
+ "transition": "전환",
+ "initial_transition": "초기 전환",
+ "min_brightness": "최소 밝기: 밝기 최소 퍼센트. 💡",
+ "max_brightness": "최대 밝기: 밝기 최대 퍼센트. 💡",
+ "min_color_temp": "최소 색온도: 켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
+ "max_color_temp": "최대 색온도: 켈빈으로 표시된 가장 차가운 색온도. ❄️",
+ "prefer_rgb_color": "RGB 색상 선호: 가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "sleep_brightness": "수면 밝기",
+ "sleep_rgb_or_color_temp": "수면 rgb_or_color_temp",
+ "sleep_color_temp": "수면 색온도",
+ "sleep_rgb_color": "수면 RGB 색상",
+ "sleep_transition": "수면 전환",
+ "transition_until_sleep": "수면까지 전환: 활성화되면, 적응형 조명은 수면 설정을 최소값으로 취급하고 일몰 후 이 값으로 전환합니다. 🌙",
+ "sunrise_time": "일출 시간",
+ "min_sunrise_time": "최소 일출 시간",
+ "max_sunrise_time": "최대 일출 시간",
+ "sunrise_offset": "일출 오프셋",
+ "sunset_time": "일몰 시간",
+ "min_sunset_time": "최소 일몰 시간",
+ "max_sunset_time": "최대 일몰 시간",
+ "sunset_offset": "일몰 오프셋",
+ "brightness_mode": "밝기 모드",
+ "brightness_mode_time_dark": "어두울 때 밝기 모드 시간",
+ "brightness_mode_time_light": "밝을 때 밝기 모드 시간",
+ "take_over_control": "제어 인계: 다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
+ "detect_non_ha_changes": "비HA 변경 감지: `light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
+ "autoreset_control_seconds": "자동 제어 리셋 초",
+ "only_once": "한 번만: 조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
+ "adapt_only_on_bare_turn_on": "초기 켜짐 시 조정만: 조명을 처음 켤 때. `true`로 설정하면 `light.turn_on`이 색상이나 밝기를 지정하지 않고 호출될 때만 AL이 조정합니다. ❌🌈 예를 들어, 장면을 활성화할 때 조정을 방지합니다. `false`로 설정하면, AL은 초기 `service_data`에 색상이나 밝기의 존재 여부와 관계없이 조정합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️",
+ "separate_turn_on_commands": "분리된 켜기 명령 사용: 일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
+ "send_split_delay": "분할 전송 지연",
+ "adapt_delay": "조정 지연",
+ "skip_redundant_commands": "중복 명령 건너뛰기: 목표 상태가 이미 조명의 알려진 상태와 동일한 조정 명령을 보내지 않습니다. 네트워크 트래픽을 최소화하고 일부 상황에서 조정 반응성을 향상시킵니다. 📉 물리적 조명 상태가 HA의 기록된 상태와 동기화되지 않는 경우 비활성화하세요.",
+ "intercept": "가로채기: 색상과 밝기의 즉각적인 조정을 가능하게 하기 위해 `light.turn_on` 호출을 가로챕니다. 🏎️ 색상과 밝기를 지원하지 않는 조명에 대해 비활성화합니다.",
+ "multi_light_intercept": "다중 조명 가로채기: 여러 조명을 대상으로 하는 `light.turn_on` 호출을 가로채고 조정합니다. ➗⚠️ 이는 단일 `light.turn_on` 호출을 여러 호출로 분할할 수 있음을 의미합니다. 예를 들어, 조명이 다른 스위치에 있을 때. `intercept`가 활성화되어 있어야 합니다.",
+ "include_config_in_attributes": "속성에 구성 포함: `true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝"
+ },
+ "data_description": {
+ "interval": "조명을 조정하는 빈도, 초 단위. 🔄",
+ "transition": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
+ "initial_transition": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
+ "sleep_brightness": "수면 모드에서 조명의 밝기 퍼센트. 😴",
+ "sleep_rgb_or_color_temp": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
+ "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": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
+ "brightness_mode": "사용할 밝기 모드. 가능한 값은 `default`, `linear`, `tanh` (uses `brightness_mode_time_dark` and `brightness_mode_time_light`). 📈",
+ "brightness_mode_time_dark": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 전/후에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉",
+ "brightness_mode_time_light": "(`brightness_mode='default'`인 경우 무시됨) 일출/일몰 후/전에 밝기를 높이거나 낮추는 데 걸리는 시간, 초 단위. 📈📉.",
+ "autoreset_control_seconds": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
+ "send_split_delay": "`separate_turn_on_commands`에 대한 호출 사이의 지연 시간(밀리초)으로, 밝기와 색상을 동시에 설정하지 않는 조명에 대한 지연. ⏲️",
+ "adapt_delay": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️"
+ }
+ }
+ },
+ "error": {
+ "option_error": "잘못된 옵션",
+ "entity_missing": "선택한 하나 이상의 조명 엔티티가 Home Assistant에서 누락됨"
+ }
+ },
+ "services": {
+ "apply": {
+ "name": "적용",
+ "description": "현재 적응형 조명 설정을 조명에 적용합니다.",
+ "fields": {
+ "entity_id": {
+ "description": "설정을 적용할 스위치의 `entity_id`. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "설정을 적용할 조명(또는 조명 목록). 💡",
+ "name": "lights"
+ },
+ "transition": {
+ "description": "조명 변경 시 전환 기간, 초 단위. 🕑",
+ "name": "transition"
+ },
+ "adapt_brightness": {
+ "description": "조명의 밝기를 조정할지 여부. 🌞",
+ "name": "adapt_brightness"
+ },
+ "adapt_color": {
+ "description": "지원하는 조명의 색상을 조정할지 여부. 🌈",
+ "name": "adapt_color"
+ },
+ "prefer_rgb_color": {
+ "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "turn_on_lights": {
+ "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
+ "name": "turn_on_lights"
+ }
+ }
+ },
+ "set_manual_control": {
+ "name": "수동 제어 설정",
+ "description": "조명이 '수동 제어됨'으로 표시되었는지 여부를 표시합니다.",
+ "fields": {
+ "entity_id": {
+ "description": "`수동 제어됨`으로 (표시 해제)할 스위치의 `entity_id`. 📝",
+ "name": "entity_id"
+ },
+ "lights": {
+ "description": "조명의 entity_id(들), 지정하지 않으면 스위치의 모든 조명이 선택됩니다. 💡",
+ "name": "lights"
+ },
+ "manual_control": {
+ "description": "\"수동 제어\" 목록에서 조명을 추가(\"true\") 또는 제거(\"false\")할지 여부. 🔒",
+ "name": "manual_control"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "name": "스위치 설정 변경",
+ "description": "스위치에서 원하는 모든 설정을 변경하세요. 여기에 있는 모든 옵션은 구성 흐름에서와 같습니다.",
+ "fields": {
+ "entity_id": {
+ "description": "스위치의 Entity ID. 📝",
+ "name": "entity_id"
+ },
+ "use_defaults": {
+ "description": "이 서비스 호출에서 지정되지 않은 기본값을 설정합니다. 옵션: \"현재\"(기본값, 현재 값을 유지), \"공장\"(문서화된 기본값으로 재설정), 또는 \"구성\"(스위치 구성 기본값으로 되돌림). ⚙️",
+ "name": "use_defaults"
+ },
+ "include_config_in_attributes": {
+ "description": "`true`로 설정하면 Home Assistant에서 스위치의 모든 옵션을 속성으로 표시합니다. 📝",
+ "name": "include_config_in_attributes"
+ },
+ "turn_on_lights": {
+ "description": "현재 꺼져 있는 조명을 켤지 여부. 🔆",
+ "name": "turn_on_lights"
+ },
+ "initial_transition": {
+ "description": "조명이 `off`에서 `on`으로 바뀔 때 첫 번째 전환의 지속 시간, 초 단위. ⏲️",
+ "name": "initial_transition"
+ },
+ "sleep_transition": {
+ "description": "\"수면 모드\"가 전환될 때 전환 기간, 초 단위. 😴",
+ "name": "sleep_transition"
+ },
+ "max_brightness": {
+ "description": "최대 밝기 퍼센트. 💡",
+ "name": "max_brightness"
+ },
+ "max_color_temp": {
+ "description": "켈빈으로 표시된 가장 차가운 색온도. ❄️",
+ "name": "max_color_temp"
+ },
+ "min_brightness": {
+ "description": "최소 밝기 퍼센트. 💡",
+ "name": "min_brightness"
+ },
+ "min_color_temp": {
+ "description": "켈빈으로 표시된 가장 따뜻한 색온도. 🔥",
+ "name": "min_color_temp"
+ },
+ "only_once": {
+ "description": "조명을 켤 때만 조정 (`true`) 또는 계속해서 조정 (`false`). 🔄",
+ "name": "only_once"
+ },
+ "prefer_rgb_color": {
+ "description": "가능할 경우 색온도 조정보다 RGB 색상 조정을 선호하는지 여부. 🌈",
+ "name": "prefer_rgb_color"
+ },
+ "separate_turn_on_commands": {
+ "description": "일부 조명 유형에 필요한 색상과 밝기에 대해 별도의 `light.turn_on` 호출을 사용합니다. 🔀",
+ "name": "separate_turn_on_commands"
+ },
+ "send_split_delay": {
+ "description": "밝기와 색상을 동시에 설정하지 않는 조명에 대한 `separate_turn_on_commands` 호출 사이의 지연 시간(밀리초). ⏲️",
+ "name": "send_split_delay"
+ },
+ "sleep_brightness": {
+ "description": "수면 모드에서 조명의 밝기 퍼센트. 😴",
+ "name": "sleep_brightness"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "수면 모드에서 `\"rgb_color\"` 또는 `\"color_temp\"` 사용. 🌙",
+ "name": "sleep_rgb_or_color_temp"
+ },
+ "sleep_rgb_color": {
+ "description": "수면 모드에서 RGB 색상 (sleep_rgb_or_color_temp가 \"rgb_color\"일 때 사용). 🌈",
+ "name": "sleep_rgb_color"
+ },
+ "sleep_color_temp": {
+ "description": "수면 모드에서 색온도 (sleep_rgb_or_color_temp가 `color_temp`일 때 사용) 켈빈 단위. 😴",
+ "name": "sleep_color_temp"
+ },
+ "sunrise_offset": {
+ "description": "양수 또는 음수 오프셋(초)으로 일출 시간을 조정. ⏰",
+ "name": "sunrise_offset"
+ },
+ "sunrise_time": {
+ "description": "일출 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌅",
+ "name": "sunrise_time"
+ },
+ "sunset_offset": {
+ "description": "양수 또는 음수 오프셋(초)으로 일몰 시간을 조정. ⏰",
+ "name": "sunset_offset"
+ },
+ "sunset_time": {
+ "description": "일몰 시간을 고정된 시간 (HH:MM:SS)으로 설정. 🌇",
+ "name": "sunset_time"
+ },
+ "max_sunrise_time": {
+ "description": "가장 늦은 가상 일출 시간 (HH:MM:SS)을 설정하여 더 일찍 일출을 허용. 🌅",
+ "name": "max_sunrise_time"
+ },
+ "min_sunset_time": {
+ "description": "가장 이른 가상 일몰 시간 (HH:MM:SS)을 설정하여 더 늦은 일몰을 허용. 🌇",
+ "name": "min_sunset_time"
+ },
+ "take_over_control": {
+ "description": "다른 소스가 조명이 켜져 있고 조정 중일 때 `light.turn_on`을 호출하면 적응형 조명을 비활성화합니다. 이는 매 `간격`마다 `homeassistant.update_entity`를 호출합니다! 🔒",
+ "name": "take_over_control"
+ },
+ "detect_non_ha_changes": {
+ "description": "`light.turn_on`이 아닌 상태 변경을 감지하고 조정을 중단합니다. `take_over_control`이 활성화되어 있어야 합니다. 🕵️ 주의: ⚠️ 일부 조명은 잘못된 '켜짐' 상태를 나타낼 수 있으며, 이로 인해 조명이 예상치 못하게 켜질 수 있습니다. 이러한 문제가 발생하면 이 기능을 비활성화하세요.",
+ "name": "detect_non_ha_changes"
+ },
+ "transition": {
+ "description": "조명이 변경될 때 전환 기간, 초 단위. 🕑",
+ "name": "transition"
+ },
+ "adapt_delay": {
+ "description": "조명을 켠 후 적응형 조명이 변경 사항을 적용하기까지의 대기 시간(초). 깜박임을 피하는 데 도움이 될 수 있습니다. ⏲️",
+ "name": "adapt_delay"
+ },
+ "autoreset_control_seconds": {
+ "description": "특정 초 후에 수동 제어를 자동으로 재설정. 0으로 설정하면 비활성화됩니다. ⏲️",
+ "name": "autoreset_control_seconds"
+ }
+ }
+ }
+ }
}
From 06dab257e3396d9849c78166562780b1e29d0aff Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 14:22:50 -0800
Subject: [PATCH 124/361] docs: add Sara492 as a contributor for translation
(#1149)
* 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 4fbe022e..c049869a 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -945,6 +945,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "Sara492",
+ "name": "Sara492",
+ "avatar_url": "https://avatars.githubusercontent.com/u/63058202?v=4",
+ "profile": "https://github.com/Sara492",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 5000fc36..5cf5c579 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -597,6 +597,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Patrick Bassut 🌍 |
 Ricky Tigg 🌍 |
 Márton Maráz 💻 |
+  Sara492 🌍 |
From cdd8ca3952853e3cc674f50226ea4442b8125ed2 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 14:26:53 -0800
Subject: [PATCH 125/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20mcr.micro?=
=?UTF-8?q?soft.com/vscode/devcontainers/python=20Docker=20tag=20to=20v3.1?=
=?UTF-8?q?3=20(#1137)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* ⬆️ Update mcr.microsoft.com/vscode/devcontainers/python Docker tag to v3.13
* 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]
---
.devcontainer.json | 2 +-
README.md | 2 +-
custom_components/adaptive_lighting/services.yaml | 2 +-
custom_components/adaptive_lighting/strings.json | 4 ++--
custom_components/adaptive_lighting/translations/en.json | 4 ++--
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/.devcontainer.json b/.devcontainer.json
index 9b9ba58b..941547f4 100644
--- a/.devcontainer.json
+++ b/.devcontainer.json
@@ -1,6 +1,6 @@
{
"name": "basnijholt/adaptive_lighting",
- "image": "mcr.microsoft.com/vscode/devcontainers/python:3.12",
+ "image": "mcr.microsoft.com/vscode/devcontainers/python:3.13",
"postCreateCommand": "scripts/setup-devcontainer",
"forwardPorts": [
8123
diff --git a/README.md b/README.md
index 5cf5c579..382ad711 100644
--- a/README.md
+++ b/README.md
@@ -132,7 +132,7 @@ The YAML and frontend configuration methods support all of the options listed be
| `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` |
+| `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` |
diff --git a/custom_components/adaptive_lighting/services.yaml b/custom_components/adaptive_lighting/services.yaml
index 4b79f88c..07363fc7 100644
--- a/custom_components/adaptive_lighting/services.yaml
+++ b/custom_components/adaptive_lighting/services.yaml
@@ -226,7 +226,7 @@ change_switch_settings:
selector:
boolean: null
detect_non_ha_changes:
- description: '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.'
+ description: '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.'
required: false
example: false
selector:
diff --git a/custom_components/adaptive_lighting/strings.json b/custom_components/adaptive_lighting/strings.json
index a2724f6b..86a05e28 100644
--- a/custom_components/adaptive_lighting/strings.json
+++ b/custom_components/adaptive_lighting/strings.json
@@ -46,7 +46,7 @@
"brightness_mode_time_dark": "brightness_mode_time_dark",
"brightness_mode_time_light": "brightness_mode_time_light",
"take_over_control": "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`! 🔒",
- "detect_non_ha_changes": "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.",
+ "detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
"adapt_only_on_bare_turn_on": "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. 🕵️",
@@ -247,7 +247,7 @@
"name": "take_over_control"
},
"detect_non_ha_changes": {
- "description": "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.",
+ "description": "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.",
"name": "detect_non_ha_changes"
},
"transition": {
diff --git a/custom_components/adaptive_lighting/translations/en.json b/custom_components/adaptive_lighting/translations/en.json
index 9991d232..44626e29 100644
--- a/custom_components/adaptive_lighting/translations/en.json
+++ b/custom_components/adaptive_lighting/translations/en.json
@@ -47,7 +47,7 @@
"brightness_mode_time_dark": "brightness_mode_time_dark",
"brightness_mode_time_light": "brightness_mode_time_light",
"take_over_control": "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`! 🔒",
- "detect_non_ha_changes": "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.",
+ "detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
"adapt_only_on_bare_turn_on": "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. 🕵️",
@@ -248,7 +248,7 @@
"name": "take_over_control"
},
"detect_non_ha_changes": {
- "description": "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.",
+ "description": "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.",
"name": "detect_non_ha_changes"
},
"transition": {
From 60d07ecd028e37e6a4af2d261e361d9874215ea5 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 14:37:22 -0800
Subject: [PATCH 126/361] Add FUNDING.yml (#1150)
From f8719994a62efb54b599098ea86841278fa2a3cf Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 16:11:22 -0800
Subject: [PATCH 127/361] =?UTF-8?q?use=20`uv`,=20fix=20`devcontainer`,=20a?=
=?UTF-8?q?nd=20drop=20support=20for=20HA=20=E2=89=A42023.6=20(#1151)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Update .devcontainer
* Drop support for ≤2023.6
* Add .vscode/settings.json
* Use async_process_ha_core_config
* Fix for HA ≤2023.10
* pop normalized_name
* Add comments
* use . instead of source
* set pytest args
* set country
* use py3.13 for dev branch of core
* set country in test_adaptive_lighting_time_zones_with_default_settings
* Add comment
---
.devcontainer.json | 8 +++-----
.github/workflows/pytest.yaml | 19 ++-----------------
.vscode/settings.json | 20 ++++++++++++++++++++
hacs.json | 2 +-
scripts/setup-dependencies | 14 +++++++++-----
scripts/setup-devcontainer | 10 +++++-----
tests/test_config_flow.py | 16 ++++++++++------
tests/test_switch.py | 29 ++++++++++++++++++++++-------
8 files changed, 72 insertions(+), 46 deletions(-)
create mode 100644 .vscode/settings.json
diff --git a/.devcontainer.json b/.devcontainer.json
index 941547f4..0a09ed54 100644
--- a/.devcontainer.json
+++ b/.devcontainer.json
@@ -1,7 +1,7 @@
{
"name": "basnijholt/adaptive_lighting",
- "image": "mcr.microsoft.com/vscode/devcontainers/python:3.13",
- "postCreateCommand": "scripts/setup-devcontainer",
+ "image": "mcr.microsoft.com/devcontainers/python:1-3.13",
+ "postCreateCommand": "./scripts/setup-devcontainer && . .venv/bin/activate",
"forwardPorts": [
8123
],
@@ -36,7 +36,5 @@
}
},
"remoteUser": "vscode",
- "features": {
- "ghcr.io/devcontainers/features/rust:1": {}
- }
+ "features": {}
}
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 68d4ff08..411cfdd5 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -14,22 +14,6 @@ jobs:
fail-fast: false
matrix:
include:
- - python-version: "3.10"
- core-version: "2022.11.5"
- - python-version: "3.10"
- core-version: "2022.12.9"
- - python-version: "3.10"
- core-version: "2023.1.7"
- - python-version: "3.10"
- core-version: "2023.2.5"
- - python-version: "3.10"
- core-version: "2023.3.6"
- - python-version: "3.10"
- core-version: "2023.4.6"
- - python-version: "3.10"
- core-version: "2023.5.4"
- - python-version: "3.11"
- core-version: "2023.6.3"
- python-version: "3.11"
core-version: "2023.7.3"
- python-version: "3.11"
@@ -66,7 +50,7 @@ jobs:
core-version: "2024.11.3"
- python-version: "3.12"
core-version: "2024.12.0"
- - python-version: "3.12"
+ - python-version: "3.13"
core-version: "dev"
steps:
- name: Check out code from GitHub
@@ -82,6 +66,7 @@ jobs:
timeout-minutes: 60
run: |
export PYTHONPATH=${PYTHONPATH}:${PWD}
+ source .venv/bin/activate
cd core
python3 -X dev -m pytest \
-vvv \
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..e59dc709
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,20 @@
+{
+ "files.associations": {
+ "*.yaml": "home-assistant"
+ },
+ "python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
+ "python.testing.pytestEnabled": true,
+ "python.testing.pytestArgs": [
+ "-vvv",
+ "-qq",
+ "--timeout=9",
+ "--durations=10",
+ "--cov=homeassistant",
+ "--cov-report=xml",
+ "-o",
+ "console_output_style=count",
+ "-p",
+ "no:sugar",
+ "core/tests/components/adaptive_lighting"
+ ]
+}
diff --git a/hacs.json b/hacs.json
index f21e6d60..9c9035ef 100644
--- a/hacs.json
+++ b/hacs.json
@@ -1,5 +1,5 @@
{
"name": "Adaptive Lighting",
"render_readme": true,
- "homeassistant": "2022.11.0"
+ "homeassistant": "2023.7.0"
}
diff --git a/scripts/setup-dependencies b/scripts/setup-dependencies
index ca14045d..9409ac0c 100755
--- a/scripts/setup-dependencies
+++ b/scripts/setup-dependencies
@@ -2,7 +2,11 @@
set -ex
cd "$(dirname "$0")/.."
-pip install -r core/requirements.txt
+pip install uv
+uv venv
+source .venv/bin/activate
+
+uv pip install -r core/requirements.txt
if grep -q 'codecov' core/requirements_test.txt; then
# Older HA versions still have `codecov` in `requirements_test.txt`
@@ -14,8 +18,8 @@ if grep -q 'mypy-dev==1.10.0a3' core/requirements_test.txt; then
# mypy-dev==1.10.0a3 seems to not be available anymore, HA 2024.4 and 2024.5 are affected
sed -i 's/mypy-dev==1.10.0a3/mypy-dev==1.10.0b1/' core/requirements_test.txt
fi
-pip install -r core/requirements_test.txt
+uv pip install -r core/requirements_test.txt
-pip install -e core/
-pip install ulid-transform # this is in Adaptive-lighting's manifest.json
-pip install $(python test_dependencies.py)
+uv pip install -e core/
+uv pip install ulid-transform # this is in Adaptive-lighting's manifest.json
+uv pip install $(python test_dependencies.py)
diff --git a/scripts/setup-devcontainer b/scripts/setup-devcontainer
index 11fdd106..bdb82534 100755
--- a/scripts/setup-devcontainer
+++ b/scripts/setup-devcontainer
@@ -1,5 +1,5 @@
#!/usr/bin/env bash
-set -e
+set -ex
cd "$(dirname "$0")/.."
# Clone only if the folder doesn't exist
@@ -8,10 +8,10 @@ if [[ ! -d "core" ]]; then
fi
pip install \
- colorlog==6.7.0 \
- pip>=21.0,<23.2 \
- ruff==0.0.265
+ colorlog \
+ pip \
+ ruff
./scripts/setup-dependencies
./scripts/setup-symlinks
-pre-commit install-hooks
+uv run pre-commit install-hooks
diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py
index 1a9e8fbf..af01fc11 100644
--- a/tests/test_config_flow.py
+++ b/tests/test_config_flow.py
@@ -1,6 +1,5 @@
"""Test Adaptive Lighting config flow."""
-from homeassistant import data_entry_flow
from homeassistant.components.adaptive_lighting.const import (
CONF_SUNRISE_TIME,
CONF_SUNSET_TIME,
@@ -11,6 +10,7 @@ from homeassistant.components.adaptive_lighting.const import (
)
from homeassistant.config_entries import SOURCE_IMPORT
from homeassistant.const import CONF_NAME
+from homeassistant.data_entry_flow import FlowResultType
from tests.common import MockConfigEntry
@@ -24,7 +24,7 @@ async def test_flow_manual_configuration(hass):
context={"source": "user"},
)
- assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
+ assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "user"
assert result["handler"] == "adaptive_lighting"
@@ -32,7 +32,7 @@ async def test_flow_manual_configuration(hass):
result["flow_id"],
user_input={CONF_NAME: "living room"},
)
- assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
+ assert result["type"] == FlowResultType.CREATE_ENTRY
assert result["title"] == "living room"
@@ -46,7 +46,7 @@ async def test_import_success(hass):
data=data,
)
- assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
+ assert result["type"] == FlowResultType.CREATE_ENTRY
assert result["title"] == DEFAULT_NAME
for key, value in data.items():
assert result["data"][key] == value
@@ -65,7 +65,7 @@ async def test_options(hass):
await hass.config_entries.async_setup(entry.entry_id)
result = await hass.config_entries.options.async_init(entry.entry_id)
- assert result["type"] == data_entry_flow.RESULT_TYPE_FORM
+ assert result["type"] == FlowResultType.FORM
assert result["step_id"] == "init"
data = DEFAULT_DATA.copy()
@@ -75,7 +75,7 @@ async def test_options(hass):
result["flow_id"],
user_input=data,
)
- assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
+ assert result["type"] == FlowResultType.CREATE_ENTRY
for key, value in data.items():
assert result["data"][key] == value
@@ -114,6 +114,9 @@ async def test_import_twice(hass):
)
+# TODO: Fix, broken for all supported versions
+# But in ≤2024.5 it gives homeassistant.config_entries.UnknownEntry: cd69dbda65bd3f86e9a32d974cdfa23f
+# and ≥2024.6 it times out
async def test_changing_options_when_using_yaml(hass):
"""Test changing options when using YAML."""
entry = MockConfigEntry(
@@ -125,6 +128,7 @@ async def test_changing_options_when_using_yaml(hass):
)
entry.add_to_hass(hass)
+ await hass.block_till_done()
await hass.config_entries.async_setup(entry.entry_id)
result = await hass.config_entries.options.async_init(entry.entry_id)
diff --git a/tests/test_switch.py b/tests/test_switch.py
index e582a031..afc720e5 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -11,7 +11,6 @@ from random import randint
from typing import Any
from unittest.mock import Mock, patch
-import homeassistant.config as config_util
import homeassistant.util.dt as dt_util
import pytest
import ulid_transform
@@ -362,6 +361,19 @@ async def test_adaptive_lighting_switches(hass):
assert len(data.keys()) == 5
+def async_process_ha_core_config(hass, config):
+ """Set up the Home Assistant configuration."""
+ try:
+ # ha >= "2023.11.0"
+ from homeassistant.core_config import async_process_ha_core_config
+
+ return async_process_ha_core_config(hass, config)
+ except ModuleNotFoundError:
+ import homeassistant.config as config_util
+
+ return config_util.async_process_ha_core_config(hass, config)
+
+
@pytest.mark.parametrize(("lat", "long", "timezone"), LAT_LONG_TZS)
async def test_adaptive_lighting_time_zones_with_default_settings(
hass,
@@ -371,9 +383,9 @@ async def test_adaptive_lighting_time_zones_with_default_settings(
reset_time_zone, # pylint: disable=redefined-outer-name
):
"""Test setting up the Adaptive Lighting switches with different timezones."""
- await config_util.async_process_ha_core_config(
+ await async_process_ha_core_config(
hass,
- {"latitude": lat, "longitude": long, "time_zone": timezone},
+ {"latitude": lat, "longitude": long, "time_zone": timezone, "country": "US"},
)
_, switch = await setup_switch(hass, {})
# Shouldn't raise an exception ever
@@ -394,9 +406,9 @@ async def test_adaptive_lighting_time_zones_and_sun_settings(
Also test the (sleep) brightness and color temperature settings.
"""
- await config_util.async_process_ha_core_config(
+ await async_process_ha_core_config(
hass,
- {"latitude": lat, "longitude": long, "time_zone": timezone},
+ {"latitude": lat, "longitude": long, "time_zone": timezone, "country": "US"},
)
_, switch = await setup_switch(
hass,
@@ -1359,6 +1371,8 @@ def mock_area_registry(
area_kwargs["icon"] = None
if dt >= datetime.date(2024, 3, 1):
area_kwargs["floor_id"] = "test-floor"
+ if dt >= datetime.date(2024, 11, 1):
+ area_kwargs.pop("normalized_name")
# This mess... 🤯
if dt >= datetime.date(2024, 2, 1) and dt != datetime.date(2024, 4, 1):
@@ -1588,6 +1602,7 @@ async def test_proactive_adaptation(hass):
assert state.attributes[ATTR_COLOR_TEMP_KELVIN] == 3448
+# TODO: Breaks since 2024.5.0!
async def test_proactive_adaptation_with_separate_commands(hass):
"""Validate that a split proactive adaptation yields one additional service call."""
switch, _ = await setup_lights_and_switch(
@@ -1927,9 +1942,9 @@ async def test_adapt_until_sleep_and_rgb_colors(hass):
Also test the (sleep) brightness and color temperature settings.
"""
lat, long, timezone = (32.87336, -117.22743, "US/Pacific")
- await config_util.async_process_ha_core_config(
+ await async_process_ha_core_config(
hass,
- {"latitude": lat, "longitude": long, "time_zone": timezone},
+ {"latitude": lat, "longitude": long, "time_zone": timezone, "country": "US"},
)
switch, lights = await setup_lights_and_switch(
hass,
From 9a2466cc6f1377e4df4c75c7362c513ed3757051 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 16:19:08 -0800
Subject: [PATCH 128/361] Use `markdown-code-runner==2.1.0` (#1152)
* Use `markdown-code-runner==2.1.0`
* Use correct arg
* uv run
* Update README.md, strings.json, and services.yaml
---
.github/workflows/update-readme.yml | 8 ++---
README.md | 32 +++++++++----------
.../adaptive_lighting/services.yaml | 2 +-
.../adaptive_lighting/strings.json | 4 +--
.../adaptive_lighting/translations/en.json | 4 +--
5 files changed, 25 insertions(+), 25 deletions(-)
diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml
index 456e6626..1df50935 100644
--- a/.github/workflows/update-readme.yml
+++ b/.github/workflows/update-readme.yml
@@ -24,16 +24,16 @@ jobs:
- name: Install markdown-code-runner and README code dependencies
run: |
- pip install markdown-code-runner==1.0.0 pandas tabulate
+ uv pip install markdown-code-runner==2.1.0 pandas tabulate
- name: Run markdown-code-runner
- run: markdown-code-runner --debug README.md
+ run: uv run markdown-code-runner --verbose README.md
- name: Run update services.yaml
- run: python .github/update-services.py
+ run: uv run python .github/update-services.py
- name: Run update strings.json
- run: python .github/update-strings.py
+ run: uv run python .github/update-strings.py
- name: Commit updated README.md, strings.json, and services.yaml
id: commit
diff --git a/README.md b/README.md
index 382ad711..d4019252 100644
--- a/README.md
+++ b/README.md
@@ -96,13 +96,13 @@ Transform your home's atmosphere with Adaptive Lighting 🏠, and experience the
All of the configuration options are listed below, along with their default values.
The YAML and frontend configuration methods support all of the options listed below.
-
+
-
+
-
-
+
+
| Variable name | Description | Default | Type |
|:-------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|:---------------|:---------------------------------------|
| `lights` | List of light entity_ids to be controlled (may be empty). 🌟 | `[]` | list of `entity_id`s |
@@ -132,7 +132,7 @@ The YAML and frontend configuration methods support all of the options listed be
| `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` |
+| `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` |
@@ -144,7 +144,7 @@ The YAML and frontend configuration methods support all of the options listed be
| `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` |
-
+
Full example:
@@ -179,13 +179,13 @@ adaptive_lighting:
`adaptive_lighting.apply` applies Adaptive Lighting settings to lights on demand.
-
+
-
+
-
-
+
+
| Service data attribute | Description | Required | Type |
|:-------------------------|:-------------------------------------------------------------------------------------|:-----------|:---------------------|
| `entity_id` | The `entity_id` of the switch with the settings to apply. 📝 | ✅ | list of `entity_id`s |
@@ -196,25 +196,25 @@ adaptive_lighting:
| `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`
`adaptive_lighting.set_manual_control` can mark (or unmark) whether a light is "manually controlled", meaning that when a light has `manual_control`, the light is not adapted.
-
+
-
+
-
-
+
+
| 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`
`adaptive_lighting.change_switch_settings` (new in 1.7.0) Change any of the above configuration options of Adaptive Lighting (such as `sunrise_time` or `prefer_rgb_color`) with a service call directly from your script/automation.
diff --git a/custom_components/adaptive_lighting/services.yaml b/custom_components/adaptive_lighting/services.yaml
index 07363fc7..4b79f88c 100644
--- a/custom_components/adaptive_lighting/services.yaml
+++ b/custom_components/adaptive_lighting/services.yaml
@@ -226,7 +226,7 @@ change_switch_settings:
selector:
boolean: null
detect_non_ha_changes:
- description: '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.'
+ description: '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.'
required: false
example: false
selector:
diff --git a/custom_components/adaptive_lighting/strings.json b/custom_components/adaptive_lighting/strings.json
index 86a05e28..a2724f6b 100644
--- a/custom_components/adaptive_lighting/strings.json
+++ b/custom_components/adaptive_lighting/strings.json
@@ -46,7 +46,7 @@
"brightness_mode_time_dark": "brightness_mode_time_dark",
"brightness_mode_time_light": "brightness_mode_time_light",
"take_over_control": "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`! 🔒",
- "detect_non_ha_changes": "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.",
+ "detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
"adapt_only_on_bare_turn_on": "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. 🕵️",
@@ -247,7 +247,7 @@
"name": "take_over_control"
},
"detect_non_ha_changes": {
- "description": "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.",
+ "description": "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.",
"name": "detect_non_ha_changes"
},
"transition": {
diff --git a/custom_components/adaptive_lighting/translations/en.json b/custom_components/adaptive_lighting/translations/en.json
index 44626e29..9991d232 100644
--- a/custom_components/adaptive_lighting/translations/en.json
+++ b/custom_components/adaptive_lighting/translations/en.json
@@ -47,7 +47,7 @@
"brightness_mode_time_dark": "brightness_mode_time_dark",
"brightness_mode_time_light": "brightness_mode_time_light",
"take_over_control": "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`! 🔒",
- "detect_non_ha_changes": "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.",
+ "detect_non_ha_changes": "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.",
"autoreset_control_seconds": "autoreset_control_seconds",
"only_once": "only_once: Adapt lights only when they are turned on (`true`) or keep adapting them (`false`). 🔄",
"adapt_only_on_bare_turn_on": "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. 🕵️",
@@ -248,7 +248,7 @@
"name": "take_over_control"
},
"detect_non_ha_changes": {
- "description": "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.",
+ "description": "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.",
"name": "detect_non_ha_changes"
},
"transition": {
From ad4e7bd7754eb030e3b119866aa58c3483d6268d Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 16:34:35 -0800
Subject: [PATCH 129/361] Add 2025.1.0b5 to testing (#1154)
---
.github/workflows/pytest.yaml | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 411cfdd5..098a33af 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -49,7 +49,9 @@ jobs:
- python-version: "3.12"
core-version: "2024.11.3"
- python-version: "3.12"
- core-version: "2024.12.0"
+ core-version: "2024.12.5"
+ - python-version: "3.12"
+ core-version: "2025.1.0b5"
- python-version: "3.13"
core-version: "dev"
steps:
From e6888cdc786b0b0c52a97d74a0f1b44339b44d7e Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 16:37:08 -0800
Subject: [PATCH 130/361] docs: add enpaga as a contributor for translation
(#1156)
* 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 c049869a..43c49beb 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -954,6 +954,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "enpaga",
+ "name": "enpaga",
+ "avatar_url": "https://avatars.githubusercontent.com/u/180730931?v=4",
+ "profile": "https://github.com/enpaga",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index d4019252..71ffa60d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -598,6 +598,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Ricky Tigg 🌍 |
 Márton Maráz 💻 |
 Sara492 🌍 |
+  enpaga 🌍 |
From 32482c4e0449face455f73fa9997d34993556e3f Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Thu, 2 Jan 2025 01:37:23 +0100
Subject: [PATCH 131/361] Translated using Weblate (Catalan) (#1153)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Currently translated at 91.5% (140 of 153 strings)
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ca/
Translation: Adaptive Lighting/Adaptive Lighting
Co-authored-by: Enric Pagès i Gassull
---
.../adaptive_lighting/translations/ca.json | 106 +++++++++++++++++-
1 file changed, 101 insertions(+), 5 deletions(-)
diff --git a/custom_components/adaptive_lighting/translations/ca.json b/custom_components/adaptive_lighting/translations/ca.json
index 11e6d43d..ff8814b0 100644
--- a/custom_components/adaptive_lighting/translations/ca.json
+++ b/custom_components/adaptive_lighting/translations/ca.json
@@ -11,15 +11,42 @@
"autoreset_control_seconds": "Restableix automàticament el control manual al cap d'uns segons. Posar a 0 per desactivar. ⏲️",
"brightness_mode": "Mode de brillantor a utilitzar. Els valors possibles són `default`, \"linear\" i \"tanh\" (utilitza `brightness_mode_time_dark` i `brightness_mode_time_light`). 📈",
"sleep_color_temp": "Temperatura de color en mode nit (s'utilitza quan `sleep_rgb_or_color_temp` és `color_temp`) en Kelvin. 😴",
- "sleep_brightness": "Percentatge de brillantor de les llums en mode nit. 😴"
+ "sleep_brightness": "Percentatge de brillantor de les llums en mode nit. 😴",
+ "interval": "Freqüència d'adaptació de les llums, en segons. 🔄",
+ "sleep_transition": "Durada de la transició en commutar el \"mode nocturn\", en segons. 🕑",
+ "sleep_rgb_color": "Color RGB en mode nocturn (s'utilitza quan `sleep_rgb_or_color_temp` és \"rgb_color\"). 🌈",
+ "transition": "Durada de la transició en canviar les llums, en segons. 🕑",
+ "sunrise_time": "Indica una hora fixa (HH:MM:SS) per a la sortida del sol. 🌅",
+ "sleep_rgb_or_color_temp": "Utilitza `\"rgb_color\"` o `\"color_temp\"` durant el mode nocturn. 🌙",
+ "sunset_time": "Indica una hora fixa (HH:MM:SS) per a la posta de sol. 🌇",
+ "brightness_mode_time_dark": "(S'ignora si `brightness_mode='default'`) La durada en segons de la variació de la brillantor abans/despres de la sortida/posta de sol. 📈📉.",
+ "brightness_mode_time_light": "(S'ignora si `brightness_mode='default'`) La durada en segons de la variació de la brillantor abans/despres de la sortida/posta de sol. 📈📉.",
+ "adapt_delay": "Temps d'espera (en segons) entre l'encesa de la llum i els canvis per part d'Adaptive Lighting. Pot ajudar a evitar els parpalleigs. ⏲️"
},
"title": "Opcions Il·luminació Adaptativa",
"data": {
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Quan s'encenen les llums inicialment. Si el valor és `true`, AL adapta només si s'ha cridat `light.turn_on` sense especificar color o brillantor. ❌🌈 Això impedeix l'adaptació quan s'activa una escena. Si el valor és `false`, AL adapta independentment de la presencia de color o brillantor en les dades inicials `service_data`. Necessita `take_over_control` habilitat. 🕵️ ",
- "detect_non_ha_changes": "detect_non_ha_changes: Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita `take_over_control` habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguessin inesperadament. Desactiva aquesta funció si trobes aquests problemes."
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Quan s'encenen les llums inicialment. Si el valor és `true`, AL adapta només si s'ha cridat `light.turn_on` sense especificar color o brillantor. ❌🌈 Això impedeix l'adaptació quan s'activa una escena. Si el valor és `false`, AL adapta independentment de la presencia de color o brillantor en les dades inicials `service_data`. Necessita `take_over_control` habilitat. 🕵️",
+ "detect_non_ha_changes": "detect_non_ha_changes: Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita que `take_over_control` estigui habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguin inesperadament. Desactiva aquesta funció si trobes aquests problemes.",
+ "lights": "lights: Llista d'entity_ids dels llums a controlar (pot estar buida). 🌟",
+ "min_brightness": "min_brightness: Percentatge mínim de brillantor. 💡",
+ "max_brightness": "max_brightness: Percentatge màxim de brillantor. 💡",
+ "min_color_temp": "min_color_temp: Temperatura de color més càlida en graus Kelvin. 🔥",
+ "max_color_temp": "max_color_temp: Temperatura de color més freda en graus Kelvin. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Si prefereixes l'ajustament del color RGB en lloc de la temperatura de color, quan sigui possible. 🌈",
+ "take_over_control": "take_over_control: Inhabilita Adaptive Lighting si una altra font crida `light.turn_on` quan les llums estan enceses i en procés d'adaptació. Tingues present que això cridarà `homeassistant.update_entity` cada `interval`! 🔒",
+ "only_once": "only_once: Adapta els llums només quan s'encenen (`true`) o segueix adaptant-les (`false`). 🔄",
+ "separate_turn_on_commands": "separate_turn_on_commands: Separa les crides de `light.turn_on` per a color i brillantor; necessari per alguns tipus de llums. 🔀",
+ "include_config_in_attributes": "include_config_in_attributes: Mostra totes les opcions com atributs a l'interruptor de Home Assistant quan s'estableix com a `true`. 📝",
+ "multi_light_intercept": "multi_light_intercept: Intercepta i adapta les crides `light.turn_on` dirigides a múltiples llums. ➗⚠️ Pot provocar la divisió d'una crida única `light.turn_on` en múltiples crides, com ara, quan les llums són en interruptors diferents. Necessita que `intercept` estigui habilitat.",
+ "transition_until_sleep": "transition_until_sleep: Si s'activa, Adaptive Lighting considerarà els ajustaments del mode nocturn com a mínims, fent una transició cap aquests valors després de la posta de sol. 🌙",
+ "intercept": "intercept: Intercepta i adapta les crides `light.turn_on` per permetre canvis instantanis de color i brillantor. 🏎️ Inhabilita-ho per a llums que no admeten `light.turn_on` amb color i brillantor."
},
"description": "Configura un component d'Adaptive Lighting. Els noms de les opcions s'alineen amb la configuració de YAML. Si has definit aquesta entrada a YAML, aquí no apareixerà cap opció. Per veure gràfics interactius que demostren efectes de paràmetres, visita [aquesta aplicació web] (https://basnijholt.github.io/adaptive-lighting). Per a més detalls, pots veure la [documentació oficial] (https://github.com/basnijholt/adaptive-lighting#readme)."
}
+ },
+ "error": {
+ "option_error": "Opció invàlida",
+ "entity_missing": "Una o més de les entitats de llum seleccionades no es troba a Home Assistant"
}
},
"services": {
@@ -50,10 +77,58 @@
"description": "Retard (ms) entre `separate_turn_on_commands` per als llums que no admeten la configuració simultània de brillantor i color. ⏲️"
},
"detect_non_ha_changes": {
- "description": "Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita `take_over_control` habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguessin inesperadament. Desactiva aquesta funció si trobes aquests problemes."
+ "description": "Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita que `take_over_control` estigui habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguessin inesperadament. Desactiva aquesta funció si trobes aquests problemes."
},
"take_over_control": {
"description": "Desactiva Adaptive Lighting si una altra font crida `light.turn_on` mentre els llums estan encesos i adaptats. Tingues en compte que això crida `homeassistant.update_entity` cada `interval`! 🔒"
+ },
+ "entity_id": {
+ "description": "ID de la entitat de l'interruptor. 📝"
+ },
+ "turn_on_lights": {
+ "description": "Si s'encenen les llums que estan apagades en aquest moment. 🔆"
+ },
+ "initial_transition": {
+ "description": "Durada de la primera transició quan les llums canvien `off` cap a `on` en segons. ⏲️"
+ },
+ "sleep_transition": {
+ "description": "Durada de la transició en commutar el \"mode nocturn\", en segons. 🕑"
+ },
+ "max_brightness": {
+ "description": "Percentatge màxim de brillantor. 💡"
+ },
+ "min_brightness": {
+ "description": "Percentatge mínim de brillantor. 💡"
+ },
+ "prefer_rgb_color": {
+ "description": "Si es prefereix ajustar el color RGB en lloc de la temperatura de color, quan sigui possible. 🌈"
+ },
+ "min_color_temp": {
+ "description": "Temperatura de color més càlida, en graus Kelvin. 🔥"
+ },
+ "separate_turn_on_commands": {
+ "description": "Utilitza crides independents per a `light.turn_on` per color i brillantor; necessari per alguns tipus de llums. 🔀"
+ },
+ "sleep_rgb_or_color_temp": {
+ "description": "Utilitza `\"rgb_color\"` o `\"color_temp\"` durant el mode nocturn. 🌙"
+ },
+ "sleep_rgb_color": {
+ "description": "Color RGB en mode nocturn (s'utilitza quan `sleep_rgb_or_color_temp` és \"rgb_color\"). 🌈"
+ },
+ "sunrise_time": {
+ "description": "Indica una hora fixa (HH:MM:SS) per a la sortida del sol. 🌅"
+ },
+ "sunset_time": {
+ "description": "Indica una hora fixa (HH:MM:SS) per a la posta de sol. 🌇"
+ },
+ "transition": {
+ "description": "Durada de la transició en canviar les llums, en segons. 🕑"
+ },
+ "adapt_delay": {
+ "description": "Temps d'espera (en segons) entre l'encesa de la llum i els canvis per part d'Adaptive Lighting. Pot ajudar a evitar els parpalleigs. ⏲️"
+ },
+ "use_defaults": {
+ "description": "Defineix els valors per defecte que no s'especifiquin a la crida del servei. Opcions: \"current\" (per defecte, manté els valors actuals), \"factory\" (restaura els valors documentats per defecte), o \"configuration\" (retorna als valors per defecte de l'interruptor). ⚙️"
}
},
"description": "Canvia les opcions de configuració que vulguis al commutador. Totes les opcions d'aquí són les mateixes que en el flux de configuració."
@@ -62,16 +137,37 @@
"fields": {
"lights": {
"description": "Una llum (o una llista de llums) a la qual aplicar la configuració. 💡"
+ },
+ "transition": {
+ "description": "Durada de la transició en canviar les llums, en segons. 🕑"
+ },
+ "prefer_rgb_color": {
+ "description": "Si es prefereix ajustar el color RGB en lloc de la temperatura de color, quan sigui possible. 🌈"
+ },
+ "turn_on_lights": {
+ "description": "Si s'encenen les llums que estan apagades en aquest moment. 🔆"
}
},
"description": "Aplica la configuració actual d'Adaptive Lighting a les llums."
+ },
+ "set_manual_control": {
+ "description": "Indica quan una llum està 'controlada manualment'.",
+ "fields": {
+ "lights": {
+ "description": "entity_id(s) de les llums; si no s'especifica es seleccionaran totes les llums de l'interruptor. 💡"
+ }
+ }
}
},
"config": {
"step": {
"user": {
- "title": "Tria un nom per a la instància d'Adaptive Lighting"
+ "title": "Tria un nom per a la instància d'Adaptive Lighting",
+ "description": "Cada instància pot contenir múltiples llums!"
}
+ },
+ "abort": {
+ "already_configured": "Aquest dispositiu ja està configurat"
}
}
}
From 72eb848a794b4df92c8b6ac45ae0f73d49c0a123 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 16:46:11 -0800
Subject: [PATCH 132/361] =?UTF-8?q?Fix=20setting=20config=5Fentry=20direct?=
=?UTF-8?q?ly=20in=20=E2=89=A52024.12=20(#1155)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Fix setting config_entry directly in ≥2024.12
FAILED tests/components/adaptive_lighting/test_config_flow.py::test_incorrect_options - RuntimeError: Detected that integration 'adaptive_lighting' sets option flow config_entry explicitly, which is deprecated at homeassistant/components/adaptive_lighting/config_flow.py, line 86: self.config_entry = config_entry. Please create a bug report at https://github.com/home-assistant/core/issues?q=is%3Aopen+is%3Aissue+label%3A%22integration%3A+adaptive_lighting%22
* compatiblity
---
custom_components/adaptive_lighting/config_flow.py | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/custom_components/adaptive_lighting/config_flow.py b/custom_components/adaptive_lighting/config_flow.py
index f0098937..3922d000 100644
--- a/custom_components/adaptive_lighting/config_flow.py
+++ b/custom_components/adaptive_lighting/config_flow.py
@@ -5,7 +5,7 @@ import logging
import homeassistant.helpers.config_validation as cv
import voluptuous as vol
from homeassistant import config_entries
-from homeassistant.const import CONF_NAME
+from homeassistant.const import CONF_NAME, MAJOR_VERSION, MINOR_VERSION
from homeassistant.core import callback
from .const import ( # pylint: disable=unused-import
@@ -58,6 +58,9 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
@callback
def async_get_options_flow(config_entry):
"""Get the options flow for this handler."""
+ if (MAJOR_VERSION, MINOR_VERSION) >= (2024, 12):
+ # https://github.com/home-assistant/core/pull/129651
+ return OptionsFlowHandler()
return OptionsFlowHandler(config_entry)
@@ -81,9 +84,13 @@ def validate_options(user_input, errors):
class OptionsFlowHandler(config_entries.OptionsFlow):
"""Handle a option flow for Adaptive Lighting."""
- def __init__(self, config_entry: config_entries.ConfigEntry) -> None:
+ def __init__(self, *args, **kwargs) -> None:
"""Initialize options flow."""
- self.config_entry = config_entry
+ if (MAJOR_VERSION, MINOR_VERSION) >= (2024, 12):
+ super().__init__(*args, **kwargs)
+ # https://github.com/home-assistant/core/pull/129651
+ else:
+ self.config_entry = args[0]
async def async_step_init(self, user_input=None):
"""Handle options flow."""
From 69c3e3503c30a4298b41c0f5eb1309bb37e2f143 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 20:02:46 -0800
Subject: [PATCH 133/361] Release v1.25.0 (#1157)
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index bd92e6bd..4b0cac4f 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.23.0"
+ "version": "1.25.0"
}
From 935b913bc7802e091f9b10e82545b66b56045d9e Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Wed, 1 Jan 2025 22:49:58 -0800
Subject: [PATCH 134/361] Fix test_proactive_adaptation_with_separate_commands
(#1158)
---
tests/test_switch.py | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/tests/test_switch.py b/tests/test_switch.py
index afc720e5..34554872 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -1602,7 +1602,6 @@ async def test_proactive_adaptation(hass):
assert state.attributes[ATTR_COLOR_TEMP_KELVIN] == 3448
-# TODO: Breaks since 2024.5.0!
async def test_proactive_adaptation_with_separate_commands(hass):
"""Validate that a split proactive adaptation yields one additional service call."""
switch, _ = await setup_lights_and_switch(
@@ -1623,11 +1622,16 @@ async def test_proactive_adaptation_with_separate_commands(hass):
},
)
- event_context_ids = await _turn_on_and_track_event_contexts(
+ events = await _turn_on_and_track_event_contexts(
hass,
"test_context",
ENTITY_LIGHT_3,
+ return_full_events=True,
)
+ # Wait for all adaptation tasks to complete
+ await asyncio.gather(*switch.manager.adaptation_tasks)
+ await hass.async_block_till_done()
+ event_context_ids = [event.context.id for event in events]
# Expect two service calls
assert len(event_context_ids) == 2, event_context_ids
From 9aee2349555ad25937ba3b7b614b7776e2d3bce5 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Wed, 1 Jan 2025 23:28:15 -0800
Subject: [PATCH 135/361] [pre-commit.ci] pre-commit autoupdate (#972)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/pre-commit/pre-commit-hooks: v4.5.0 → v5.0.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.5.0...v5.0.0)
- [github.com/astral-sh/ruff-pre-commit: v0.3.5 → v0.8.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.5...v0.8.4)
- [github.com/psf/black: 24.3.0 → 24.10.0](https://github.com/psf/black/compare/24.3.0...24.10.0)
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Fix issues
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
.github/update-strings.py | 2 +-
.pre-commit-config.yaml | 6 +++---
.../adaptive_lighting/adaptation_utils.py | 4 ++--
.../adaptive_lighting/color_and_brightness.py | 12 ++++--------
custom_components/adaptive_lighting/switch.py | 2 +-
tests/test_switch.py | 7 ++-----
webapp/color_and_brightness.py | 12 ++++--------
7 files changed, 17 insertions(+), 28 deletions(-)
diff --git a/.github/update-strings.py b/.github/update-strings.py
index d25a7af2..94fce459 100644
--- a/.github/update-strings.py
+++ b/.github/update-strings.py
@@ -22,7 +22,7 @@ data = {}
data_description = {}
for k, _, typ in const.VALIDATION_TUPLES:
desc = const.DOCS[k]
- if len(desc) > 40 and typ != bool and typ != cv.entity_ids:
+ if len(desc) > 40 and typ not in (bool, cv.entity_ids):
data[k] = k
data_description[k] = desc
else:
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9a7a0a9e..fcaebb75 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,6 +1,6 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- rev: v4.5.0
+ rev: v5.0.0
hooks:
- id: check-added-large-files
- id: trailing-whitespace
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.3.5
+ rev: v0.8.4
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 24.3.0
+ rev: 24.10.0
hooks:
- id: black
diff --git a/custom_components/adaptive_lighting/adaptation_utils.py b/custom_components/adaptive_lighting/adaptation_utils.py
index 595911f0..aea061d1 100644
--- a/custom_components/adaptive_lighting/adaptation_utils.py
+++ b/custom_components/adaptive_lighting/adaptation_utils.py
@@ -69,8 +69,8 @@ def _split_service_call_data(service_data: ServiceData) -> list[ServiceData]:
if service_datas and (transition := service_data.get(ATTR_TRANSITION)) is not None:
transition /= len(service_datas)
- for service_data in service_datas:
- service_data[ATTR_TRANSITION] = transition
+ for _service_data in service_datas:
+ _service_data[ATTR_TRANSITION] = transition
return service_datas
diff --git a/custom_components/adaptive_lighting/color_and_brightness.py b/custom_components/adaptive_lighting/color_and_brightness.py
index 52386bf7..215a9a70 100644
--- a/custom_components/adaptive_lighting/color_and_brightness.py
+++ b/custom_components/adaptive_lighting/color_and_brightness.py
@@ -64,12 +64,10 @@ class SunEvents:
) + 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
+ sunrise = max(min_sunrise, 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
+ sunrise = min(max_sunrise, sunrise)
return sunrise
def sunset(self, dt: datetime.date) -> datetime.datetime:
@@ -81,12 +79,10 @@ class SunEvents:
) + 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
+ sunset = max(min_sunset, 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
+ sunset = min(max_sunset, sunset)
return sunset
def _replace_time(
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 893e7565..29955d0a 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -2552,7 +2552,7 @@ class AdaptiveLightingManager:
and id_off_to_on == turn_on_event.context.id
)
- async def just_turned_off( # noqa: PLR0911, PLR0912
+ async def just_turned_off( # noqa: PLR0911
self,
entity_id: str,
) -> bool:
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 34554872..607f17ef 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -2131,11 +2131,8 @@ async def test_light_group(
assert events[1].context.id == "testing"
e1 = events[2].data["service_data"][ATTR_ENTITY_ID]
e2 = events[3].data["service_data"][ATTR_ENTITY_ID]
- assert (
- e1 == "light.light_4"
- and e2 == "light.light_5"
- or e1 == "light.light_5"
- and e2 == "light.light_4"
+ assert (e1 == "light.light_4" and e2 == "light.light_5") or (
+ e1 == "light.light_5" and e2 == "light.light_4"
)
assert ":lght:" in events[2].context.id
assert ":lght:" in events[3].context.id
diff --git a/webapp/color_and_brightness.py b/webapp/color_and_brightness.py
index ba804df3..b632ba8e 100644
--- a/webapp/color_and_brightness.py
+++ b/webapp/color_and_brightness.py
@@ -64,12 +64,10 @@ class SunEvents:
) + 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
+ sunrise = max(min_sunrise, 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
+ sunrise = min(max_sunrise, sunrise)
return sunrise
def sunset(self, dt: datetime.date) -> datetime.datetime:
@@ -81,12 +79,10 @@ class SunEvents:
) + 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
+ sunset = max(min_sunset, 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
+ sunset = min(max_sunset, sunset)
return sunset
def _replace_time(
From da4f3c16eb071e250ccd86bc2c69378569f41368 Mon Sep 17 00:00:00 2001
From: Alex Whiteside <1505496+alexw23@users.noreply.github.com>
Date: Mon, 16 Jun 2025 11:54:59 +1000
Subject: [PATCH 136/361] Added a HACS button for quicker install path via
Google/Github (#1211)
---
README.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 71ffa60d..8d01acfc 100644
--- a/README.md
+++ b/README.md
@@ -10,7 +10,9 @@
[Adaptive Lighting](https://github.com/basnijholt/adaptive-lighting) is a custom component for [Home Assistant](https://www.home-assistant.io/) that intelligently adjusts the brightness and color of your lights 💡 based on the sun's position, while still allowing for manual control.
-Download and install directly through [HACS (Home Assistant Community Store)](https://hacs.xyz/)
+Download and install directly through [HACS (Home Assistant Community Store)](https://hacs.xyz/):
+
+[](https://my.home-assistant.io/redirect/hacs_repository/?owner=basnijholt&repository=adaptive-lighting&category=integration)
By automatically adapting the settings of your lights throughout the day, Adaptive Lighting helps maintain your natural circadian rhythm 😴, which can lead to improved sleep, mood, and overall well-being. Experience cooler color temperatures at noon, gradually transitioning to warmer colors at sunset and sunrise.
From ded439e6f784f05ce4a319f2dc596ae39b85603d Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 21:31:51 -0700
Subject: [PATCH 137/361] Fix Docker setup and CI installation (#1212)
---
.../workflows/install_dependencies/action.yml | 3 +
.github/workflows/pytest.yaml | 56 ++++++-------------
.github/workflows/update-readme.yml | 2 +-
Dockerfile | 13 ++---
scripts/develop | 2 +-
scripts/setup-dependencies | 19 ++-----
scripts/setup-devcontainer | 1 +
tests/README.md | 2 +-
8 files changed, 32 insertions(+), 66 deletions(-)
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index c1f2ddd8..8f1732d6 100644
--- a/.github/workflows/install_dependencies/action.yml
+++ b/.github/workflows/install_dependencies/action.yml
@@ -31,8 +31,11 @@ runs:
uses: actions/setup-python@v5.3.0
with:
python-version: ${{ inputs.python-version }}
+ - name: Set up UV
+ uses: astral-sh/setup-uv@v6
- name: Install dependencies
shell: bash
run: |
+ uv venv --python ${{ inputs.python-version }}
./scripts/setup-dependencies
./scripts/setup-symlinks
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index 098a33af..fb25eff0 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -14,46 +14,22 @@ jobs:
fail-fast: false
matrix:
include:
- - python-version: "3.11"
- core-version: "2023.7.3"
- - python-version: "3.11"
- core-version: "2023.8.4"
- - python-version: "3.11"
- core-version: "2023.9.3"
- - python-version: "3.11"
- core-version: "2023.10.5"
- - python-version: "3.11"
- core-version: "2023.11.3"
- - python-version: "3.11"
- core-version: "2023.12.4"
- - python-version: "3.11"
- core-version: "2024.1.6"
- - python-version: "3.11"
- core-version: "2024.2.5"
- - python-version: "3.12"
- core-version: "2024.3.3"
- - python-version: "3.12"
- core-version: "2024.4.4"
- - python-version: "3.12"
- core-version: "2024.5.5"
- - python-version: "3.12"
- core-version: "2024.6.4"
- - python-version: "3.12"
- core-version: "2024.7.4"
- - python-version: "3.12"
- core-version: "2024.8.3"
- - python-version: "3.12"
- core-version: "2024.9.3"
- - python-version: "3.12"
- core-version: "2024.10.4"
- - python-version: "3.12"
- core-version: "2024.11.3"
- - python-version: "3.12"
- core-version: "2024.12.5"
- - python-version: "3.12"
- core-version: "2025.1.0b5"
- - python-version: "3.13"
- core-version: "dev"
+ - core-version: "2024.12.5"
+ python-version: "3.12"
+ - core-version: "2025.1.4"
+ python-version: "3.12"
+ - core-version: "2025.2.5"
+ python-version: "3.13"
+ - core-version: "2025.3.4"
+ python-version: "3.13"
+ - core-version: "2025.4.4"
+ python-version: "3.13"
+ - core-version: "2025.5.3"
+ python-version: "3.13"
+ - core-version: "2025.6.1"
+ python-version: "3.13"
+ - core-version: "dev"
+ python-version: "3.13"
steps:
- name: Check out code from GitHub
uses: actions/checkout@v4
diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml
index 1df50935..a4422130 100644
--- a/.github/workflows/update-readme.yml
+++ b/.github/workflows/update-readme.yml
@@ -20,7 +20,7 @@ jobs:
- name: Install Home Assistant
uses: ./.github/workflows/install_dependencies
with:
- python-version: "3.12"
+ python-version: "3.13"
- name: Install markdown-code-runner and README code dependencies
run: |
diff --git a/Dockerfile b/Dockerfile
index 6e871795..87f791e5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,13 +7,7 @@
# Optionally build the image yourself with:
# docker build -t basnijholt/adaptive-lighting:latest .
-FROM python:3.13-bookworm
-
-RUN apt-get update && \
- DEBIAN_FRONTEND=noninteractive apt-get install -y \
- git \
- build-essential libssl-dev libffi-dev python3-dev \
- && rm -rf /var/lib/apt/lists/*
+FROM ghcr.io/astral-sh/uv:debian
# Clone home-assistant/core
RUN git clone --depth 1 --branch dev https://github.com/home-assistant/core.git /core
@@ -25,9 +19,12 @@ COPY . /app/
RUN ln -s /core /app/core && /app/scripts/setup-symlinks
# Install home-assistant/core dependencies
+RUN mkdir -p /venv
+ENV UV_PROJECT_ENVIRONMENT=/venv UV_PYTHON=3.13 PATH="/venv/bin:$PATH"
+RUN uv venv
RUN /app/scripts/setup-dependencies
-WORKDIR /core
+WORKDIR /app/core
# Make 'custom_components/adaptive_lighting' imports available to tests
ENV PYTHONPATH="${PYTHONPATH}:/app"
diff --git a/scripts/develop b/scripts/develop
index e7ce50cd..5382e0fc 100644
--- a/scripts/develop
+++ b/scripts/develop
@@ -1,6 +1,6 @@
#!/usr/bin/env bash
-set -e
+set -ex
cd "$(dirname "$0")/.."
diff --git a/scripts/setup-dependencies b/scripts/setup-dependencies
index 9409ac0c..b9e2de1f 100755
--- a/scripts/setup-dependencies
+++ b/scripts/setup-dependencies
@@ -2,24 +2,13 @@
set -ex
cd "$(dirname "$0")/.."
-pip install uv
-uv venv
-source .venv/bin/activate
+if grep -q 'mypy-dev==1.14.0a3' core/requirements_test.txt; then
+ # mypy-dev==1.14.0a3 seems to not be available anymore, HA 2024.12 is affected
+ sed -i 's/mypy-dev==1.14.0a3/mypy-dev==1.14.0a7/' core/requirements_test.txt
+fi
uv pip install -r core/requirements.txt
-
-if grep -q 'codecov' core/requirements_test.txt; then
- # Older HA versions still have `codecov` in `requirements_test.txt`
- # however it is removed from PyPI, so we cannot install it
- sed -i '/codecov/d' core/requirements_test.txt
-fi
-
-if grep -q 'mypy-dev==1.10.0a3' core/requirements_test.txt; then
- # mypy-dev==1.10.0a3 seems to not be available anymore, HA 2024.4 and 2024.5 are affected
- sed -i 's/mypy-dev==1.10.0a3/mypy-dev==1.10.0b1/' core/requirements_test.txt
-fi
uv pip install -r core/requirements_test.txt
-
uv pip install -e core/
uv pip install ulid-transform # this is in Adaptive-lighting's manifest.json
uv pip install $(python test_dependencies.py)
diff --git a/scripts/setup-devcontainer b/scripts/setup-devcontainer
index bdb82534..f16c2cbd 100755
--- a/scripts/setup-devcontainer
+++ b/scripts/setup-devcontainer
@@ -12,6 +12,7 @@ pip install \
pip \
ruff
+uv venv --python 3.13
./scripts/setup-dependencies
./scripts/setup-symlinks
uv run pre-commit install-hooks
diff --git a/tests/README.md b/tests/README.md
index dd125d97..a5b60839 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -20,7 +20,7 @@ This command will download the Docker image from [the adaptive-lighting Docker H
If you prefer to build the image yourself, use the following command:
```bash
-docker build -t basnijholt/adaptive-lighting:latest --no-cache .
+docker build -t basnijholt/adaptive-lighting:latest --no-cache --progress=plain .
```
This might be necessary if the image on Docker Hub is outdated or if the [`test_dependencies.py`](../test_dependencies.py) file is updated.
From 640b634074b8f7a9ff7b9c7773a428082943fbdb Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Mon, 16 Jun 2025 06:38:10 +0200
Subject: [PATCH 138/361] Translations update from Hosted Weblate (#1160)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* Translated using Weblate (Galician)
Currently translated at 46.4% (71 of 153 strings)
Translated using Weblate (Galician)
Currently translated at 45.0% (69 of 153 strings)
Added translation using Weblate (Galician)
Co-authored-by: Hosted Weblate
Co-authored-by: Yago Raña Gayoso
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/gl/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Tamil)
Currently translated at 100.0% (153 of 153 strings)
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 (Romanian)
Currently translated at 57.5% (88 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: tinutac
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ro/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Ukrainian)
Currently translated at 79.7% (122 of 153 strings)
Translated using Weblate (Ukrainian)
Currently translated at 61.4% (94 of 153 strings)
Translated using Weblate (Ukrainian)
Currently translated at 59.4% (91 of 153 strings)
Translated using Weblate (Ukrainian)
Currently translated at 58.8% (90 of 153 strings)
Co-authored-by: Ada Melentyeva
Co-authored-by: Artem
Co-authored-by: Hosted Weblate
Co-authored-by: Rostyslav Dudka
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/uk/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Catalan)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Enric Pagès i Gassull
Co-authored-by: Hosted Weblate
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/ca/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Portuguese)
Currently translated at 66.0% (101 of 153 strings)
Co-authored-by: Helder Ferreira
Co-authored-by: Hosted Weblate
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/pt/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Polish)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Piotr Laszczkowski
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/pl/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Indonesian)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Reza Almanda
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/id/
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: renout
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/nl/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Spanish)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: Yago Raña Gayoso
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/es/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (French)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: KosmoMoustache
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/fr/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Swedish)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: bittin1ddc447d824349b2
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/sv/
Translation: Adaptive Lighting/Adaptive Lighting
* Translated using Weblate (Finnish)
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
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 (Chinese (Simplified Han script))
Currently translated at 100.0% (153 of 153 strings)
Co-authored-by: Hosted Weblate
Co-authored-by: gmkeebiy
Translate-URL: https://hosted.weblate.org/projects/adaptive-lighting/adaptive-lighting/zh_Hans/
Translation: Adaptive Lighting/Adaptive Lighting
---------
Co-authored-by: Yago Raña Gayoso
Co-authored-by: தமிழ்நேரம்
Co-authored-by: tinutac
Co-authored-by: Ada Melentyeva
Co-authored-by: Artem
Co-authored-by: Rostyslav Dudka
Co-authored-by: Enric Pagès i Gassull
Co-authored-by: Helder Ferreira
Co-authored-by: Piotr Laszczkowski
Co-authored-by: Reza Almanda
Co-authored-by: renout
Co-authored-by: KosmoMoustache
Co-authored-by: bittin1ddc447d824349b2
Co-authored-by: Ricky Tigg
Co-authored-by: gmkeebiy
---
.../adaptive_lighting/translations/ca.json | 47 ++++++--
.../adaptive_lighting/translations/es.json | 2 +-
.../adaptive_lighting/translations/fi.json | 5 +-
.../adaptive_lighting/translations/fr.json | 114 +++++++++---------
.../adaptive_lighting/translations/gl.json | 32 +++++
.../adaptive_lighting/translations/id.json | 2 +-
.../adaptive_lighting/translations/nl.json | 2 +-
.../adaptive_lighting/translations/pl.json | 2 +-
.../adaptive_lighting/translations/pt.json | 12 +-
.../adaptive_lighting/translations/ro.json | 6 +-
.../adaptive_lighting/translations/sv.json | 2 +-
.../adaptive_lighting/translations/ta.json | 2 +-
.../adaptive_lighting/translations/uk.json | 95 ++++++++++++++-
.../translations/zh-Hans.json | 2 +-
14 files changed, 246 insertions(+), 79 deletions(-)
create mode 100644 custom_components/adaptive_lighting/translations/gl.json
diff --git a/custom_components/adaptive_lighting/translations/ca.json b/custom_components/adaptive_lighting/translations/ca.json
index ff8814b0..3b3a9b36 100644
--- a/custom_components/adaptive_lighting/translations/ca.json
+++ b/custom_components/adaptive_lighting/translations/ca.json
@@ -4,14 +4,14 @@
"step": {
"init": {
"data_description": {
- "initial_transition": "Durada de la primera transició quan els llums s'encenen de `off` a `on` en segons. ⏲️",
+ "initial_transition": "Durada de la primera transició quan els llums canvien de `off` a `on` en segons. ⏲️",
"sunset_offset": "Ajusta l'hora de la posta del sol amb una compensació positiva o negativa en segons. ⏰",
"send_split_delay": "Retard (ms) entre `separate_turn_on_commands` per als llums que no admeten la configuració simultània de brillantor i color. ⏲️",
"sunrise_offset": "Ajusta l'hora de sortida del sol amb una compensació positiva o negativa en segons. ⏰",
"autoreset_control_seconds": "Restableix automàticament el control manual al cap d'uns segons. Posar a 0 per desactivar. ⏲️",
"brightness_mode": "Mode de brillantor a utilitzar. Els valors possibles són `default`, \"linear\" i \"tanh\" (utilitza `brightness_mode_time_dark` i `brightness_mode_time_light`). 📈",
- "sleep_color_temp": "Temperatura de color en mode nit (s'utilitza quan `sleep_rgb_or_color_temp` és `color_temp`) en Kelvin. 😴",
- "sleep_brightness": "Percentatge de brillantor de les llums en mode nit. 😴",
+ "sleep_color_temp": "Temperatura de color en mode nocturn (s'utilitza quan `sleep_rgb_or_color_temp` és `color_temp`) en Kelvin. 😴",
+ "sleep_brightness": "Percentatge de brillantor dels llums en mode nocturn. 😴",
"interval": "Freqüència d'adaptació de les llums, en segons. 🔄",
"sleep_transition": "Durada de la transició en commutar el \"mode nocturn\", en segons. 🕑",
"sleep_rgb_color": "Color RGB en mode nocturn (s'utilitza quan `sleep_rgb_or_color_temp` és \"rgb_color\"). 🌈",
@@ -21,7 +21,11 @@
"sunset_time": "Indica una hora fixa (HH:MM:SS) per a la posta de sol. 🌇",
"brightness_mode_time_dark": "(S'ignora si `brightness_mode='default'`) La durada en segons de la variació de la brillantor abans/despres de la sortida/posta de sol. 📈📉.",
"brightness_mode_time_light": "(S'ignora si `brightness_mode='default'`) La durada en segons de la variació de la brillantor abans/despres de la sortida/posta de sol. 📈📉.",
- "adapt_delay": "Temps d'espera (en segons) entre l'encesa de la llum i els canvis per part d'Adaptive Lighting. Pot ajudar a evitar els parpalleigs. ⏲️"
+ "adapt_delay": "Temps d'espera (en segons) entre l'encesa de la llum i els canvis per part d'Adaptive Lighting. Pot ajudar a evitar els parpalleigs. ⏲️",
+ "min_sunrise_time": "Defineix la sortida de sol virtual més primerenca (HH:MM:SS), tot permetent sortides de sol posteriors. 🌅",
+ "max_sunrise_time": "Defineix la sortida de sol virtual més tardana (HH:MM:SS), tot permetent sortides de sol abans. 🌅",
+ "max_sunset_time": "Defineix la sortida virtual de sol virtual més tardana (HH:MM:SS), tot permetent sortides de sol abans. 🌇",
+ "min_sunset_time": "Defineix la posta de sol virtual més primerenca (HH:MM:SS), tot permetent postes de sol més tard. 🌇"
},
"title": "Opcions Il·luminació Adaptativa",
"data": {
@@ -39,7 +43,8 @@
"include_config_in_attributes": "include_config_in_attributes: Mostra totes les opcions com atributs a l'interruptor de Home Assistant quan s'estableix com a `true`. 📝",
"multi_light_intercept": "multi_light_intercept: Intercepta i adapta les crides `light.turn_on` dirigides a múltiples llums. ➗⚠️ Pot provocar la divisió d'una crida única `light.turn_on` en múltiples crides, com ara, quan les llums són en interruptors diferents. Necessita que `intercept` estigui habilitat.",
"transition_until_sleep": "transition_until_sleep: Si s'activa, Adaptive Lighting considerarà els ajustaments del mode nocturn com a mínims, fent una transició cap aquests valors després de la posta de sol. 🌙",
- "intercept": "intercept: Intercepta i adapta les crides `light.turn_on` per permetre canvis instantanis de color i brillantor. 🏎️ Inhabilita-ho per a llums que no admeten `light.turn_on` amb color i brillantor."
+ "intercept": "intercept: Intercepta i adapta les crides `light.turn_on` per permetre canvis instantanis de color i brillantor. 🏎️ Inhabilita-ho per a llums que no admeten `light.turn_on` amb color i brillantor.",
+ "skip_redundant_commands": "skip_redundant_commands: Evita l'enviament de d'ordres d'adaptació als objectius on el seu estat ja és el conegut del llum. Minimitza el trànsit de la xarxa i millora la resposta de l'adaptació en alguns casos. 📉 Inhabilita-ho si l'estat físic del llum queda desincronitzat amb l'estat registrat a Home Assistant."
},
"description": "Configura un component d'Adaptive Lighting. Els noms de les opcions s'alineen amb la configuració de YAML. Si has definit aquesta entrada a YAML, aquí no apareixerà cap opció. Per veure gràfics interactius que demostren efectes de paràmetres, visita [aquesta aplicació web] (https://basnijholt.github.io/adaptive-lighting). Per a més detalls, pots veure la [documentació oficial] (https://github.com/basnijholt/adaptive-lighting#readme)."
}
@@ -56,7 +61,7 @@
"description": "Ajustar les llums només quan s'encenguin (`true`) o ajustar contínuament(`false`). 🔄"
},
"sleep_color_temp": {
- "description": "Temperatura de color en mode nit (s'utilitza quan `sleep_rgb_or_color_temp` és `color_temp`) en Kelvin. 😴"
+ "description": "Temperatura de color en mode nocturn (s'utilitza quan `sleep_rgb_or_color_temp` és `color_temp`) en Kelvin. 😴"
},
"sunrise_offset": {
"description": "Ajusta l'hora de sortida del sol amb una compensació positiva o negativa en segons. ⏰"
@@ -68,7 +73,7 @@
"description": "Restableix automàticament el control manual al cap d'uns segons. Posar a 0 per desactivar. ⏲️"
},
"sleep_brightness": {
- "description": "Percentatge de brillantor de les llums en mode nit. 😴"
+ "description": "Percentatge de brillantor dels llums en mode nocturn. 😴"
},
"max_color_temp": {
"description": "Temperatura de color més freda en Kelvin. ❄️"
@@ -77,7 +82,7 @@
"description": "Retard (ms) entre `separate_turn_on_commands` per als llums que no admeten la configuració simultània de brillantor i color. ⏲️"
},
"detect_non_ha_changes": {
- "description": "Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita que `take_over_control` estigui habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguessin inesperadament. Desactiva aquesta funció si trobes aquests problemes."
+ "description": "Detecta i atura les adaptacions per als canvis d'estat diferents a `light.turn_on`. Necessita que `take_over_control` estigui habilitat. 🕵️ Precaució: ⚠️ Alguns llums poden indicar falsament un estat \"encès\", cosa que podria provocar que els llums s'encenguin inesperadament. Desactiva aquesta funció si trobes aquests problemes."
},
"take_over_control": {
"description": "Desactiva Adaptive Lighting si una altra font crida `light.turn_on` mentre els llums estan encesos i adaptats. Tingues en compte que això crida `homeassistant.update_entity` cada `interval`! 🔒"
@@ -89,7 +94,7 @@
"description": "Si s'encenen les llums que estan apagades en aquest moment. 🔆"
},
"initial_transition": {
- "description": "Durada de la primera transició quan les llums canvien `off` cap a `on` en segons. ⏲️"
+ "description": "Durada de la primera transició quan els llums canvien `off` a `on` en segons. ⏲️"
},
"sleep_transition": {
"description": "Durada de la transició en commutar el \"mode nocturn\", en segons. 🕑"
@@ -129,6 +134,15 @@
},
"use_defaults": {
"description": "Defineix els valors per defecte que no s'especifiquin a la crida del servei. Opcions: \"current\" (per defecte, manté els valors actuals), \"factory\" (restaura els valors documentats per defecte), o \"configuration\" (retorna als valors per defecte de l'interruptor). ⚙️"
+ },
+ "include_config_in_attributes": {
+ "description": "Mostra totes les opcions com a atributs de l'interruptor a Home Assistant quan es defineixi com a `true`. 📝"
+ },
+ "max_sunrise_time": {
+ "description": "Defineix la sortida de sol virtual més tardana (HH:MM:SS), tot permetent sortides de sol abans. 🌅"
+ },
+ "min_sunset_time": {
+ "description": "Defineix la posta de sol virtual més primerenca (HH:MM:SS), tot permetent postes de sol més tard. 🌇"
}
},
"description": "Canvia les opcions de configuració que vulguis al commutador. Totes les opcions d'aquí són les mateixes que en el flux de configuració."
@@ -146,6 +160,15 @@
},
"turn_on_lights": {
"description": "Si s'encenen les llums que estan apagades en aquest moment. 🔆"
+ },
+ "entity_id": {
+ "description": "L'`entity_id` de l'interruptor amb els paràmetres per aplicar. 📝"
+ },
+ "adapt_brightness": {
+ "description": "Si cal adaptar la brillantor del llum. 🌞"
+ },
+ "adapt_color": {
+ "description": "Si cal adaptar el color a les llums que ho admetin. 🌈"
}
},
"description": "Aplica la configuració actual d'Adaptive Lighting a les llums."
@@ -155,6 +178,12 @@
"fields": {
"lights": {
"description": "entity_id(s) de les llums; si no s'especifica es seleccionaran totes les llums de l'interruptor. 💡"
+ },
+ "entity_id": {
+ "description": "L'`entity_id` de l'interruptor al qual (des)marcar el llum com a `manually controlled`. 📝"
+ },
+ "manual_control": {
+ "description": "Si cal afegir (\"true\") o treure (\"false\") el llum de la llista de \"manual_control\". 🔒"
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/es.json b/custom_components/adaptive_lighting/translations/es.json
index c90b842e..66d6a7a8 100644
--- a/custom_components/adaptive_lighting/translations/es.json
+++ b/custom_components/adaptive_lighting/translations/es.json
@@ -29,7 +29,7 @@
"adapt_delay": "Tiempo de espera (segundos) entre el encendido de la luz y Adaptive Lighting aplicando cambios. Puede ayudar a evitar parpadeos. ⏲️"
},
"data": {
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Al encender las luces. Si el valor es `true`, AL adapta sólo si se llama `light.turn_on` sin especificar el color o brillo. ❌🌈 Esto, por ejemplo, previene la adaptación al activar una escena. Si el valor es `false`, AL adapta independientemente de la presencia de color o brillo en `service_data` inicial. Necesita `take_over_control` habilitado. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Al encender las luces. Si el valor es `true`, AL adapta sólo si se llama `light.turn_on` sin especificar el color o brillo. ❌🌈 Esto, por ejemplo, previene la adaptación al activar una escena. Si el valor es `false`, AL adapta independientemente de la presencia de color o brillo en `service_data` inicial. Necesita `take_over_control` habilitado. 🕵️",
"detect_non_ha_changes": "detect_non_ha_changes: Detecta e interrumpe adaptaciones para cambios de estado no `light.turn_on`. Necesita `take_over_control` habilitado. 🕵️ Precaución: ⚠️ Algunas luces pueden indicar de forma errónea un estado 'on', que puede resultar en luces que se enciendan de forma no esperada. Deshabilita esta función si encuentras dichos problemas.",
"intercept": "intercept: Intercepta y adapta llamadas a `light.turn_on` para habilitar adaptaciones instantáneas de color y brillo. 🏎️ Deshabilitar para luces que no soporten `light.turn_on` con color y brillo.",
"min_color_temp": "min_color_temp: Temperatura de color más cálida en grados Kelvin. 🔥",
diff --git a/custom_components/adaptive_lighting/translations/fi.json b/custom_components/adaptive_lighting/translations/fi.json
index 15b5b18f..6fd5f528 100644
--- a/custom_components/adaptive_lighting/translations/fi.json
+++ b/custom_components/adaptive_lighting/translations/fi.json
@@ -158,11 +158,12 @@
"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. 🌙"
+ "sleep_rgb_or_color_temp": "Käytä joko `\"rgb_color\"` tai `\"color_temp\"` lepotilassa. 🌙",
+ "max_sunset_time": "Aseta viimeisin virtuaalinen auringonlaskuaika (TT:MM:SS), jotta aikaisemmat auringonlaskut ovat mahdollisia. 🌇"
},
"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. 🕵️ ",
+ "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.",
diff --git a/custom_components/adaptive_lighting/translations/fr.json b/custom_components/adaptive_lighting/translations/fr.json
index a3bc6bc5..c749ba6b 100644
--- a/custom_components/adaptive_lighting/translations/fr.json
+++ b/custom_components/adaptive_lighting/translations/fr.json
@@ -4,7 +4,7 @@
"step": {
"user": {
"title": "Choisissez un nom pour cette instance d'éclairage adaptatif",
- "description": "Choisissez un nom pour cette instance. Vous pouvez configurer plusieurs instances d'éclairage adaptatif, chacune pouvant contrôler plusieurs lampes !",
+ "description": "Chaque instance peut contenir plusieurs lumières",
"data": {
"name": "Nom"
}
@@ -18,71 +18,71 @@
"step": {
"init": {
"title": "Options d'éclairage adaptatif",
- "description": "Tous les paramètres de l'instance d'éclairage adaptatif. Les noms des options correspondent aux paramètres YAML. Aucune option n'est affichée si l'entrée adaptive_lighting est définie dans votre configuration YAML.",
+ "description": "Configurer un composant d'éclairage adaptatif. Les noms correspondent aux paramètres YAML. Si vous avez défini cette entrée en YAML, aucune option n'apparaît ici. Pour les graphiques interactifs qui montrent les effets des paramètres, visiter [cette application web](https://basnijholt.github.io/adaptive-lighting). Pour plus de détail, voir la [documentation](https://github.com/basnijholt/adaptive-lighting#readme)",
"data": {
- "lights": "lights : Les lampes à contrôler",
+ "lights": "lights : Liste d'\"entity_ids\" de lumières à controller (peu être vide). 🌟",
"initial_transition": "initial_transition : Transition (en secondes) lorsque l'état d'une lampe passe d'« éteinte » à « allumée ».",
"sleep_transition": "sleep_transition : Transition (en secondes) lorsque « sleep_state » est commuté.",
"interval": "interval : Temps (en secondes) entre deux mises à jour du commutateur.",
- "max_brightness": "max_brightness : Luminosité maximale des lampes (en pourcentage) au cours d'un cycle.",
- "max_color_temp": "max_color_temp : Couleur la plus froide (en kelvins) du cycle de température de couleur.",
- "min_brightness": "min_brightness : Luminosité minimale des lampes (en pourcentage) au cours d'un cycle.",
- "min_color_temp": "min_color_temp : Couleur la plus chaude (en kelvins) du cycle de température de couleur.",
- "only_once": "only_once : Adapter les lampes uniquement au moment où elles sont allumées.",
- "prefer_rgb_color": "prefer_rgb_color : Utiliser « rgb_color » plutôt que « color_temp » lorsque cela est possible.",
- "separate_turn_on_commands": "separate_turn_on_commands : Séparer les commandes pour chaque attribut (couleur, luminosité, etc.) de « light.turn_on » (nécessaire pour certaines lampes).",
+ "max_brightness": "max_brightness : Luminosité maximum (en pourcentage). 💡",
+ "max_color_temp": "max_color_temp : Couleur la plus froide (en Kelvins). ❄️",
+ "min_brightness": "min_brightness : Luminosité minimale en pourcentage. 💡",
+ "min_color_temp": "min_color_temp : Couleur de température la plus chaude en kelvins. 🔥",
+ "only_once": "only_once : Adapter les lampes uniquement au moment où elles sont allumées. 🔄",
+ "prefer_rgb_color": "prefer_rgb_color : Indique s'il est préférable d'utiliser le réglage de couleur RBG plutôt que la température de couleur lorsque cela est possible. 🌈",
+ "separate_turn_on_commands": "separate_turn_on_commands : Utiliser des appels \"light.turn_on\" séparés pour la couleur et la luminosité, nécessaires pour certains types de lumière. 🔀",
"sleep_brightness": "sleep_brightness : Luminosité (en pourcentage) du mode nuit.",
"sleep_color_temp": "sleep_color_temp : Température de couleur (en kelvins) du mode nuit.",
"sunrise_offset": "sunrise_offset : Décalage (en secondes [- : passé, + : futur]) du cycle par rapport au lever du soleil.",
"sunrise_time": "sunrise_time : Heure (HH:MM:SS) du lever du soleil. Si « None », utilise l'heure correspondant à votre emplacement.",
"sunset_offset": "sunset_offset : Décalage (en secondes [- : passé, + : futur]) du cycle par rapport au coucher du soleil.",
"sunset_time": "sunset_time : Heure (HH:MM:SS) du coucher du soleil. Si « None », utilise l'heure correspondant à votre emplacement.",
- "take_over_control": "take_over_control : Si quelque chose d'autre que l'éclairage adaptatif appelle « light.turn_on » alors qu'une lampe est déjà allumée, cesser d'adapter cette lampe jusqu'à ce qu'elle (ou le commutateur) soit éteinte puis rallumée.",
- "detect_non_ha_changes": "detect_non_ha_changes : Détecter tout changement de plus de 10 % appliqué aux lampes (même en dehors de HA). Nécessite que « take_over_control » soit activé. (Appelle « homeassistant.update_entity » tous les « interval » !)",
+ "take_over_control": "take_over_control : Désactive l'éclairage adaptatif si une autre source appelle \"light.turn_on\" pendant que la lumière est allumée ou adoptée. Notez que cela appelle \"homeassistant.update_entity\" chaque \"interval\"! 🔒",
+ "detect_non_ha_changes": "detect_non_ha_changes : Détecter et arrête les changement d'états autre que \"light.turn_on\". Nécessite que \"take_over_control\" soit activé. 🕵️ Attention : ⚠️ Certaines lumière peuvent faussement indiqué un état \"on\", ce qui pourrait occasionner des lumières s'allumant de façon inattendu. Désactivez cette fonctionnalité si vous rencontrez de tels problème.",
"transition": "transition : Durée de la transition (en secondes) des changements appliqués aux lampes.",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Quand on allume les lumières au départ. Si le paramètre est < < vrai > > , AL s ' adapte uniquement si l ' on invoque < < light.turn_on > > sans préciser la couleur ou la luminosité. ❌ Ceci, par exemple, empêche l'adaptation lors de l'activation d'une scène. Si `false`, AL s'adapte indépendamment de la présence de couleur ou de luminosité dans le `service_data' initial. Besoins `take_over_control` activé. 🕵∫ ",
- "multi_light_intercept": "multi_light_intercept : Intercepte et adapte les appels à `light.turn_on` qui ciblent plusieurs lumières. ➗⚠️ Cela peut entraîner la division d'un seul appel `light.turn_on` en plusieurs appels, par exemple, lorsque les lumières sont dans différents interrupteurs. Nécessite que `intercept` soit activé.",
- "intercept": "intercept : Intercepter et adapter les appels à `light.turn_on` pour permettre une adaptation instantanée de la couleur et de la luminosité. 🏎️ Désactivez cette option pour les lumières qui ne prennent pas en charge `light.turn_on` avec couleur et luminosité.",
- "include_config_in_attributes": "include_config_in_attributes : Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur `true`. 📝",
- "skip_redundant_commands": "skip_redundant_commands : Évite d'envoyer des commandes d'adaptation lorsque l'état cible est déjà égal à l'état connu de la lumière. Minimise le trafic réseau et améliore la réactivité de l'adaptation dans certaines situations. 📉 Désactivez si les états physiques des lumières ne correspondent pas à l'état enregistré de Home Assistant.",
- "transition_until_sleep": "transition_until_sleep : Lorsqu'activée, l'Éclairage Adaptatif considérera les paramètres de sommeil comme le minimum, effectuant la transition vers ces valeurs après le coucher du soleil. 🌙"
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Lors de l'allumage initiale des lumières. Si le paramètre est \"vrai\", AL s'adapte uniquement si l'on invoque \"light.turn_on\" sans préciser la couleur ou la luminosité. ❌🌈 Ceci, par exemple, empêche l'adaptation lors de l'activation d'une scène. Si \"false\", AL adapte indépendamment de la présence de couleur ou de luminosité dans le \"service_data\" initial. \"take_over_control\" doit être activé. 🕵",
+ "multi_light_intercept": "multi_light_intercept : Intercepte et adapte les appels à \"light.turn_on\" qui ciblent plusieurs lumières. ➗⚠️ Cela peut entraîner la division d'un seul appel \"light.turn_on\" en plusieurs appels, par exemple, lorsque les lumières sont dans différents interrupteurs. Nécessite que \"intercept\" soit activé.",
+ "intercept": "intercept : Intercepter et adapter les appels à \"light.turn_on\" pour permettre une adaptation instantanée de la couleur et de la luminosité. 🏎️ Désactivez cette option pour les lumières qui ne prennent pas en charge \"light.turn_on\" avec couleur et luminosité.",
+ "include_config_in_attributes": "include_config_in_attributes : Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur \"true\". 📝",
+ "skip_redundant_commands": "skip_redundant_commands : Évite d'envoyer des commandes d'adaptation lorsque l'état cible est déjà égal à l'état connu de la lumière. Minimise le trafic réseau et améliore la réactivité de l'adaptation dans certaines situations. 📉 Désactivez si les états physiques des lumières ne correspondent pas à l'état enregistré de Home Assistant.",
+ "transition_until_sleep": "transition_until_sleep : Lorsque cela est activée, l'éclairage Adaptatif considérera les paramètres du mode nuit comme le minimum, effectuant la transition vers ces valeurs après le coucher du soleil. 🌙"
},
"data_description": {
"interval": "Fréquence d'adaptation des lumières, en secondes. 🔄",
- "sleep_brightness": "Pourcentage de luminosité des lumières en mode sommeil. 😴",
- "autoreset_control_seconds": "Réinitialiser automatiquement la commande manuelle après un certain nombre de secondes. Définir à 0 pour désactiver. ⏲∫",
- "sunset_offset": "Réglez le temps de coucher avec un décalage positif ou négatif en quelques secondes. ⏰",
- "brightness_mode": "Mode de luminosité à utiliser. Les valeurs possibles sont < < par défaut > > , < < linéaire > > et < < parois > > , < < par défaut > > , et < < par coup > > , < < par défaut > > et par > par > . 📈",
- "send_split_delay": "Délai (ms) entre \"separate_turn_on_commands\" pour les lumières qui ne supportent pas la commande de luminosité et le réglage de couleur en même temps. ⏲",
- "sleep_color_temp": "Température de couleur en mode sommeil (utilisée lorsque `sleep_rgb_or_color_temp` est `color_temp`) en Kelvin. 😴",
+ "sleep_brightness": "Pourcentage de luminosité des lumières en mode nuit. 😴",
+ "autoreset_control_seconds": "Réinitialiser automatiquement la commande manuelle après un certain nombre de secondes. Définir à 0 pour désactiver. ⏲️",
+ "sunset_offset": "Réglez le l'heure de coucher du soleil avec un décalage positif ou négatif en quelques secondes. ⏰",
+ "brightness_mode": "Mode de luminosité à utiliser. Les valeurs possibles sont \"défaut\" , \"linear\" (linéaire) et \"tanh\" (tangente) utilise \"brightness_mode_time_dark\" et \"brightness_mode_time_light\". 📈",
+ "send_split_delay": "Délai (ms) entre \"separate_turn_on_commands\" pour les lumières qui ne supportent pas la commande de luminosité et le réglage de couleur en même temps. ⏲️",
+ "sleep_color_temp": "Température de couleur en mode nuit en Kelvin (utilisée lorsque \"sleep_rgb_or_color_temp\" est égaler à \"color_temp\") . 😴",
"sunrise_offset": "Ajuster l'heure du lever de soleil avec un décalage positif ou négatif en secondes. ⏰",
"transition": "Durée de la transition des changements lumineux, en secondes. 🕑",
- "initial_transition": "Durée de la première transition des lampes passant de `off` à `on` en secondes. ⏲️",
- "sleep_transition": "Durée de la transition quand le \"mode sommeil\" est déclenché en secondes. 😴",
- "min_sunset_time": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil ultérieurs. 🌇",
- "sleep_rgb_color": "Couleur RGB en mode sommeil (utilisée lorsque `sleep_rgb_or_color_temp` est `rgb_color`). 🌈",
- "brightness_mode_time_light": "(Ignoré si `brightness_mode='default'`) La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
- "sunset_time": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌅",
+ "initial_transition": "Durée de la première transition des lampes passent de \"off\" à \"on\" (en secondes). ⏲️",
+ "sleep_transition": "Durée de la transition quand le \"mode nuit\" est déclenché. (en secondes) 😴",
+ "min_sunset_time": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil tardifs. 🌇",
+ "sleep_rgb_color": "Couleur RGB en mode nuit (utilisée lorsque \"sleep_rgb_or_color_temp\" est \"rgb_color\"). 🌈",
+ "brightness_mode_time_light": "(Ignoré si \"brightness_mode='default'\") La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
+ "sunset_time": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌇",
"sunrise_time": "Définir une heure fixe (HH:MM:SS) pour le lever du soleil. 🌅",
- "brightness_mode_time_dark": "(Ignoré si brightness_mode='default') La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
- "sleep_rgb_or_color_temp": "Utilisez soit `\"rgb_color\"` soit `\"color_temp\"` en mode sommeil. 🌙",
- "min_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus précoce (HH:MM:SS), permettant des levers de soleil ultérieurs. 🌅",
+ "brightness_mode_time_dark": "(Ignoré si \"brightness_mode='default'\") La durée en secondes pour augmenter/diminuer progressivement la luminosité après/avant le lever/coucher du soleil. 📈📉.",
+ "sleep_rgb_or_color_temp": "Utilisez soit \"rgb_color\" soit \"color_temp\" en mode nuit. 🌙",
+ "min_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus précoce (HH:MM:SS), permettant des levers de soleil tardifs. 🌅",
"adapt_delay": "Temps d'attente (en secondes) entre l'allumage de la lumière et l'application des changements par l'Éclairage Adaptatif. Peut aider à éviter les scintillements. ⏲️",
"max_sunset_time": "Définir l'heure virtuelle de coucher du soleil la plus tardive (HH:MM:SS), permettant des couchers de soleil plus précoces. 🌇",
- "max_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus précoces. 🌅"
+ "max_sunrise_time": "Définir l'heure virtuelle de lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus tôt. 🌅"
}
}
},
"error": {
"option_error": "Option invalide",
- "entity_missing": "Une lumière sélectionnée n’a pas été trouvée"
+ "entity_missing": "Une ou plusieurs entités lumières sélectionnées sont manquantes de Home Assistant"
}
},
"services": {
"change_switch_settings": {
"fields": {
"sleep_brightness": {
- "description": "Pourcentage de luminosité des lumières en mode sommeil. 😴"
+ "description": "Pourcentage de luminosité des lumières en mode nuit. 😴"
},
"only_once": {
"description": "Adapter les lumières seulement quand elles sont allumées (\"vrai\") ou quel que soit leur état (\"faux\")."
@@ -91,34 +91,34 @@
"description": "Ajustez l'heure de lever de soleil avec un décalage positif ou négatif en secondes. ⏰"
},
"max_color_temp": {
- "description": "Température de couleur la plus froide en Kelvin. assemblage"
+ "description": "Température de couleur la plus froide en Kelvin. ❄️"
},
"send_split_delay": {
- "description": "Délai (ms) entre \"separate_turn_on_commands\" pour les lumières qui ne supportent pas la commande de luminosité et le réglage de couleur en même temps. ⏲"
+ "description": "Délai (ms) entre \"separate_turn_on_commands\" pour les lumières qui ne supportent pas la commande de luminosité et le réglage de couleur en même temps. ⏲️"
},
"detect_non_ha_changes": {
- "description": "Détecte et arrête les adaptations pour un changement d'état autre que \"light.turn_on\". Nécessite \"take_over_control\" activé. 🕵️ Attention: ⚠️Certaines lumières pourraient faussement indiquer un état \"on\", ce qui pourrait donner lieu à des allumages inattendus. Désactivez cette fonctionnalité si vous rencontrez ce problème."
+ "description": "detect_non_ha_changes : Détecter et arrête les changement d'états autre que \"light.turn_on\". Nécessite que \"take_over_control\" soit activé. 🕵️ Attention : ⚠️ Certaines lumière peuvent faussement indiqué un état \"on\", ce qui pourrait occasionner des lumières s'allumant de façon inattendu. Désactivez cette fonctionnalité si vous rencontrez de tels problème."
},
"autoreset_control_seconds": {
- "description": "Réinitialiser automatiquement la commande manuelle après un certain nombre de secondes. Définir à 0 pour désactiver. ⏲∫"
+ "description": "Réinitialiser automatiquement la commande manuelle après un certain nombre de secondes. Définir à 0 pour désactiver. ⏲️"
},
"sunset_offset": {
"description": "Ajustez l'heure de coucher de soleil avec un décalage positif ou négatif en secondes. ⏰"
},
"sleep_color_temp": {
- "description": "Température de couleur en mode sommeil (utilisé lorsque \"sleep_rgb_or_color_temp\" est défini sur \"color_temp\") en Kelvin. 😴"
+ "description": "Température de couleur en mode nuit en Kelvin (utilisé lorsque \"sleep_rgb_or_color_temp\" est défini sur \"color_temp\") . 😴"
},
"entity_id": {
"description": "ID de l'Entité de l'interrupteur. 📝"
},
"initial_transition": {
- "description": "Durée de la première transition des lampes passant de `off` à `on` en secondes. ⏲️"
+ "description": "Durée de la première transition des lampes passant de \"off\" à \"on\" (en secondes). ⏲️"
},
"transition": {
"description": "Durée de la transition des changements lumineux, en secondes. 🕑"
},
"sleep_transition": {
- "description": "Durée de la transition quand le \"mode sommeil\" est déclenché en secondes. 😴"
+ "description": "Durée de la transition quand le \"mode nuit\" est déclenché en secondes. 😴"
},
"min_brightness": {
"description": "Pourcentage de luminosité minimum. 💡"
@@ -130,52 +130,52 @@
"description": "Pourcentage de luminosité maximale. 💡"
},
"take_over_control": {
- "description": "Désactiver l'Éclairage Adaptatif si une autre source appelle `light.turn_on` lorsque les lumières sont allumées et en cours d'adaptation. Notez que cela appelle `homeassistant.update_entity` à chaque `intervalles` ! 🔒"
+ "description": "Désactiver l'Éclairage Adaptatif si une autre source appelle \"light.turn_on\" lorsque les lumières sont allumées et en cours d'adaptation. Notez que cela appelle \"homeassistant.update_entity\" à chaque \"intervalles\" ! 🔒"
},
"use_defaults": {
- "description": "Définit les valeurs par défaut non spécifiées dans cet appel de service. Options : \"current\" (par défaut, conserve les valeurs actuelles), \"factory\" (réinitialise aux valeurs par défaut documentées) ou \"configuration\" (revient aux valeurs par défaut de la configuration de l'interrupteur). ⚙️"
+ "description": "Définit les valeurs par défaut non spécifiées dans cet appel de service. Options : \"current\" (par défaut, conserve les valeurs actuelles), \"factory\" (réinitialise aux valeurs par défaut documentées) ou \"configuration\" (revient aux valeurs par défaut de la configuration de l'interrupteur). ⚙️"
},
"sunset_time": {
- "description": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌅"
+ "description": "Définir une heure fixe (HH:MM:SS) pour le coucher du soleil. 🌇"
},
"min_sunset_time": {
- "description": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil ultérieurs. 🌇"
+ "description": "Définir l'heure virtuelle de coucher du soleil la plus précoce (HH:MM:SS), permettant des couchers de soleil tardifs. 🌇"
},
"max_sunrise_time": {
- "description": "Définir l'heure virtuelle du lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus précoces. 🌅"
+ "description": "Définir l'heure virtuelle du lever du soleil la plus tardive (HH:MM:SS), permettant des levers de soleil plus tôt. 🌅"
},
"min_color_temp": {
"description": "Température de couleur la plus chaude en Kelvin. 🔥"
},
"sleep_rgb_or_color_temp": {
- "description": "Utilisez soit `\"rgb_color\"` soit `\"color_temp\"` en mode sommeil. 🌙"
+ "description": "Utilisez soit \"rgb_color\" soit \"color_temp\" en mode nuit. 🌙"
},
"turn_on_lights": {
"description": "Indique s'il faut allumer les lumières qui sont actuellement éteintes. 🔆"
},
"include_config_in_attributes": {
- "description": "Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur `true`. 📝"
+ "description": "Afficher toutes les options en tant qu'attributs sur l'interrupteur dans Home Assistant lorsqu'il est défini sur \"true\". 📝"
},
"sleep_rgb_color": {
- "description": "Couleur RGB en mode sommeil (utilisée lorsque `sleep_rgb_or_color_temp` est `rgb_color`). 🌈"
+ "description": "Couleur RGB en mode nuit (utilisée lorsque `sleep_rgb_or_color_temp` est `rgb_color`). 🌈"
},
"adapt_delay": {
"description": "Temps d'attente (en secondes) entre l'allumage de la lumière et l'application des changements par l'Éclairage Adaptatif. Peut aider à éviter les scintillements. ⏲️"
},
"separate_turn_on_commands": {
- "description": "Utilisez des appels distincts à `light.turn_on` pour la couleur et la luminosité, nécessaire pour certains types de lumières. 🔀"
+ "description": "Utilisez des appels distincts à \"light.turn_on\" pour la couleur et la luminosité, nécessaire pour certains types de lumières. 🔀"
},
"prefer_rgb_color": {
"description": "Indique s'il faut privilégier l'ajustement de la couleur RGB plutôt que la température de couleur de la lumière lorsque c'est possible. 🌈"
}
},
- "description": "Changez les réglages que vous souhaitez dans le commutateur. Toutes les options ici sont les mêmes que dans le flux de configuration."
+ "description": "Changez les réglages que vous souhaitez dans le commutateur. Toutes les options ici sont les mêmes que dans le flow de configuration."
},
"apply": {
"description": "Applique les réglages d'éclairage adaptatif actuels aux lumières.",
"fields": {
"lights": {
- "description": "Une lumière (ou une liste de lumières) pour appliquer les réglages. personnalisation"
+ "description": "Une lumière (ou une liste de lumières) à laquelle appliquer les réglages."
},
"transition": {
"description": "Durée de la transition des changements lumineux, en secondes. 🕑"
@@ -200,16 +200,16 @@
"set_manual_control": {
"fields": {
"lights": {
- "description": "entity_id(s) des lumières, si non spécifié, toutes les lumières dans le commutateur sont sélectionnées. 💡"
+ "description": "entity_id(s) des lumières, si non spécifié, toutes les lumières de l'interrupteur sont sélectionnées. 💡"
},
"manual_control": {
"description": "Indique s'il faut ajouter (\"true\") ou retirer (\"false\") la lumière de la liste \"manual_control\". 🔒"
},
"entity_id": {
- "description": "L'`entity_id` de l'interrupteur dans lequel (dé)marquer la lumière comme étant `manuellement contrôlée`. 📝"
+ "description": "L'\"entity_id\" de l'interrupteur dans lequel (dé)marquer la lumière comme étant \"manuellement contrôlée\". 📝"
}
},
- "description": "Indiquer si une lumière est 'manuellement contrôlée'."
+ "description": "Indiquer si une lumière est \"contrôlée manuellement\"."
}
}
}
diff --git a/custom_components/adaptive_lighting/translations/gl.json b/custom_components/adaptive_lighting/translations/gl.json
new file mode 100644
index 00000000..2752f95c
--- /dev/null
+++ b/custom_components/adaptive_lighting/translations/gl.json
@@ -0,0 +1,32 @@
+{
+ "options": {
+ "step": {
+ "init": {
+ "data_description": {
+ "sleep_brightness": "Porcentaxe de brillo das luces en modo durmir. 😴"
+ },
+ "title": "Configuración de Iluminación Adaptativa"
+ }
+ }
+ },
+ "title": "Iluminación Adaptativa",
+ "services": {
+ "change_switch_settings": {
+ "fields": {
+ "sleep_brightness": {
+ "description": "Porcentaxe de brillo das luces en modo durmir. 😴"
+ },
+ "only_once": {
+ "description": "Adaptar luces só cando estean acesas (`true`) ou mantelas adaptándose (`false`). 🔄"
+ }
+ }
+ }
+ },
+ "config": {
+ "step": {
+ "user": {
+ "title": "Escolle un nome para a instancia de Iluminación Dinámica"
+ }
+ }
+ }
+}
diff --git a/custom_components/adaptive_lighting/translations/id.json b/custom_components/adaptive_lighting/translations/id.json
index 2474796b..00876915 100644
--- a/custom_components/adaptive_lighting/translations/id.json
+++ b/custom_components/adaptive_lighting/translations/id.json
@@ -163,7 +163,7 @@
"data": {
"detect_non_ha_changes": "detect_non_ha_changes: Mendeteksi dan menghentikan adaptasi untuk perubahan status non-`light.turn_on`. Perlu mengaktifkan `take_over_control`. 🕵️ Perhatian: ⚠️ Beberapa lampu mungkin salah menunjukkan status 'hidup' yang dapat mengakibatkan lampu menyala secara tidak terduga. Nonaktifkan fitur ini jika Anda mengalami masalah seperti itu.",
"multi_light_intercept": "multi_light_intercept: Cegat dan sesuaikan panggilan `light.turn_on` yang menargetkan banyak lampu. ➗⚠️ Hal ini dapat mengakibatkan satu panggilan `light.turn_on` terpecah menjadi beberapa panggilan, misalnya saat lampu berada di sakelar yang berbeda. Membutuhkan `intercept` untuk diaktifkan.",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Saat menyalakan lampu pada awalnya. Jika disetel ke `true`, Pencahayaan Adaptif hanya beradaptasi jika `light.turn_on` dipanggil tanpa menentukan warna atau kecerahan. ❌🌈 Misalnya mencegah adaptasi saat mengaktifkan scene. Jika `false`, Pencahayaan Adaptif beradaptasi terlepas dari keberadaan warna atau kecerahan di `service_data` awal. Perlu mengaktifkan `take_over_control`. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Saat menyalakan lampu pada awalnya. Jika diatur ke `true`, AL hanya beradaptasi jika `light.turn_on` dipanggil tanpa menentukan warna atau kecerahan. ❌🌈 Misalnya, mencegah adaptasi ketika mengaktifkan scene. Jika `false`, AL akan beradaptasi tanpa menghiraukan keberadaan warna atau kecerahan dalam `service_data` awal. Perlu `take_over_control` diaktifkan. 🕵️",
"skip_redundant_commands": "skip_redundant_commands: Lewati pengiriman perintah adaptasi yang status targetnya sudah sama dengan status cahaya yang diketahui. Meminimalkan lalu lintas jaringan dan meningkatkan respons adaptasi dalam beberapa situasi. 📉Nonaktifkan jika status cahaya fisik tidak sinkron dengan status rekaman HA.",
"separate_turn_on_commands": "separate_turn_on_commands: Gunakan panggilan `light.turn_on` terpisah untuk warna dan kecerahan, diperlukan untuk beberapa jenis lampu. 🔀",
"max_color_temp": "max_color_temp: Suhu warna terdingin dalam Kelvin. ❄️",
diff --git a/custom_components/adaptive_lighting/translations/nl.json b/custom_components/adaptive_lighting/translations/nl.json
index 49fd1019..d287ef0c 100644
--- a/custom_components/adaptive_lighting/translations/nl.json
+++ b/custom_components/adaptive_lighting/translations/nl.json
@@ -46,7 +46,7 @@
"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. 🕵️ ",
+ "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. 🕵️",
"transition_until_sleep": "transition_until_sleep: Wanneer ingeschakeld, zal Adaptieve verlichting de slaapinstellingen behandelen als het minimum, overgaand naar deze waarden na zonsondergang. 🌙",
"skip_redundant_commands": "skip_redundant_commands: Sla het verzenden van aanpassingscommando's over waarvan de doelstatus al gelijk is aan de bekende status van de lamp. Minimaliseert netwerkverkeer en verbetert de responsiviteit van de aanpassing in sommige situaties. 📉Schakel uit als de fysieke lichtstatus niet meer synchroon loopt met de door HA geregistreerde status.",
"intercept": "intercept: Onderschep en pas `light.turn_on` oproepen aan om directe kleur- en helderheidsaanpassing mogelijk te maken. 🏎️ Schakel uit voor lampen die `light.turn_on` niet ondersteunen met kleur en helderheid.",
diff --git a/custom_components/adaptive_lighting/translations/pl.json b/custom_components/adaptive_lighting/translations/pl.json
index 0ec6f6c4..bebb4b18 100644
--- a/custom_components/adaptive_lighting/translations/pl.json
+++ b/custom_components/adaptive_lighting/translations/pl.json
@@ -41,7 +41,7 @@
"detect_non_ha_changes": "detect_non_ha_changes: Wykrywa i zatrzymuje adaptacje oświetlenia przy zmianach nie pochodzących od `light.turn_on`. Wymaga aktywnego `take_over_control`. 🕵️ Uwaga: ⚠️ Niektóre światła mogą błędnie wskazywać stan \"on\", co może powodować nieoczekiwane włączanie się świateł. Wyłącz to ustawienie, jeżeli doświadczasz takich objawów.",
"transition": "Transition time when applying a change to the lights (sekund)",
"transition_until_sleep": "transition_until_sleep: Gdy włączone, Adaptacyjne oświetlenie będzie traktowało ustawienia spania jako minimalne i przejdzie do nich po zachodzie słońca. 🌙",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Gdy włączone (`true`) to adaptacyjne oświetlenie zastosuje adaptacje tylko jeżeli `light.turn_on` jest wywołane bez konkretnego koloru lub jasności. ❌🌈 To ustawienie zapobiega między innymi adaptacji, gdy aktywowana jest scena. Gdy wyłączone (`false`), adaptacyjne oświetlenie zastosuje adaptacje niezależnie czy `service_data` zawiera kolor lub jasność. Potrzebuje włączonej opcji `take_over_control`. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Gdy włączone (`true`) to adaptacyjne oświetlenie zastosuje adaptacje tylko jeżeli `light.turn_on` jest wywołane bez konkretnego koloru lub jasności. ❌🌈 To ustawienie zapobiega między innymi adaptacji, gdy aktywowana jest scena. Gdy wyłączone (`false`), adaptacyjne oświetlenie zastosuje adaptacje niezależnie czy `service_data` zawiera kolor lub jasność. Potrzebuje włączonej opcji `take_over_control`. 🕵️",
"skip_redundant_commands": "skip_redundant_commands: Pomiń wysyłanie polecenia adaptacji, jeżeli stan światła jest taki sam jak docelowy stan adaptacji. Minimalizuje to ruch sieciowy oraz w niektórych przypadkach poprawia szybkość działania. 📉 Wyłącz, jeżeli faktyczny stan światła się nie pokrywa z tym który widnieje w Home Assistant.",
"include_config_in_attributes": "include_config_in_attributes: Gdy włączone (`true`) pokaż ustawienia jako atrybuty w encji przełącznika w Home Assistant. 📝",
"intercept": "intercept: Przechwyć i zaadaptuj wywołanie `light.turn_on`, aby błyskawicznie dostosować kolor i jasność. 🏎️ Wyłącz dla świateł, które nie akceptują wywołania `light.turn_on` zawierającego kolor i jasność.",
diff --git a/custom_components/adaptive_lighting/translations/pt.json b/custom_components/adaptive_lighting/translations/pt.json
index d8b72689..a491cc34 100644
--- a/custom_components/adaptive_lighting/translations/pt.json
+++ b/custom_components/adaptive_lighting/translations/pt.json
@@ -72,7 +72,17 @@
"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",
- "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)."
+ "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).",
+ "data": {
+ "lights": "lights: Lista das entity_ids das luzes para serem controladas (pode ser vazia). 🌟",
+ "min_brightness": "min_brightness: Percentagem minima de brilho. 💡",
+ "max_brightness": "max_brightness: Percentagem máxima de brilho. 💡",
+ "min_color_temp": "min_color_temp: Cor mais quente em Kelvin. 🔥",
+ "max_color_temp": "max_color_temp: Cor mais fria em Kelvin. ❄️",
+ "prefer_rgb_color": "prefer_rgb_color: Quando possível escolher ajuste em RGB em vez de temperatura da cor. 🌈",
+ "transition_until_sleep": "transition_until_sleep: Quando ativado, Adaptive Lighting usará as definições do modo noturno como os mínimos, passando para esses valores no por do sol. 🌙",
+ "take_over_control": "take_over_control: Desativa Adaptive Lighting se alguma fonte chamar`light.turn_on` enquanto as luzes estiverem ligadas e a serem controladas. Tomar nota que esta opção chama o serviço `homeassistant.update_entity` a cada `interval`! 🔒"
+ }
}
},
"error": {
diff --git a/custom_components/adaptive_lighting/translations/ro.json b/custom_components/adaptive_lighting/translations/ro.json
index e0f7ec02..2daa6c6c 100644
--- a/custom_components/adaptive_lighting/translations/ro.json
+++ b/custom_components/adaptive_lighting/translations/ro.json
@@ -2,8 +2,12 @@
"config": {
"step": {
"user": {
- "description": "Fiecare instanţă poate conţine mai multe lumini!"
+ "description": "Fiecare instanţă poate conţine mai multe lumini!",
+ "title": "Alege un nume pentru instanța de Iluminare Adaptivă"
}
+ },
+ "abort": {
+ "already_configured": "Acest dispozitiv este deja configurat"
}
},
"options": {
diff --git a/custom_components/adaptive_lighting/translations/sv.json b/custom_components/adaptive_lighting/translations/sv.json
index df81271e..29ce0971 100644
--- a/custom_components/adaptive_lighting/translations/sv.json
+++ b/custom_components/adaptive_lighting/translations/sv.json
@@ -40,7 +40,7 @@
"detect_non_ha_changes": "detect_non_ha_changes, Upptäcker alla ändringar större än 5% gjorda på ljuskällorna som inte kommer från HA. Kräver att 'take_over_control' är påslaget.(Kallar på 'homeassistant.update_entity' vid varje 'interval'!)",
"transition": "transition, i sekunder",
"multi_light_intercept": "multi_light_intercept: Fånga upp och anpassa \"light.turn_on\"-anrop som riktar sig mot flera lampor. ➗⚠️ Detta kan resultera i att ett enda `light.turn_on`-anrop delas upp i flera anrop, t.ex. när lamporna är kopplade till olika strömbrytare. Kräver att \"intercept\" är aktiverat.",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: När lampor först tänds. Om satt till \"true\", anpassar AL endast om \"light.turn_on\" anropas utan att ange färg eller ljusstyrka. ❌🌈 Detta förhindrar t.ex. anpassning när en scen aktiveras. Om \"false\" anpassas AL oavsett förekomsten av färg eller ljusstyrka i den initiala \"service_data\". \"takeover_control\" måste vara aktiverat. 🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: När lampor först tänds. Om satt till \"true\", anpassar AL endast om \"light.turn_on\" anropas utan att ange färg eller ljusstyrka. ❌🌈 Detta förhindrar t.ex. anpassning när en scen aktiveras. Om \"false\" anpassas AL oavsett förekomsten av färg eller ljusstyrka i den initiala \"service_data\". \"takeover_control\" måste vara aktiverat. 🕵️",
"skip_redundant_commands": "skip_redundant_commands: Hoppa över att skicka anpassningskommandon vars måltillstånd redan är lika med lampans kända tillstånd. Minimerar nätverkstrafik och förbättrar anpassningsförmågan i vissa situationer. 📉 Inaktivera om lampans tillstånd blir osynkroniserade med HA:s registrerade tillstånd.",
"intercept": "intercept: Fånga upp och anpassa `light.turn_on`-anrop för att möjliggöra omedelbar anpassning av färg och ljusstyrka. 🏎️ Inaktivera för lampor som inte stöder `light.turn_on` med färg och ljusstyrka.",
"transition_until_sleep": "transition_until_sleep: När aktiverat kommer Adaptive Lighting att behandla sömninställningarna som ett minimum och övergå till dessa värden efter solnedgången. 🌙",
diff --git a/custom_components/adaptive_lighting/translations/ta.json b/custom_components/adaptive_lighting/translations/ta.json
index 66115d64..92c552e5 100644
--- a/custom_components/adaptive_lighting/translations/ta.json
+++ b/custom_components/adaptive_lighting/translations/ta.json
@@ -161,7 +161,7 @@
"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` இயக்கப்பட்டது. . ",
+ "adapt_only_on_bare_turn_on": "சரிசெய்_only_on_bare_turn_on: ஆரம்பத்தில் விளக்குகளை இயக்கும்போது. `உண்மை` என அமைக்கப்பட்டால், வண்ணம் அல்லது பிரகாசத்தைக் குறிப்பிடாமல்` லைட்.டர்ன்_ஓஎன்` செயல்படுத்தப்பட்டால் மட்டுமே அல் மாற்றியமைக்கிறது. ❌🌈 இது எ.கா., ஒரு காட்சியைச் செயல்படுத்தும்போது தழுவலைத் தடுக்கிறது. `தவறு` என்றால், ஆரம்ப` சேவை_டா` இல் நிறம் அல்லது ஒளி இருப்பதைப் பொருட்படுத்தாமல் AL மாற்றியமைக்கிறது. `Take_over_control` இயக்கப்பட்டது. . 🕵️",
"separate_turn_on_commands": "தனித்தனி_டர்ன்_ஆன்_காமண்ட்ச்: சில ஒளி வகைகளுக்கு தேவைப்படும் வண்ணம் மற்றும் பிரகாசத்திற்கான தனித்தனி `லைட்.டர்ன்_ஓஎன்` அழைப்புகளைப் பயன்படுத்தவும். .",
"skip_redundant_commands": "Skip_redundant_commands: தழுவல் கட்டளைகளை அனுப்புவதைத் தவிர்க்கவும், அதன் இலக்கு நிலை ஏற்கனவே ஒளியின் அறியப்பட்ட நிலைக்கு சமம். பிணையம் போக்குவரத்தை குறைக்கிறது மற்றும் சில சூழ்நிலைகளில் தழுவல் மறுமொழியை மேம்படுத்துகிறது. ஆ இன் பதிவு செய்யப்பட்ட நிலையுடன் இயற்பியல் ஒளி நிலைகள் ஒத்திசைவிலிருந்து வெளியேறினால் அது காணக்கூடியது.",
"intercept": "இடைமறிப்பு: உடனடி வண்ணம் மற்றும் பிரகாசமான தழுவலை செயல்படுத்த `ஒளி. Color வண்ணம் மற்றும் பிரகாசத்துடன் `ஒளி.",
diff --git a/custom_components/adaptive_lighting/translations/uk.json b/custom_components/adaptive_lighting/translations/uk.json
index 866cee2c..ee12b0e9 100644
--- a/custom_components/adaptive_lighting/translations/uk.json
+++ b/custom_components/adaptive_lighting/translations/uk.json
@@ -39,8 +39,25 @@
"take_over_control": "take_over_control: Якщо що-небудь, окрім Адаптивного освітлення, викликає 'light.turn_on', коли світло вже увімкнено, чи адаптувати освітлення допоки світло (або перемикач) перемкнеться (off -> on).",
"detect_non_ha_changes": "detect_non_ha_changes: виявляти всі зміни >10% до освітлення (включаючи ті, що зроблені поза HA), вимагає, щоб 'take_over_control' був включений (виклик 'homeassistant.update_entity' кожного оновлення 'interval'!)",
"transition": "Час переходу, який застосовується до освітлення (секунди)",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: Коли спочатку вмикається світло. Якщо `true`, Адаптивне Освітлення адаптується лише якщо `light.turn_on` було викликано без вказування кольору чи яскравості. ❌🌈 Це в тому числі запобігає адаптації, коли активується сцена. Якщо `false`, Адаптивне Освітлення адаптується не залежно від присутності кольору чи яскравості в першочерговому `service_data`. Потребує активації `take_over_control`. 🕵️ ",
- "transition_until_sleep": "transition_until_sleep: Коли активовано, адаптивне освітлення буде ставитись до налаштування сну як мінімум, переходячи до цих значень після заходу сонця. 🌙"
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on: На початку вмикання світла. Якщо `true`, освітлення адаптується лише якщо `light.turn_on` викликано без вказання кольору чи яскравості. ❌🌈 Це, наприклад, запобігає адаптації, коли сцена активується. Якщо `false`, освітлення адаптується незалежно від наявності кольору чи яскравості у початковому `service_data`. Потребує ввімкнення `take_over_control`. 🕵️",
+ "transition_until_sleep": "transition_until_sleep: Коли активовано, адаптивне освітлення буде ставитись до налаштування сну як мінімум, переходячи до цих значень після заходу сонця. 🌙",
+ "intercept": "intercept: Перехоплювати та адаптувати виклики увімкнення світла (`light.turn_on`), щоб увімкнути миттєву адаптацію кольору та яскравості. 🏎️ Вимкніть для світла, що не підтримує увімкнення світла (`light.turn_on`) з кольором та яскравістю.",
+ "include_config_in_attributes": "Включити конфігурацію в атрибути (`include_config_in_attributes`): Показувати всі опції як атрибути на перемикачі в Home Assistant, якщо встановлено значення `true`. 📝"
+ },
+ "data_description": {
+ "sunrise_offset": "Змінити час сходу сонця на +/- секунд. ⏰",
+ "sunset_offset": "Змінити час заходу сонця на +/- секунд. ⏰",
+ "autoreset_control_seconds": "Самочинно скидати ручне керування після кількох секунд. Встановіть 0, щоб вимкнути.",
+ "initial_transition": "Тривалість першого переходу, коли світло перемикається зі стану вимкнено `off` на увімкнено `on`, у секундах. ⏲️",
+ "brightness_mode": "Режим яскравості для використання. Можливі значення: default (стандартний) , linear (лінійний) та tanh (гіперболічний тангенс) (використовує значення brightness_mode_time_dark та brightness_mode_time_light).",
+ "send_split_delay": "Затримка (мс) між `separate_turn_on_commands` (окремі команди увімкнення) для світла, що не підтримує одночасне налаштування яскравості та кольору. ⏲️",
+ "brightness_mode_time_dark": "(Ігнорується, якщо `brightness_mode='default'`) Тривалість у секундах для збільшення/зменшення яскравості до/після сходу/заходу сонця. 📈📉",
+ "brightness_mode_time_light": "(Ігнорується, якщо brightness_mode='default') Тривалість у секундах для збільшення/зменшення яскравості після/до сходу/заходу сонця. 📈📉.",
+ "transition": "Тривалість переходу, коли світло змінюється, у секундах. 🕑",
+ "interval": "Частота адаптації освітлення, у секундах. 🔄",
+ "sleep_brightness": "Відсоток яскравості світла в режимі сну. 😴",
+ "sleep_color_temp": "Колірна температура в режимі сну (використовується, коли `sleep_rgb_or_color_temp` має значення `color_temp`) у Кельвінах. 😴",
+ "sleep_transition": "Тривалість переходу, коли режим сну \"sleep mode\" увімкнено, у секундах. 😴"
}
}
},
@@ -48,5 +65,79 @@
"option_error": "Хибна опція",
"entity_missing": "Вибраного світла в домашньому помічнику не знайшли"
}
+ },
+ "services": {
+ "apply": {
+ "description": "Застосовує поточні налаштування Адаптивного освітлення до світильників.",
+ "fields": {
+ "lights": {
+ "description": "Світильник (або список світильників), до яких буде застосовано налаштування. 💡"
+ },
+ "transition": {
+ "description": "Тривалість переходу, коли світло змінюється, у секундах. 🕑"
+ }
+ }
+ },
+ "change_switch_settings": {
+ "fields": {
+ "sunrise_offset": {
+ "description": "Змінити час сходу сонця на +/- секунд. ⏰"
+ },
+ "sunset_offset": {
+ "description": "Змінити час заходу сонця на +/- секунд. ⏰"
+ },
+ "autoreset_control_seconds": {
+ "description": "Самочинно скидати ручне керування після кількох секунд. Встановіть 0, щоб вимкнути."
+ },
+ "only_once": {
+ "description": "Приладжувати освітлення тільки тоді, коли воно ввімкнено (`true`) чи продовжувати завжди (`false`). 🔄"
+ },
+ "sleep_brightness": {
+ "description": "Відсоток яскравості світла в режимі сну. 😴"
+ },
+ "take_over_control": {
+ "description": "Вимкнути Адаптивне освітлення, якщо інше джерело викликає `light.turn_on`, коли світло увімкнене та адаптується. Зауважте, що це викликає `homeassistant.update_entity` щокожного заданого інтервалу `interval`! 🔒"
+ },
+ "entity_id": {
+ "description": "Ідентифікатор (ID) перемикача. 📝"
+ },
+ "initial_transition": {
+ "description": "Тривалість першого переходу, коли світло перемикається зі стану вимкнено `off` на увімкнено `on`, у секундах. ⏲️"
+ },
+ "sleep_transition": {
+ "description": "Тривалість переходу, коли режим сну \"sleep mode\" увімкнено, у секундах. 😴"
+ },
+ "max_color_temp": {
+ "description": "Найхолодніша колірна температура в Кельвінах. ❄️"
+ },
+ "max_brightness": {
+ "description": "Максимальний відсоток яскравості. 💡"
+ },
+ "min_brightness": {
+ "description": "Мінімальний відсоток яскравості. 💡"
+ },
+ "send_split_delay": {
+ "description": "Затримка (мс) між `separate_turn_on_commands` (окремі команди увімкнення) для світла, що не підтримує одночасне налаштування яскравості та кольору. ⏲️"
+ },
+ "sleep_color_temp": {
+ "description": "Колірна температура в режимі сну (використовується, коли `sleep_rgb_or_color_temp` має значення `color_temp`) в Кельвінах. 😴"
+ },
+ "detect_non_ha_changes": {
+ "description": "Виявляє та припиняє адаптації для змін стану, що не є `light.turn_on`. Потребує увімкнення `take_over_control`. 🕵️ Обережно: ⚠️ Деякі лампи можуть хибно вказувати на стан \"увімкнено\", що може призвести до неочікуваного ввімкнення ламп. Вимкніть цю функцію, якщо ви зіткнетеся з такими проблемами."
+ },
+ "transition": {
+ "description": "Тривалість переходу, коли світло змінюється, у секундах. 🕑"
+ }
+ },
+ "description": "Змініть будь-які налаштування, які ви бажаєте, у цьому перемикачі. Усі опції тут такі ж, як і в поточному конфігураційному файлі."
+ },
+ "set_manual_control": {
+ "description": "Позначте, чи світло \"керується вручну\".",
+ "fields": {
+ "lights": {
+ "description": "Ідентифікатор(и) світла (entity_id(s) of lights). Якщо не вказано, вибираються всі лампи у перемикачі. 💡"
+ }
+ }
+ }
}
}
diff --git a/custom_components/adaptive_lighting/translations/zh-Hans.json b/custom_components/adaptive_lighting/translations/zh-Hans.json
index 87d236d1..0d501731 100644
--- a/custom_components/adaptive_lighting/translations/zh-Hans.json
+++ b/custom_components/adaptive_lighting/translations/zh-Hans.json
@@ -50,7 +50,7 @@
"detect_non_ha_changes": "detect_non_ha_changes: 检测非`light.turn_on`的状态更改,并停止自适应照明。需要启用`take_over_control`。🕵️ 注意:⚠️ 一些灯光可能错误地显示为“开启”状态,这可能会导致灯光意外打开。如果遇到此类问题,请禁用此功能。",
"autoreset_control_seconds": "自动重置时间(autoreset_control_seconds)",
"only_once": "only_once:仅在打开时调整灯光(`true`)或始终调整灯光(`false`)。🔄",
- "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on:当首次打开灯光时。如果设置为`true`,仅在没有指定颜色或亮度的情况下,AL才进行适应。❌🌈 例如,这可以防止在激活场景时进行适应。如果为`false`,则不考虑初始`service_data`中是否存在颜色或亮度,AL都会适应。需要启用`take_over_control`。🕵️ ",
+ "adapt_only_on_bare_turn_on": "adapt_only_on_bare_turn_on:当首次打开灯光时。如果设置为`true`,仅在没有指定颜色或亮度的情况下,AL才进行适应。❌🌈 例如,这可以防止在激活场景时进行适应。如果为`false`,则不考虑初始`service_data`中是否存在颜色或亮度,AL都会适应。需要启用`take_over_control`。🕵️",
"separate_turn_on_commands": "separate_turn_on_commands:为某些灯光类型需要使用单独的`light.turn_on`调用来设置颜色和亮度。🔀",
"send_split_delay": "指令发送间隔延迟(send_split_delay)",
"adapt_delay": "自适应照明延迟(adapt_delay)",
From 1232bcc2d59dc7b75512600db2f1d0a5b84afcf9 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:39:06 -0700
Subject: [PATCH 139/361] docs: add xuars as a contributor for translation
(#1213)
* 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 43c49beb..dc9180eb 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -963,6 +963,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "xuars",
+ "name": "xuars",
+ "avatar_url": "https://avatars.githubusercontent.com/u/197080354?v=4",
+ "profile": "https://github.com/xuars",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 8d01acfc..4005575f 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -602,6 +602,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Sara492 🌍 |
 enpaga 🌍 |
+
+  xuars 🌍 |
+
From afc399e61362695b1456a57ce5651641b1150768 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:39:48 -0700
Subject: [PATCH 140/361] docs: add tinutac as a contributor for translation
(#1214)
* 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 dc9180eb..971571e2 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -972,6 +972,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "tinutac",
+ "name": "tinutac",
+ "avatar_url": "https://avatars.githubusercontent.com/u/2151553?v=4",
+ "profile": "https://github.com/tinutac",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 4005575f..b8184b68 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -604,6 +604,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 xuars 🌍 |
+  tinutac 🌍 |
From 3a4d2ff3d8d09b4b07fb62efe680224213cf4768 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:40:16 -0700
Subject: [PATCH 141/361] docs: add amelenty as a contributor for translation
(#1215)
* 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 971571e2..9611d2e1 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -981,6 +981,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "amelenty",
+ "name": "amelenty",
+ "avatar_url": "https://avatars.githubusercontent.com/u/29466876?v=4",
+ "profile": "https://github.com/amelenty",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index b8184b68..31991553 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -605,6 +605,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 xuars 🌍 |
 tinutac 🌍 |
+  amelenty 🌍 |
From 1ddd34a2305b8c8e499dfbb6d8057f18acd61df9 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:41:09 -0700
Subject: [PATCH 142/361] docs: add yeaxi as a contributor for translation
(#1217)
* 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 9611d2e1..47768512 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -990,6 +990,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "yeaxi",
+ "name": "Rostyslav Dudka",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15959384?v=4",
+ "profile": "https://ua.linkedin.com/in/rostyslav-dudka",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 31991553..82650031 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -606,6 +606,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 xuars 🌍 |
 tinutac 🌍 |
 amelenty 🌍 |
+  Rostyslav Dudka 🌍 |
From fd5cef7901791c601563fd9d7e0e8f58b2d145a2 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:41:50 -0700
Subject: [PATCH 143/361] docs: add helderfmf as a contributor for translation
(#1218)
* 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 47768512..94110353 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -999,6 +999,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "helderfmf",
+ "name": "Helder Ferreira",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5622687?v=4",
+ "profile": "https://github.com/helderfmf",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 82650031..6154663a 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -607,6 +607,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 tinutac 🌍 |
 amelenty 🌍 |
 Rostyslav Dudka 🌍 |
+  Helder Ferreira 🌍 |
From f5ee0aa58d8da57692e297c0474e66c5536e03f1 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:42:08 -0700
Subject: [PATCH 144/361] docs: add mrpiotr-dev as a contributor for
translation (#1219)
* 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 94110353..7adf21e4 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1008,6 +1008,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "mrpiotr-dev",
+ "name": "Piotr Laszczkowski",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11849621?v=4",
+ "profile": "http://mrpiotr.dev",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 6154663a..d44452ad 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -608,6 +608,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 amelenty 🌍 |
 Rostyslav Dudka 🌍 |
 Helder Ferreira 🌍 |
+  Piotr Laszczkowski 🌍 |
From 14e898bc8eabc39445493598b3bc2c819fcc30e7 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:42:34 -0700
Subject: [PATCH 145/361] docs: add rezaalmanda as a contributor for
translation (#1220)
* 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 7adf21e4..3b2c3c28 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1017,6 +1017,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "rezaalmanda",
+ "name": "Reza",
+ "avatar_url": "https://avatars.githubusercontent.com/u/22217419?v=4",
+ "profile": "http://rezaalmanda.github.io",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index d44452ad..6cf59d17 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -609,6 +609,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Rostyslav Dudka 🌍 |
 Helder Ferreira 🌍 |
 Piotr Laszczkowski 🌍 |
+  Reza 🌍 |
From 4510ebdca76034eddb50bab68377e50080d49f61 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:42:54 -0700
Subject: [PATCH 146/361] docs: add bittin as a contributor for translation
(#1221)
* 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 3b2c3c28..ced78cff 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1026,6 +1026,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "bittin",
+ "name": "Luna Jernberg",
+ "avatar_url": "https://avatars.githubusercontent.com/u/43197?v=4",
+ "profile": "https://github.com/bittin",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 6cf59d17..7bc50e6c 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -611,6 +611,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Piotr Laszczkowski 🌍 |
 Reza 🌍 |
+
+  Luna Jernberg 🌍 |
+
From ff84a46aedacfba19e30d0ef09dbe8d3ddd95741 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:46:11 -0700
Subject: [PATCH 147/361] docs: add defaultpage as a contributor for
translation (#1216)
* docs: update README.md
* docs: update .all-contributorsrc
---------
Co-authored-by: allcontributors[bot] <46447321+allcontributors[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index ced78cff..6354e1db 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -982,6 +982,15 @@
"translation"
]
},
+ {
+ "login": "defaultpage",
+ "name": "Default User",
+ "avatar_url": "https://avatars.githubusercontent.com/u/22825202?v=4",
+ "profile": "https://github.com/defaultpage",
+ "contributions": [
+ "translation"
+ ]
+ },
{
"login": "amelenty",
"name": "amelenty",
diff --git a/README.md b/README.md
index 7bc50e6c..5b8b3b4b 100644
--- a/README.md
+++ b/README.md
@@ -605,13 +605,14 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 xuars 🌍 |
 tinutac 🌍 |
+  Default User 🌍 |
 amelenty 🌍 |
 Rostyslav Dudka 🌍 |
 Helder Ferreira 🌍 |
 Piotr Laszczkowski 🌍 |
-  Reza 🌍 |
+  Reza 🌍 |
 Luna Jernberg 🌍 |
From 6cb99e80b0a669ecb46ee382009cf482aa1eb282 Mon Sep 17 00:00:00 2001
From: Rasmus Lundsgaard
Date: Mon, 16 Jun 2025 06:47:06 +0200
Subject: [PATCH 148/361] suggested fix for HA2025 deprecation warnings (#1168)
* suggested fix for HA2025 deprecation warnings
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
custom_components/adaptive_lighting/switch.py | 49 ++++++-------------
1 file changed, 14 insertions(+), 35 deletions(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 29955d0a..037bd083 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -16,7 +16,6 @@ import ulid_transform
import voluptuous as vol
from homeassistant.components.light import (
ATTR_BRIGHTNESS,
- ATTR_COLOR_TEMP,
ATTR_COLOR_TEMP_KELVIN,
ATTR_EFFECT,
ATTR_FLASH,
@@ -24,17 +23,8 @@ from homeassistant.components.light import (
ATTR_SUPPORTED_COLOR_MODES,
ATTR_TRANSITION,
ATTR_XY_COLOR,
- COLOR_MODE_BRIGHTNESS,
- COLOR_MODE_COLOR_TEMP,
- COLOR_MODE_HS,
- COLOR_MODE_RGB,
- COLOR_MODE_RGBW,
- COLOR_MODE_RGBWW,
- COLOR_MODE_XY,
- SUPPORT_BRIGHTNESS,
- SUPPORT_COLOR,
- SUPPORT_COLOR_TEMP,
- SUPPORT_TRANSITION,
+ ColorMode,
+ LightEntityFeature,
is_on,
preprocess_turn_on_alternatives,
)
@@ -179,13 +169,6 @@ if TYPE_CHECKING:
from homeassistant.config_entries import ConfigEntry
from homeassistant.helpers.entity_platform import AddEntitiesCallback
-_SUPPORT_OPTS = {
- "brightness": SUPPORT_BRIGHTNESS,
- "color_temp": SUPPORT_COLOR_TEMP,
- "color": SUPPORT_COLOR,
- "transition": SUPPORT_TRANSITION,
-}
-
_LOGGER = logging.getLogger(__name__)
@@ -651,17 +634,19 @@ def _supported_features(hass: HomeAssistant, light: str) -> set[str]:
assert state is not None
supported_features = state.attributes.get(ATTR_SUPPORTED_FEATURES, 0)
assert isinstance(supported_features, int)
- supported = {
- key for key, value in _SUPPORT_OPTS.items() if supported_features & value
- }
+
+ supported = set()
+
+ if supported_features & LightEntityFeature.TRANSITION:
+ supported.add("transition")
supported_color_modes = state.attributes.get(ATTR_SUPPORTED_COLOR_MODES, set())
color_modes = {
- COLOR_MODE_RGB,
- COLOR_MODE_RGBW,
- COLOR_MODE_RGBWW,
- COLOR_MODE_XY,
- COLOR_MODE_HS,
+ ColorMode.RGB,
+ ColorMode.RGBW,
+ ColorMode.RGBWW,
+ ColorMode.XY,
+ ColorMode.HS,
}
# Adding brightness when color mode is supported, see
@@ -672,10 +657,10 @@ def _supported_features(hass: HomeAssistant, light: str) -> set[str]:
supported.update({"color", "brightness"})
break
- if COLOR_MODE_COLOR_TEMP in supported_color_modes:
+ if ColorMode.COLOR_TEMP in supported_color_modes:
supported.update({"color_temp", "brightness"})
- if COLOR_MODE_BRIGHTNESS in supported_color_modes:
+ if ColorMode.BRIGHTNESS in supported_color_modes:
supported.add("brightness")
return supported
@@ -2009,12 +1994,6 @@ class AdaptiveLightingManager:
context.id,
)
service_data = {ATTR_ENTITY_ID: skipped, **service_data_copy[CONF_PARAMS]}
- if (
- ATTR_COLOR_TEMP in service_data
- and ATTR_COLOR_TEMP_KELVIN in service_data
- ):
- # ATTR_COLOR_TEMP and ATTR_COLOR_TEMP_KELVIN are mutually exclusive
- del service_data[ATTR_COLOR_TEMP]
await self.hass.services.async_call(
LIGHT_DOMAIN,
SERVICE_TURN_ON,
From 2623aafa618e32fceb41fe81b07d756e211f5fbe Mon Sep 17 00:00:00 2001
From: Jeff Wilson
Date: Mon, 16 Jun 2025 00:47:26 -0400
Subject: [PATCH 149/361] Remove deprecated `@bind_hass` (#1207)
* remove @bind_hass decorator
* attempt to pass hass
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
custom_components/adaptive_lighting/switch.py | 13 ++++---------
1 file changed, 4 insertions(+), 9 deletions(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 037bd083..f00227dc 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -76,7 +76,6 @@ from homeassistant.helpers.event import (
from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.sun import get_astral_location
from homeassistant.helpers.template import area_entities
-from homeassistant.loader import bind_hass
from homeassistant.util import slugify
from homeassistant.util.color import (
color_temperature_to_rgb,
@@ -226,7 +225,6 @@ def is_our_context(context: Context | None, which: str | None = None) -> bool:
return is_our_context_id(context.id, which)
-@bind_hass
def _switches_with_lights(
hass: HomeAssistant,
lights: list[str],
@@ -244,7 +242,7 @@ def _switches_with_lights(
if entry is None: # entry might be disabled and therefore missing
continue
switch = data[config.entry_id][SWITCH_DOMAIN]
- switch._expand_light_groups()
+ switch._expand_light_groups(hass=hass)
# Check if any of the lights are in the switch's lights
if set(switch.lights) & set(all_check_lights):
switches.append(switch)
@@ -255,7 +253,6 @@ class NoSwitchFoundError(ValueError):
"""No switches found for lights."""
-@bind_hass
def _switch_with_lights(
hass: HomeAssistant,
lights: list[str],
@@ -286,7 +283,6 @@ def _switch_with_lights(
# For documentation on this function, see integration_entities() from HomeAssistant Core:
# https://github.com/home-assistant/core/blob/dev/homeassistant/helpers/template.py#L1109
-@bind_hass
def _switches_from_service_call(
hass: HomeAssistant,
service_call: ServiceCall,
@@ -599,7 +595,6 @@ def _is_state_event(event: Event, from_or_to_state: Iterable[str]):
)
-@bind_hass
def _expand_light_groups(
hass: HomeAssistant,
lights: list[str],
@@ -628,7 +623,6 @@ def _is_light_group(state: State) -> bool:
)
-@bind_hass
def _supported_features(hass: HomeAssistant, light: str) -> set[str]:
state = hass.states.get(light)
assert state is not None
@@ -973,8 +967,9 @@ class AdaptiveSwitch(SwitchEntity, RestoreEntity):
"""Remove the listeners upon removing the component."""
self._remove_listeners()
- def _expand_light_groups(self) -> None:
- all_lights = _expand_light_groups(self.hass, self.lights)
+ def _expand_light_groups(self, hass=None) -> None:
+ hass = hass or self.hass
+ all_lights = _expand_light_groups(hass, self.lights)
self.manager.lights.update(all_lights)
self.manager.set_auto_reset_manual_control_times(
all_lights,
From ab934b0d03053be09fa08be917784d799e37dd7c Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:48:03 -0700
Subject: [PATCH 150/361] docs: add jawilson as a contributor for code (#1222)
* 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 6354e1db..a9f04022 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1044,6 +1044,15 @@
"contributions": [
"translation"
]
+ },
+ {
+ "login": "jawilson",
+ "name": "Jeff Wilson",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1368827?v=4",
+ "profile": "http://jeffalwilson.com",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 5b8b3b4b..306da8ea 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -614,6 +614,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Reza 🌍 |
 Luna Jernberg 🌍 |
+  Jeff Wilson 💻 |
From 33c1d2eb6be74ff0955d3219d14cc9a542bc68cf Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:48:37 -0700
Subject: [PATCH 151/361] docs: add TermeHansen as a contributor for code
(#1223)
* 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 a9f04022..76a8cf13 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1053,6 +1053,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "TermeHansen",
+ "name": "Rasmus Lundsgaard",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6922018?v=4",
+ "profile": "https://github.com/TermeHansen",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 306da8ea..7af1feb8 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -615,6 +615,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Reza 🌍 |
 Luna Jernberg 🌍 |
 Jeff Wilson 💻 |
+  Rasmus Lundsgaard 💻 |
From 106d4733fe4aaa516a8ba96e51ab0842ad2d3f7d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:49:31 -0700
Subject: [PATCH 152/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Pin=20python=20to?=
=?UTF-8?q?=203.13.5=20(#1181)?=
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 f0dedea3..e52963b0 100644
--- a/.github/workflows/deploy-webapp.yml
+++ b/.github/workflows/deploy-webapp.yml
@@ -35,7 +35,7 @@ jobs:
- name: Set Up Python
uses: actions/setup-python@v5
with:
- python-version: 3.x
+ python-version: 3.13.5
- name: Install Dependencies
run: |
From e08a7525144005b1d4f399660d6b800e1c781482 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:49:44 -0700
Subject: [PATCH 153/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/s?=
=?UTF-8?q?etup-python=20action=20to=20v5.6.0=20(#1171)?=
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/install_dependencies/action.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 8f1732d6..8c4483f7 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@v5.3.0
+ uses: actions/setup-python@v5.6.0
with:
python-version: ${{ inputs.python-version }}
- name: Set up UV
From 8035ea3ed104242e4698f96e815035a818791473 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
<66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Sun, 15 Jun 2025 21:55:36 -0700
Subject: [PATCH 154/361] [pre-commit.ci] pre-commit autoupdate (#1163)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [pre-commit.ci] pre-commit autoupdate
updates:
- [github.com/astral-sh/ruff-pre-commit: v0.8.4 → v0.11.13](https://github.com/astral-sh/ruff-pre-commit/compare/v0.8.4...v0.11.13)
- [github.com/psf/black: 24.10.0 → 25.1.0](https://github.com/psf/black/compare/24.10.0...25.1.0)
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* fix pre-commit
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Bas Nijholt
---
.pre-commit-config.yaml | 4 ++--
custom_components/adaptive_lighting/color_and_brightness.py | 4 ++--
webapp/color_and_brightness.py | 4 ++--
3 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index fcaebb75..1321a487 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -8,11 +8,11 @@ repos:
- id: mixed-line-ending
args: ["--fix=lf"]
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.8.4
+ rev: v0.11.13
hooks:
- id: ruff
args: ["--fix"]
- repo: https://github.com/psf/black
- rev: 24.10.0
+ rev: 25.1.0
hooks:
- id: black
diff --git a/custom_components/adaptive_lighting/color_and_brightness.py b/custom_components/adaptive_lighting/color_and_brightness.py
index 215a9a70..6fdb7083 100644
--- a/custom_components/adaptive_lighting/color_and_brightness.py
+++ b/custom_components/adaptive_lighting/color_and_brightness.py
@@ -502,9 +502,9 @@ def lerp_color_hsv(
)
# Convert back to RGB
- rgb = tuple(int(round(x * 255)) for x in colorsys.hsv_to_rgb(*hsv))
+ rgb = tuple(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)
+ return cast("tuple[int, int, int]", rgb)
def lerp(x, x1, x2, y1, y2):
diff --git a/webapp/color_and_brightness.py b/webapp/color_and_brightness.py
index b632ba8e..849c2373 100644
--- a/webapp/color_and_brightness.py
+++ b/webapp/color_and_brightness.py
@@ -502,9 +502,9 @@ def lerp_color_hsv(
)
# Convert back to RGB
- rgb = tuple(int(round(x * 255)) for x in colorsys.hsv_to_rgb(*hsv))
+ rgb = tuple(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)
+ return cast("tuple[int, int, int]", rgb)
def lerp(x, x1, x2, y1, y2):
From 5f02e9de75042b1297ed361291f17354027a4f38 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 21:57:08 -0700
Subject: [PATCH 155/361] Bump min supported version to 2025.12 (#1224)
---
hacs.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hacs.json b/hacs.json
index 9c9035ef..545d0ec5 100644
--- a/hacs.json
+++ b/hacs.json
@@ -1,5 +1,5 @@
{
"name": "Adaptive Lighting",
"render_readme": true,
- "homeassistant": "2023.7.0"
+ "homeassistant": "2024.12.0"
}
From cb67a4cb9c0f36bd244fe90b0e8147d600471c76 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:12:48 -0700
Subject: [PATCH 156/361] Fix test_light_switch_in_specific_area (#1225)
---
tests/test_switch.py | 3 +++
1 file changed, 3 insertions(+)
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 607f17ef..cc03fa24 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -1373,6 +1373,9 @@ def mock_area_registry(
area_kwargs["floor_id"] = "test-floor"
if dt >= datetime.date(2024, 11, 1):
area_kwargs.pop("normalized_name")
+ if dt >= datetime.date(2025, 2, 1):
+ area_kwargs["humidity_entity_id"] = None
+ area_kwargs["temperature_entity_id"] = None
# This mess... 🤯
if dt >= datetime.date(2024, 2, 1) and dt != datetime.date(2024, 4, 1):
From b1aca6408d3d00d56f56f921d78ad1e18c7c4682 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:16:31 -0700
Subject: [PATCH 157/361] Skip broken test (#1226)
Also see https://github.com/basnijholt/adaptive-lighting/pull/1159
---
tests/test_config_flow.py | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/tests/test_config_flow.py b/tests/test_config_flow.py
index af01fc11..0b9609d3 100644
--- a/tests/test_config_flow.py
+++ b/tests/test_config_flow.py
@@ -1,5 +1,6 @@
"""Test Adaptive Lighting config flow."""
+import pytest
from homeassistant.components.adaptive_lighting.const import (
CONF_SUNRISE_TIME,
CONF_SUNSET_TIME,
@@ -117,8 +118,11 @@ async def test_import_twice(hass):
# TODO: Fix, broken for all supported versions
# But in ≤2024.5 it gives homeassistant.config_entries.UnknownEntry: cd69dbda65bd3f86e9a32d974cdfa23f
# and ≥2024.6 it times out
+# NOTE: Just skip this test for now, currently (2025-06-15) I cannot figure out
+# what this test is even testing.
async def test_changing_options_when_using_yaml(hass):
"""Test changing options when using YAML."""
+ pytest.skip(reason="TODO: Fix, broken for all supported versions")
entry = MockConfigEntry(
domain=DOMAIN,
title=DEFAULT_NAME,
From a8e35ae216bb777b21084670aef601e41def0007 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:20:53 -0700
Subject: [PATCH 158/361] Release v1.26.0 (#1227)
---
custom_components/adaptive_lighting/manifest.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 4b0cac4f..92100afa 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.25.0"
+ "version": "1.26.0"
}
From ab29fb080c26366fae8881df7d3920f3af983ff0 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:25:46 -0700
Subject: [PATCH 159/361] Fix Docker build
---
Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index 87f791e5..d4076072 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -22,7 +22,7 @@ RUN ln -s /core /app/core && /app/scripts/setup-symlinks
RUN mkdir -p /venv
ENV UV_PROJECT_ENVIRONMENT=/venv UV_PYTHON=3.13 PATH="/venv/bin:$PATH"
RUN uv venv
-RUN /app/scripts/setup-dependencies
+RUN source /venv/bin/activate && /app/scripts/setup-dependencies
WORKDIR /app/core
From 5d7599e33bcf437ed9c0d7a62fb2a62c32a1d967 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:28:12 -0700
Subject: [PATCH 160/361] Revert "Fix Docker build"
This reverts commit ab29fb080c26366fae8881df7d3920f3af983ff0.
---
Dockerfile | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dockerfile b/Dockerfile
index d4076072..87f791e5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -22,7 +22,7 @@ RUN ln -s /core /app/core && /app/scripts/setup-symlinks
RUN mkdir -p /venv
ENV UV_PROJECT_ENVIRONMENT=/venv UV_PYTHON=3.13 PATH="/venv/bin:$PATH"
RUN uv venv
-RUN source /venv/bin/activate && /app/scripts/setup-dependencies
+RUN /app/scripts/setup-dependencies
WORKDIR /app/core
From 762900262fc102dd503c2bee720a05dfd50b898c Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Sun, 15 Jun 2025 22:33:35 -0700
Subject: [PATCH 161/361] Fix Docker build
---
Dockerfile | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Dockerfile b/Dockerfile
index 87f791e5..3bd36ddd 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -19,8 +19,8 @@ COPY . /app/
RUN ln -s /core /app/core && /app/scripts/setup-symlinks
# Install home-assistant/core dependencies
-RUN mkdir -p /venv
-ENV UV_PROJECT_ENVIRONMENT=/venv UV_PYTHON=3.13 PATH="/venv/bin:$PATH"
+RUN mkdir -p /.venv
+ENV UV_PROJECT_ENVIRONMENT=/.venv UV_PYTHON=3.13 PATH="/.venv/bin:$PATH"
RUN uv venv
RUN /app/scripts/setup-dependencies
From 86460f69485bd3c4f688de1715c1bbb07f7349c5 Mon Sep 17 00:00:00 2001
From: Zachary McCord
Date: Sun, 13 Jul 2025 16:45:30 -0500
Subject: [PATCH 162/361] webapp: add missing requirements and instructions for
local run (#1235)
---
webapp/README.md | 10 ++++
webapp/requirements.txt | 97 ++++++++++++++++++++++++++++++++++++++
webapp/requirements.txt.in | 3 ++
3 files changed, 110 insertions(+)
create mode 100644 webapp/README.md
diff --git a/webapp/README.md b/webapp/README.md
new file mode 100644
index 00000000..45ee754a
--- /dev/null
+++ b/webapp/README.md
@@ -0,0 +1,10 @@
+To run this app locally, install the requirements and run `shiny run`.
+
+```
+$ cd webapp
+$ pip install requirements.txt
+$ shiny run
+```
+
+After the server starts, which should take only a moment, you can open
+[http://127.0.0.1:8000](http://127.0.0.1:8000) to see the interface.
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index cbcadafc..04c991f2 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -1,6 +1,103 @@
# This file was autogenerated by uv via the following command:
# uv pip compile --output-file=requirements.txt requirements.txt.in
+anyio==4.9.0
+ # via
+ # starlette
+ # watchfiles
+appdirs==1.4.4
+ # via shiny
+asgiref==3.9.1
+ # via shiny
astral==2.2
# via -r requirements.txt.in
+click==8.2.1
+ # via
+ # shiny
+ # uvicorn
+contourpy==1.3.2
+ # via matplotlib
+cycler==0.12.1
+ # via matplotlib
+fonttools==4.58.5
+ # via matplotlib
+h11==0.16.0
+ # via uvicorn
+htmltools==0.6.0
+ # via
+ # shiny
+ # shinyswatch
+idna==3.10
+ # via anyio
+kiwisolver==1.4.8
+ # via matplotlib
+linkify-it-py==2.0.3
+ # via shiny
+markdown-it-py==3.0.0
+ # via
+ # mdit-py-plugins
+ # shiny
+matplotlib==3.10.3
+ # via -r requirements.txt.in
+mdit-py-plugins==0.4.2
+ # via shiny
+mdurl==0.1.2
+ # via markdown-it-py
+narwhals==1.46.0
+ # via shiny
+numpy==2.3.1
+ # via
+ # contourpy
+ # matplotlib
+orjson==3.10.18
+ # via shiny
+packaging==25.0
+ # via
+ # htmltools
+ # matplotlib
+ # shiny
+ # shinyswatch
+pillow==11.3.0
+ # via matplotlib
+prompt-toolkit==3.0.51
+ # via
+ # questionary
+ # shiny
+pyparsing==3.2.3
+ # via matplotlib
+python-dateutil==2.9.0.post0
+ # via matplotlib
+python-multipart==0.0.20
+ # via shiny
pytz==2023.3.post1
# via astral
+questionary==2.1.0
+ # via shiny
+setuptools==80.9.0
+ # via shiny
+shiny==1.4.0
+ # via
+ # -r requirements.txt.in
+ # shinyswatch
+shinyswatch==0.9.0
+ # via -r requirements.txt.in
+six==1.17.0
+ # via python-dateutil
+sniffio==1.3.1
+ # via anyio
+starlette==0.47.1
+ # via shiny
+typing-extensions==4.14.1
+ # via
+ # htmltools
+ # shiny
+ # shinyswatch
+uc-micro-py==1.0.3
+ # via linkify-it-py
+uvicorn==0.35.0
+ # via shiny
+watchfiles==1.1.0
+ # via shiny
+wcwidth==0.2.13
+ # via prompt-toolkit
+websockets==15.0.1
+ # via shiny
diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in
index 39c93a83..9703163f 100644
--- a/webapp/requirements.txt.in
+++ b/webapp/requirements.txt.in
@@ -1 +1,4 @@
astral==2.2
+matplotlib
+shinyswatch
+shiny
From 8e75144e5d5c776ca65988bbba50361753b6ab54 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 21 Jul 2025 15:22:11 -0700
Subject: [PATCH 163/361] Fix webapp Pyodide compatibility: pin matplotlib and
contourpy versions (#1242)
* Fix webapp README: correct pip install command
The README had incorrect syntax for pip install. Changed from
`pip install requirements.txt` to `pip install -r requirements.txt`.
* Fix webapp Pyodide compatibility: pin matplotlib and contourpy versions
The webapp uses Shinylive which runs Python in the browser via Pyodide.
Pyodide only supports specific versions of packages that have C extensions.
Pin matplotlib to 3.8.4 and contourpy to 1.3.1 to match Pyodide's available versions.
This fixes the "Can't find a pure Python 3 wheel for 'contourpy==1.3.2'" error
when loading the webapp.
---
webapp/README.md | 2 +-
webapp/requirements.txt | 10 ++++++----
webapp/requirements.txt.in | 3 ++-
3 files changed, 9 insertions(+), 6 deletions(-)
diff --git a/webapp/README.md b/webapp/README.md
index 45ee754a..b12432eb 100644
--- a/webapp/README.md
+++ b/webapp/README.md
@@ -2,7 +2,7 @@ To run this app locally, install the requirements and run `shiny run`.
```
$ cd webapp
-$ pip install requirements.txt
+$ pip install -r requirements.txt
$ shiny run
```
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index 04c991f2..c09a3d7a 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -1,5 +1,5 @@
# This file was autogenerated by uv via the following command:
-# uv pip compile --output-file=requirements.txt requirements.txt.in
+# uv pip compile requirements.txt.in --output-file requirements.txt
anyio==4.9.0
# via
# starlette
@@ -14,8 +14,10 @@ click==8.2.1
# via
# shiny
# uvicorn
-contourpy==1.3.2
- # via matplotlib
+contourpy==1.3.1
+ # via
+ # -r requirements.txt.in
+ # matplotlib
cycler==0.12.1
# via matplotlib
fonttools==4.58.5
@@ -36,7 +38,7 @@ markdown-it-py==3.0.0
# via
# mdit-py-plugins
# shiny
-matplotlib==3.10.3
+matplotlib==3.8.4
# via -r requirements.txt.in
mdit-py-plugins==0.4.2
# via shiny
diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in
index 9703163f..986a4976 100644
--- a/webapp/requirements.txt.in
+++ b/webapp/requirements.txt.in
@@ -1,4 +1,5 @@
astral==2.2
-matplotlib
+matplotlib==3.8.4
+contourpy==1.3.1
shinyswatch
shiny
From 3c86a6e28baf6484754176e0e3cf2e60c5f01fa5 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 21 Jul 2025 15:38:56 -0700
Subject: [PATCH 164/361] Remove app requirements
---
webapp/requirements.txt | 29 -----------------------------
webapp/requirements.txt.in | 3 ---
2 files changed, 32 deletions(-)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index c09a3d7a..f312c72b 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -8,20 +8,10 @@ appdirs==1.4.4
# via shiny
asgiref==3.9.1
# via shiny
-astral==2.2
- # via -r requirements.txt.in
click==8.2.1
# via
# shiny
# uvicorn
-contourpy==1.3.1
- # via
- # -r requirements.txt.in
- # matplotlib
-cycler==0.12.1
- # via matplotlib
-fonttools==4.58.5
- # via matplotlib
h11==0.16.0
# via uvicorn
htmltools==0.6.0
@@ -30,48 +20,31 @@ htmltools==0.6.0
# shinyswatch
idna==3.10
# via anyio
-kiwisolver==1.4.8
- # via matplotlib
linkify-it-py==2.0.3
# via shiny
markdown-it-py==3.0.0
# via
# mdit-py-plugins
# shiny
-matplotlib==3.8.4
- # via -r requirements.txt.in
mdit-py-plugins==0.4.2
# via shiny
mdurl==0.1.2
# via markdown-it-py
narwhals==1.46.0
# via shiny
-numpy==2.3.1
- # via
- # contourpy
- # matplotlib
orjson==3.10.18
# via shiny
packaging==25.0
# via
# htmltools
- # matplotlib
# shiny
# shinyswatch
-pillow==11.3.0
- # via matplotlib
prompt-toolkit==3.0.51
# via
# questionary
# shiny
-pyparsing==3.2.3
- # via matplotlib
-python-dateutil==2.9.0.post0
- # via matplotlib
python-multipart==0.0.20
# via shiny
-pytz==2023.3.post1
- # via astral
questionary==2.1.0
# via shiny
setuptools==80.9.0
@@ -82,8 +55,6 @@ shiny==1.4.0
# shinyswatch
shinyswatch==0.9.0
# via -r requirements.txt.in
-six==1.17.0
- # via python-dateutil
sniffio==1.3.1
# via anyio
starlette==0.47.1
diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in
index 986a4976..74559226 100644
--- a/webapp/requirements.txt.in
+++ b/webapp/requirements.txt.in
@@ -1,5 +1,2 @@
-astral==2.2
-matplotlib==3.8.4
-contourpy==1.3.1
shinyswatch
shiny
From f45fa66390a2cecff588bcc29d5717ad0c8bc675 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 21 Jul 2025 15:44:37 -0700
Subject: [PATCH 165/361] Revert "Remove app requirements"
This reverts commit 3c86a6e28baf6484754176e0e3cf2e60c5f01fa5.
---
webapp/requirements.txt | 29 +++++++++++++++++++++++++++++
webapp/requirements.txt.in | 3 +++
2 files changed, 32 insertions(+)
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index f312c72b..c09a3d7a 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -8,10 +8,20 @@ appdirs==1.4.4
# via shiny
asgiref==3.9.1
# via shiny
+astral==2.2
+ # via -r requirements.txt.in
click==8.2.1
# via
# shiny
# uvicorn
+contourpy==1.3.1
+ # via
+ # -r requirements.txt.in
+ # matplotlib
+cycler==0.12.1
+ # via matplotlib
+fonttools==4.58.5
+ # via matplotlib
h11==0.16.0
# via uvicorn
htmltools==0.6.0
@@ -20,31 +30,48 @@ htmltools==0.6.0
# shinyswatch
idna==3.10
# via anyio
+kiwisolver==1.4.8
+ # via matplotlib
linkify-it-py==2.0.3
# via shiny
markdown-it-py==3.0.0
# via
# mdit-py-plugins
# shiny
+matplotlib==3.8.4
+ # via -r requirements.txt.in
mdit-py-plugins==0.4.2
# via shiny
mdurl==0.1.2
# via markdown-it-py
narwhals==1.46.0
# via shiny
+numpy==2.3.1
+ # via
+ # contourpy
+ # matplotlib
orjson==3.10.18
# via shiny
packaging==25.0
# via
# htmltools
+ # matplotlib
# shiny
# shinyswatch
+pillow==11.3.0
+ # via matplotlib
prompt-toolkit==3.0.51
# via
# questionary
# shiny
+pyparsing==3.2.3
+ # via matplotlib
+python-dateutil==2.9.0.post0
+ # via matplotlib
python-multipart==0.0.20
# via shiny
+pytz==2023.3.post1
+ # via astral
questionary==2.1.0
# via shiny
setuptools==80.9.0
@@ -55,6 +82,8 @@ shiny==1.4.0
# shinyswatch
shinyswatch==0.9.0
# via -r requirements.txt.in
+six==1.17.0
+ # via python-dateutil
sniffio==1.3.1
# via anyio
starlette==0.47.1
diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in
index 74559226..986a4976 100644
--- a/webapp/requirements.txt.in
+++ b/webapp/requirements.txt.in
@@ -1,2 +1,5 @@
+astral==2.2
+matplotlib==3.8.4
+contourpy==1.3.1
shinyswatch
shiny
From 0a2d2e9fb5ae210130d137ce5c23b7a3f787efee Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Mon, 21 Jul 2025 15:48:10 -0700
Subject: [PATCH 166/361] Properly fix the webapp
---
webapp/README.md | 2 +-
webapp/requirements-dev.txt | 4 ++
webapp/requirements.txt | 99 -------------------------------------
webapp/requirements.txt.in | 4 --
4 files changed, 5 insertions(+), 104 deletions(-)
create mode 100644 webapp/requirements-dev.txt
diff --git a/webapp/README.md b/webapp/README.md
index b12432eb..e561b8f4 100644
--- a/webapp/README.md
+++ b/webapp/README.md
@@ -2,7 +2,7 @@ To run this app locally, install the requirements and run `shiny run`.
```
$ cd webapp
-$ pip install -r requirements.txt
+$ pip install -r requirements-dev.txt
$ shiny run
```
diff --git a/webapp/requirements-dev.txt b/webapp/requirements-dev.txt
new file mode 100644
index 00000000..9703163f
--- /dev/null
+++ b/webapp/requirements-dev.txt
@@ -0,0 +1,4 @@
+astral==2.2
+matplotlib
+shinyswatch
+shiny
diff --git a/webapp/requirements.txt b/webapp/requirements.txt
index c09a3d7a..882162f1 100644
--- a/webapp/requirements.txt
+++ b/webapp/requirements.txt
@@ -1,105 +1,6 @@
# This file was autogenerated by uv via the following command:
# uv pip compile requirements.txt.in --output-file requirements.txt
-anyio==4.9.0
- # via
- # starlette
- # watchfiles
-appdirs==1.4.4
- # via shiny
-asgiref==3.9.1
- # via shiny
astral==2.2
# via -r requirements.txt.in
-click==8.2.1
- # via
- # shiny
- # uvicorn
-contourpy==1.3.1
- # via
- # -r requirements.txt.in
- # matplotlib
-cycler==0.12.1
- # via matplotlib
-fonttools==4.58.5
- # via matplotlib
-h11==0.16.0
- # via uvicorn
-htmltools==0.6.0
- # via
- # shiny
- # shinyswatch
-idna==3.10
- # via anyio
-kiwisolver==1.4.8
- # via matplotlib
-linkify-it-py==2.0.3
- # via shiny
-markdown-it-py==3.0.0
- # via
- # mdit-py-plugins
- # shiny
-matplotlib==3.8.4
- # via -r requirements.txt.in
-mdit-py-plugins==0.4.2
- # via shiny
-mdurl==0.1.2
- # via markdown-it-py
-narwhals==1.46.0
- # via shiny
-numpy==2.3.1
- # via
- # contourpy
- # matplotlib
-orjson==3.10.18
- # via shiny
-packaging==25.0
- # via
- # htmltools
- # matplotlib
- # shiny
- # shinyswatch
-pillow==11.3.0
- # via matplotlib
-prompt-toolkit==3.0.51
- # via
- # questionary
- # shiny
-pyparsing==3.2.3
- # via matplotlib
-python-dateutil==2.9.0.post0
- # via matplotlib
-python-multipart==0.0.20
- # via shiny
pytz==2023.3.post1
# via astral
-questionary==2.1.0
- # via shiny
-setuptools==80.9.0
- # via shiny
-shiny==1.4.0
- # via
- # -r requirements.txt.in
- # shinyswatch
-shinyswatch==0.9.0
- # via -r requirements.txt.in
-six==1.17.0
- # via python-dateutil
-sniffio==1.3.1
- # via anyio
-starlette==0.47.1
- # via shiny
-typing-extensions==4.14.1
- # via
- # htmltools
- # shiny
- # shinyswatch
-uc-micro-py==1.0.3
- # via linkify-it-py
-uvicorn==0.35.0
- # via shiny
-watchfiles==1.1.0
- # via shiny
-wcwidth==0.2.13
- # via prompt-toolkit
-websockets==15.0.1
- # via shiny
diff --git a/webapp/requirements.txt.in b/webapp/requirements.txt.in
index 986a4976..39c93a83 100644
--- a/webapp/requirements.txt.in
+++ b/webapp/requirements.txt.in
@@ -1,5 +1 @@
astral==2.2
-matplotlib==3.8.4
-contourpy==1.3.1
-shinyswatch
-shiny
From af5a7151aaa6bd0ce5116e97e1f66865ca1ef4e1 Mon Sep 17 00:00:00 2001
From: Tom Matheussen <13683094+Tommatheussen@users.noreply.github.com>
Date: Thu, 27 Nov 2025 17:05:30 +0100
Subject: [PATCH 167/361] Fix HA 2025.12 breaking (#1291)
---
.../adaptive_lighting/hass_utils.py | 20 +++++++++++++++++++
custom_components/adaptive_lighting/switch.py | 3 +--
2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/custom_components/adaptive_lighting/hass_utils.py b/custom_components/adaptive_lighting/hass_utils.py
index c87d481f..21ea67b3 100644
--- a/custom_components/adaptive_lighting/hass_utils.py
+++ b/custom_components/adaptive_lighting/hass_utils.py
@@ -4,6 +4,7 @@ import logging
from collections.abc import Awaitable, Callable
from homeassistant.core import HomeAssistant, ServiceCall
+from homeassistant.helpers import device_registry, entity_registry
from homeassistant.util.read_only_dict import ReadOnlyDict
from .adaptation_utils import ServiceData
@@ -11,6 +12,25 @@ from .adaptation_utils import ServiceData
_LOGGER = logging.getLogger(__name__)
+def area_entities(hass: HomeAssistant, area_id: str):
+ """Get all entities linked to an area."""
+ ent_reg = entity_registry.async_get(hass)
+ entity_ids = [
+ entry.entity_id
+ for entry in entity_registry.async_entries_for_area(ent_reg, area_id)
+ ]
+ dev_reg = device_registry.async_get(hass)
+ entity_ids.extend(
+ [
+ entity.entity_id
+ for device in device_registry.async_entries_for_area(dev_reg, area_id)
+ for entity in entity_registry.async_entries_for_device(ent_reg, device.id)
+ if entity.area_id is None
+ ],
+ )
+ return entity_ids
+
+
def setup_service_call_interceptor(
hass: HomeAssistant,
domain: str,
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index f00227dc..fdeac7dd 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -75,7 +75,6 @@ from homeassistant.helpers.event import (
)
from homeassistant.helpers.restore_state import RestoreEntity
from homeassistant.helpers.sun import get_astral_location
-from homeassistant.helpers.template import area_entities
from homeassistant.util import slugify
from homeassistant.util.color import (
color_temperature_to_rgb,
@@ -153,7 +152,7 @@ from .const import (
apply_service_schema,
replace_none_str,
)
-from .hass_utils import setup_service_call_interceptor
+from .hass_utils import area_entities, setup_service_call_interceptor
from .helpers import (
clamp,
color_difference_redmean,
From e8af7a485e8bbf1958e343b2ceae93657f8d9c11 Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 27 Nov 2025 09:06:41 -0800
Subject: [PATCH 168/361] Bump to 1.27.0 for fixes in 2025.12 (#1293)
---
.github/workflows/pytest.yaml | 12 ++++++++-
Dockerfile | 6 +++++
.../adaptive_lighting/manifest.json | 2 +-
scripts/setup-dependencies | 16 ++++++++++++
tests/conftest.py | 26 +++++++++++++++++++
tests/test_switch.py | 11 +++++++-
6 files changed, 70 insertions(+), 3 deletions(-)
create mode 100644 tests/conftest.py
diff --git a/.github/workflows/pytest.yaml b/.github/workflows/pytest.yaml
index fb25eff0..21d76466 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -26,7 +26,17 @@ jobs:
python-version: "3.13"
- core-version: "2025.5.3"
python-version: "3.13"
- - core-version: "2025.6.1"
+ - core-version: "2025.6.3"
+ python-version: "3.13"
+ - core-version: "2025.7.4"
+ python-version: "3.13"
+ - core-version: "2025.8.3"
+ python-version: "3.13"
+ - core-version: "2025.9.4"
+ python-version: "3.13"
+ - core-version: "2025.10.4"
+ python-version: "3.13"
+ - core-version: "2025.11.3"
python-version: "3.13"
- core-version: "dev"
python-version: "3.13"
diff --git a/Dockerfile b/Dockerfile
index 3bd36ddd..c4d9c695 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -9,6 +9,12 @@
FROM ghcr.io/astral-sh/uv:debian
+# Install build dependencies for Python extensions
+RUN apt-get update && apt-get install -y --no-install-recommends \
+ python3-dev \
+ build-essential \
+ && rm -rf /var/lib/apt/lists/*
+
# Clone home-assistant/core
RUN git clone --depth 1 --branch dev https://github.com/home-assistant/core.git /core
diff --git a/custom_components/adaptive_lighting/manifest.json b/custom_components/adaptive_lighting/manifest.json
index 92100afa..856abfe8 100644
--- a/custom_components/adaptive_lighting/manifest.json
+++ b/custom_components/adaptive_lighting/manifest.json
@@ -8,5 +8,5 @@
"iot_class": "calculated",
"issue_tracker": "https://github.com/basnijholt/adaptive-lighting/issues",
"requirements": ["ulid-transform"],
- "version": "1.26.0"
+ "version": "1.27.0"
}
diff --git a/scripts/setup-dependencies b/scripts/setup-dependencies
index b9e2de1f..92a41411 100755
--- a/scripts/setup-dependencies
+++ b/scripts/setup-dependencies
@@ -6,6 +6,22 @@ if grep -q 'mypy-dev==1.14.0a3' core/requirements_test.txt; then
# mypy-dev==1.14.0a3 seems to not be available anymore, HA 2024.12 is affected
sed -i 's/mypy-dev==1.14.0a3/mypy-dev==1.14.0a7/' core/requirements_test.txt
fi
+if grep -q 'mypy-dev==1.16.0a1' core/requirements_test.txt; then
+ # mypy-dev==1.16.0a1 seems to not be available anymore, HA 2025.2 is affected
+ sed -i 's/mypy-dev==1.16.0a1/mypy-dev==1.16.0a9/' core/requirements_test.txt
+fi
+if grep -q 'mypy-dev==1.16.0a3' core/requirements_test.txt; then
+ # mypy-dev==1.16.0a3 seems to not be available anymore, HA 2025.3 is affected
+ sed -i 's/mypy-dev==1.16.0a3/mypy-dev==1.16.0a9/' core/requirements_test.txt
+fi
+if grep -q 'mypy-dev==1.16.0a7' core/requirements_test.txt; then
+ # mypy-dev==1.16.0a7 seems to not be available anymore, HA 2025.4 is affected
+ sed -i 's/mypy-dev==1.16.0a7/mypy-dev==1.16.0a9/' core/requirements_test.txt
+fi
+if grep -q 'mypy-dev==1.16.0a8' core/requirements_test.txt; then
+ # mypy-dev==1.16.0a8 seems to not be available anymore, HA 2025.5 and 2025.6 is affected
+ sed -i 's/mypy-dev==1.16.0a8/mypy-dev==1.16.0a9/' core/requirements_test.txt
+fi
uv pip install -r core/requirements.txt
uv pip install -r core/requirements_test.txt
diff --git a/tests/conftest.py b/tests/conftest.py
new file mode 100644
index 00000000..cce77d96
--- /dev/null
+++ b/tests/conftest.py
@@ -0,0 +1,26 @@
+"""Pytest configuration for adaptive-lighting tests."""
+
+from unittest.mock import patch
+
+import pytest
+
+
+@pytest.fixture(autouse=True)
+def mock_template_deprecation_issue():
+ """Mock the template deprecation issue creation.
+
+ The template component's legacy platform syntax creates deprecation
+ issues that require translations. Since adaptive-lighting tests use
+ template lights as test fixtures (not testing the template integration
+ itself), we mock the issue creation to avoid translation validation errors.
+ """
+ # Patch the create_legacy_template_issue function in the template helpers
+ # to be a no-op when called for the deprecated_legacy_templates issue
+ try:
+ with patch(
+ "homeassistant.components.template.helpers.create_legacy_template_issue",
+ ):
+ yield
+ except (ImportError, ModuleNotFoundError, AttributeError):
+ # Older HA versions don't have this function
+ yield
diff --git a/tests/test_switch.py b/tests/test_switch.py
index cc03fa24..fc5f67cc 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -82,7 +82,16 @@ from homeassistant.components.light import (
)
from homeassistant.components.light import DOMAIN as LIGHT_DOMAIN
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
-from homeassistant.components.template.light import LightTemplate
+
+try:
+ # HA >= 2025.8
+ from homeassistant.components.template.light import (
+ StateLightEntity as LightTemplate,
+ )
+except ImportError:
+ # HA < 2025.8
+ from homeassistant.components.template.light import LightTemplate
+
from homeassistant.config_entries import ConfigEntryState
from homeassistant.const import (
ATTR_AREA_ID,
From 95a8f34000ab4848bdd724265afe64a2f6fa3aae Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:17:12 -0800
Subject: [PATCH 169/361] docs: add Tommatheussen as a contributor for code
(#1294)
---
.all-contributorsrc | 9 +++++++++
README.md | 3 ++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 76a8cf13..6f34f6c3 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1062,6 +1062,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "Tommatheussen",
+ "name": "Tom Matheussen",
+ "avatar_url": "https://avatars.githubusercontent.com/u/13683094?v=4",
+ "profile": "https://github.com/Tommatheussen",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 7af1feb8..0b2d11cc 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -616,6 +616,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Luna Jernberg 🌍 |
 Jeff Wilson 💻 |
 Rasmus Lundsgaard 💻 |
+  Tom Matheussen 💻 |
From 6f846c26cab2666e296e2e5f617b9805ce8a251d Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 27 Nov 2025 09:27:13 -0800
Subject: [PATCH 170/361] Fix race condition where timer.start_time is None
while is_running() is True (#1295)
When start() creates a task with asyncio.create_task(), the task is scheduled
but not immediately executed. This means is_running() returns True (task exists
and not done), but start_time is still None because _run() hasn't executed yet.
This causes a TypeError when comparing event.time_fired > timer.start_time.
Fix by setting start_time in start() before creating the task.
Fixes #1272
---
custom_components/adaptive_lighting/switch.py | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index fdeac7dd..6a22a41f 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -2680,7 +2680,6 @@ class _AsyncSingleShotTimer:
async def _run(self):
"""Run the timer. Don't call this directly, use start() instead."""
- self.start_time = dt_util.utcnow()
await asyncio.sleep(self.delay)
if self.callback:
if asyncio.iscoroutinefunction(self.callback):
@@ -2696,6 +2695,10 @@ class _AsyncSingleShotTimer:
"""Start the timer."""
if self.task is not None and not self.task.done():
self.task.cancel()
+ # Set start_time before creating task to avoid race condition
+ # where is_running() returns True but start_time is still None
+ # See: https://github.com/basnijholt/adaptive-lighting/issues/1272
+ self.start_time = dt_util.utcnow()
self.task = asyncio.create_task(self._run())
def cancel(self):
From b34cc1ffaa40c802ce07d256b8ef7c9bd8f2858e Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:27:27 -0800
Subject: [PATCH 171/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/c?=
=?UTF-8?q?heckout=20action=20to=20v6=20(#1288)?=
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 e52963b0..29b8a7b4 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@v4
+ uses: actions/checkout@v6
- name: Set Up Python
uses: actions/setup-python@v5
diff --git a/.github/workflows/hassfest.yaml b/.github/workflows/hassfest.yaml
index 4d141e56..69f93e15 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@v4.2.2"
+ - uses: "actions/checkout@v6.0.0"
- uses: home-assistant/actions/hassfest@master
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 8c4483f7..8d561b02 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@v4
+ uses: actions/checkout@v6
with:
repository: ${{ github.repository }}
ref: ${{ github.ref }}
persist-credentials: false
fetch-depth: 0
- name: Check out code from GitHub
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
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 d5c915c8..424f50b3 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@v4
+ uses: actions/checkout@v6
with:
ref: main
fetch-depth: 0
diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml
index 7f579afa..c6f2cfb3 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@v4
+ - uses: actions/checkout@v6
- 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 21d76466..b8a59b40 100644
--- a/.github/workflows/pytest.yaml
+++ b/.github/workflows/pytest.yaml
@@ -42,7 +42,7 @@ jobs:
python-version: "3.13"
steps:
- name: Check out code from GitHub
- uses: actions/checkout@v4
+ uses: actions/checkout@v6
- name: Install Home Assistant
uses: ./.github/workflows/install_dependencies
diff --git a/.github/workflows/update-readme.yml b/.github/workflows/update-readme.yml
index a4422130..7cdb8e24 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@v4
+ uses: actions/checkout@v6
- name: Install Home Assistant
uses: ./.github/workflows/install_dependencies
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 79c7fe00..3fa46b4e 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@v4"
+ - uses: "actions/checkout@v6"
- name: HACS validation
uses: "hacs/action@main"
with:
From 1556de8c4f0962ddc90611ca64e37d114fd04e7c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:27:38 -0800
Subject: [PATCH 172/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20mcr.micro?=
=?UTF-8?q?soft.com/devcontainers/python=20Docker=20tag=20to=20v3=20(#1292?=
=?UTF-8?q?)?=
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>
---
.devcontainer.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.devcontainer.json b/.devcontainer.json
index 0a09ed54..8d5e2bd9 100644
--- a/.devcontainer.json
+++ b/.devcontainer.json
@@ -1,6 +1,6 @@
{
"name": "basnijholt/adaptive_lighting",
- "image": "mcr.microsoft.com/devcontainers/python:1-3.13",
+ "image": "mcr.microsoft.com/devcontainers/python:3-3.13",
"postCreateCommand": "./scripts/setup-devcontainer && . .venv/bin/activate",
"forwardPorts": [
8123
From 68e243c87e69c97030d222846c0c0771bccc94ae Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 27 Nov 2025 09:30:01 -0800
Subject: [PATCH 173/361] Fix infinite loop when disabling SimpleSwitch
entities (#1296)
* Add regression tests for SimpleSwitch initial state bug
Adds tests that verify SimpleSwitch._state is set immediately in __init__
rather than waiting for async_added_to_hass(). These tests currently FAIL
because _state is None after __init__, which causes an infinite loop in
_setup_listeners when the entity is disabled (since async_added_to_hass
is never called for disabled entities).
Regression tests for: https://github.com/basnijholt/adaptive-lighting/issues/1264
* Fix infinite loop when disabling SimpleSwitch entities
The issue was that SimpleSwitch._state was initialized to None in __init__,
but only set to a boolean value in async_added_to_hass(). When an entity
is disabled, async_added_to_hass() is never called, so _state stayed None.
The _setup_listeners() method has a while loop that waits for
_state is not None for all SimpleSwitch children (sleep_mode_switch,
adapt_brightness_switch, adapt_color_switch). With _state stuck at None,
this created an infinite loop.
The fix sets _state to initial_state directly in __init__ instead of
waiting for async_added_to_hass() to set it. The async_added_to_hass()
will still properly restore state from the last session or set based
on initial_state as before.
Fixes: https://github.com/basnijholt/adaptive-lighting/issues/1264
---
custom_components/adaptive_lighting/switch.py | 2 +-
tests/test_switch.py | 74 +++++++++++++++++++
2 files changed, 75 insertions(+), 1 deletion(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 6a22a41f..19e99d78 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -1563,7 +1563,7 @@ class SimpleSwitch(SwitchEntity, RestoreEntity):
self.hass = hass
data = validate(config_entry)
self._icon = icon
- self._state: bool | None = None
+ self._state: bool = initial_state
self._which = which
self._config_name = data[CONF_NAME]
self._unique_id = f"{self._config_name}_{slugify(self._which)}"
diff --git a/tests/test_switch.py b/tests/test_switch.py
index fc5f67cc..1016b591 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -65,6 +65,7 @@ from homeassistant.components.adaptive_lighting.switch import (
CONF_INTERCEPT,
AdaptiveLightingManager,
AdaptiveSwitch,
+ SimpleSwitch,
_attributes_have_changed,
color_difference_redmean,
create_context,
@@ -2275,3 +2276,76 @@ async def test_brightness_mode(hass, brightness_mode, dark, light):
# After sunrise the brightness should be light_brightness
await patch_time_and_update(after_sunrise)
assert is_approx_equal(switch._settings[ATTR_BRIGHTNESS_PCT], light_brightness)
+
+
+async def test_simple_switch_initial_state_not_none(hass):
+ """Test that SimpleSwitch._state is not None after __init__.
+
+ Regression test for https://github.com/basnijholt/adaptive-lighting/issues/1264
+
+ When an entity is disabled in Home Assistant, async_added_to_hass() is never
+ called. Previously, SimpleSwitch._state was initialized to None and only set
+ to True/False in async_added_to_hass(). This caused an infinite loop in
+ AdaptiveSwitch._setup_listeners() which waits for all SimpleSwitch._state
+ to be not None.
+
+ The fix is to initialize _state to the initial_state value in __init__.
+ """
+ entry = MockConfigEntry(domain=DOMAIN, data={CONF_NAME: DEFAULT_NAME})
+ entry.add_to_hass(hass)
+
+ # Create a SimpleSwitch without calling async_added_to_hass
+ # (simulating a disabled entity)
+ switch = SimpleSwitch(
+ which="Test",
+ initial_state=True,
+ hass=hass,
+ config_entry=entry,
+ icon="mdi:test",
+ )
+
+ # Before the fix: _state would be None, causing infinite loop
+ # After the fix: _state should be the initial_state value
+ assert switch._state is not None, (
+ "SimpleSwitch._state should not be None after __init__. "
+ "This would cause an infinite loop in _setup_listeners when the entity is disabled."
+ )
+ assert switch._state is True # Should be the initial_state value
+
+
+async def test_simple_switch_state_after_async_added_to_hass(hass):
+ """Test that SimpleSwitch._state is properly set after async_added_to_hass.
+
+ This ensures the fix for #1264 doesn't break normal entity initialization.
+ """
+ entry = MockConfigEntry(domain=DOMAIN, data={CONF_NAME: DEFAULT_NAME})
+ entry.add_to_hass(hass)
+
+ # Create switches with different initial states
+ switch_true = SimpleSwitch(
+ which="Test True",
+ initial_state=True,
+ hass=hass,
+ config_entry=entry,
+ icon="mdi:test",
+ )
+ switch_false = SimpleSwitch(
+ which="Test False",
+ initial_state=False,
+ hass=hass,
+ config_entry=entry,
+ icon="mdi:test",
+ )
+
+ # Verify initial state is set correctly
+ assert switch_true._state is True
+ assert switch_false._state is False
+
+ # Call async_added_to_hass (simulating normal entity setup)
+ # Since there's no last state, it should use the initial_state
+ await switch_true.async_added_to_hass()
+ await switch_false.async_added_to_hass()
+
+ # State should still be correct after async_added_to_hass
+ assert switch_true._state is True
+ assert switch_false._state is False
From 9244ff39fe5d2cc0e5ee1e696f2d8f8bdac9dba7 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:30:12 -0800
Subject: [PATCH 174/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20astral-sh?=
=?UTF-8?q?/setup-uv=20action=20to=20v7=20(#1271)?=
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/install_dependencies/action.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 8d561b02..9a9903f9 100644
--- a/.github/workflows/install_dependencies/action.yml
+++ b/.github/workflows/install_dependencies/action.yml
@@ -32,7 +32,7 @@ runs:
with:
python-version: ${{ inputs.python-version }}
- name: Set up UV
- uses: astral-sh/setup-uv@v6
+ uses: astral-sh/setup-uv@v7
- name: Install dependencies
shell: bash
run: |
From f6321afeae237e0514b249e2adbcc3609143761b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:30:26 -0800
Subject: [PATCH 175/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/u?=
=?UTF-8?q?pload-pages-artifact=20action=20to=20v4=20(#1259)?=
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 29b8a7b4..b6614d12 100644
--- a/.github/workflows/deploy-webapp.yml
+++ b/.github/workflows/deploy-webapp.yml
@@ -53,7 +53,7 @@ jobs:
uses: actions/configure-pages@v5
- name: Upload artifact
- uses: actions/upload-pages-artifact@v3
+ uses: actions/upload-pages-artifact@v4
with:
# Upload the 'site' directory, where your app has been built
path: "site"
From 561749ac060e4ccfe706b401094663ec4588904d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:34:46 -0800
Subject: [PATCH 176/361] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/s?=
=?UTF-8?q?etup-python=20action=20to=20v6=20(#1261)?=
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 b6614d12..698d8fec 100644
--- a/.github/workflows/deploy-webapp.yml
+++ b/.github/workflows/deploy-webapp.yml
@@ -33,7 +33,7 @@ jobs:
uses: actions/checkout@v6
- name: Set Up Python
- uses: actions/setup-python@v5
+ uses: actions/setup-python@v6
with:
python-version: 3.13.5
diff --git a/.github/workflows/install_dependencies/action.yml b/.github/workflows/install_dependencies/action.yml
index 9a9903f9..4ab58169 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@v5.6.0
+ uses: actions/setup-python@v6.1.0
with:
python-version: ${{ inputs.python-version }}
- name: Set up UV
diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml
index c6f2cfb3..57263d00 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@v6
- - uses: actions/setup-python@v5
+ - uses: actions/setup-python@v6
- uses: pre-commit/action@v3.0.1
From 32719eabaea9eaa58fd7d52d9202101369c80aa7 Mon Sep 17 00:00:00 2001
From: ams2990
Date: Thu, 27 Nov 2025 07:35:09 -1000
Subject: [PATCH 177/361] Fix some type hint issues (#1280)
---
custom_components/adaptive_lighting/__init__.py | 4 ++--
.../adaptive_lighting/_docs_helpers.py | 7 ++-----
.../adaptive_lighting/adaptation_utils.py | 6 +++---
.../adaptive_lighting/color_and_brightness.py | 16 ++++++++--------
.../adaptive_lighting/config_flow.py | 3 ++-
5 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/custom_components/adaptive_lighting/__init__.py b/custom_components/adaptive_lighting/__init__.py
index 13c2d7d1..0c8bad80 100644
--- a/custom_components/adaptive_lighting/__init__.py
+++ b/custom_components/adaptive_lighting/__init__.py
@@ -70,12 +70,12 @@ async def async_setup_entry(hass: HomeAssistant, config_entry: ConfigEntry):
return True
-async def async_update_options(hass, config_entry: ConfigEntry):
+async def async_update_options(hass: HomeAssistant, config_entry: ConfigEntry):
"""Update options."""
await hass.config_entries.async_reload(config_entry.entry_id)
-async def async_unload_entry(hass, config_entry: ConfigEntry) -> bool:
+async def async_unload_entry(hass: HomeAssistant, config_entry: ConfigEntry) -> bool:
"""Unload a config entry."""
unload_ok = await hass.config_entries.async_forward_entry_unload(
config_entry,
diff --git a/custom_components/adaptive_lighting/_docs_helpers.py b/custom_components/adaptive_lighting/_docs_helpers.py
index 31225a6c..49899395 100644
--- a/custom_components/adaptive_lighting/_docs_helpers.py
+++ b/custom_components/adaptive_lighting/_docs_helpers.py
@@ -57,8 +57,6 @@ def _type_to_str(type_: Any) -> str: # noqa: PLR0911
def generate_config_markdown_table():
- import pandas as pd
-
rows = []
for k, default, type_ in VALIDATION_TUPLES:
description = DOCS[k]
@@ -84,12 +82,11 @@ def _schema_to_dict(schema: vol.Schema) -> dict[str, tuple[Any, Any]]:
def _generate_service_markdown_table(
- schema: dict[str, tuple[Any, Any]],
+ schema: vol.Schema,
alternative_docs: dict[str, str] | None = None,
):
- schema = _schema_to_dict(schema)
rows = []
- for k, (default, type_) in schema.items():
+ for k, (default, type_) in _schema_to_dict(schema).items():
if alternative_docs is not None and k in alternative_docs:
description = alternative_docs[k]
else:
diff --git a/custom_components/adaptive_lighting/adaptation_utils.py b/custom_components/adaptive_lighting/adaptation_utils.py
index aea061d1..2c339223 100644
--- a/custom_components/adaptive_lighting/adaptation_utils.py
+++ b/custom_components/adaptive_lighting/adaptation_utils.py
@@ -54,7 +54,7 @@ def _split_service_call_data(service_data: ServiceData) -> list[ServiceData]:
common_data = {k: service_data[k] for k in common_attrs if k in service_data}
attributes_split_sequence = [BRIGHTNESS_ATTRS, COLOR_ATTRS]
- service_datas = []
+ service_datas: list[dict[str, Any]] = []
for attributes in attributes_split_sequence:
split_data = {
@@ -106,7 +106,7 @@ async def _create_service_call_data_iterator(
hass: HomeAssistant,
service_datas: list[ServiceData],
filter_by_state: bool,
-) -> AsyncGenerator[ServiceData, None]:
+) -> AsyncGenerator[ServiceData]:
"""Enumerates and filters a list of service datas on the fly.
If filtering is enabled, every service data is filtered by the current state of
@@ -141,7 +141,7 @@ class AdaptationData:
entity_id: str
context: Context
sleep_time: float
- service_call_datas: AsyncGenerator[ServiceData, None]
+ service_call_datas: AsyncGenerator[ServiceData]
force: bool
max_length: int
which: Literal["brightness", "color", "both"]
diff --git a/custom_components/adaptive_lighting/color_and_brightness.py b/custom_components/adaptive_lighting/color_and_brightness.py
index 6fdb7083..2fd93e67 100644
--- a/custom_components/adaptive_lighting/color_and_brightness.py
+++ b/custom_components/adaptive_lighting/color_and_brightness.py
@@ -8,8 +8,8 @@ import datetime
import logging
import math
from dataclasses import dataclass
-from datetime import timedelta
-from functools import cached_property, partial
+from datetime import UTC, timedelta
+from functools import partial
from typing import TYPE_CHECKING, Any, Literal, cast
from homeassistant.util.color import (
@@ -17,9 +17,10 @@ from homeassistant.util.color import (
color_temperature_to_rgb,
color_xy_to_hs,
)
+from propcache.api import cached_property
if TYPE_CHECKING:
- import astral
+ import astral.location
# 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.
@@ -32,7 +33,6 @@ 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."
@@ -44,7 +44,7 @@ class SunEvents:
"""Track the state of the sun and associated light settings."""
name: str
- astral_location: astral.Location
+ astral_location: astral.location.Location
sunrise_time: datetime.time | None
min_sunrise_time: datetime.time | None
max_sunrise_time: datetime.time | None
@@ -198,7 +198,7 @@ class SunLightSettings:
"""Track the state of the sun and associated light settings."""
name: str
- astral_location: astral.Location
+ astral_location: astral.location.Location
adapt_until_sleep: bool
max_brightness: int
max_color_temp: int
@@ -296,7 +296,7 @@ class SunLightSettings:
)
return clamp(brightness, self.min_brightness, self.max_brightness)
- def brightness_pct(self, dt: datetime.datetime, is_sleep: bool) -> float:
+ def brightness_pct(self, dt: datetime.datetime, is_sleep: bool) -> float | None:
"""Calculate the brightness in %."""
if is_sleep:
return self.sleep_brightness
@@ -331,7 +331,7 @@ class SunLightSettings:
) -> dict[str, Any]:
"""Calculate the brightness and color."""
sun_position = self.sun.sun_position(dt)
- rgb_color: tuple[float, float, float]
+ rgb_color: tuple[int, int, int]
# 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)
diff --git a/custom_components/adaptive_lighting/config_flow.py b/custom_components/adaptive_lighting/config_flow.py
index 3922d000..00214fdb 100644
--- a/custom_components/adaptive_lighting/config_flow.py
+++ b/custom_components/adaptive_lighting/config_flow.py
@@ -1,6 +1,7 @@
"""Config flow for Adaptive Lighting integration."""
import logging
+from typing import Any
import homeassistant.helpers.config_validation as cv
import voluptuous as vol
@@ -40,7 +41,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN):
errors=errors,
)
- async def async_step_import(self, user_input=None):
+ async def async_step_import(self, user_input: dict[str, Any]):
"""Handle configuration by YAML file."""
await self.async_set_unique_id(user_input[CONF_NAME])
# Keep a list of switches that are configured via YAML
From 3d3d24691881ed386384a64f2295492dac5745e2 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:36:04 -0800
Subject: [PATCH 178/361] docs: add ams2990 as a contributor for code (#1297)
* 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 6f34f6c3..004381bb 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1071,6 +1071,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "ams2990",
+ "name": "ams2990",
+ "avatar_url": "https://avatars.githubusercontent.com/u/488907?v=4",
+ "profile": "https://github.com/ams2990",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 0b2d11cc..9f4388c3 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -617,6 +617,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Jeff Wilson 💻 |
 Rasmus Lundsgaard 💻 |
 Tom Matheussen 💻 |
+  ams2990 💻 |
From afd7b935d7ad399c8b0a19dcb1ff6d2e07a31ddf Mon Sep 17 00:00:00 2001
From: DataGhost <3911340+DataGhost@users.noreply.github.com>
Date: Thu, 27 Nov 2025 18:54:14 +0100
Subject: [PATCH 179/361] Check for external light mode (temperature vs rgb)
switch (#1282)
---
custom_components/adaptive_lighting/switch.py | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index 19e99d78..b423fc3c 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -766,6 +766,31 @@ def _attributes_have_changed(
context.id,
)
return True
+
+ if adapt_color and (
+ (
+ old_attributes.get(ATTR_COLOR_TEMP_KELVIN)
+ and not new_attributes.get(ATTR_COLOR_TEMP_KELVIN)
+ )
+ or (
+ old_attributes.get(ATTR_RGB_COLOR)
+ and not new_attributes.get(ATTR_RGB_COLOR)
+ )
+ ):
+ last_mode = (
+ "color_temp" if old_attributes.get(ATTR_COLOR_TEMP_KELVIN) else "rgb"
+ )
+ current_mode = (
+ "color_temp" if new_attributes.get(ATTR_COLOR_TEMP_KELVIN) else "rgb"
+ )
+ _LOGGER.debug(
+ "Light mode of %s changed from %s to %s with context.id='%s'",
+ light,
+ last_mode,
+ current_mode,
+ context.id,
+ )
+ return True
return False
From 41e13bc944acb987a6c524cffa198d6361860758 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 09:57:41 -0800
Subject: [PATCH 180/361] docs: add DataGhost as a contributor for code (#1298)
* 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 004381bb..c498e6ce 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1080,6 +1080,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "DataGhost",
+ "name": "DataGhost",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3911340?v=4",
+ "profile": "https://github.com/DataGhost",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 9f4388c3..590056ad 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -618,6 +618,7 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
 Rasmus Lundsgaard 💻 |
 Tom Matheussen 💻 |
 ams2990 💻 |
+  DataGhost 💻 |
From 4feaf2c291577f95957df8c48de3369dfa4d88eb Mon Sep 17 00:00:00 2001
From: Bas Nijholt
Date: Thu, 27 Nov 2025 10:02:50 -0800
Subject: [PATCH 181/361] Add bidirectional color mode change detection (issue
#1275) (#1299)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Extract _has_color_mode_changed() function that checks original attributes
BEFORE conversion, enabling detection of all mode switches:
- color_temp → RGB ✓
- color_temp → XY ✓
- RGB → color_temp ✓
- RGB → XY ✓
- XY → color_temp ✓
- XY → RGB ✓
This improves on PR #1282 by detecting mode changes in both directions.
---
custom_components/adaptive_lighting/switch.py | 87 ++++++++----
tests/test_switch.py | 125 ++++++++++++++++--
2 files changed, 180 insertions(+), 32 deletions(-)
diff --git a/custom_components/adaptive_lighting/switch.py b/custom_components/adaptive_lighting/switch.py
index b423fc3c..59b98a0c 100644
--- a/custom_components/adaptive_lighting/switch.py
+++ b/custom_components/adaptive_lighting/switch.py
@@ -694,6 +694,58 @@ def _add_missing_attributes(
return old_attributes, new_attributes
+def _has_color_mode_changed(
+ light: str,
+ old_attributes: dict[str, Any],
+ new_attributes: dict[str, Any],
+ context: Context,
+) -> bool:
+ """Check if the light's color mode changed (e.g., color_temp to RGB or vice versa).
+
+ This must be called BEFORE _add_missing_attributes() to detect mode changes
+ using the original attributes. See issue #1275.
+ """
+ old_has_color_temp = old_attributes.get(ATTR_COLOR_TEMP_KELVIN) is not None
+ old_has_rgb = old_attributes.get(ATTR_RGB_COLOR) is not None
+ old_has_xy = old_attributes.get(ATTR_XY_COLOR) is not None
+
+ new_has_color_temp = new_attributes.get(ATTR_COLOR_TEMP_KELVIN) is not None
+ new_has_rgb = new_attributes.get(ATTR_RGB_COLOR) is not None
+ new_has_xy = new_attributes.get(ATTR_XY_COLOR) is not None
+
+ # Determine old and new color modes
+ # Priority: color_temp > rgb > xy (matching typical light behavior)
+ if old_has_color_temp:
+ old_mode = "color_temp"
+ elif old_has_rgb:
+ old_mode = "rgb"
+ elif old_has_xy:
+ old_mode = "xy"
+ else:
+ old_mode = None
+
+ if new_has_color_temp:
+ new_mode = "color_temp"
+ elif new_has_rgb:
+ new_mode = "rgb"
+ elif new_has_xy:
+ new_mode = "xy"
+ else:
+ new_mode = None
+
+ # Check if mode changed
+ if old_mode is not None and new_mode is not None and old_mode != new_mode:
+ _LOGGER.debug(
+ "Light mode of %s changed from %s to %s with context.id='%s'",
+ light,
+ old_mode,
+ new_mode,
+ context.id,
+ )
+ return True
+ return False
+
+
def _attributes_have_changed(
light: str,
old_attributes: dict[str, Any],
@@ -706,6 +758,17 @@ def _attributes_have_changed(
# so we must protect for `None` here
# see https://github.com/home-assistant/core/pull/101946
+ # Check for color mode changes BEFORE attribute conversion
+ # This detects external changes like Hue scenes switching from color_temp to RGB
+ # See: https://github.com/basnijholt/adaptive-lighting/issues/1275
+ if adapt_color and _has_color_mode_changed(
+ light,
+ old_attributes,
+ new_attributes,
+ context,
+ ):
+ return True
+
if adapt_color:
old_attributes, new_attributes = _add_missing_attributes(
old_attributes,
@@ -767,30 +830,6 @@ def _attributes_have_changed(
)
return True
- if adapt_color and (
- (
- old_attributes.get(ATTR_COLOR_TEMP_KELVIN)
- and not new_attributes.get(ATTR_COLOR_TEMP_KELVIN)
- )
- or (
- old_attributes.get(ATTR_RGB_COLOR)
- and not new_attributes.get(ATTR_RGB_COLOR)
- )
- ):
- last_mode = (
- "color_temp" if old_attributes.get(ATTR_COLOR_TEMP_KELVIN) else "rgb"
- )
- current_mode = (
- "color_temp" if new_attributes.get(ATTR_COLOR_TEMP_KELVIN) else "rgb"
- )
- _LOGGER.debug(
- "Light mode of %s changed from %s to %s with context.id='%s'",
- light,
- last_mode,
- current_mode,
- context.id,
- )
- return True
return False
diff --git a/tests/test_switch.py b/tests/test_switch.py
index 1016b591..5011ebc6 100644
--- a/tests/test_switch.py
+++ b/tests/test_switch.py
@@ -1010,26 +1010,36 @@ def test_attributes_have_changed():
new_attributes=attrs,
**kwargs,
)
- _LOGGER.debug("Test switch from color_temp to rgb_color")
- assert not _attributes_have_changed(
+ # Test color mode switches - feature added to detect external changes
+ # (e.g., when Hue scenes change light from color_temp to RGB mode)
+ # See: https://github.com/basnijholt/adaptive-lighting/issues/1275
+ #
+ # All mode switches are now detected bidirectionally by checking original
+ # attributes BEFORE conversion in _has_color_mode_changed().
+ _LOGGER.debug(
+ "Test switch from color_temp to rgb_color - should detect mode change",
+ )
+ assert _attributes_have_changed(
old_attributes={ATTR_BRIGHTNESS: 1, ATTR_COLOR_TEMP_KELVIN: 2702},
new_attributes={ATTR_BRIGHTNESS: 1, ATTR_RGB_COLOR: (255, 166, 87)},
**kwargs,
)
- _LOGGER.debug("Test switch from rgb_color to color_temp")
- assert not _attributes_have_changed(
+ _LOGGER.debug(
+ "Test switch from rgb_color to color_temp - should detect mode change",
+ )
+ assert _attributes_have_changed(
old_attributes={ATTR_BRIGHTNESS: 1, ATTR_RGB_COLOR: (255, 166, 87)},
new_attributes={ATTR_BRIGHTNESS: 1, ATTR_COLOR_TEMP_KELVIN: 2702},
**kwargs,
)
- _LOGGER.debug("Test switch from color_temp to color_xy")
- assert not _attributes_have_changed(
+ _LOGGER.debug("Test switch from color_temp to color_xy - should detect mode change")
+ assert _attributes_have_changed(
old_attributes={ATTR_BRIGHTNESS: 1, ATTR_COLOR_TEMP_KELVIN: 2702},
new_attributes={ATTR_BRIGHTNESS: 1, ATTR_XY_COLOR: (0.526, 0.387)},
**kwargs,
)
- _LOGGER.debug("Test switch from color_xy to color_temp")
- assert not _attributes_have_changed(
+ _LOGGER.debug("Test switch from color_xy to color_temp - should detect mode change")
+ assert _attributes_have_changed(
old_attributes={ATTR_BRIGHTNESS: 1, ATTR_XY_COLOR: (0.526, 0.387)},
new_attributes={ATTR_BRIGHTNESS: 1, ATTR_COLOR_TEMP_KELVIN: 2702},
**kwargs,
@@ -2349,3 +2359,102 @@ async def test_simple_switch_state_after_async_added_to_hass(hass):
# State should still be correct after async_added_to_hass
assert switch_true._state is True
assert switch_false._state is False
+
+
+def test_attributes_have_changed_light_mode_switch():
+ """Test detection of external light mode changes (color_temp vs rgb vs xy).
+
+ Regression test for https://github.com/basnijholt/adaptive-lighting/issues/1275
+
+ When a user activates a Hue Scene (or similar) via an external app, the light
+ may switch from color_temp mode to RGB/XY mode (or vice versa). This should be
+ detected as an external change so AL doesn't immediately override it.
+
+ The _has_color_mode_changed() function checks the original attributes BEFORE
+ any conversion, enabling bidirectional mode change detection.
+ """
+ context = Context()
+ base_kwargs = {
+ "light": "light.test",
+ "adapt_brightness": True,
+ "context": context,
+ }
+
+ # Test 1: adapt_color=True - all mode changes should be detected
+ kwargs_adapt_color = {**base_kwargs, "adapt_color": True}
+
+ # color_temp → RGB
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ **kwargs_adapt_color,
+ ), "Should detect color_temp → RGB mode switch"
+
+ # color_temp → XY
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ **kwargs_adapt_color,
+ ), "Should detect color_temp → XY mode switch"
+
+ # RGB → color_temp
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ **kwargs_adapt_color,
+ ), "Should detect RGB → color_temp mode switch"
+
+ # RGB → XY
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ **kwargs_adapt_color,
+ ), "Should detect RGB → XY mode switch"
+
+ # XY → color_temp
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ **kwargs_adapt_color,
+ ), "Should detect XY → color_temp mode switch"
+
+ # XY → RGB
+ assert _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ **kwargs_adapt_color,
+ ), "Should detect XY → RGB mode switch"
+
+ # No mode change - same type with same values shouldn't be detected
+ assert not _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ **kwargs_adapt_color,
+ ), "Same color_temp should not be detected as change"
+
+ assert not _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ **kwargs_adapt_color,
+ ), "Same RGB should not be detected as change"
+
+ assert not _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_XY_COLOR: (0.64, 0.33)},
+ **kwargs_adapt_color,
+ ), "Same XY should not be detected as change"
+
+ # Test 2: adapt_color=False - mode changes should NOT be detected
+ kwargs_no_adapt = {**base_kwargs, "adapt_color": False}
+
+ assert not _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ **kwargs_no_adapt,
+ ), "Mode change should not be detected when adapt_color=False"
+
+ assert not _attributes_have_changed(
+ old_attributes={ATTR_BRIGHTNESS: 128, ATTR_RGB_COLOR: (255, 0, 0)},
+ new_attributes={ATTR_BRIGHTNESS: 128, ATTR_COLOR_TEMP_KELVIN: 4000},
+ **kwargs_no_adapt,
+ ), "RGB → color_temp should not be detected when adapt_color=False"
From edefdbf3b8fc4f52f33155234e401b02eb3ac253 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 27 Nov 2025 10:11:31 -0800
Subject: [PATCH 182/361] docs: add Wijt as a contributor for translation
(#1300)
* 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 c498e6ce..b43bc4ef 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -1089,6 +1089,15 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "Wijt",
+ "name": "Furkan Kaya",
+ "avatar_url": "https://avatars.githubusercontent.com/u/23127261?v=4",
+ "profile": "https://iamfurkan.com",
+ "contributions": [
+ "translation"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 590056ad..51df41cc 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
[](https://github.com/hacs/integration)

-[](#contributors-)
+[](#contributors-)
# 🌞 Adaptive Lighting: Enhance Your Home's Atmosphere with Smart, Sun-Synchronized Lighting 🌙
@@ -620,6 +620,9 @@ Notice the values of `brightness_mode_time_light` and `brightness_mode_time_dark
|