Статья

Приручи Home Assistant. Будильник

Ранее:

Представление карточки в Home Assistant:

В карточке используется дополнительный компонент custom:fold-entity-row. Ставится при помощи HACS.

Внешний вид карточки

Карточка будильника
Карточка будильника развернута

Код карточки

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: Отложеное время в выходные дни

Как это работает

В указанное время срабатывает будильник.

Начинает проигрываться мелодия.

Ночник и светодиодная лента плавно включаются и добавляют яркость, цветопередача солнечного цвета.

Я люблю поваляться в стиле “еще 15 минут”, рукой толкаю куб Aqara, будильник откладывается на 15 минут.

Через 15 минут снова начинает проигрываться мелодия, плавно включается освещение, поднимается штора.

Я переворачиваю куб Aqara на 90°, будильник выключается, ночник и лента загораются на максимальной яркости. Home Assistant начинает доклад о погоде и дорожной обстановке, указывает время до работы на авто и время до ближайшего автобуса (интеграции Yandex карты и транспорт). Включается телевизор, отрабатывает скрипт, который включает на нем браузер и главную страничку HA.

Код будильника

#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ 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 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" ####################################### # СКРИПТ БУДИЛЬНИКА ####################################### script: #Срабатывает последовательно: выставляется оттенок цвета, яркость в 0. 'wakeup_dim': alias: wakeup_dim sequence: - data: brightness: '0' entity_id: - light.walli rgb_color: - 255 - 169 - 92 service: light.turn_on - data: brightness_pct: '0' entity_id: - light.eve rgb_color: - 255 - 169 - 92 transition: '0' service: light.turn_on #Срабатывает последовательно: постепенно включается освещение. 'wakeup_bright': alias: wakeup_bright sequence: - data_template: brightness: '255' transition: '{{(states(''input_number.alarm_1_offset'') | int ) *60}}' entity_id: - light.eve - light.walli rgb_color: - 255 - 169 - 92 service: light.turn_on #Главный скрипт будильника '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: {} #включаем телевизор, выводим главную страницу HA service: script.tv_on_browser_morning #Включение музыки на яндекс станции 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

Включение телевизора

По итогу включения телевизора, стартует скрипт запуска главной страницы Home Assistant.

script: tv_on_browser: alias: ТВ. Включение и экран HA в браузере sequence: #включаем ТВ - service: media_player.turn_on data: entity_id: media_player.samsung_tv_remote #запускаем на ТВ браузер - service: media_player.play_media data: entity_id: media_player.samsung_tv_remote media_content_type: app media_content_id: org.tizen.browser #открываем HA в браузере - service: media_player.play_media data: entity_id: media_player.samsung_tv_remote media_content_type: browser media_content_id: 'http://192.168.1.58:8123'

TTS YANDEX

script: yandex_tts_1: alias: YaStation_Запуск будильника sequence: - service: media_player.volume_set data: entity_id: - media_player.yandex_station volume_level: 0.1 - delay: '00:00:01' - service: yandex_station.send_command data: entity_id: media_player.yandex_station command: sendText text: Включи фоновую музыку. - delay: '00:01:00' - service: media_player.volume_set data: entity_id: - media_player.yandex_station volume_level: 0.2 - delay: '00:00:30' - service: media_player.volume_set data: entity_id: - media_player.yandex_station volume_level: 0.3 - delay: '00:00:30' - service: media_player.volume_set data: entity_id: - media_player.yandex_station volume_level: 0.4 yandex_tts_2: alias: YaStation_Включение будильника sequence: - service: media_player.volume_set data: entity_id: - media_player.yandex_station volume_level: 0.4 - delay: '00:00:01' - service: media_player.play_media entity_id: media_player.yandex_station 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 data: media_content_id: Будильник выключен. media_content_type: text

Пример доклада через google_cloud_say

- service: tts.google_cloud_say entity_id: media_player.mpd data_template: message: > Доброе утро. Сейчас {}. В настоящее время {}, на улице сейчас {} градусов. Сегодня вы можете ожидать {}. С высоким значением температуры в {} градусов и низким значением в {} градусов. До работы Лизы на автомобиле {} минут, до работы Никиты {} минут. {% if states.sensor.dark_sky_wind_speed.state|int > 10 %} Имейте ввиду, сегодня ветрено. {% endif %}


Тоже года два назад этим игрался. Все тоже самое плюс новости озвучивал. Сейчас хватает утреннего шоу от Алисы. Триггеры рабочий день и присутствие в доме хоть одного человека. 

Можно подробнее про сервис "media_player.samsung_tv_remote" и вообще,

как вы приручили Самсунг? Очень интересно!

Как добавить для штор и света зависимость от времени восхода солнца? Если летом к подъему светло, то зачем включать свет, а зимой шторы открывать только с рассветом.

Проверять состояние солнца. В ha по умолчанию есть sun.sun объект, он показывает: над горизонтом, за горизонтом.

запишите его в condition

У меня вообще не работает, скрипт  yandex_tts_4 в примере отсутствует, шаблоны в сенсорах не работают вообще. Общая идея ясна, но взять и настроить для себе сложнее чем написать заново!

Верно, за "изобретение" пять, за предмет неуд. Да уж, модерация статей точно не помешает...

Выглядит круто, но ничего не работает. Код кривой.

Каша вместо кода

Вернуться назад
Вернуться назад