Ранее:
Представление карточки в 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" и вообще,
как вы приручили Самсунг? Очень интересно!
https://github.com/jaruba/ha-samsungtv-tizen">https://github.com/jaruba/ha-s...
https://github.com/roberodin/ha-samsungtv-custom">https://github.com/roberodin/h...
Есть ещё встроенная в интеграциях.
Как добавить для штор и света зависимость от времени восхода солнца? Если летом к подъему светло, то зачем включать свет, а зимой шторы открывать только с рассветом.
Проверять состояние солнца. В ha по умолчанию есть sun.sun объект, он показывает: над горизонтом, за горизонтом.
запишите его в condition
У меня вообще не работает, скрипт yandex_tts_4 в примере отсутствует, шаблоны в сенсорах не работают вообще. Общая идея ясна, но взять и настроить для себе сложнее чем написать заново!
Верно, за "изобретение" пять, за предмет неуд. Да уж, модерация статей точно не помешает...
Выглядит круто, но ничего не работает. Код кривой.