diff --git a/docs/software/hass/alarm-check.md b/docs/software/hass/alarm-check.md new file mode 100644 index 0000000..4c052ad --- /dev/null +++ b/docs/software/hass/alarm-check.md @@ -0,0 +1,529 @@ +# Будильник для Home Assistant + +Представление карточки в Home Assistant: + +В карточке используется дополнительный компонент [custom:fold-entity-row](https://github.com/thomasloven/lovelace-fold-entity-row). Ставится при помощи HACS. + +## Внешний вид карточки + +![](https://api.sprut.ai/static/media/cache/00/83/47/40/4289/77973/1600x_image.png?1620313596) + +Карточка будильника + +![](https://api.sprut.ai/static/media/cache/00/83/47/40/4289/77974/1600x_image.png?1620313597) + +Карточка будильника развернута + +## Код карточки + +``` yaml +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. + +## Код будильника + +```yaml +#ДОБАВЛЯЕМ ЭЛЕМЕНТЫ ВВОД И УПРАВЛЕНИЯ +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. + +```yaml +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 + +```yaml +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 +``` \ No newline at end of file diff --git a/docs/software/hass/package-conf.md b/docs/software/hass/package-conf.md new file mode 100644 index 0000000..927b1ca --- /dev/null +++ b/docs/software/hass/package-conf.md @@ -0,0 +1,63 @@ +# Пакеты конфигурации + +С увеличением количества устройств в умном доме, возникает вопрос: как не потеряться в файле конфигурации? На помощь приходят **Packages (пакеты)**. Они позволяют организовывать и группировать компоненты ***Home Assistant*** в один или несколько файлов. + +## Первые шаги + +Для начала необходимо создать папку **packages** в корне директории, где храниться файл **configuration.yaml**! +Затем добавьте в **configuration.yaml** следующие строки, указанные ниже! (пример использования на картинке). + +```yaml +homeassistant: + packages: !include_dir_named packages +``` + +Готово! Вам осталось придумать, как вы назовёте папки и файлы в которых будут храниться *switch*, *light*, *sensor* и другие компоненты. + +К примеру, чтобы перенести все *switch* из **configuration.yaml** в отдельный файл, создайте в папке **packages** файл с названием - **названиеФайла.yaml** и поместите в него ваш код! + +## Стандартная структура файла + +Для использования компонента, укажите [название интеграции](https://www.home-assistant.io/components/) и поставьте двоеточие. После этого вы можете добавлять свои устройства! Также, можно кастомизировать устройства прямо в пакетах, пример ниже. + +```yaml +binary_sensor: + - platform: workday + name: tools_workday + country: 'RU' + - platform: rest + name: hall_doorbell + device_class: sound + resource: http://0.0.0.0/sec/?pt=10&cmd=get + scan_interval: 1 + +# Кастомизация устройств в пакетах (не обязательно) +homeassistant: + customize: + binary_sensor.tools_workday: + friendly_name: Рабочий день +``` + +Еще можно объединять **несколько компонентов** в один файл: + +```yaml +### Очиститель воздуха Philips ### +# Настройки интеграции +fan: + - platform: philips_airpurifier + host: !secret host_philips_airpurifier + +# Внешний вид +homeassistant: + customize: + sensor.philips_pre_filter: + friendly_name: 'Предв. фильтр' + +# Датчики +sensor: + - platform: template + sensors: + philips_pre_filter: + unit_of_measurement: 'ч' + value_template: "{{ state_attr('fan.philips_airpurifier', 'pre_filter') }}" +``` \ No newline at end of file