Home assistant / esphome (делимся примерами и наработками в данной области).

Тема в разделе "Глядите, что я сделал", создана пользователем Securbond, 6 ноя 2020.

  1. Securbond

    Securbond Гуру

    Решил создать данную тему для обмена опытом и наработками в системе умного дома Home Assistant (далее НА), т.к на данном форуме очень много грамотных индивидуумов, а тема HA особо не освещается.

    Тем кто только решил осваивать HA предлагаю сначала ознакомиться с уроками Alex Kvazis -

    , 70% всего сообщества HA училось на его примерах, и я в том числе. По этому моя система установлена в докер, на RaspberryPi 4 c 4Gb оперативки, и после перенесена на внешний SSD диск и теперь грузится и работает совсем без флэшки, что повышает её надёжность. Это очень важно т.к HA постоянно что то пишет в базу данных и со временем флэшка сдохнет вместе с вашим "умным домом" !!!

    Далее привожу скриншоты своей системы и потихонечку буду выкладывать примеры автоматизаций и др. плюшек которые освоил за недолгих 2 месяца освоения данной системы.
    На данный момент она:
    • Управляет освещением по датчику движения. При этом в разное время суток включаются разные группы освещения.
    • Следит за домашними устройствами и пишет статистику кто и когда подключается и отваливается.
    • Шлёт уведомления в телеграмм
    • Сообщает о неисправностях или событиях голосом через Алису (станция Мини, Большая станция)
    • Управляет устройствами голосом через Яндекс станции.
    • Шлёт данные с погодной станции на narodmon.ru
    • Кофе пока не варит, но мы её научим ))

    home7.jpg home1.jpg home2.jpg home3.jpg home4.jpg home5.jpg home6.jpg

    Телеграмм каналы сообщества:
    https://t.me/SprutAI_HomeAssistant - Основной канал
    https://t.me/homever_meet - Душевный "ламповый" чатик
    https://t.me/esphome - Канал по прошивке "ESPHome"
    https://t.me/bessarabov_ha - Полезно почитать.
    https://t.me/AlexxIT_SmartHome - Канал AlexxIT - много про разработку и интеграцию Yandex в HA и не только.

    Полезное:
    https://ivan.bessarabov.ru/blog
     
    Последнее редактирование: 6 ноя 2020
    VtitanS, SergeiL, ZAZ-965 и ещё 1-му нравится это.
  2. Securbond

    Securbond Гуру

    1. Начало, первые шаги, советы по настройке.
    Итак, будем надеется, что вы посмотрели уроки Алекса и успешно подняли сервер НА.
    Для тех кто хочет опробовать систему не покупая малинки NUCи и всякие мини PC есть готовая сборка от одного многоуважаемого члена сообщества AlexxIT Home Assistant Windows Portable - https://github.com/AlexxIT/HassWP

    Вступление .
    Основным "языком" в HA как впрочем и в ESPHome является YAML, простым языком это скорее язык разметки, что то похожее на HTML. Тем кто ранее занимался программированием на Сях или скриптовых языках LUA, JS и подобных Питонах будет тяжеловато, но чем больше разбираешься и пробуешь, тем быстрее начинает получаться .
    Очень настаиваю не пользоваться для настройки внешнего вида и интеграций средствами "вэбморды", а сразу приучить себя настраивать всё через конфигурационные файлы. и лишь иногда отходить от данного правила.

    Настройка.

    1. После установки заходим в интерфейс и первым делом включаем расширенный режим.
    home8.jpg
    2. Далее нам нужно как то редактировать файлы конфигурации и для этого мы поставим File Editor из магазина (всё бесплатно) Add-on Store. Жмякаем, устанавливаем.
    home9.jpg

    3. После этого File Editor Должен появиться в боковой панели. Если нет, перезагружаем систему для этого в левой панели жмякаем Настройки - Сервер потом кнопку "Начать проверку" ( данную операцию проделываем после изменения конфигов всегда, на всякий случай мало ли что ) и перезагружаем систему кнопкой "ПЕРЕЗАПУСТИТЬ"

    Основным файлом в системе является - configuration.yaml, в нём описаны основные настройки, подключенные модули и т.п

    Вот кусок моего основного конфига, далее разберём его подробнее.
    HTML:


    homeassistant:
      name: Home Bond
      latitude: !secret latitude_coord
      longitude: !secret longitude_coord
      elevation: 30
      unit_system: metric
      time_zone: Europe/Moscow
      customize: !include customize.yaml

    # Configure a default setup of Home Assistant (frontend, api, etc)
    default_config:
    http:

       ssl_certificate: /ssl/fullchain.pem
       ssl_key: /ssl/privkey.pem


    lovelace:
      mode: yaml  # Включаем ручную настройку интерфейса
      resources:
        - url: /hacsfiles/mini-media-player/mini-media-player-bundle.js
          type: module
        - url: /hacsfiles/ha-yandex-icons/yandex-icons.js
          type: module
        - url: /local/mini-graph-card-bundle.js?v=0.9.4
          type: module
        - url: /local/custom_lovelace/xiaomi_vacuum_map_card/xiaomi-vacuum-map-card.js
          type: module
        - url: /local/zigbee2mqtt-networkmap.js?v=0.6.0
          type: module
        - url: /hacsfiles/lovelace-card-mod/card-mod.js
          type: module

    # Text to speech
    yandex_station:
      username: !secret yaloga
      password: !secret yapassa
      tts_service_name: alice_say
    tts:
      - platform: google_translate

    #Вынос во внешние файлы

    timer: !include includes/timer.yaml
    group: !include includes/groups.yaml
    scene: !include includes/scenes.yaml
    recorder: !include includes/recorder.yaml
    light: !include includes/light.yaml
    yeelight: !include includes/yeelight.yaml
    input_boolean: !include includes/input_boolean.yaml

    #Вынос во внешние папки

    sensor: !include_dir_merge_list includes/sensor
    script: !include_dir_merge_named includes/scripts
    automation: !include_dir_merge_list includes/automation

     
     
    Последнее редактирование: 6 ноя 2020
    ИгорьК нравится это.
  3. Securbond

    Securbond Гуру

    configuration.yaml

    Первым делом настроим configuration.yaml и обратим внимание на основные моменты.
    Настоятельно рекомендую пойти по стопам Alex Kvazis и настроить вынос основных файлов конфигурации в отдельные файлы папки и делаем это так прописываем :
    - знаком # можно помечать строки с пояснениями или комментировать временно неиспользуемые куски кода.

    HTML:

    #Вынос во внешние файлы

    timer: !include includes/timer.yaml
    group: !include includes/groups.yaml
    scene: !include includes/scenes.yaml
    recorder: !include includes/recorder.yaml
    light: !include includes/light.yaml
    yeelight: !include includes/yeelight.yaml
    input_boolean: !include includes/input_boolean.yaml

    #Вынос во внешние папки
    # sensors - папка в которой будем хранить файлы сенсоров
    # script - папка в которой будем хранить файлы скриптов
    # automation - папка в которой будем хранить файлы автоматизаций

    sensor: !include_dir_merge_list includes/sensor
    script: !include_dir_merge_named includes/scripts
    automation: !include_dir_merge_list includes/automation
     
    Обратите внимание на то что все пароли и личные данные явно не прописаны и хранятся в отдельном файле secrets.yaml в корневой папке /config/secrets.yaml Это правило хорошего тона и в дальнейшем при публикации своих файлов на GitHub или пересылая куда то свой конфиг вы исключаете этот файл из пересылки и живёте спокойно.
    Пароли в этом файле хранятся парами название: значение и потом это название со знаком ! подставляется в файлы конфига ( !secret yaloga ) :

    HTML:

    # Use this file to store secrets like usernames and passwords.
    # Learn more at https://www.home-assistant.io/docs/configuration/secrets/
    some_password: welcome

    latitude_coord: 65.120471
    longitude_coord: 32.720770

    yaloga: pupkin-ma
    yapassa: 12345678

    mqtt_login: moskito
    mqtt_password: 123456

    router_ip: 192.168.0.1
    router_pass: 87654321

    web_server_password: 123456

    sonoff_login: pupkin@gmail.com
    sonoff_password: Vasya1234

    api_key_telega: 1313856479:AAH6nWnR2_ejfuS8iRa7w-Fz5-Jfh2z_SS4

    username_cam: Vasya
    password_cam: 12345678

    vacuum_token: 9572558867051574f376b356c7559
     
     
    ИгорьК нравится это.
  4. ИгорьК

    ИгорьК Оракул Модератор

    Таки я в ваших рядах. После очередного падения Domoticz после обновления тестирую НА.
     
  5. Securbond

    Securbond Гуру

    Это замечательно ! Хотя в НА падений гораздо больше, потому как обновы прилетают часто и так же часто что то отваливается, но не критично. ))
    Сейчас еду кушать шашлык, а вечером продолжу делиться своими наработками (что удалось скопипастить с различных ресурсов за 2 месяца для своей системы )))
     
  6. Securbond

    Securbond Гуру

    Интерфейс Lovelace UI

    Итак, шашлык съеден и можно продолжить. Немного рассмотрим Интерфейс HA. Но прежде чем начнём, переведём его на ручное управление и далее попробуем научиться оформлять всё при помощи конфигурационного файла интерфейса ui-lovelace.yaml который в свою очередь лежит в корневой папке /config/.
    Идём в File Editor, открываем configuration.yaml и добавляем в нём такие строчки

    HTML:

    lovelace:
      mode: yaml  # Включаем ручную настройку интерфейса
     
    ui2.jpg

    После этого перезагружаем HA (с проверкой как описано выше) и теперь можем городить интерфейс как нам нужно.
    Основная информация по данному вопросу содержится тут - https://www.home-assistant.io/lovelace (да! всё на английском, но привыкайте, львиная доля информации по системе находится на англоязычных сайтах.
    Смотрим видео и читаем дальше.



    Рассмотрим основные моменты.

    ui1.jpg

    0. Боковая панель - для администрирования системы и т.п.
    1. Созданные нами странички.
    2. Карточки которые предлагает система по умолчанию. в данном примере это карточка погоды
    - type: weather-forecast
    3. Самая стандартная карточка которой чаще всего пользуемся для вывода информации
    - type: entities
    4. Кастомные карточки от сторонних разработчиков, которые нужно устанавливать из репозиториев.
    В данном примере используется - https://github.com/kalkih/mini-graph-card
    - type: custom:mini-graph-card
    5. Сущности которые мы добавляем в карточку

    HTML:
              entities:
                  - entity: sensor.ws_ds
                    name: Температура на улице
                    secondary_info: last-changed
                    icon: mdi:temperature-celsius
                  - type: section
                  - entity: sensor.temperature_158d0001f5488c
                    name: Температура в гостиной
    По началу для меня было сложно понять как и куда прописывать куски кода карточек что бы расположить всё так как мне нужно, но сейчас уже не испытываю с этим трудностей. Далее я выложу свой файл ui-lovelace.yaml но сначала закомментирую его что бы вы могли понимать откуда ноги растут.
     
    Последнее редактирование: 6 ноя 2020
  7. Securbond

    Securbond Гуру

    Продолжение по интерфейсу
    Как и обещал выкладываю файл своего интерфейса. Постарался закомментировать интересные моменты.
    т.к до сих пор не увеличили лимит знаков в коде, то разбил код на несколько частей, но это всё в одном файле.

    HTML:

    title: Home Bond    
    views:

    ############################# Главная Первая страница ##########################
      - title: Главная    # Название которое будет отображаться при наведении на иконкустранички
        icon: mdi:home-assistant   # Иконка странички
        badges:    # Круглые значки вверху странички можно увидеть на скриншотах ранее
       
          - entity: device_tracker.nokia3310   #Сущность которую хотим отобразить
            name: Максим    # Имя сущности которое отобразится на страничке
           
          - entity: device_tracker.iphone_zayka
            name: Мамулька
           
          - entity: person.kristina
            name: Кристина
           
          - entity: binary_sensor.0x00158d00039b47f0_contact
            name: Гостиная
            style: |
               :host {
                --label-badge-blue:
                {% if states(config.entity)== 'off' %}
                  green
                {% else %}
                  red
                {% endif %}
                 ;
               }
             
          - entity: binary_sensor.door_window_sensor_158d0001a98108
            name: Входная
            style: |
                :host {
                 --label-badge-blue:
                 {% if states(config.entity)== 'off' %}
                  green
                 {% else %}
                  red
                 {% endif %}
                  ;
                }
               
          - entity: binary_sensor.0x00158d0003cf8806_occupancy
            name: Гостиная
            style: |
                :host {
                 --label-badge-blue:
                 {% if states(config.entity)== 'off' %}
                  blue
                 {% else %}
                  yellow
                 {% endif %}
                  ;
                }    
               
          - entity: binary_sensor.motion_sensor_158d0001abe8e1
            name: Коридор
            style: |
                :host {
                 --label-badge-blue:
                 {% if states(config.entity)== 'off' %}
                  blue
                 {% else %}
                  yellow
                 {% endif %}
                  ;
                }  
               
          - entity: binary_sensor.0x00158d0003cf78b8_occupancy
            name: Детская
            style: |
                :host {
                 --label-badge-blue:
                 {% if states(config.entity)== 'off' %}
                  blue
                 {% else %}
                  yellow
                 {% endif %}
                  ;
                }            

        cards:

          - type: vertical-stack  #Все карточки которые будут вложены ниже будут распологаться вертикально
            cards:
           
            - type: markdown    #Тип карточки
              content: >
                 **Текущее состояние**
                 
            - type: entities #Тип карточки
              show_header_toggle: false
              entities:
                - entity: sensor.time
                  name: Текущее время
                  icon: mdi:clock-outline
                - entity: sensor.date
                  name: Дата
                  icon: mdi:calendar-check-outline
                - entity: sensor.maria_db_size
                  name: Объем БД
                  icon: mdi:database
                - entity: sensor.cert_expiry_bond_ma_ru_8321
                  name: SSL закончится через
                - entity: sensor.time_to_work
                  name: Зайцу до работы


            - type: picture-entity
              entity: camera.balkoncam
              camera_image: camera.balkoncam
            #  camera_view: live
              show_name: false
              show_state: false
                 
          - type: vertical-stack
            cards:
            - type: markdown
              content: >
                 **Графики**
          - type: vertical-stack
            cards:
            - type: custom:mini-graph-card
              entities:
                - sensor.cpu_temperature
              name: Температура CPU
              color_thresholds:
                    - value: 50
                      color: "red"
                    - value: 45
                      color: "yellow"
                    - value: 43
                      color: "green"
              hours_to_show: 24
    #         points_per_hour: 0.75
             
                   
            - type: horizontal-stack
              cards:

               - type: gauge
                 name: Загрузка CPU
                 unit: '%'
                 entity: sensor.processor_use
                 severity:
                    green: 0
                    yellow: 60
                    red: 85
               
               - type: gauge
                 name: Загрузка ОЗУ
                 unit: '%'
                 entity: sensor.memory_use_percent
                 severity:
                    green: 0
                    yellow: 60
                    red: 85
                   
            - type: horizontal-stack
              cards:

               - type: gauge
                 name: Диск заполнен
                 unit: '%'
                 entity: sensor.disk_use_percent
                 severity:
                    green: 0
                    yellow: 60
                    red: 85  
                   
               - type: gauge
                 name: Свободное место
                 unit: 'Гб'
                 entity: sensor.disk_free
                 severity:
                    red: 2
                    yellow: 6
                    green: 8
     
  8. Securbond

    Securbond Гуру

    HTML:
    ########################## Страничка Освещение ###########################################
      - title: Освещение
        icon: mdi:lightbulb-group
               
        cards:
       
          - type: vertical-stack
            cards:
            - type: markdown
              content: >
                 **Панель переключателей**
               
            - type: entities
              show_header_toggle: false
              entities:
                - entity: light.podsvetka
                - type: section  # Горизонтальная черта отделяющая объекты в карточке
                - entity: light.yeelight_350
                  name: Люстра Гост. основной свет
                - entity: light.yeelight_350_nightlight
                  name: Люстра Гост. ночник
                - type: section  # Горизонтальная черта отделяющая объекты в карточке
                - entity: light.yeelight_450          
                  name: Люстра Дет. основной свет
                - entity: light.yeelight_450_nightlight
                  name: Люстра Дет. ночник          
            - type: entities
              show_header_toggle: false
              entities:
                - entity: light.philips_01_bulbe27
                  name: Люстра Кор.1
                - entity: light.philips_02_bulbe27
                  name: Люстра Кор.2
                - entity: light.philips_03_bulbe27
                  name: Светиьник в детской
            - type: horizontal-stack
              cards:
                - type: light
                  entity: light.philips_01_bulbe27
                  name: Люстра Кор.1
                - type: light
                  entity: light.philips_02_bulbe27
                  name: Люстра Кор.2
                - type: light
                  entity: light.philips_03_bulbe27
                  name: Светиьник в корридоре
    #        - type: entities
    #          entities:
    #            - switch.0x00158d0001b88719_switch
    #            - sensor.wled_estimated_current_2
    #        - type: light
    #          entity: light.wled_2
             
          - type: vertical-stack
            cards:
            - type: markdown
              content: >
                 **Светильники**  
                 
            - type: horizontal-stack
              cards:
                - type: light
                  entity: light.yeelight_350
                  name: Люстра Гост. основной свет
                - type: light
                  entity: light.yeelight_350_nightlight
                  name: Люстра Гост. ночник

             
            - type: horizontal-stack
              cards:
                - type: light
                  entity: light.yeelight_450
                  name: Люстра Дет. основной свет
                - type: light
                  entity: light.yeelight_450_nightlight
                  name: Люстра Дет. ночник
                 
     
  9. Securbond

    Securbond Гуру

    HTML:
    ############################ Страничка Погода ############################################
      - title: Погода
        icon: mdi:weather-partly-snowy-rainy
        cards:
       
          - type: vertical-stack
            cards:
            - type: markdown
              content: >
                 **Прогноз погоды**
            - type: weather-forecast
              entity: weather.openweathermap
            - type: markdown
              content: >
                 **Датчики**              
            - type: entities
              show_header_toggle: false
              entities:
                  - entity: sensor.ws_ds
                    name: Температура на улице
                    secondary_info: last-changed
                    icon: mdi:temperature-celsius
                  - type: section
                  - entity: sensor.temperature_158d0001f5488c
                    name: Температура в гостиной
                  - entity: sensor.humidity_158d0001f5488c
                    name: Влажность в гостиной
                    secondary_info: last-changed
                  - type: section
                  - entity: sensor.temp_kor
                    name: Температура в коридоре
                  - entity: sensor.humi_kor
                    name: Влажность в коридоре
                    secondary_info: last-changed
            - type: custom:mini-graph-card
              entities:
                - sensor.ws_ds
              name: Температура на улице
              line_color: blue
              hours_to_show: 72
              points_per_hour: 0.75

            - type: custom:mini-graph-card
              entities:
                - sensor.temperature_158d0001f5488c
              name: Температура в гостиной
              line_color: '#e74c3c'
              hours_to_show: 72
              points_per_hour: 0.75
             
          - type: vertical-stack
            cards:
            - type: entities
              title: Погодная станция  # Заголовок карточки

              entities:
                  - type: section
                  - entity: sensor.ws_ds
                  - entity: sensor.ws_sht_temp
                  - entity: sensor.ws_bme_temp
                  - type: section
                  - entity: sensor.ws_sht_humi
                  - entity: sensor.ws_bme_humi
                  - type: section
                  - entity: sensor.ws_bme_pres
                  - entity: sensor.ws_uptime_new
                  - entity: sensor.ws_rssi

            - type: history-graph
              title: График Температуры
              hours_to_show: 48
              entities:
                - entity: sensor.ws_sht_temp
                  name: SHT-3x
                - entity: sensor.ws_ds
                  name: DS18b20
                - entity: sensor.ws_bme_temp
                  name: BME-280

               
            - type: history-graph
              title: График Влажности
              hours_to_show: 48
              entities:
                - entity: sensor.ws_sht_humi
                  name: SHT-3x
                - entity: sensor.ws_bme_humi
                  name: BME-280

               
    ############################### Страничка COVID #########################################
      - title: COVID
        icon: mdi:virus-outline
        cards:            
           - type: iframe
             url: 'https://yandex.ru/covid19/stat/widget/default/?geoId=2'
             aspect_ratio: 100%
           - type: iframe
             url: https://yandex.ru/covid19/stat/widget/default/?geoId=225
             aspect_ratio: 100%    
                 
     
  10. Securbond

    Securbond Гуру

    HTML:
    ########################### Страничка ESPHome #############################################
                   
      - title: ESPHome
        icon: mdi:alpha-e-circle
        id: whats_on
        cards:
       
          - type: vertical-stack
            cards:
              - type: entities
                title: SONOFF ESPHome
                show_header_toggle: false
                entities:
                  - switch.sonoff_basic_relay
                  - binary_sensor.sonoff_basic_button
                  - light.sonoff_basic_green_led
                  - sensor.sonoff_basic_wifi_signal
                  - sensor.sonoff_basic_uptime_new
                  - sensor.sonoff_basic_esphome_version
                 
              - type: entities
                title: SONOFF AlexxIT
                show_header_toggle: false
                entities:
                   - entity: light.sonoff_100026897c
                     name: Гирлянда
                   - entity: sensor.sonoff_100026897c_rssi
                     name: Уровень сигнала
          - type: vertical-stack
            cards:
              - type: entities
                title: ESP Test8266
                entities:
                    - binary_sensor.touch
                    - light.test_red_led
                    - type: section
                    - sensor.testds
                    - sensor.testhumaht
                    - sensor.testtempaht
                    - sensor.testbh1750
                    - type: section
                    - sensor.test8266_uptime_new
                    - sensor.test8266_wifi_signal

              - type: light
                entity: light.test_red_led
    ######################### Страничка устройства в сети #######################################

      - title: What's On
    #    panel: true
        icon: mdi:router-wireless
        id: whats_on
        cards:
          - type: entities
            title: devices
            entities:
              - sensor.iphone_maks_link

              - sensor.raspberry_3_link
              - sensor.weather_station_link
              - sensor.kristi_phone_link
              - device_tracker.iphone_zayka
              - device_tracker.nokia3310
             
     
     
  11. Securbond

    Securbond Гуру

    Думаю достаточно.. полный файлик прикреплю к этому сообщению. Нужно просто понять как это работает, тут очень важна вложенность и отступы
    т.е все сущности которые находится правее от родительской сущности (страничка) (карточка) считаются её сущностями. (ХЗ как это объяснить русским языком, нужно просто посмотреть на код и обратить внимание на отступы слева.
    По этому сначала мы прописываем страничку
    HTML:
      - title: Погода
        icon: mdi:weather-partly-snowy-rainy
        cards:
    Затем карточки на этой страничке и еще правее сдвигаем объекты (сущности) которые находятся в самих карточках.
    HTML:
      - title: Погода
        icon: mdi:weather-partly-snowy-rainy
        cards:
       
          - type: vertical-stack
            cards:
            - type: markdown
              content: >
                 **Прогноз погоды**
            - type: weather-forecast
              entity: weather.openweathermap
            - type: markdown
              content: >
                 **Датчики**              
            - type: entities
              show_header_toggle: false
              entities:
                  - entity: sensor.ws_ds
                    name: Температура на улице
                    secondary_info: last-changed
                    icon: mdi:temperature-celsius
                  - type: section
                  - entity: sensor.temperature_158d0001f5488c
                    name: Температура в гостиной
                  - entity: sensor.humidity_158d0001f5488c
                    name: Влажность в гостиной
                    secondary_info: last-changed
                  - type: section
                  - entity: sensor.temp_kor
                    name: Температура в коридоре
                  - entity: sensor.humi_kor
                    name: Влажность в коридоре
                    secondary_info: last-changed
    пример карточки

    ui3.jpg

    и её код
    ui4.jpg

    Полный файл интерфейса прикреплен к этому сообщению.
     

    Вложения:

    • ui-lovelace.zip
      Размер файла:
      4,5 КБ
      Просмотров:
      81
  12. Securbond

    Securbond Гуру

    Небольшой лайфхак, как быстро добавить карточку в ui-lovelace.yaml

    Самый простой способ:
    1. Идём Настройки - Интеграции
    2. Выбираем нужную интеграцию
    3. Выбираем необходимое устройство из этой интеграции
    4. Жмём кнопку "Добавить объекты в lovelace UI
    5. Копируем код и вставляем его в наш ui-lovelace.yaml

    ui5.jpg ui6.jpg ui7.jpg ui8.jpg ui9.jpg
     
  13. Securbond

    Securbond Гуру

    Установка Аддона ESPHome в HA

    Давайте закончим с интерфейсом и перейдём к интеграциям. Интеграции это своеобразные драйвера написанные как самими производителями устройств, разработчиками Home Assistant, так и головастыми пользователями. Их можно устанавливать разными способами - из командной строки системы, из магазина Add-on Store в HA или из HACS (но об этом позже).
    Так как это форум самодельщиков и ардуинщиков, то хотелось бы начать с интеграции ESPHome, которая позволяет на основе yaml файла (куда же без него) скомпилировать прошивку с необходимыми нам устройствами и параметрами. По сути в файле yaml мы описываем что хотим подключить, а при компиляции интеграция ESPHome на основании нашего файла собирает нужные библиотеки и пишет за нас код программы. Остаётся только залить его на esp и наслаждаться работой нового устройства.
    Первая прошивка происходит по кабелю, в дальнейшем всё осуществляется по воздуху прямо из HA.

    Меньше слов давайте установим это чудо и прошьём esp. (Внизу как всегда будут картинки для тех кто глазами лучше воспринимает информацию)
    1. Идём Supervisor - > Add-on Store
    2. В верхней строчке поиска набираем ESPHome и жмякаем на найденный аддон
    3. Эта интеграция не требует настройки, по этому инсталируем её.
    4. Проверяем что бы были включены чекбоксы:
    • Start on boot
    • Watchdog
    • Show in sidebar
    5. И жмём START !

    Всё, Аддон установлен и должен появиться в левой панели.

    esphome1.jpg esphome2.jpg

    Страница проекта и полное описание: https://esphome.io/index.html

    Видео по теме:
    - Видео от ............. "Alex Kvazis"
    - Видео от ........... "Домашняя автоматизация"
     
    Последнее редактирование: 7 ноя 2020
  14. Securbond

    Securbond Гуру

    Собираем прошивку в ESPHome

    Поставили мы аддон, а теперь давайте соберём прошивку.
    1. В левой панели нажимаем на ESPHome и попадаем на страницу аддона.
    2. У меня уже 3 устройства, у вас будет пусто. Нажимаем на зелёный "+" в нижнем правом углу.
    3. Далее даём название устройству, выбираем тип вашей esp, данные вашей сети
    4. Жмём кнопку SUBMIT

    В окне появиться новый проект, с тем названием, которое вы указали в настройках.

    5. Жмём EDIT и заполним сначала минимально необходимый код. (всё закомментировал для понимания)

    HTML:
    esphome:
      name: myesp  #Обязательно маленькими буквами иначе Ошибка
      platform: ESP8266
      board: esp01_1m  #Модель вашей ESP
      board_flash_mode: dout  # Если откажется заливаться по воздуху, добавьте эту строку

    wifi:  #Данные вашей WiFi сети
      ssid: "MyNet"
      password: "12345678"

      # Данные точки доступа, если в течении минуты модуль не сможет
      # подключитбся к сети, должна подняться точка доступа
      ap:
        ssid: "MyespAP"
        password: "87654321"

    captive_portal:

    #Вэбсервер для локального контроля прибора (необязательно)
    web_server:
      port: 8080
      auth:
        username: admin
        password: "1234"
     
    # Включаем логирование
    logger:

    # Включаем интеграцию в HA
    api:
      password: "1234"

    #Включаем загрузку по воздуху
    ota:
      password: "1234"

    6. Жмём SAVE и затем CLOSE
    7. Жмём кнопку VALIDATE и проверяем на ошибки. Закрываем проверку CLOSE
    8. Если нет ошибок Жмём три точки в верхнем углу проекта и выбираем "Compile"
    9. После того как соберётся наша прошивка скачиваем её нажав в нижнем правом углу кнопку "DOWNLOAD BINARY"

    Получаем необходимый файл прошивки и дальше опишу простой способ как я его заливаю в esp.

    esphome3.jpg esphome4.jpg esphome5.jpg esphome6.jpg esphome7.jpg
     
    Последнее редактирование: 7 ноя 2020
  15. Securbond

    Securbond Гуру

    Заливаем прошивку ESPHome в железяку

    Есть способ сразу подключить esp к серверу с HA и заливать прошивку на прямую, но у меня сервер на малине и что то не вышел без бубна этот вариант, по этому первый раз я заливаю проект на машине с Windows.
    И делается это очень просто:
    1. Качаем програмулину здесь - https://github.com/esphome/esphome-flasher/releases
    2. Подключаем esp к компу и смотрим на какой порт она подключилась.
    3. Запускаем, ESPHome-Flasher, выбираем нужный порт и файл прошивки, который мы скомпилировали ранее.
    4. Жмём Flash ESP

    esphome8.jpg

    Прошивка должна залиться в есп и начать показывать лог (подключение к сети и т.п)
    там же можно глянуть IP адрес и зайти по нему на вэбморду esp (если добавили её в конфиг, не забываем указать порт который прописали в конфиге, у меня в примере :8080)

    Можно закрыть флэшер и вернуться к аддону ESPHome в HA. Если всё сделали правильно, то красная полоска должна смениться на зелёную.
    или как вариант HA обнаружит устройство и попросит добавить его в систему указав пароль api, который мы прописали в конфиге esp.
    Теперь уж точно полоска над проектом позеленеет и можно будет прошивать esp по сети.
    Обратите внимание, не все esp сразу начинают прошиваться по воздуху, в некоторые нужно добавлять в конфиг строчку
    HTML:
      board_flash_mode: dout  # Если откажется заливаться по воздуху, добавьте эту строку
    как было в примере выше.

    Ну всё, далее попробуем навешать на esp датчиков и кнопок и прописать всё это в конфиг железяки.
     
    Последнее редактирование: 7 ноя 2020
  16. Securbond

    Securbond Гуру

    Пример работающей железяки с датчиками и кнопкой

    Тут я не буду много расписывать, а просто выложу готовый конфиг , код для интерфейса и несколько сриншотов, как это выглядит в системе.

    Фото самой железяки с датчиками.
    photo_esp.jpg

    HTML:
    esphome:
      name: test8266
      platform: ESP8266
      board: nodemcuv2
      board_flash_mode: dout

    wifi:
      ssid: "My_Net"
      password: "12345678"

    # Enable fallback hotspot (captive portal) in case wifi connection fails
      ap:
        ssid: "TestAP"
        password: "12345678"

    captive_portal:
    web_server:
      port: 8080
      auth:
        username: admin
        password: "1234"



    # Включение логирования
    logger:

    # Включение Home Assistant
    api:
      password: "1234"

    ota:
      password: "1234"
    # Инициализация I2C шины
    i2c:
      sda: 4
      scl: 5
      scan: True
      id: bus_a

    ################## Кнопки Лампочки #########################
    binary_sensor:
      - platform: gpio
        name: "TOUCH"
        id: touch
        pin:
          number: GPIO12
          mode: INPUT_PULLUP
        on_press:
          - switch.toggle: mybutton
        filters:
          - delayed_on_off: 100ms #Защита от дребезга
     
    switch:
      - platform: template
        name: "TestSwitch"
        optimistic: true
        id: mybutton
        turn_on_action:
        - light.turn_on: r_led
        turn_off_action:
        - light.turn_off: r_led
     
    output:
      - platform: esp8266_pwm
        id: red_led
        pin:
          number: GPIO13
          inverted: False
       
    light:
      - platform: monochromatic
        name: "Test Red LED"
        output: red_led
        id: r_led
     
    ################## Сенсоры #########################
    dallas:
      - pin: GPIO2 #Инициализация шины 1-Wire

    sensor:
      - platform: dallas
        address: 0xF73C01D60779DF28
        name: "TestDS"
        id: test_ds
        accuracy_decimals: 1
        resolution: 12
     
      - platform: aht10
        temperature:
          name: "TestTempAHT"
        humidity:
          name: "TestHumAHT"
        update_interval: 30s
     
      - platform: bh1750
        name: "TestBH1750"
        address: 0x23
        measurement_time: 69
        update_interval: 30s

      - platform: wifi_signal
        name: "Test8266 WiFi Signal"
        update_interval: 60s

      - platform: uptime
        name: "Test8266 Uptime"
     

    Немного о датчиках. Их название видно из конфига. Что бы получить адрес ds18b20 вы должны сначала в коде вставить
    HTML:
    dallas:
      - pin: GPIO2
    разумеется указываем пин к которому подключен ваш датчик.
    Заливаем это в esp (уже можно без проводов и флэшера, а просто нажав на кнопку UPLOAD)
    и если всё хорошо то в логе мы увидим адрес найденого датчика ds18b20, который уже прописываем в sensor:
    HTML:
      - platform: dallas
        address: 0xF73C01D60779DF28
        name: "TestDS"
        id: test_ds
        accuracy_decimals: 1
        resolution: 12
    После этого сохраняем и заливаем еще раз.

    Теперь в интеграциях HA можно увидеть наше устройство и достать от туда код для интерфейса, как я описывал ранее.

    esphome9.jpg esphome10.jpg esphome11.jpg esphome12.jpg

    Спасибо за внимание !
     
  17. Сергей А.

    Сергей А. Нерд

    Может кому будет полезно: нашел для себя простой способ установки Hass OS на ssd для raspberry pi 4 и загрузки без sd карт. Пока работает только с образом beta hass os 5.1 64, с другими у меня не получилось запуститься. Качаем образ отсюда, с помощью balenaEtcher заливаем на ssd, так же как и на sd карту, подключаем ssd к малинке и она с него грузится и устанавливает hass os.
     
    Securbond нравится это.
  18. Securbond

    Securbond Гуру

    Я делал по видосам Алекса К и особо проблем не возникло, кроме того что ssd диск был вставлен в usb бокс и почему то заработал только на порту usb2.0., а на 3.0 отказался, но для системы НА скорости хватает.
     
    Последнее редактирование: 7 ноя 2020
  19. Сергей А.

    Сергей А. Нерд

    Я тоже переносил на ssd по его урокам. Но там нужно sd использовать и много дополнительных действий. К тому же ОС разные тоже будут, для меня проще оказалось сразу поставить HassOS, т.к. с linux не знаком и докер с портейнером для меня звучат как музыка)
     
  20. Могу ошибаться, но полагаю, что если на ХА не завязаны какие-то серьезные системы жизнедеятельности дома и его безопасности, то ничего страшного не случится, если вдруг накроется SD карта. Замена на новую с нуля занимает не больше часа. На заранее подготовленной с развернутым образом ХА восстановиться из резервной копии - минут 20. Это я к тому, что есть много людей, для которых умный дом - просто увлечение, и, наверное, нет особого смысла сильно вкладываться в железо, ради того, чтобы вдруг в какой-то момент на короткое время свет перестал автоматически включаться/выключаться или увлажнитель вдруг не заработал. 3я малина со всеми делами (карта, корпус, адаптер питания) сейчас обойдётся примерно в 3000 рублей (б/у на Авито, например). А Pi4 со всеми прибамбасами для надежности раза в 3 дороже. У меня уже год крутится на Pi 3B. Пока аварийных ситуаций не было, но запасную карту держу наготове на всякий случай