Это реализация умного будильника в Home Assistant — с визуализацией, гибкой логикой по дням недели, отложенным срабатыванием, управлением светом, шторами, ТВ и голосовыми оповещениями.
Что реализовано:
custom:fold-entity-row из HACS).input_number.alarm_1_offset, есть отдельный сенсор вычисленного времени.alarm_1_offset). Цвет подобран «под солнце» (тёплый оттенок).alarm_1_cover) и отдельный триггер для этого.
Как это работает по шагам:
input_number.wakeup_sequence:
Код карточки управления, вставляется с выбором в интерфейсе кастомной карты.
type: entities
entities:
- entity: group.alarm_1
icon: 'mdi:alarm-check'
name: Будильник
- entity: sensor.alarm_1_time
icon: 'mdi:clock-outline'
name: Время срабатывания
- entity: input_number.alarm_1_hour
icon: 'mdi:cog-clockwise'
name: Часы
- entity: input_number.alarm_1_minutes
icon: 'mdi:cog-clockwise'
name: Минуты
- type: 'custom:fold-entity-row'
head:
type: section
label: Параметры
entities:
- entity: sensor.time_date
name: Текущее время и дата
- entity: sensor.alarm_1_time_minus_offset
icon: 'mdi:progress-clock'
name: Время отложенного срабатывания
- entity: sensor.alarm_1_time_minus_cover
name: Время открытия шторы
- entity: input_number.alarm_1_offset
name: Отложить на
- entity: input_number.alarm_1_cover
name: Шторы
- entity: input_boolean.alarm_1_weekday
name: Рабочие дни
- entity: input_boolean.alarm_1_weekend
name: Выходные дни
- entity: automation.wake_me_up_weekday_offset
icon: 'mdi:calendar'
name: Отложенное время в рабочие дни
- entity: automation.wake_me_up_weekend_offset
icon: 'mdi:calendar'
name: Отложенное время в выходные дни
1. Логика и элементы управления:
Всё строится на стандартных компонентах Home Assistant:
input_number — для часов, минут, времени отложенного срабатывания и штор,
input_boolean — для включения будильника по дням недели,
template sensor — динамический расчёт времени (основное, отложенное, время для штор),
group — группировка сущностей для удобного управления.
2. Автоматизации:
Автоматизации построены на триггере time_pattern (проверка каждую минуту). В зависимости от дня недели и состояния переключателей, сравнивается текущее время с рассчитанными сенсорами.
Есть отдельные автоматизации для:
основного времени (рабочие / выходные),
отложенного времени (рабочие / выходные),
открытия штор (рабочие / выходные).
Дополнительно настроены автоматизации на включение и выключение будильника с голосовым подтверждением через Яндекс Станцию, а также автоматическое включение будильника при старте Home Assistant.
3. Скрипт пробуждения
Скрипт wakeup_sequence выполняется последовательно:
Сбрасывает параметры освещения (цвет и яркость в ноль).
Плавно увеличивает яркость света до максимума с заданной задержкой (настраивается через alarm_1_offset).
Включает телевизор и открывает в браузере главную страницу Home Assistant.
Запускает голосовое оповещение или воспроизведение мелодии.
4. Включение телевизора
Отдельный скрипт tv_on_browser:
включает Samsung TV,
запускает на нём браузер,
открывает адрес локального HA-сервера.
Всё работает через медиа-интеграцию Home Assistant.
5. Голосовое сопровождение
Я использую два подхода:
Яндекс Станция — для коротких голосовых сообщений (включение/выключение будильника, запуск фоновой музыки) с постепенным увеличением громкости.
Google Cloud TTS — для детального утреннего доклада с погодой, временем в пути и предупреждениями о сильном ветре.
Код:
# ==============================================
# ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ
# ==============================================
input_number:
alarm_1_hour:
name: Hours
icon: mdi:timer
initial: 7
min: 0
max: 23
step: 1
alarm_1_minutes:
name: Minutes
icon: mdi:timer
initial: 15
min: 0
max: 59
step: 1
alarm_1_offset:
name: Transition
icon: mdi:blur-linear
initial: 5
min: 0
max: 60
step: 5
alarm_1_cover:
name: Transition
icon: mdi:blur-linear
initial: 15
min: 0
max: 60
step: 5
# ==============================================
# ПЕРЕКЛЮЧАТЕЛИ
# ==============================================
input_boolean:
alarm_1_weekday:
name: Weekdays
initial: off
icon: mdi:calendar
alarm_1_weekend:
name: Weekends
initial: off
icon: mdi:calendar
alarm_1_offset_boolean:
name: Offset
initial: off
icon: mdi:timer
# ==============================================
# СЕНСОРЫ ДЛЯ ПОДСЧЕТА ВРЕМЕНИ
# ==============================================
sensor:
- platform: template
sensors:
alarm_1_time:
value_template: >
{{ "%0.02d:%0.02d" | format(
states("input_number.alarm_1_hour") | int,
states("input_number.alarm_1_minutes") | int
) }}
alarm_1_time_minus_offset:
friendly_name: 'Offset Time'
value_template: >
{% set total_minutes = (states('input_number.alarm_1_hour') | int * 60) +
(states('input_number.alarm_1_minutes') | int) +
(states('input_number.alarm_1_offset') | int) %}
{% set hours = (total_minutes // 60) | int %}
{% set minutes = (total_minutes % 60) | int %}
{{ '%0.02d:%0.02d' | format(hours, minutes) }}
alarm_1_time_minus_cover:
friendly_name: 'Cover Time'
value_template: >
{% set total_minutes = (states('input_number.alarm_1_hour') | int * 60) +
(states('input_number.alarm_1_minutes') | int) +
(states('input_number.alarm_1_cover') | int) %}
{% set hours = (total_minutes // 60) | int %}
{% set minutes = (total_minutes % 60) | int %}
{{ '%0.02d:%0.02d' | format(hours, minutes) }}
# ==============================================
# ГРУППИРОВКА
# ==============================================
group:
alarm_1:
name: Wake Me Up
entities:
- input_boolean.alarm_1_weekday
- automation.wake_me_up_weekday_offset
# ==============================================
# АВТОМАТИЗАЦИИ
# ==============================================
automation:
# Включение будильника при запуске HA
- id: 'startup_on_alarm_clock'
alias: Включение будильника при запуске HA
trigger:
platform: homeassistant
event: start
condition:
condition: time
after: '09:00:00'
before: '00:00:00'
action:
- delay: 0:01
- service: script.yandex_tts_4
# Включение клавишами (звуковое сообщение)
- id: 'on_alarm_clock'
alias: "Включение будильника клавишей"
trigger:
platform: state
entity_id:
- input_boolean.alarm_1_weekday
- input_boolean.alarm_1_weekend
to: 'on'
action:
- service: script.yandex_tts_2
# Выключение клавишами (звуковое сообщение)
- id: 'off_alarm_clock'
alias: "Выключение будильника клавишей"
trigger:
platform: state
entity_id:
- input_boolean.alarm_1_weekday
- input_boolean.alarm_1_weekend
to: 'off'
action:
- service: script.yandex_tts_3
# ==============================================
# Автоматизация для основного времени (рабочие дни)
# ==============================================
- id: 'alarm_1_weekday'
alias: Wake me up (weekday)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time.state }}
action:
- data: {}
service: script.wakeup_sequence
# ==============================================
# Автоматизация для основного времени (выходные)
# ==============================================
- id: 'alarm_1_weekend'
alias: Wake me up (weekend)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekend
state: 'on'
- condition: time
weekday:
- sat
- sun
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time.state }}
action:
- data: {}
service: script.wakeup_sequence
# ==============================================
# Автоматизация для отложенного времени (рабочие дни)
# ==============================================
- id: 'alarm_1_weekday_offset'
alias: Wake me up (weekday_offset)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time_minus_offset.state }}
action:
- data: {}
service: script.wakeup_sequence
# ==============================================
# Автоматизация для отложенного времени (выходные)
# ==============================================
- id: 'alarm_1_weekend_offset'
alias: Wake me up (weekend offset)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekend
state: 'on'
- condition: time
weekday:
- sat
- sun
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time_minus_offset.state }}
action:
- data: {}
service: script.wakeup_sequence
# ==============================================
# Автоматизация для штор (рабочие дни)
# ==============================================
- id: 'alarm_1_weekday_cover'
alias: Wake me up (weekday_cover)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time_minus_cover.state }}
action:
- service: mqtt.publish
data:
topic: "cmnd/blind/Backlog"
payload: "ShutterOpen1"
# ==============================================
# Автоматизация для штор (выходные)
# ==============================================
- id: 'alarm_1_weekend_cover'
alias: Wake me up (weekend cover)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_1_weekend
state: 'on'
- condition: time
weekday:
- sat
- sun
- condition: template
value_template: >
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time_minus_cover.state }}
action:
- service: mqtt.publish
data:
topic: "cmnd/blind/Backlog"
payload: "ShutterOpen1"
# ==============================================
# СКРИПТЫ
# ==============================================
script:
# Сброс освещения (яркость 0, цвет солнечный)
wakeup_dim:
alias: wakeup_dim
sequence:
- data:
brightness: '0'
rgb_color: [255, 169, 92]
entity_id: light.walli
service: light.turn_on
- data:
brightness_pct: '0'
rgb_color: [255, 169, 92]
transition: '0'
entity_id: light.eve
service: light.turn_on
# Плавное включение освещения
wakeup_bright:
alias: wakeup_bright
sequence:
- data_template:
brightness: '255'
transition: "{{ (states('input_number.alarm_1_offset') | int) * 60 }}"
rgb_color: [255, 169, 92]
entity_id:
- light.eve
- light.walli
service: light.turn_on
# Главный скрипт будильника
wakeup_sequence:
alias: wakeup_sequence
sequence:
- data: {}
service: script.wakeup_dim
- delay: 00:00:02
- service: script.wakeup_bright
- delay: '00:{{ states.input_number.alarm_1_offset.state | int }}:00'
- data: {}
service: script.tv_on_browser_morning
- service: script.yandex_tts_1
# Альтернатива: запуск MP3 через Mopidy
# - service: script.play_wakeup_music
# Включение телевизора и открытие HA
tv_on_browser:
alias: ТВ. Включение и экран HA в браузере
sequence:
- service: media_player.turn_on
data:
entity_id: media_player.samsung_tv_remote
- service: media_player.play_media
data:
entity_id: media_player.samsung_tv_remote
media_content_type: app
media_content_id: org.tizen.browser
- service: media_player.play_media
data:
entity_id: media_player.samsung_tv_remote
media_content_type: browser
media_content_id: 'http://192.168.1.58:8123'
# TTS Яндекс Станция
yandex_tts_1:
alias: YaStation_Запуск будильника
sequence:
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.1
- delay: '00:00:01'
- service: yandex_station.send_command
data:
entity_id: media_player.yandex_station
command: sendText
text: Включи фоновую музыку.
- delay: '00:01:00'
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.2
- delay: '00:00:30'
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.3
- delay: '00:00:30'
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.4
yandex_tts_2:
alias: YaStation_Включение будильника
sequence:
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.4
- delay: '00:00:01'
- service: media_player.play_media
data:
entity_id: media_player.yandex_station
media_content_id: "Включаю будильник на {{ states('sensor.alarm_1_time') }}"
media_content_type: text
yandex_tts_3:
alias: YaStation_Выключение будильника
sequence:
- service: media_player.volume_set
data:
entity_id: media_player.yandex_station
volume_level: 0.4
- service: media_player.play_media
data:
entity_id: media_player.yandex_station
media_content_id: Будильник выключен.
media_content_type: text
# Пример TTS через Google Cloud
# google_tts_morning:
# alias: Утренний доклад
# sequence:
# - service: tts.google_cloud_say
# data_template:
# entity_id: media_player.mpd
# message: >
# Доброе утро. Сейчас {}. В настоящее время {}, на улице сейчас {} градусов.
# Сегодня вы можете ожидать {}. С высоким значением температуры в {} градусов
# и низким значением в {} градусов. До работы Лизы на автомобиле {} минут,
# до работы Никиты {} минут.
# {% if states.sensor.dark_sky_wind_speed.state|int > 10 %}
# Имейте ввиду, сегодня ветрено.
# {% endif %}