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