@ -2,56 +2,58 @@
Представление карточки в 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
```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
type: entities
entities:
entities:
- entity: group.alarm_1
- entity: input_datetime.alarm_weekday
icon: mdi:alarm-check
name: По будням
name: Будильник
- type: conditional
- entity: sensor.alarm_1_time
conditions:
icon: mdi:clock-outline
- entity: input_boolean.alarm_weekend
name: Время срабатывания
state: 'on'
- entity: input_number.alarm_1_hour
card:
icon: mdi:cog-clockwise
type: entities
name: Часы
- entity: input_number.alarm_1_minutes
icon: mdi:cog-clockwise
name: Минуты
- type: custom:fold-entity-row
head:
type: section
label: Параметры
entities:
entities:
- entity: sensor.time_date
- entity: input_datetime.alarm_weekend
name: Текущее время и дата
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: Отложеное время в выходные дни
```
```
@ -61,89 +63,56 @@ entities:
Начинает проигрываться мелодия.
Начинает проигрываться мелодия.
Ночник и светодиодная лента плавно включаются и добавляют яркость, цветопередача солнечного цвета.
Если солнце уже встало, открываются шторы. Иначе включается мягкий тусклый свет.
~~Я люблю поваляться в стиле “еще 15 минут”, рукой толкаю куб Aqara, будильник откладывается на 15 минут.~~
~~Через 15 минут снова начинает проигрываться мелодия, плавно включается освещение, поднимается штора.~~
## Идеи на реализацию:
~~Я переворачиваю куб Aqara на 90°, будильник выключается, ночник и лента загораются на максимальной яркости. Home Assistant начинает доклад о погоде и дорожной обстановке, указывает время до работы на авто и время до ближайшего автобуса (интеграции Yandex карты и транспорт).~~
- [ ] Добавить возможность отложить пробуждение, используя куб Aqare
- [ ] Выключение будильника, используя куб Aqare
## Код будильника
## Код будильника
??? example
```yaml
```yaml
#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ
#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ
input_number:
input_datetime:
alarm_1_hour:
alarm_weekday:
name: Hours
has_date: false
icon: mdi:timer
has_time: true
initial: 7
alarm_weekend:
min: 0
has_date: false
max: 23
has_time: true
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:
input_boolean:
alarm_1_weekday:
alarm_weekday:
name: Weekdays
alarm_weekend:
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:
sensor:
- platform: template
- platform: template
sensors:
sensors:
alarm_1_time:
input_alarm_weekday:
value_template: >-
friendly_name: Будильник будни
{{ '%0.02d:%0.02d' | format(states('input_number.alarm_1_hour') | int, states('input_number.alarm_1_minutes') | int) }}
value_template: "{{ (((state_attr('input_datetime.alarm_weekday' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
- platform: template
sensors:
input_alarm_weekend:
alarm_1_time_minus_offset:
friendly_name: Будильник выходные
friendly_name: 'Offset Time'
value_template: "{{ (((state_attr('input_datetime.alarm_weekend' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
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) ) }}
binary_sensor:
- platform: template
- platform: template
sensors:
sensors:
alarm_1_time_minus_cover:
alarm_weekday_start:
friendly_name: 'Cover Time'
friendly_name: Будильник будни
value_template: >-
value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekday_start') }}"
{{ "%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) ) }}
alarm_weekend_start:
friendly_name: Будильник выходные
#ГРУПИРОВКА ВЫКЛЮЧАТЕЛЯ "БУДИЛЬНИК"
value_template: "{{ states('sensor.time') == states('sensor.input_alarm_weekend_start') }}"
group:
alarm_1:
name: Wake Me Up
entities:
- input_boolean.alarm_1_weekday
- automation.wake_me_up_weekday_offset
#ВКЛЮЧЕНИЕ БУДИЛЬНИКА ПРИ ЗАПУСКЕ HA
automation:
automation:
# ВКЛЮЧЕНИЕ БУДИЛЬНИКА ПРИ ЗАПУСКЕ HA
- id: 'startup_on_alarm_clock'
- id: 'startup_on_alarm_clock'
alias: Включение будильника при запуске HA
alias: Включение будильника при запуске HA
trigger:
trigger:
@ -155,7 +124,6 @@ automation:
before: '00:00:00'
before: '00:00:00'
action:
action:
- delay: 0:01
- delay: 0:01
- service: script.yandex_tts_4
# ВКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВКЛЮЧЕНИИ
# ВКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВКЛЮЧЕНИИ
- id: 'on_alarm_clock'
- id: 'on_alarm_clock'
@ -163,11 +131,11 @@ automation:
trigger:
trigger:
platform: state
platform: state
entity_id:
entity_id:
- input_boolean.alarm_1 _weekday
- input_boolean.alarm_weekday
- input_boolean.alarm_1 _weekend
- input_boolean.alarm_weekend
to: 'on'
to: 'on'
action:
action:
- service: script.yandex_tts_2
- service: yandex_tts_alarm_on
# ВЫКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВЫКЛЮЧЕНИИ
# ВЫКЛЮЧЕНИЕ КЛАВИШАМИ. ПРОСТО З В У К О В О Е СООБЩЕНИЕ О ВЫКЛЮЧЕНИИ
- id: 'off_alarm_clock'
- id: 'off_alarm_clock'
@ -179,13 +147,10 @@ automation:
- input_boolean.alarm_1_weekend
- input_boolean.alarm_1_weekend
to: 'off'
to: 'off'
action:
action:
- service: script.yandex_tts_3
- service: yandex_tts_alarm_off
#######################################
# Запуск будильника по будням
# Автоматизация для основного времени #
- id: 'alarm_weekday'
#######################################
#ЗАПУСКАЕМ СКРИПТ БУДИЛЬНИКА.
- id: 'alarm_1_weekday'
alias: Wake me up (weekday)
alias: Wake me up (weekday)
trigger:
trigger:
- platform: time_pattern
- platform: time_pattern
@ -193,7 +158,7 @@ automation:
seconds: 0
seconds: 0
condition:
condition:
- condition: state
- condition: state
entity_id: input_boolean.alarm_1 _weekday
entity_id: input_boolean.alarm_weekday
state: 'on'
state: 'on'
- condition: time
- condition: time
weekday:
weekday:
@ -204,16 +169,16 @@ automation:
- fri
- fri
- condition: template
- condition: template
value_template: >-
value_template: >-
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time.state }}
{{ now().strftime("%H:%M") == states.sensor.input_alarm_weekday.state }}
- condition: state
entity_id: person.thest1tch
state: 'home'
action:
action:
- data: {}
- data: {}
service: script.wakeup_sequence
service: script.wakeup_sequence
#######################################
# Запуск будильника по выходным
# Автоматизация для выходных ##########
- id: 'alarm_weekend'
#######################################
#ЗАПУСКАЕМ СКРИПТ БУДИЛЬНИКА.
- id: 'alarm_1_weekend'
alias: Wake me up (weekend)
alias: Wake me up (weekend)
trigger:
trigger:
- platform: time_pattern
- platform: time_pattern
@ -221,7 +186,7 @@ automation:
seconds: 0
seconds: 0
condition:
condition:
- condition: state
- condition: state
entity_id: input_boolean.alarm_1 _weekend
entity_id: input_boolean.alarm_weekend
state: 'on'
state: 'on'
- condition: time
- condition: time
weekday:
weekday:
@ -229,173 +194,92 @@ automation:
- sun
- sun
- condition: template
- condition: template
value_template: >-
value_template: >-
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time.state }}
{{ now().strftime("%H:%M") == states.sensor.input_alarm_weekend.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
- condition: state
entity_id: input_boolean.alarm_1_weekday
entity_id: person.thest1tch
state: 'on'
state: 'home'
- 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:
action:
- data: {}
- data: {}
service: script.wakeup_sequence
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"
######################################
# СКРИПТ БУДИЛЬНИКА #
######################################
#Срабатывает последовательно: выставляется оттенок цвета, яркость в 0.
script:
script:
'wakeup_dim':
# Включение люстры, если солнце еще не встало
alias: wakeup_dim
wakeup_celib_start:
alias: wakeup_celib_start
sequence:
sequence:
- condition: state
entity_id: sun.sun
state: below_horizon
for:
hours: 0
minutes: 1
seconds: 0
- service: light.turn_on
- service: light.turn_on
data:
data:
brightness: '0'
brightness: '3'
rgb_color:
brightness_step: 2
- 255
- 169
- 92
entity_id:
entity_id:
- light.yeelink_ceilb_f571_ambient_light
- light.yeelight_ceilb_0x17879e8e_nightlight
#Срабатывает последовательно: постепенно включается освещение.
# Открывание штор, если солнце уже встало
'wakeup_bright':
wakeup_cover_start:
alias: wakeup_bright
alias: wakeup_cover_start
sequence:
sequence:
- service: light.turn_on
- condition: state
data_template:
entity_id: sun.sun
brightness: '255'
state: above_horizon
transition: '{{(states(''input_number.alarm_1_offset'') | int ) *60}}'
for:
entity_id:
hours: 0
- light.yeelink_ceilb_f571_ambient_light
minutes: 1
rgb_color:
seconds: 0
- 255
- service: cover.open_cover
- 169
data:
- 92
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':
wakeup_sequence:
alias: wakeup_sequence
alias: wakeup_sequence
sequence:
sequence:
- data: {}
- data: {}
#сбрасываем параметры освещения
#сбрасываем параметры освещения
service: script.wakeup_dim
service: wakeup_celib_start
- delay: 00:00:02
- delay: 00:00:02
#включаем плавное наращивание освещения
#включаем плавное наращивание освещения
- service: script.wakeup_bright
- service: script.wakeup_celib_start
- delay: '00:{{ states.input_number.alarm_1_offset.state | int }}:00'
- service: script.wakeup_cover_start
- data: {}
- data: {}
#Включение музыки на яндекс станции
#Включение музыки на яндекс станции
service: script.yandex_tts_1
service: yandex_tts_alarm_start
# ИЛИ запуск проигрывания мелодии #
#- service: script.play_wakeup_music #в систему HA подгружена заранее собранная и настроенная мной мелодия.
#Я выбрал медленную композицию Daft Punk, в звуковом редакторе установил плавное увеличение громкости для нее и экспортировал в mp3.
#По сути HA просто воспроизводит mp3 через подключаемый addon https://github.com/bestlibre/hassio-addons/tree/master/mopidy
# TTS YANDEX
# TTS YANDEX
yandex_tts_1:
yandex_tts_alarm_start:
alias: YaStation_З а пу с к будильника
alias: "YaStation Запуск будильника"
sequence:
sequence:
- service: media_player.volume_set
- service: media_player.volume_set
data:
data:
@ -407,7 +291,7 @@ script:
data:
data:
entity_id: media_player.yandex_station_m0017y300grsqb
entity_id: media_player.yandex_station_m0017y300grsqb
command: sendText
command: sendText
text: Включи фоновую музыку.
text: Включи фоновую музыку
- delay: 00:01:00
- delay: 00:01:00
- service: media_player.volume_set
- service: media_player.volume_set
data:
data:
@ -427,8 +311,8 @@ script:
- media_player.yandex_station_m0017y300grsqb
- media_player.yandex_station_m0017y300grsqb
volume_level: 0.4
volume_level: 0.4
yandex_tts_2 :
yandex_tts_alarm_on :
alias: YaStation_В ключе ние будильника
alias: "YaStation Включение будильника"
sequence:
sequence:
- service: media_player.volume_set
- service: media_player.volume_set
data:
data:
@ -439,10 +323,10 @@ script:
- service: media_player.play_media
- service: media_player.play_media
entity_id: media_player.yandex_station_m0017y300grsqb
entity_id: media_player.yandex_station_m0017y300grsqb
data:
data:
media_content_id: Включаю будильник на {{ states('sensor .alarm_1_time') }}
media_content_id: Включаю будильник.
media_content_type: text
media_content_type: text
yandex_tts_3 :
yandex_tts_alarm_off :
alias: YaStation_В ыключе ние будильника
alias: YaStation_В ыключе ние будильника
sequence:
sequence:
- service: media_player.volume_set
- service: media_player.volume_set
@ -456,9 +340,3 @@ script:
media_content_id: Будильник выключен.
media_content_id: Будильник выключен.
media_content_type: text
media_content_type: text
```
```
Взято с [Sprut.ai ](https://sprut.ai/article/priruchi-home-assistant-budilnik ) и приведено в читаемый вид. Спасибо автору за код, но юзать е г о с оригинала почти невозможно.
Надо еще доделать:
- `yandex_tts_4` - отвечает за голос от Алисы, когда запускается будильник после рестарта HASS
- Добавить настройку зависимости штор и света от заката/вохода солнца