commit f5eac43a5890ae55f1d3a169eed6792ffa9dfd35 Author: german Date: Thu Sep 3 22:33:14 2026 +0300 Тёплая панель Home Assistant для большой семьи Тема warm_home, дашборд «Тёплый дом», сценарии (scripts+automations) и helpers. Все entity_id — плейсхолдеры, деплоя нет. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01Up44uyffFr8MuxiqfB61Uv diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1e2cfd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# HA секреты — не коммитить +secrets.yaml +.repo-payload.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..238360b --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ +# 🏡 Тёплый дом — панель Home Assistant для большой семьи + +Готовый набор для Home Assistant, который превращает умный дом в **тёплое, +спокойное и понятное всем место**: маме, папе и детям. Кремовые тона, дерево и +терракота, крупные кнопки, мягкий вечерний свет и сценарии, которые сами +заботятся о доме — утром будят по-доброму, вечером греют, ночью тихо +подсвечивают дорожку ребёнку до туалета. + +Всё на **стандартном Home Assistant** — без HACS и сторонних модулей. Ставится +за вечер, дальше только подставляете свои устройства. + +--- + +## Что внутри + +- 🎨 **Тёплая тема** `warm_home` — кремовый фон, тёплое дерево/терракота, мягкий + янтарь для «включено», приглушённый зелёный для «эко». Крупные скруглённые + карточки, мягкие тени, читаемый шрифт. Есть светлый (день) и уютный тёмный + (вечер) режимы — переключаются сами. +- 📊 **Дашборд «Тёплый дом»** — вкладки: + - **Дом** — крупные кнопки-сцены, погода, «кто дома», режимы; + - **Комнаты** — гостиная, кухня, детские, спальня, ванная (тёплый пол), + прихожая: свет, климат, шторы; + - **Дети** — ночники, «тихий час», «спать», климат детских; + - **Безопасность** — охрана, двери/окна, дым/CO/протечка, камеры; + - **Энергия** — потребление, эко-режим, ночной тариф. +- 🤖 **Сценарии** (scripts + automations) для семейного дома — по времени суток и + по ситуациям (список ниже). +- 🎚️ **Помощники-режимы** — флажки `family_mode`, `guests`, `movie`, `night`, + `eco`, `quiet_hours` и расписание подъёма/отбоя. + +--- + +## Как выглядит + +> Тёплая палитра «домашнего очага»: + +| Роль | Цвет | +|---|---| +| Фон (кремовый) | `#f6efe6` | +| Карточки (тёплый белый) | `#fffaf3` | +| Главный акцент (дерево/терракота) | `#c9743a` | +| Второй акцент (мягкий янтарь, «включено») | `#e0a458` | +| «Эко» (приглушённый зелёный) | `#7d9464` | +| Текст (тёплый тёмно-коричневый) | `#3a332c` | + +Карточки скруглены (радиус 18px), тени мягкие и тёплые, кнопки-сцены — крупные, +чтобы попадал и ребёнок, и бабушка. Вечером тема сама уходит в тёплый тёмный +режим, чтобы не бить по глазам. + +--- + +## Сценарии + +**По времени суток:** + +- ☀️ **Утро · будни** — плавный подъём: детские мягко разгораются по расписанию + школы, приоткрываются шторы, греется тёплый пол в ванной, приходит погода на + сегодня, включается кофе. +- 🌤️ **Утро · выходные** — позже и тише, без будильников, детей не трогаем. +- 🏃 **День · никого нет** — эко-режим: климат в экономию, свет гаснет, + напоминание проветрить. +- 🌆 **Вечер** — тёплый свет 2700K, сцена ужина на кухне, подсветка за ТВ. +- 🌙 **Ночь · отбой** — всё приглушаем, детские ночники, охрана периметра, + мягкая проверка «всё выключено?». + +**Ситуации:** + +- 🚪 **Уход из дома** (все ушли, по presence) — свет off, климат эко, охрана, + проверка открытых окон/дверей, запуск роботов-пылесосов. +- 🏡 **Возвращение домой** — свет по времени суток, климат в комфорт, тёплое + приветствие. +- 👋 **Гости** — приветливый ровный свет, музыка, комфортный климат. +- 🎬 **Кино** — затемнить гостиную, подсветка ТВ, «не беспокоить». +- 😴 **Укладывание детей** — ночники warm dim, колыбельная/белый шум, дом + притихает, тихий режим уведомлений. +- 🌛 **Ребёнок проснулся ночью** — по движению в детской/коридоре мягкая + подсветка пути в туалет на 10–15%, без яркого света, и сама гаснет. +- 🚨 **Тревога** (дым/протечка/CO/взлом) — свет ярко везде, голосовое оповещение, + уведомление всем взрослым, перекрытие воды при протечке. +- 💡 **Экономия · ночной тариф** — тяжёлые нагрузки (бойлер, стиралка, + посудомойка) на дешёвое время, климат-эко ночью. +- 🤒 **Болеет ребёнок** — климат и увлажнитель в его комнате, мягкий свет, тихий + режим уведомлений. +- 🎉 **Праздник · День рождения** — праздничная цветная сцена и музыка. + +Каждый сценарий обильно прокомментирован и **не привязан к реальным +устройствам** — везде понятные плейсхолдеры (`light.gostinaya`, +`climate.detskaya_1`, `binary_sensor.protechka_vannaya` …), которые вы меняете на +свои. + +--- + +## Установка (коротко) + +1. Скопировать `themes/`, `packages/`, `lovelace/` в папку конфигурации HA. +2. Включить тему, пакеты и дашборд в `configuration.yaml`: + ```yaml + frontend: + themes: !include_dir_merge_named themes + homeassistant: + packages: !include_dir_named packages + lovelace: + dashboards: + warm-home: + mode: yaml + title: Тёплый дом + icon: mdi:home-heart + show_in_sidebar: true + filename: lovelace/dashboard.yaml + ``` +3. Перезапустить HA, выбрать тему **warm_home** в профиле. +4. Заменить entity_id-плейсхолдеры на свои (Инструменты разработчика → Состояния). +5. Настроить группу уведомлений `notify.family_adults`, TTS и код охраны. + +Подробно, по шагам и со скриншотами настроек — **[docs/SETUP.md](docs/SETUP.md)**. + +--- + +## Структура репозитория + +``` +ha-warm-family-panel/ +├── README.md # этот файл +├── helpers.yaml # флажки-режимы, расписание, температуры +├── themes/ +│ └── warm_home.yaml # тёплая тема Lovelace +├── lovelace/ +│ └── dashboard.yaml # дашборд «Тёплый дом» (5 вкладок) +├── packages/ +│ └── family_scenarios.yaml # сценарии: scripts + automations +└── docs/ + └── SETUP.md # пошаговая установка +``` + +--- + +## Заметки + +- Ничего никуда не деплоится и не трогает реальные дома — это чистый шаблон. + Всё живёт только в вашем Home Assistant, когда вы сами его туда положите. +- Конфиги — валидный YAML под структуру Home Assistant (packages / themes / + lovelace YAML-режим). +- Плейсхолдер-сущности безопасны: несуществующие показываются как «недоступно» и + не ломают панель. Заменяйте постепенно. + +Пусть дом будет тёплым 🤍 diff --git a/docs/SETUP.md b/docs/SETUP.md new file mode 100644 index 0000000..ab188d7 --- /dev/null +++ b/docs/SETUP.md @@ -0,0 +1,170 @@ +# Установка «Тёплого дома» в Home Assistant + +Небольшая пошаговая инструкция. Ничего сложного — минут на 15, дальше только +подставляете свои устройства. Всё на стандартном Home Assistant, HACS и сторонние +модули не нужны. + +> Путь к папке конфигурации HA дальше обозначаю как `` — это папка, где +> лежит ваш `configuration.yaml` (в Supervised/HAOS обычно `/config`). + +--- + +## 1. Скопировать файлы + +Положите содержимое репозитория в папку конфигурации так: + +``` +/ +├── configuration.yaml # ваш существующий — в него добавим пару строк +├── themes/ +│ └── warm_home.yaml # тёплая тема +├── packages/ +│ ├── family_scenarios.yaml # сценарии (scripts + automations) +│ └── helpers.yaml # флажки-режимы и расписание (перенести сюда, см. §4) +└── lovelace/ + └── dashboard.yaml # дашборд «Тёплый дом» +``` + +--- + +## 2. Включить тему + +В `configuration.yaml`: + +```yaml +frontend: + themes: !include_dir_merge_named themes +``` + +После перезапуска: профиль пользователя (кружок внизу слева) → **Тема** → +**«warm_home»**. Можно поставить отдельно каждому члену семьи. + +--- + +## 3. Включить пакеты (сценарии) + +В `configuration.yaml`, внутри блока `homeassistant:`: + +```yaml +homeassistant: + packages: !include_dir_named packages +``` + +Теперь HA подхватит `packages/family_scenarios.yaml` — все `script:` и +`automation:` из него появятся автоматически. + +> Если у вас уже есть `automation: !include automations.yaml` — это нормально, +> пакетные автоматизации просто добавятся к вашим. Ничего не перезапишется. + +--- + +## 4. Помощники-режимы (helpers) + +Файл `helpers.yaml` заводит флажки-режимы (`input_boolean.family_mode`, +`guests`, `movie`, `night`, `eco`, `quiet_hours`, `sick_child`, `party`…), +время подъёма/отбоя и пару чисел (эко/комфорт температура). + +Самый простой способ — **положить `helpers.yaml` в папку `packages/`** рядом с +`family_scenarios.yaml`. Тогда шага §3 достаточно, и helpers подключатся сами. + +(Альтернатива — подключать по доменам в `configuration.yaml`: +`input_boolean: !include ...` и т.д. Но с packages проще.) + +После старта зайдите в **Настройки → Устройства и службы → Помощники** и +выставьте: +- время подъёма в школу (будни) и в выходные; +- время отбоя у детей; +- окно ночного тарифа (если он у вас есть); +- комфортную и эко-температуру. + +--- + +## 5. Добавить дашборд + +В `configuration.yaml`: + +```yaml +lovelace: + mode: yaml # если у вас уже storage-режим — см. примечание ниже + dashboards: + warm-home: + mode: yaml + title: Тёплый дом + icon: mdi:home-heart + show_in_sidebar: true + filename: lovelace/dashboard.yaml +``` + +> Если основной дашборд у вас в UI-режиме (storage) и переводить его в YAML не +> хочется — оставьте `lovelace:` без `mode: yaml`, только с блоком `dashboards:` +> и вложенным `warm-home: { mode: yaml, ... }`. Тогда «Тёплый дом» будет +> отдельным YAML-дашбордом, а остальные — как были. + +Перезапустите HA (или «Проверить конфигурацию» → «Быстрая перезагрузка» для +темы/lovelace). + +--- + +## 6. Заменить entity_id на свои + +Это главный шаг. В сценариях и дашборде стоят **понятные плейсхолдеры**: + +| Плейсхолдер | Что это | Ваш пример | +|---|---|---| +| `light.gostinaya` | свет в гостиной | `light.living_room_ceiling` | +| `climate.detskaya_1` | климат/термостат в детской №1 | `climate.kids_1_trv` | +| `cover.gostinaya` | шторы/жалюзи гостиной | `cover.living_blind` | +| `binary_sensor.protechka_vannaya` | датчик протечки в ванной | `binary_sensor.leak_bath` | +| `person.rebenok_1` | член семьи (для «кто дома») | `person.ivan` | +| `alarm_control_panel.dom` | охранная панель | ваша `alarm_control_panel.*` | +| `weather.dom` | погода | `weather.forecast_home` | +| `media_player.ves_dom` | «весь дом» (мультирум) | ваша группа медиаплееров | + +Как найти свои: **Инструменты разработчика → Состояния** — там список всех +entity_id. Удобно менять «Найти и заменить» прямо в редакторе файлов (например, +через дополнение *File editor* / *Studio Code Server*). + +Несуществующие сущности не ломают панель — они просто покажутся серым +«недоступно». Можно заменять постепенно, комната за комнатой. + +--- + +## 7. Уведомления и голос + +Сценарии шлют сообщения в `notify.family_adults` и говорят через `tts.speak`. + +**Группа взрослых** — заведите в `configuration.yaml` (пример для мобильного +приложения HA): + +```yaml +notify: + - platform: group + name: family_adults + services: + - service: mobile_app_telefon_mamy # ваши notify.* устройства + - service: mobile_app_telefon_papy +``` + +**Голос (TTS)** — в сценарии `Тревога` и мультирумных сценах используется +`tts.speak` и `media_player.ves_dom`. Подставьте свой TTS-движок (HA Cloud, +Piper, Yandex и т.п.) и реальный медиаплеер/группу «весь дом». + +**Код охраны** — в сценариях стоит `code: "!secret alarm_code"`. Добавьте в +`/secrets.yaml`: + +```yaml +alarm_code: "1234" # ваш код +``` + +--- + +## 8. Проверка + +1. **Разработчик → Проверить конфигурацию** — должно быть «Конфигурация верна». +2. Откройте дашборд «Тёплый дом» в боковой панели. +3. Нажмите крупную кнопку сцены (например «Вечер») — свет должен отреагировать + на тех сущностях, которые вы уже подставили. +4. Автоматизации видны в **Настройки → Автоматизации** с префиксом + «Тёплый дом · …» — их можно включать/выключать и запускать вручную для теста. + +Готово. Дальше — просто живите в тёплом доме 🏡 diff --git a/helpers.yaml b/helpers.yaml new file mode 100644 index 0000000..1fd9141 --- /dev/null +++ b/helpers.yaml @@ -0,0 +1,101 @@ +# ============================================================================= +# helpers.yaml — вспомогательные сущности «режимов дома» и расписания +# ----------------------------------------------------------------------------- +# Это «переключатели без железа»: флажки-режимы и настройки времени, на которые +# опираются сценарии из packages/family_scenarios.yaml. Их можно щёлкать руками +# с панели, а можно — из автоматизаций. +# +# Подключение (один из вариантов): +# A) Через packages — просто оставьте helpers как отдельный пакет: +# В configuration.yaml: homeassistant: { packages: !include_dir_named packages } +# и положите этот файл рядом с family_scenarios.yaml в папку packages/. +# B) Или подключите точечно в configuration.yaml: +# input_boolean: !include helpers.yaml # (тогда оставьте только блок input_boolean) +# Проще всего — держать всё в packages/, см. docs/SETUP.md. +# ============================================================================= + +# --- Флажки-режимы дома ------------------------------------------------------- +input_boolean: + family_mode: + name: Семья дома + icon: mdi:home-heart + guests: + name: Гости + icon: mdi:account-group + movie: + name: Кино + icon: mdi:movie-open + night: + name: Ночь / отбой + icon: mdi:weather-night + eco: + name: Эко-режим + icon: mdi:leaf + quiet_hours: + name: Тихий час + icon: mdi:volume-off + sick_child: + name: Болеет ребёнок + icon: mdi:emoticon-sick + party: + name: Праздник + icon: mdi:party-popper + vacation: + name: В отъезде (отпуск) + icon: mdi:bag-suitcase + night_tariff: + name: Ночной тариф активен + icon: mdi:transmission-tower + +# --- Время: расписание школы и подъёма --------------------------------------- +input_datetime: + school_wake_weekday: + name: Подъём в школу (будни) + has_date: false + has_time: true + # Значение по умолчанию — поправьте под свою семью + weekend_wake: + name: Подъём в выходные + has_date: false + has_time: true + kids_bedtime: + name: Отбой у детей + has_date: false + has_time: true + night_tariff_start: + name: Начало ночного тарифа + has_date: false + has_time: true + night_tariff_end: + name: Конец ночного тарифа + has_date: false + has_time: true + +# --- Число: сколько градусов держать в «эко» --------------------------------- +input_number: + eco_temperature: + name: Температура в эко-режиме + min: 12 + max: 22 + step: 0.5 + unit_of_measurement: "°C" + icon: mdi:thermometer-low + comfort_temperature: + name: Комфортная температура + min: 18 + max: 26 + step: 0.5 + unit_of_measurement: "°C" + icon: mdi:thermometer + +# --- Выбор: кто из детей сейчас болеет (для сценария «болеет ребёнок») -------- +input_select: + sick_child_room: + name: Комната больного ребёнка + options: + - "Нет" + - "Детская 1" + - "Детская 2" + - "Детская 3" + initial: "Нет" + icon: mdi:bed diff --git a/lovelace/dashboard.yaml b/lovelace/dashboard.yaml new file mode 100644 index 0000000..2016477 --- /dev/null +++ b/lovelace/dashboard.yaml @@ -0,0 +1,386 @@ +# ============================================================================= +# dashboard.yaml — дашборд «Тёплый дом» (Lovelace, YAML-режим) +# ----------------------------------------------------------------------------- +# Крупные читаемые тайлы для всей семьи. Только стандартные карточки HA — +# работает из коробки, без сторонних модулей (HACS не требуется). +# +# Подключение (см. docs/SETUP.md): +# lovelace: +# mode: yaml +# dashboards: +# warm-home: +# mode: yaml +# title: Тёплый дом +# icon: mdi:home-heart +# show_in_sidebar: true +# filename: lovelace/dashboard.yaml +# +# ⚠️ Все entity_id ниже — ПЛЕЙСХОЛДЕРЫ (light.gostinaya, climate.detskaya_1…). +# Замените на свои: Инструменты разработчика → Состояния. +# Несуществующие сущности покажутся серым «недоступно» и не сломают панель. +# +# Совет: назначьте тему «warm_home» этому дашборду в его настройках (⋮ → +# «Изменить дашборд» → «Заголовок» → тема), чтобы всё было в тёплой палитре. +# ============================================================================= + +title: Тёплый дом +views: + + # ───────────────────────────── ГЛАВНАЯ ───────────────────────────────── + - title: Дом + path: dom + icon: mdi:home-heart + type: sections + max_columns: 3 + sections: + + # ── Крупные кнопки-сцены ── + - type: grid + cards: + - type: heading + heading: Сцены дома + heading_style: title + icon: mdi:gesture-tap-button + - type: horizontal-stack + cards: + - type: button + name: Утро + icon: mdi:weather-sunset-up + tap_action: { action: perform-action, perform_action: script.utro_budni } + show_state: false + - type: button + name: Вечер + icon: mdi:weather-night-partly-cloudy + tap_action: { action: perform-action, perform_action: script.vecher } + - type: button + name: Отбой + icon: mdi:weather-night + tap_action: { action: perform-action, perform_action: script.noch_otboj } + - type: horizontal-stack + cards: + - type: button + name: Ушли + icon: mdi:exit-run + tap_action: { action: perform-action, perform_action: script.uhod_iz_doma } + - type: button + name: Вернулись + icon: mdi:home-import-outline + tap_action: { action: perform-action, perform_action: script.vozvrashchenie_domoj } + - type: button + name: Кино + icon: mdi:movie-open + tap_action: { action: perform-action, perform_action: script.kino } + - type: horizontal-stack + cards: + - type: button + name: Гости + icon: mdi:account-group + tap_action: { action: perform-action, perform_action: script.gosti } + - type: button + name: Спать детям + icon: mdi:sleep + tap_action: { action: perform-action, perform_action: script.ukladyvanie_detej } + - type: button + name: Праздник + icon: mdi:party-popper + tap_action: { action: perform-action, perform_action: script.prazdnik } + + # ── Погода ── + - type: grid + cards: + - type: heading + heading: Погода + icon: mdi:weather-partly-cloudy + - type: weather-forecast + entity: weather.dom # замените на свою weather.* + show_current: true + show_forecast: true + forecast_type: daily + + # ── Кто дома (presence) ── + - type: grid + cards: + - type: heading + heading: Кто дома + icon: mdi:account-multiple + - type: glance + show_state: true + columns: 3 + entities: + - entity: person.mama # замените на своих людей + name: Мама + - entity: person.papa + name: Папа + - entity: person.rebenok_1 + name: Старший + - entity: person.rebenok_2 + name: Средний + - entity: person.rebenok_3 + name: Младший + - type: entities + title: Режимы дома + entities: + - input_boolean.family_mode + - input_boolean.guests + - input_boolean.eco + - input_boolean.quiet_hours + - input_boolean.night + + # ───────────────────────────── КОМНАТЫ ───────────────────────────────── + - title: Комнаты + path: komnaty + icon: mdi:floor-plan + type: sections + max_columns: 3 + sections: + + - type: grid + cards: + - type: heading + heading: Гостиная + icon: mdi:sofa + - type: tile + entity: light.gostinaya + name: Свет + features: [{ type: light-brightness }] + - type: thermostat + entity: climate.gostinaya + - type: tile + entity: cover.gostinaya + name: Шторы + features: [{ type: cover-position }] + + - type: grid + cards: + - type: heading + heading: Кухня + icon: mdi:silverware-fork-knife + - type: tile + entity: light.kuhnya + name: Свет + features: [{ type: light-brightness }] + - type: thermostat + entity: climate.kuhnya + - type: tile + entity: switch.kofemashina + name: Кофемашина + + - type: grid + cards: + - type: heading + heading: Детские + icon: mdi:teddy-bear + - type: tile + entity: light.detskaya_1 + name: Детская 1 · свет + features: [{ type: light-brightness }] + - type: tile + entity: light.nochnik_detskaya_1 + name: Детская 1 · ночник + features: [{ type: light-brightness }] + - type: thermostat + entity: climate.detskaya_1 + - type: tile + entity: light.detskaya_2 + name: Детская 2 · свет + features: [{ type: light-brightness }] + - type: tile + entity: light.detskaya_3 + name: Детская 3 · свет + features: [{ type: light-brightness }] + + - type: grid + cards: + - type: heading + heading: Спальня + icon: mdi:bed-king + - type: tile + entity: light.spalnya + name: Свет + features: [{ type: light-brightness }] + - type: thermostat + entity: climate.spalnya + + - type: grid + cards: + - type: heading + heading: Ванная + icon: mdi:shower + - type: tile + entity: light.vannaya + name: Свет + - type: thermostat + entity: climate.vannaya_teplyj_pol + name: Тёплый пол + + - type: grid + cards: + - type: heading + heading: Прихожая + icon: mdi:coat-rack + - type: tile + entity: light.prihozhaya + name: Свет + - type: tile + entity: lock.vhodnaya_dver + name: Замок + + # ───────────────────────── ДЕТСКАЯ ЗОНА ──────────────────────────────── + - title: Дети + path: deti + icon: mdi:teddy-bear + type: sections + max_columns: 2 + sections: + + - type: grid + cards: + - type: heading + heading: Быстрые сцены для детей + icon: mdi:baby-face-outline + - type: horizontal-stack + cards: + - type: button + name: Ночники + icon: mdi:lightbulb-night + tap_action: + action: perform-action + perform_action: light.turn_on + target: + entity_id: + - light.nochnik_detskaya_1 + - light.nochnik_detskaya_2 + - light.nochnik_detskaya_3 + data: { brightness_pct: 10, kelvin: 2200 } + - type: button + name: Тихий час + icon: mdi:volume-off + tap_action: + action: perform-action + perform_action: input_boolean.toggle + target: { entity_id: input_boolean.quiet_hours } + - type: button + name: Спать + icon: mdi:sleep + tap_action: { action: perform-action, perform_action: script.ukladyvanie_detej } + + - type: grid + cards: + - type: heading + heading: Ночники и климат детских + icon: mdi:thermometer + - type: entities + entities: + - light.nochnik_detskaya_1 + - light.nochnik_detskaya_2 + - light.nochnik_detskaya_3 + - climate.detskaya_1 + - climate.detskaya_2 + - climate.detskaya_3 + - input_boolean.sick_child + - input_select.sick_child_room + + # ─────────────────────── БЕЗОПАСНОСТЬ ────────────────────────────────── + - title: Безопасность + path: bezopasnost + icon: mdi:shield-home + type: sections + max_columns: 2 + sections: + + - type: grid + cards: + - type: heading + heading: Охрана + icon: mdi:shield-lock + - type: alarm-panel + entity: alarm_control_panel.dom + states: [arm_home, arm_away, arm_night] + + - type: grid + cards: + - type: heading + heading: Двери и окна + icon: mdi:door + - type: entities + entities: + - binary_sensor.dver_vhodnaya + - binary_sensor.okno_gostinaya + - binary_sensor.okno_kuhnya + - binary_sensor.okno_detskaya_1 + + - type: grid + cards: + - type: heading + heading: Дым · CO · протечка + icon: mdi:smoke-detector-variant + - type: glance + columns: 3 + entities: + - entity: binary_sensor.dym_kuhnya + name: Дым кухня + - entity: binary_sensor.dym_gostinaya + name: Дым гост. + - entity: binary_sensor.co_kotelnaya + name: CO + - entity: binary_sensor.protechka_vannaya + name: Протечка ванная + - entity: binary_sensor.protechka_kuhnya + name: Протечка кухня + - entity: switch.klapan_vody + name: Клапан воды + + - type: grid + cards: + - type: heading + heading: Камеры + icon: mdi:cctv + - type: picture-glance + title: Прихожая + camera_image: camera.prihozhaya + entities: + - binary_sensor.dver_vhodnaya + - type: picture-glance + title: Двор + camera_image: camera.dvor + entities: [] + + # ─────────────────────── ЭНЕРГО / ЭКО ────────────────────────────────── + - title: Энергия + path: energiya + icon: mdi:leaf + type: sections + max_columns: 2 + sections: + + - type: grid + cards: + - type: heading + heading: Потребление + icon: mdi:flash + - type: gauge + entity: sensor.moshchnost_dom # текущая мощность, Вт + name: Сейчас + unit: W + min: 0 + max: 8000 + severity: { green: 0, yellow: 3000, red: 6000 } + - type: statistics-graph + title: За неделю (кВт·ч) + chart_type: bar + period: day + stat_types: [change] + entities: + - sensor.energiya_dom_kwh # накопленный счётчик, кВт·ч + + - type: grid + cards: + - type: heading + heading: Эко и тариф + icon: mdi:transmission-tower + - type: entities + entities: + - input_boolean.eco + - input_boolean.night_tariff + - input_number.eco_temperature + - input_number.comfort_temperature diff --git a/packages/family_scenarios.yaml b/packages/family_scenarios.yaml new file mode 100644 index 0000000..a5a4b95 --- /dev/null +++ b/packages/family_scenarios.yaml @@ -0,0 +1,698 @@ +# ============================================================================= +# family_scenarios.yaml — сценарии тёплого дома для многодетной семьи +# ----------------------------------------------------------------------------- +# Это HA-«пакет»: один файл собирает сценарии (script:) и автоматизации +# (automation:) в одном месте. Подключается через packages, см. docs/SETUP.md: +# homeassistant: +# packages: !include_dir_named packages +# +# ВАЖНО ПРО ENTITY_ID: +# Все light.*, climate.*, cover.*, media_player.*, switch.*, binary_sensor.* и +# прочее ниже — ПЛЕЙСХОЛДЕРЫ с понятными именами (гостиная, детская_1 и т.п.). +# Ничего не привязано к реальному дому. Замените их на свои сущности: +# - откройте Инструменты разработчика → Состояния, найдите свои entity_id; +# - через «Найти и заменить» в редакторе поменяйте, например, +# light.gostinaya → light.vasha_gostinaya. +# Пока сущности не существуют — сценарий просто ничего не сделает с ней и не +# сломает остальное (для чистоты можно закомментировать неиспользуемые строки). +# +# Стиль: тёплый свет вечером 2700K, мягкие подъёмы, тихие ночи, спокойные дети. +# ============================================================================= + +# ───────────────────────────────────────────────────────────────────────────── +# СЦЕНАРИИ (scripts) — то, что можно запустить кнопкой с панели или из автоматизаций +# ───────────────────────────────────────────────────────────────────────────── +script: + + # === ПО ВРЕМЕНИ СУТОК ===================================================== + + utro_budni: + alias: "Утро · будни" + icon: mdi:weather-sunset-up + description: > + Плавный школьный подъём: мягко разгораются детские, поднимаются шторы, + греется пол в ванной, приходит погода на сегодня, включается кофе. + mode: restart + sequence: + # 1) Мягко разгораем свет в детских за 3 минуты — без резкого «щёлк». + - service: light.turn_on + target: + entity_id: + - light.detskaya_1 # замените на свои детские + - light.detskaya_2 + - light.detskaya_3 + data: + brightness_pct: 45 + kelvin: 3200 # тёплый утренний + transition: 180 + # 2) Приоткрываем шторы в детских (естественный свет будит мягче). + - service: cover.set_cover_position + target: + entity_id: + - cover.detskaya_1 + - cover.detskaya_2 + data: + position: 60 + # 3) Тёплый пол в ванной — чтобы босиком было не холодно. + - service: climate.set_temperature + target: + entity_id: climate.vannaya_teplyj_pol + data: + temperature: 24 + # 4) Погода на сегодня — уведомлением взрослым (настройте notify.*). + - service: notify.family_adults # см. docs/SETUP.md — группа взрослых + data: + title: "Доброе утро ☀️" + message: > + Сегодня: {{ states('weather.dom') }}, + {{ state_attr('weather.dom','temperature') }}°. + Подъём в школу — не проспите! + # 5) Кофе (умная розетка кофемашины). Уберите, если нет. + - service: switch.turn_on + target: + entity_id: switch.kofemashina + # 6) Тихо снимаем ночной режим. + - service: input_boolean.turn_off + target: + entity_id: + - input_boolean.night + - input_boolean.quiet_hours + + utro_vyhodnye: + alias: "Утро · выходные" + icon: mdi:weather-sunset + description: "Позже, тише, без будильников — пусть все высыпаются." + mode: restart + sequence: + # Свет в детских не трогаем — будим только гостиную/кухню, и то нежно. + - service: light.turn_on + target: + entity_id: light.kuhnya + data: + brightness_pct: 40 + kelvin: 3000 + transition: 240 + # Шторы в детских НЕ открываем автоматически — пусть спят. + - service: input_boolean.turn_off + target: + entity_id: input_boolean.night + - service: notify.family_adults + data: + title: "Доброе выходное утро 🌤️" + message: "Спешить некуда. Сегодня {{ states('weather.dom') }}." + + den_nikogo_net: + alias: "День · никого нет" + icon: mdi:home-export-outline + description: "Эко-режим: климат в экономию, свет гаснет, напоминание проветрить." + mode: single + sequence: + - service: light.turn_off + target: + entity_id: all + - service: climate.set_temperature + target: + entity_id: + - climate.gostinaya + - climate.kuhnya + - climate.detskaya_1 + - climate.detskaya_2 + - climate.detskaya_3 + - climate.spalnya + data: + temperature: "{{ states('input_number.eco_temperature') | float(18) }}" + - service: input_boolean.turn_on + target: + entity_id: input_boolean.eco + # Ненавязчивое напоминание проветрить (раз в день хватает). + - service: notify.family_adults + data: + message: "Дома никого — самое время проветрить, когда вернётесь 🍃" + + vecher: + alias: "Вечер" + icon: mdi:weather-night-partly-cloudy + description: "Тёплый свет 2700K, сцена ужина на кухне, подсветка за ТВ." + mode: restart + sequence: + - service: light.turn_on + target: + entity_id: + - light.gostinaya + - light.kuhnya + - light.prihozhaya + data: + brightness_pct: 70 + kelvin: 2700 # тёплый вечерний + transition: 5 + # Подсветка за телевизором — уютный фон. + - service: light.turn_on + target: + entity_id: light.tv_podsvetka + data: + brightness_pct: 40 + rgb_color: [255, 170, 90] + - service: climate.set_temperature + target: + entity_id: + - climate.gostinaya + - climate.kuhnya + data: + temperature: "{{ states('input_number.comfort_temperature') | float(22) }}" + - service: input_boolean.turn_off + target: + entity_id: input_boolean.eco + + noch_otboj: + alias: "Ночь · отбой" + icon: mdi:weather-night + description: "Всё приглушаем, детские ночники, охрана периметра, проверка «всё выключено?»." + mode: restart + sequence: + # Гасим основной свет плавно. + - service: light.turn_off + target: + entity_id: + - light.gostinaya + - light.kuhnya + - light.prihozhaya + - light.tv_podsvetka + data: + transition: 8 + # Детские ночники — тёплые и очень тусклые. + - service: light.turn_on + target: + entity_id: + - light.nochnik_detskaya_1 + - light.nochnik_detskaya_2 + - light.nochnik_detskaya_3 + data: + brightness_pct: 8 + kelvin: 2200 + # Охрана периметра (двери/окна/уличные датчики) — только по периметру, + # чтобы движение внутри ночью не поднимало тревогу. + - service: alarm_control_panel.alarm_arm_night + target: + entity_id: alarm_control_panel.dom + data: + code: "!secret alarm_code" # задайте код в secrets.yaml + - service: input_boolean.turn_on + target: + entity_id: + - input_boolean.night + - input_boolean.quiet_hours + # Мягкая проверка: не остались ли включёнными «тяжёлые» приборы. + - if: + - condition: state + entity_id: switch.uteg # пример: утюг + state: "on" + then: + - service: notify.family_adults + data: + message: "⚠️ Кажется, утюг ещё включён. Заглянуть перед сном?" + + # === СИТУАЦИИ ============================================================= + + uhod_iz_doma: + alias: "Уход из дома" + icon: mdi:exit-run + description: "Все ушли: свет off, климат эко, охрана, проверка окон, пылесосы." + mode: single + sequence: + - service: light.turn_off + target: { entity_id: all } + - service: climate.set_temperature + target: + entity_id: + - climate.gostinaya + - climate.kuhnya + - climate.detskaya_1 + - climate.detskaya_2 + - climate.detskaya_3 + - climate.spalnya + data: + temperature: "{{ states('input_number.eco_temperature') | float(18) }}" + - service: input_boolean.turn_on + target: { entity_id: input_boolean.eco } + # Проверка окон/дверей — если что-то открыто, предупреждаем, но не блокируем. + - variables: + otkryto: > + {{ states.binary_sensor + | selectattr('attributes.device_class','in',['window','door']) + | selectattr('state','eq','on') + | map(attribute='name') | list | join(', ') }} + - if: "{{ otkryto | length > 0 }}" + then: + - service: notify.family_adults + data: + title: "Уходите — а тут открыто:" + message: "Проверьте: {{ otkryto }}" + # Ставим охрану на «отсутствие». + - service: alarm_control_panel.alarm_arm_away + target: { entity_id: alarm_control_panel.dom } + data: + code: "!secret alarm_code" + # Запускаем роботов-пылесосов — уборка, пока никого нет. + - service: vacuum.start + target: { entity_id: vacuum.robot } + + vozvrashchenie_domoj: + alias: "Возвращение домой" + icon: mdi:home-import-outline + description: "Свет по времени суток, климат в комфорт, тёплое приветствие." + mode: single + sequence: + - service: alarm_control_panel.alarm_disarm + target: { entity_id: alarm_control_panel.dom } + data: + code: "!secret alarm_code" + - service: input_boolean.turn_off + target: { entity_id: input_boolean.eco } + # Свет зависит от времени суток: днём — прихожая, вечером — тёплый уют. + - choose: + - conditions: + - condition: sun + after: sunset + sequence: + - service: script.turn_on + target: { entity_id: script.vecher } + default: + - service: light.turn_on + target: { entity_id: light.prihozhaya } + data: { brightness_pct: 60 } + - service: climate.set_temperature + target: + entity_id: + - climate.gostinaya + - climate.kuhnya + data: + temperature: "{{ states('input_number.comfort_temperature') | float(22) }}" + - service: notify.family_adults + data: + message: "С возвращением! Дом уже согревается 🏡" + + gosti: + alias: "Гости" + icon: mdi:account-group + description: "Приветливый ровный свет, музыка, комфортный климат." + mode: restart + sequence: + - service: light.turn_on + target: + entity_id: + - light.gostinaya + - light.kuhnya + - light.prihozhaya + data: + brightness_pct: 85 + kelvin: 2900 + - service: input_boolean.turn_on + target: { entity_id: input_boolean.guests } + - service: media_player.play_media + target: { entity_id: media_player.gostinaya } + data: + media_content_id: "Playlist: Вечер с друзьями" # замените на свой источник + media_content_type: playlist + - service: climate.set_temperature + target: { entity_id: climate.gostinaya } + data: { temperature: 23 } + + kino: + alias: "Кино" + icon: mdi:movie-open + description: "Затемнить гостиную, включить подсветку ТВ, режим «не беспокоить»." + mode: restart + sequence: + - service: light.turn_off + target: { entity_id: light.gostinaya } + data: { transition: 3 } + - service: light.turn_on + target: { entity_id: light.tv_podsvetka } + data: + brightness_pct: 25 + rgb_color: [120, 90, 200] + - service: cover.close_cover + target: { entity_id: cover.gostinaya } + - service: input_boolean.turn_on + target: + entity_id: + - input_boolean.movie + - input_boolean.quiet_hours # уведомления притихают, см. автоматизацию тихого режима + + ukladyvanie_detej: + alias: "Укладывание детей" + icon: mdi:sleep + description: "Ночники warm dim, колыбельная / белый шум, дом притихает, тихий режим." + mode: restart + sequence: + - service: light.turn_on + target: + entity_id: + - light.nochnik_detskaya_1 + - light.nochnik_detskaya_2 + - light.nochnik_detskaya_3 + data: + brightness_pct: 12 + kelvin: 2200 + transition: 30 + # Основной свет в детских гасим совсем. + - service: light.turn_off + target: + entity_id: + - light.detskaya_1 + - light.detskaya_2 + - light.detskaya_3 + data: { transition: 20 } + # Белый шум / колыбельная на тихой громкости. + - service: media_player.volume_set + target: { entity_id: media_player.detskaya_1 } + data: { volume_level: 0.18 } + - service: media_player.play_media + target: { entity_id: media_player.detskaya_1 } + data: + media_content_id: "Белый шум" # замените: колыбельная / дождь / white noise + media_content_type: music + # Приглушаем остальной дом. + - service: light.turn_on + target: { entity_id: light.gostinaya } + data: { brightness_pct: 30, kelvin: 2500 } + - service: input_boolean.turn_on + target: { entity_id: input_boolean.quiet_hours } + + rebenok_prosnulsya: + alias: "Ребёнок проснулся ночью" + icon: mdi:weather-night + description: "Мягкая подсветка пути в туалет 10–15%, без яркого света." + mode: single + sequence: + # Тусклая тёплая «дорожка» коридор → санузел. + - service: light.turn_on + target: + entity_id: + - light.koridor + - light.sanuzel + data: + brightness_pct: 12 + kelvin: 2200 + # Через 3 минуты гасим — если снова уснул, свет не мешает. + - delay: "00:03:00" + - service: light.turn_off + target: + entity_id: + - light.koridor + - light.sanuzel + data: { transition: 10 } + + trevoga: + alias: "Тревога" + icon: mdi:alarm-light + description: "Дым/протечка/CO/взлом: яркий свет везде, голос, уведомление взрослым, вода off." + mode: restart + sequence: + # Свет — ярко и максимально, чтобы найти дорогу и детей. + - service: light.turn_on + target: { entity_id: all } + data: + brightness_pct: 100 + kelvin: 4000 + # Голосовое оповещение по дому. + - service: tts.speak + target: { entity_id: tts.home_assistant_cloud } # замените на свой TTS + data: + cache: false + media_player_entity_id: media_player.ves_dom # мультирум «весь дом» + message: "Внимание. Сработала система безопасности. Все спокойно к выходу." + # Уведомление ВСЕМ взрослым (критично). + - service: notify.family_adults + data: + title: "🚨 ТРЕВОГА В ДОМЕ" + message: "Сработал датчик безопасности. Проверьте детей и дом." + data: + priority: high + # При протечке — перекрываем воду (клапан). Безопасно и в остальных случаях. + - service: switch.turn_off + target: { entity_id: switch.klapan_vody } + + ekonomiya_nochnoj_tarif: + alias: "Экономия · ночной тариф" + icon: mdi:transmission-tower-export + description: "Тяжёлые нагрузки — на ночной тариф, климат в эко на ночь." + mode: single + sequence: + - service: input_boolean.turn_on + target: { entity_id: input_boolean.night_tariff } + # Включаем «тяжёлые» приборы, которые ждали дешёвого времени. + - service: switch.turn_on + target: + entity_id: + - switch.bojler # бойлер / водонагреватель + - switch.posudomojka # посудомойка (отложенный старт) + - switch.stiralnaya # стиральная машина + # Климат на ночь — экономнее. + - service: climate.set_temperature + target: + entity_id: + - climate.gostinaya + - climate.kuhnya + data: + temperature: "{{ states('input_number.eco_temperature') | float(18) }}" + + boleet_rebenok: + alias: "Болеет ребёнок" + icon: mdi:emoticon-sick-outline + description: "Климат/увлажнитель в комнате ребёнка, мягкий свет, тихий режим." + mode: restart + sequence: + - service: input_boolean.turn_on + target: { entity_id: input_boolean.sick_child } + # Определяем комнату из input_select и настраиваем её. + # (Для простоты пример на детскую 1 — размножьте под свои комнаты.) + - service: climate.set_temperature + target: { entity_id: climate.detskaya_1 } + data: { temperature: 22 } + - service: humidifier.turn_on + target: { entity_id: humidifier.detskaya_1 } + - service: humidifier.set_humidity + target: { entity_id: humidifier.detskaya_1 } + data: { humidity: 55 } + - service: light.turn_on + target: { entity_id: light.detskaya_1 } + data: { brightness_pct: 25, kelvin: 2500 } + - service: input_boolean.turn_on + target: { entity_id: input_boolean.quiet_hours } + + prazdnik: + alias: "Праздник · День рождения" + icon: mdi:party-popper + description: "Праздничная цветная сцена, музыка, веселье." + mode: restart + sequence: + - service: input_boolean.turn_on + target: { entity_id: input_boolean.party } + # Цветная динамичная сцена по гостиной/кухне. + - service: light.turn_on + target: + entity_id: + - light.gostinaya + - light.tv_podsvetka + data: + brightness_pct: 90 + effect: "colorloop" # если лампы умеют; иначе задайте rgb_color + - service: media_player.play_media + target: { entity_id: media_player.ves_dom } + data: + media_content_id: "Playlist: Праздник" + media_content_type: playlist + + +# ───────────────────────────────────────────────────────────────────────────── +# АВТОМАТИЗАЦИИ (automation) — что срабатывает само, по триггерам +# ───────────────────────────────────────────────────────────────────────────── +automation: + + # --- Утро будни: за N минут до подъёма запускаем плавный подъём ------------ + - id: warm_family_utro_budni + alias: "Тёплый дом · Утро будни (по расписанию школы)" + description: "В будни в указанное время запускает сценарий «Утро · будни»." + trigger: + - platform: time + at: input_datetime.school_wake_weekday + condition: + # Только по будням (пн–пт). + - condition: time + weekday: [mon, tue, wed, thu, fri] + action: + - service: script.turn_on + target: { entity_id: script.utro_budni } + + # --- Утро выходные --------------------------------------------------------- + - id: warm_family_utro_vyhodnye + alias: "Тёплый дом · Утро выходные" + trigger: + - platform: time + at: input_datetime.weekend_wake + condition: + - condition: time + weekday: [sat, sun] + action: + - service: script.turn_on + target: { entity_id: script.utro_vyhodnye } + + # --- Вечер: включаем тёплый свет на закате --------------------------------- + - id: warm_family_vecher_zakat + alias: "Тёплый дом · Вечер на закате" + description: "На закате, если кто-то дома, включает вечернюю тёплую сцену." + trigger: + - platform: sun + event: sunset + offset: "-00:20:00" # за 20 минут до заката + condition: + # Кто-то дома (см. group.family — настройте под своих людей). + - condition: state + entity_id: group.family + state: home + action: + - service: script.turn_on + target: { entity_id: script.vecher } + + # --- Отбой детей по расписанию (подсказка, не насильно) -------------------- + - id: warm_family_kids_bedtime_hint + alias: "Тёплый дом · Пора укладывать детей" + trigger: + - platform: time + at: input_datetime.kids_bedtime + action: + - service: notify.family_adults + data: + message: "🌙 Пора укладывать детей. Нажмите «Укладывание детей» на панели." + + # --- Все ушли → «Уход из дома» --------------------------------------------- + - id: warm_family_vse_ushli + alias: "Тёплый дом · Все ушли (presence)" + description: "Когда последний человек покинул зону дома — запускает уход." + trigger: + - platform: state + entity_id: group.family + to: not_home + for: "00:05:00" # 5 минут, чтобы не срабатывать на «вышел к машине» + action: + - service: script.turn_on + target: { entity_id: script.uhod_iz_doma } + + # --- Кто-то вернулся → «Возвращение домой» --------------------------------- + - id: warm_family_kto_to_vernulsya + alias: "Тёплый дом · Возвращение домой (presence)" + trigger: + - platform: state + entity_id: group.family + from: not_home + to: home + action: + - service: script.turn_on + target: { entity_id: script.vozvrashchenie_domoj } + + # --- Ребёнок проснулся ночью: движение в детской/коридоре ночью ------------- + - id: warm_family_rebenok_prosnulsya + alias: "Тёплый дом · Движение ночью в детской зоне" + description: "Ночью мягко подсвечивает путь, если ребёнок встал." + trigger: + - platform: state + entity_id: + - binary_sensor.dvizhenie_koridor + - binary_sensor.dvizhenie_detskaya_1 + - binary_sensor.dvizhenie_detskaya_2 + - binary_sensor.dvizhenie_detskaya_3 + to: "on" + condition: + # Только когда включён ночной режим (или input_boolean.night). + - condition: state + entity_id: input_boolean.night + state: "on" + action: + - service: script.turn_on + target: { entity_id: script.rebenok_prosnulsya } + + # --- ТРЕВОГА: дым / CO / протечка / взлом ----------------------------------- + - id: warm_family_trevoga + alias: "Тёплый дом · ТРЕВОГА (дым/CO/протечка/взлом)" + description: "Любой из критических датчиков → сценарий «Тревога»." + mode: single + trigger: + - platform: state + entity_id: + - binary_sensor.dym_kuhnya # дым + - binary_sensor.dym_gostinaya + - binary_sensor.co_kotelnaya # угарный газ + - binary_sensor.protechka_vannaya # протечка + - binary_sensor.protechka_kuhnya + to: "on" + action: + - service: script.turn_on + target: { entity_id: script.trevoga } + + # --- Взлом при поставленной охране ------------------------------------------ + - id: warm_family_vzlom + alias: "Тёплый дом · Взлом (охрана сработала)" + trigger: + - platform: state + entity_id: alarm_control_panel.dom + to: triggered + action: + - service: script.turn_on + target: { entity_id: script.trevoga } + + # --- Ночной тариф: включить/выключить по времени ---------------------------- + - id: warm_family_nochnoj_tarif_on + alias: "Тёплый дом · Ночной тариф — старт" + trigger: + - platform: time + at: input_datetime.night_tariff_start + action: + - service: script.turn_on + target: { entity_id: script.ekonomiya_nochnoj_tarif } + + - id: warm_family_nochnoj_tarif_off + alias: "Тёплый дом · Ночной тариф — конец" + trigger: + - platform: time + at: input_datetime.night_tariff_end + action: + - service: input_boolean.turn_off + target: { entity_id: input_boolean.night_tariff } + # Останавливаем «тяжёлые» нагрузки, чтобы не работали по дневному тарифу. + - service: switch.turn_off + target: + entity_id: + - switch.bojler + - switch.stiralnaya + + # --- Тихий режим: пока включён quiet_hours, уведомления не шумят ------------- + # (Практика: в самих notify-сценариях можно проверять это состояние. + # Здесь — пример: приглушаем громкость мультирума при входе в тихий час.) + - id: warm_family_quiet_hours_volume + alias: "Тёплый дом · Тихий час — приглушить звук" + trigger: + - platform: state + entity_id: input_boolean.quiet_hours + to: "on" + action: + - service: media_player.volume_set + target: { entity_id: media_player.ves_dom } + data: { volume_level: 0.12 } + + # --- Напоминание проветрить, когда днём долго никого нет --------------------- + - id: warm_family_provetrit + alias: "Тёплый дом · Напоминание проветрить" + trigger: + - platform: state + entity_id: group.family + to: not_home + for: "04:00:00" + condition: + - condition: state + entity_id: input_boolean.eco + state: "on" + action: + - service: notify.family_adults + data: + message: "🍃 Дома давно никого — не забудьте проветрить по возвращении." diff --git a/themes/warm_home.yaml b/themes/warm_home.yaml new file mode 100644 index 0000000..f18748a --- /dev/null +++ b/themes/warm_home.yaml @@ -0,0 +1,135 @@ +# ============================================================================= +# Тема «Тёплый дом» (warm_home) для Home Assistant / Lovelace +# ----------------------------------------------------------------------------- +# Палитра тёплого семейного дома: кремовый фон, тёплое дерево и терракота, +# мягкий янтарь для акцентов, приглушённый зелёный для «эко»-показателей, +# тёплый тёмно-коричневый текст. Мягкие тени, крупные скруглённые карточки. +# +# Установка: +# 1. Положите этот файл в /themes/warm_home.yaml +# 2. В configuration.yaml добавьте (если ещё нет): +# frontend: +# themes: !include_dir_merge_named themes +# 3. Перезапустите Home Assistant. +# 4. Профиль пользователя → тема → «Тёплый дом (warm_home)». +# +# Тема даёт и светлый, и «вечерний» (тёмный) вариант — HA сам подхватит +# нужный по системной настройке день/ночь (modes: light/dark ниже). +# ============================================================================= + +warm_home: + # ---- Базовая палитра (используется переменными ниже) -------------------- + warm-cream: "#f6efe6" # кремовый фон + warm-cream-2: "#efe4d6" # фон чуть темнее (полосы, вторичные блоки) + warm-card: "#fffaf3" # тёплый белый — карточки + warm-terracotta: "#c9743a" # тёплое дерево / терракота — главный акцент + warm-terracotta-d: "#a95c28" # терракота потемнее (нажатия, ховер) + warm-amber: "#e0a458" # мягкий янтарь — второй акцент, «включено» + warm-green: "#7d9464" # приглушённый зелёный — «эко» / хорошо + warm-red: "#c0562f" # тёплый красный — тревога / внимание + warm-text: "#3a332c" # тёплый тёмно-коричневый текст + warm-text-soft: "#6f6155" # вторичный текст + warm-divider: "#e3d5c3" # тёплые разделители + warm-shadow: "rgba(120, 82, 45, 0.16)" # мягкая тёплая тень + + # ---- Скругления, тени, шрифт -------------------------------------------- + ha-card-border-radius: "18px" + ha-card-border-width: "0px" + ha-card-box-shadow: "0 4px 18px var(--warm-shadow)" + card-mod-icon-color: "var(--warm-terracotta)" + primary-font-family: "'Nunito', 'Segoe UI', 'Manrope', system-ui, sans-serif" + paper-font-common-base_-_font-family: "'Nunito', 'Segoe UI', system-ui, sans-serif" + + # ---- Основные цвета Home Assistant -------------------------------------- + primary-color: "var(--warm-terracotta)" # главный акцент HA + accent-color: "var(--warm-amber)" + dark-primary-color: "var(--warm-terracotta-d)" + light-primary-color: "var(--warm-amber)" + + # ---- Текст --------------------------------------------------------------- + primary-text-color: "var(--warm-text)" + secondary-text-color: "var(--warm-text-soft)" + text-primary-color: "#fffaf3" # текст на акцентных кнопках + disabled-text-color: "#b8a894" + + # ---- Фон и поверхности --------------------------------------------------- + primary-background-color: "var(--warm-cream)" + secondary-background-color: "var(--warm-cream-2)" + divider-color: "var(--warm-divider)" + + # ---- Карточки ------------------------------------------------------------ + card-background-color: "var(--warm-card)" + ha-card-background: "var(--warm-card)" + paper-card-background-color: "var(--warm-card)" + + # ---- Шапка / боковая панель --------------------------------------------- + app-header-background-color: "var(--warm-terracotta)" + app-header-text-color: "#fffaf3" + sidebar-background-color: "var(--warm-card)" + sidebar-text-color: "var(--warm-text)" + sidebar-selected-text-color: "var(--warm-terracotta)" + sidebar-selected-icon-color: "var(--warm-terracotta)" + sidebar-icon-color: "var(--warm-text-soft)" + + # ---- Иконки / состояния -------------------------------------------------- + state-icon-color: "var(--warm-text-soft)" + state-icon-active-color: "var(--warm-amber)" # «включено» — тёплый янтарь + paper-item-icon-color: "var(--warm-text-soft)" + paper-item-icon-active-color: "var(--warm-amber)" + + # ---- Осмысленные состояния (свет/климат/сенсоры) ------------------------ + state-light-active-color: "var(--warm-amber)" + state-switch-active-color: "var(--warm-terracotta)" + state-climate-heat-color: "var(--warm-terracotta)" + state-climate-cool-color: "#6f97a8" + state-binary_sensor-active-color: "var(--warm-red)" # открыто/движение/тревога + + # ---- Переключатели / слайдеры / кнопки ---------------------------------- + switch-checked-color: "var(--warm-terracotta)" + switch-unchecked-color: "#c3b3a1" # выключено — приглушённый тёплый серо-беж + paper-slider-active-color: "var(--warm-terracotta)" + paper-slider-knob-color: "var(--warm-terracotta)" + paper-toggle-button-checked-bar-color: "var(--warm-terracotta)" + mdc-theme-primary: "var(--warm-terracotta)" + mdc-theme-secondary: "var(--warm-amber)" + + # ---- Семантика «хорошо / внимание / ошибка» ----------------------------- + success-color: "var(--warm-green)" + warning-color: "var(--warm-amber)" + error-color: "var(--warm-red)" + info-color: "var(--warm-terracotta)" + + # ---- Метки/чипы графиков (тёплая гамма) --------------------------------- + # Ряды на графиках энергопотребления и датчиков. + graph-color-1: "var(--warm-terracotta)" + graph-color-2: "var(--warm-amber)" + graph-color-3: "var(--warm-green)" + graph-color-4: "#b98a5e" + + # ========================================================================= + # Режимы: светлый (день) и тёплый вечерний (ночь). + # HA автоматически переключает по системной теме / времени суток. + # ========================================================================= + modes: + light: + warm-cream: "#f6efe6" + warm-cream-2: "#efe4d6" + warm-card: "#fffaf3" + warm-text: "#3a332c" + warm-text-soft: "#6f6155" + warm-divider: "#e3d5c3" + warm-shadow: "rgba(120, 82, 45, 0.16)" + + dark: + # Вечерний тёплый режим — приглушённый, глаза отдыхают. + warm-cream: "#2b2320" # тёмно-кофейный фон + warm-cream-2: "#342a25" + warm-card: "#39302a" # тёплые тёмные карточки + warm-text: "#f2e7d8" # тёплый светлый текст + warm-text-soft: "#c3b3a1" + warm-divider: "#4a3d34" + warm-shadow: "rgba(0, 0, 0, 0.45)" + # Акценты в тёмном режиме чуть теплее и мягче + warm-terracotta: "#d78850" + warm-amber: "#e8b56b" + warm-green: "#93a878"