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:
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
- Добавить настройку зависимости штор и света от заката/вохода солнца
Loading…
Cancel
Save