Files
ha-warm-family-panel/packages/family_scenarios.yaml
T
germanandClaude Opus 4.8 f5eac43a58 Тёплая панель Home Assistant для большой семьи
Тема warm_home, дашборд «Тёплый дом», сценарии (scripts+automations) и helpers.
Все entity_id — плейсхолдеры, деплоя нет.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Up44uyffFr8MuxiqfB61Uv
2026-09-03 22:33:14 +03:00

699 lines
30 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =============================================================================
# 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: "🍃 Дома давно никого — не забудьте проветрить по возвращении."