@ -2,58 +2,60 @@
Представление карточки в Home Assistant:
В карточке используется дополнительный компонент [custom:fold-entity-row ](https://github.com/thomasloven/lovelace-fold-entity-row ). Ставится при помощи HACS.
В карточке используется дополнительные компоненты. Ставятся при помощи HACS.:
- [custom:stack-in-card ](https://github.com/custom-cards/stack-in-card )
- [custom:button-card ](https://github.com/custom-cards/button-card )
## Внешний вид карточки
![](../../images/software/hass/card-budilnik.png)
![](../../images/software/hass/card-budilnik-2.png)
![](../../../ images/software/hass/card-budilnik-1 .png)
![](../../../ images/software/hass/card-budilnik-2.png)
## Код карточки
``` yaml
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: Отложеное время в выходные дни
```
??? example
```yaml title="card-budilnik.yaml"
type: custom:stack-in-card
title: Будильник
cards:
- cards:
- entity: input_boolean.alarm_weekday
name: Будни
size: 30px
icon: mdi:alarm
tap_action:
action: toggle
type: custom:button-card
- entity: input_boolean.alarm_weekend
name: Выходные
icon: mdi:party-popper
size: 30px
tap_action:
action: toggle
type: custom:button-card
type: horizontal-stack
- type: conditional
conditions:
- entity: input_boolean.alarm_weekday
state: 'on'
card:
type: entities
entities:
- entity: input_datetime.alarm_weekday
name: По будням
- type: conditional
conditions:
- entity: input_boolean.alarm_weekend
state: 'on'
card:
type: entities
entities:
- entity: input_datetime.alarm_weekend
name: В выходные
```
## Как это работает
@ -61,404 +63,280 @@ entities:
Начинает проигрываться мелодия.
Ночник и светодиодная лента плавно включаются и добавляют яркость, цветопередача солнечного цвета.
~~Я люблю поваляться в стиле “еще 15 минут”, рукой толкаю куб Aqara, будильник откладывается на 15 минут.~~
~~Через 15 минут снова начинает проигрываться мелодия, плавно включается освещение, поднимается штора.~~
~~Я переворачиваю куб Aqara на 90°, будильник выключается, ночник и лента загораются на максимальной яркости. Home Assistant начинает доклад о погоде и дорожной обстановке, указывает время до работы на авто и время до ближайшего автобуса (интеграции Yandex карты и транспорт).~~
Если солнце уже встало, открываются шторы. Иначе включается мягкий тусклый свет.
## Идеи на реализацию:
- [ ] Добавить возможность отложить пробуждение, используя куб Aqare
- [ ] Выключение будильника, используя куб Aqare
## Код будильника
```yaml
#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ
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_boolen:
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) }}
- platform: template
sensors:
alarm_1_time_minus_offset:
friendly_name: 'Offset Time'
value_template: >-
{{ "%0.02d:%0.02d" | format( ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_offset"))| int)/60)| int),(((((((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_offset")) | int)/60)) - ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_offset")) | int)/60)| int))*100) | int)*60/100) | round) ) }}
- platform: template
sensors:
alarm_1_time_minus_cover:
friendly_name: 'Cover Time'
value_template: >-
{{ "%0.02d:%0.02d" | format( ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_cover"))| int)/60)| int),(((((((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_cover")) | int)/60)) - ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) (states("input_number.alarm_1_cover")) | int)/60)| int))*100) | int)*60/100) | round) ) }} #for -# {{ "%0.02d:%0.02d" | format( ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) - (states("input_number.alarm_1_cover"))| int)/60)| int),(((((((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) - (states("input_number.alarm_1_cover")) | int)/60)) - ((((states("input_number.alarm_1_hour") | int)*60 (states("input_number.alarm_1_minutes") | int) - (states("input_number.alarm_1_cover")) | int)/60)| int))*100) | int)*60/100) | round) ) }}
#ГРУПИРОВКА ВЫКЛЮЧАТЕЛЯ "БУДИЛЬНИК"
group:
alarm_1:
name: Wake Me Up
entities:
- input_boolean.alarm_1_weekday
- automation.wake_me_up_weekday_offset
#ВКЛЮЧЕНИЕ БУДИЛЬНИКА ПРИ ЗАПУСКЕ HA
automation:
- 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
??? example
```yaml
#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ
input_datetime:
alarm_weekday:
has_date: false
has_time: true
alarm_weekend:
has_date: false
has_time: true
#ПЕРЕКЛЮЧАТЕЛИ
input_boolean:
alarm_weekday:
alarm_weekend:
#СЕНСОРЫ ДЛЯ ПОДСЧЕТА ВРЕМЕНИ В ОТЛОЖЕННЫХ ФУНКЦИЯХ
sensor:
- platform: template
sensors:
input_alarm_weekday:
friendly_name: Будильник будни
value_template: "{{ (((state_attr('input_datetime.alarm_weekday' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
input_alarm_weekend:
friendly_name: Будильник выходные
value_template: "{{ (((state_attr('input_datetime.alarm_weekend' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
binary_sensor:
- platform: template
sensors:
alarm_weekday_start:
friendly_name: Будильник будни
value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekday_start') }}"
alarm_weekend_start:
friendly_name: Будильник выходные
value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekend_start') }}"
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
# ВКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВКЛЮЧЕНИИ
- id: 'on_alarm_clock'
alias: "Включение будильника клавишей"
trigger:
platform: state
entity_id:
- input_boolean.alarm_weekday
- input_boolean.alarm_weekend
to: 'on'
action:
- service: yandex_tts_alarm_on
# ВЫКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВЫКЛЮЧЕНИИ
- id: 'off_alarm_clock'
alias: "Выключение будильника клавишей"
trigger:
platform: state
entity_id:
- input_boolean.alarm_1_weekday
- input_boolean.alarm_1_weekend
to: 'off'
action:
- service: yandex_tts_alarm_off
# Запуск будильника по будням
- id: 'alarm_weekday'
alias: Wake me up (weekday)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_weekday
state: 'on'
- condition: time
weekday:
- mon
- tue
- wed
- thu
- fri
- condition: template
value_template: >-
{{ now().strftime("%H:%M") == states.sensor.input_alarm_weekday.state }}
- condition: state
entity_id: person.thest1tch
state: 'home'
action:
- data: {}
service: script.wakeup_sequence
# Запуск будильника по выходным
- id: 'alarm_weekend'
alias: Wake me up (weekend)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state
entity_id: input_boolean.alarm_weekend
state: 'on'
- condition: time
weekday:
- sat
- sun
- condition: template
value_template: >-
{{ now().strftime("%H:%M") == states.sensor.input_alarm_weekend.state }}
- condition: state
entity_id: person.thest1tch
state: 'home'
action:
- data: {}
service: script.wakeup_sequence
script:
# Включение люстры, если солнце еще не встало
wakeup_celib_start:
alias: wakeup_celib_start
sequence:
- condition: state
entity_id: sun.sun
state: below_horizon
for:
hours: 0
minutes: 1
seconds: 0
- service: light.turn_on
data:
brightness: '3'
brightness_step: 2
entity_id:
- light.yeelight_ceilb_0x17879e8e_nightlight
# Открывание штор, если солнце уже встало
wakeup_cover_start:
alias: wakeup_cover_start
sequence:
- condition: state
entity_id: sun.sun
state: above_horizon
for:
hours: 0
minutes: 1
seconds: 0
- service: cover.open_cover
data:
position: 10
target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
- delay: 00:02:00
- service: cover.open_cover
data:
position: 30
target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
- delay: 00:02:00
- service: cover.open_cover
data:
position: 50
target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
- delay: 00:02:00
- service: cover.open_cover
data:
position: 70
target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
- delay: 00:02:00
- service: cover.open_cover
data:
position: 100
target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
# Главный скрипт будильника
wakeup_sequence:
alias: wakeup_sequence
sequence:
- data: {}
#сбрасываем параметры освещения
service: wakeup_celib_start
- delay: 00:00:02
#включаем плавное наращивание освещения
- service: script.wakeup_celib_start
- service: script.wakeup_cover_start
- data: {}
#Включение музыки на яндекс станции
service: yandex_tts_alarm_start
# TTS YANDEX
yandex_tts_alarm_start:
alias: "YaStation Запуск будильника"
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.1
- delay: 00:00:01
- service: yandex_station.send_command
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
entity_id: media_player.yandex_station_m0017y300grsqb
command: sendText
text: Включи фоновую музыку
- delay: 00:01:00
- service: media_player.volume_set
data:
topic: "cmnd/blind/Backlog"
payload: "ShutterOpen1"
######################################
# СКРИПТ БУДИЛЬНИКА #
######################################
#Срабатывает последовательно: выставляется оттенок цвета, яркость в 0.
script:
'wakeup_dim':
alias: wakeup_dim
sequence:
- service: light.turn_on
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.2
- delay: 00:00:30
- service: media_player.volume_set
data:
brightness: '0'
rgb_color:
- 255
- 169
- 92
entity_id:
- light.yeelink_ceilb_f571_ambient_light
#Срабатывает последовательно: постепенно включается освещение.
'wakeup_bright':
alias: wakeup_bright
sequence:
- service: light.turn_on
data_template:
brightness: '255'
transition: '{{(states(''input_number.alarm_1_offset'') | int ) *60}}'
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.3
- delay: 00:00:30
- service: media_player.volume_set
data:
entity_id:
- light.yeelink_ceilb_f571_ambient_light
rgb_color:
- 255
- 169
- 92
#Главный скрипт будильника
'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.yandex_tts_1
# ИЛИ запуск проигрывания мелодии #
#- service: script.play_wakeup_music #в систему HA подгружена заранее собранная и настроенная мной мелодия.
#Я выбрал медленную композицию Daft Punk, в звуковом редакторе установил плавное увеличение громкости для нее и экспортировал в mp3.
#По сути HA просто воспроизводит mp3 через подключаемый addon https://github.com/bestlibre/hassio-addons/tree/master/mopidy
# TTS YANDEX
yandex_tts_1:
alias: YaStation_З а пу с к будильника
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.1
- delay: 00:00:01
- service: yandex_station.send_command
data:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.4
yandex_tts_alarm_on:
alias: "YaStation Включение будильника"
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.4
- delay: 00:00:01
- service: media_player.play_media
entity_id: media_player.yandex_station_m0017y300grsqb
command: sendText
text: Включи фоновую музыку.
- delay: 00:01:00
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.2
- delay: 00:00:30
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.3
- delay: 00:00:30
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.4
yandex_tts_2:
alias: YaStation_В ключе ние будильника
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.4
- delay: 00:00:01
- service: media_player.play_media
entity_id: media_player.yandex_station_m0017y300grsqb
data:
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
entity_id: media_player.yandex_station_m0017y300grsqb
data:
media_content_id: Будильник выключен.
media_content_type: text
```
Взято с [Sprut.ai ](https://sprut.ai/article/priruchi-home-assistant-budilnik ) и приведено в читаемый вид. Спасибо автору за код, но юзать е г о с оригинала почти невозможно.
Надо еще доделать:
- `yandex_tts_4` - отвечает за голос от Алисы, когда запускается будильник после рестарта HASS
- Добавить настройку зависимости штор и света от заката/вохода солнца
data:
media_content_id: Включаю будильник.
media_content_type: text
yandex_tts_alarm_off:
alias: YaStation_В ыключе ние будильника
sequence:
- service: media_player.volume_set
data:
entity_id:
- media_player.yandex_station
volume_level: 0.4
- service: media_player.play_media
entity_id: media_player.yandex_station_m0017y300grsqb
data:
media_content_id: Будильник выключен.
media_content_type: text
```