update
continuous-integration/drone/push Build is passing Details

states/02
thest1tch 1 year ago
parent 2f0becf5a3
commit ff531b9ad1

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Before

Width:  |  Height:  |  Size: 66 KiB

After

Width:  |  Height:  |  Size: 66 KiB

@ -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:
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: 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
## Код будильника ## Код будильника
```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
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 - platform: template
sensors: sensors:
alarm_1_time_minus_cover: input_alarm_weekday:
friendly_name: 'Cover Time' friendly_name: Будильник будни
value_template: >- value_template: "{{ (((state_attr('input_datetime.alarm_weekday' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
{{ "%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) ) }}
#ГРУПИРОВКА ВЫКЛЮЧАТЕЛЯ "БУДИЛЬНИК" input_alarm_weekend:
group: friendly_name: Будильник выходные
alarm_1: value_template: "{{ (((state_attr('input_datetime.alarm_weekend' , 'timestamp')) - (5 * 60))|timestamp_custom('%H:%M', false)) }}"
name: Wake Me Up
entities:
- input_boolean.alarm_1_weekday
- automation.wake_me_up_weekday_offset
#ВКЛЮЧЕНИЕ БУДИЛЬНИКА ПРИ ЗАПУСКЕ HA binary_sensor:
automation: - 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' - id: 'startup_on_alarm_clock'
alias: Включение будильника при запуске HA alias: Включение будильника при запуске HA
trigger: trigger:
@ -155,21 +124,20 @@ 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'
alias: "Включение будильника клавишей" alias: "Включение будильника клавишей"
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'
alias: "Выключение будильника клавишей" alias: "Выключение будильника клавишей"
trigger: trigger:
@ -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
####################################### script:
# Автоматизация для отложенного времени в выходные # # Включение люстры, если солнце еще не встало
###################################### wakeup_celib_start:
# ЗАПУСКАЕМ СКРИПТ БУДИЛЬНИКА ЕСЛИ ОТЛОЖИЛИ БУДИЛЬНИК. alias: wakeup_celib_start
- id: 'alarm_1_weekend_offset' sequence:
alias: Wake me up (weekend offset)
trigger:
- platform: time_pattern
minutes: "/1"
seconds: 0
condition:
- condition: state - condition: state
entity_id: input_boolean.alarm_1_weekend entity_id: sun.sun
state: 'on' state: below_horizon
- condition: time for:
weekday: hours: 0
- sat minutes: 1
- 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 seconds: 0
condition: - service: light.turn_on
- 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" brightness: '3'
payload: "ShutterOpen1" brightness_step: 2
entity_id:
- light.yeelight_ceilb_0x17879e8e_nightlight
- id: 'alarm_1_weekend_cover' # Открывание штор, если солнце уже встало
alias: Wake me up (weekend cover) wakeup_cover_start:
trigger: alias: wakeup_cover_start
- platform: time_pattern sequence:
minutes: "/1"
seconds: 0
condition:
- condition: state - condition: state
entity_id: input_boolean.alarm_1_weekend entity_id: sun.sun
state: 'on' state: above_horizon
- condition: time for:
weekday: hours: 0
- sat minutes: 1
- sun seconds: 0
- condition: template - service: cover.open_cover
value_template: >-
{{ now().strftime("%H:%M") == states.sensor.alarm_1_time_minus_cover.state }}
action:
- service: mqtt.publish
data: data:
topic: "cmnd/blind/Backlog" position: 10
payload: "ShutterOpen1" target:
entity_id: cover.yeelink_ctmt1_c8c9_curtain
###################################### - delay: 00:02:00
# СКРИПТ БУДИЛЬНИКА # - service: cover.open_cover
######################################
#Срабатывает последовательно: выставляется оттенок цвета, яркость в 0.
script:
'wakeup_dim':
alias: wakeup_dim
sequence:
- service: light.turn_on
data: data:
brightness: '0' position: 30
rgb_color: target:
- 255 entity_id: cover.yeelink_ctmt1_c8c9_curtain
- 169 - delay: 00:02:00
- 92 - service: cover.open_cover
entity_id: data:
- light.yeelink_ceilb_f571_ambient_light 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_bright': wakeup_sequence:
alias: wakeup_bright
sequence:
- service: light.turn_on
data_template:
brightness: '255'
transition: '{{(states(''input_number.alarm_1_offset'') | int ) *60}}'
entity_id:
- light.yeelink_ceilb_f571_ambient_light
rgb_color:
- 255
- 169
- 92
#Главный скрипт будильника
'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
@ -455,10 +339,4 @@ script:
data: data:
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
- Добавить настройку зависимости штор и света от заката/вохода солнца
Loading…
Cancel
Save