пятница, 10 января 2020 г.

Прошивка Sonoff Basic на ESPHome и подключение к Home Assistant

      Наиболее полное описание того, как прошить Sonoff basic прошивкой ESPHome и подключить его к Home Assistant.


      Данная статья первая в моем блоге о прошивке китайских устройств на основе модуля esp82xx и замена родной прошивки на esphome для подключения их к умному дому Home Assistant. Для прошивки этих устройств в этой и последующих статьях будет приведена следующая информация:
     1) Фото платы устройства – т.к. одни устройства могут быть клонами других, и с большой долей вероятности данные статьи могут быть применены и для прошивки устройств других производителей.
     2) Схема подключения или распайка выводов для перепрошивки
     3) Используемые выводы GPIO на микроконтроллере esp82xx
     4) Профиль Esphome и описание работы прошивки

    Фото платы и схема подключения

      Фото платы и схема подключения Sonoff Basic к USB контроллеру уже были ранее описаны в статье Два способа сохранить оригинальную прошивку на примере Sonoff basic
       Плата Sonoff Basic имеет разъем для перепрошивки. Его надо только распаять (припаять гребенку):


       Для соединения Sonoff с адаптером используется выводы Rx, Tx, GND и 3.3В. Причем Rx адаптера соединяется с Tx платы Sonoff, а Tx адаптера – соответственно с Rx платы Sonoff. 
Sonoff RX -> TX UART
Sonoff TX -> RX UART
Sonoff VCC -> 3.3V UART
Sonoff GND -> GND UART

        Также для прошивки Sonoff Basic необходимо при включении зажать кнопку (в этой модели она подключена на вход GPIO0). В других устройствах на ESP8266 нужно будет найти вывод GPIO0 и на время прошивки подключить его к «земле» (минусовому выводу питания).

Используемые GPIO

GPIO0 – Button (inverted)
GPIO12 – Relay
GPIO13 – Green LED (inverted)


Компилирование прошивки Sonoff Basic

      Запускаем дополнение ESPHome в Home Assistant (где его взять читайте здесь). Добавляем новый профиль прошивки, для этого нажимаем на красный «+»:

Задаем название профиля:

Указываем используемый тип платы в Sonoff Basic:

Далее вводим название своей сети WIFI, пароль доступа к ней и пароль для OTA-обновлений и жмем «CONTINUE»:

Обязательно обновляем страницу. После нажимаем на «EDIT»:

Заменяем содержимое файла sonif_basic.yaml на мой профиль, который находися в конце статьи (не забыв прописать свое название сети WIFI (вместо моей «dream2») и свои пароли (вместо моих «********»).
 Нажимаем «SAVE» и «CLOSE»:
Нажимаем VALIDATE: 
Если проверка успешна – жмем «CLOSE»:
Компилируем прошивку (кнопка Compile). 
После компиляции нажимаем «DOWNLOAD BINARY» и скачиваем файл прошивки на ПК:

Загрузка прошивки в Sonoff Basic

      Для первой заливки файла прошивки в Sonoff Basic из-под Windows я использую программу ESPHome Flasher. Скачать последнюю версию можно всегда на сайте разработчика. На взякий случай сохранил 64-битную версию флешера сюда.

      Последовательность прошивки следующая:
1) Подключаем Sonoff Basic с зажатой кнопкой через USB адаптер к компьютеру. 
2) Обязательно сохраняем оригинальную прошивку.
3) Отключаем адаптер от ПК и подключаем его снова (переподключаем).
4) Запускаем программу ESPHome Flasher:

5) В поле Serial port выбираем порт, к которому подключен адаптер с SonOff, а в поле Firmware указываем путь к скачанной прошивке с расширением *.bin

6) Нажимаем Flash ESP. Идет процесс прошивки, который должен закончиться радующей глаз фразой «Done! Flashing is complete»:

На этом прошивка Sonoff Basic окончена. Можно добавлять устройство в Home Assistant. 
Добавляются в Home Assistant через меню Настройки-Интеграции:

Все последующие прошивки выполняются по ОТА.


Профиль ESPHome и его описание

Алгоритм работы:
     При включении в сеть нагрузка выключена, светодиод не горит. При нажатии на кнопку или включении по сети через веб интерфейс или из меню Home Assistant реле включает через реле нагрузку и плавно зажигается светодиод. При повторном нажатии (или выключении по сети) реле отключает нагрузку и светодиод плавно тухнет. Также по сети можно отдельно управлять свечением светодиода независимо от состояния реле.
     В прошивке есть сенсоры, отображающие уровень сигнала WIFI, время работы Sonoff Basic, состояния реле и светодиода и дата последней перепрошивки. Также есть доступ к к выключателю по вебу используя его IP адрес:

Используемые GPIO Sonoff Basic:


И напоследок привожу профиль для ESPHome:


esphome:
  name: sonoff_basic
  platform: ESP8266
  board: esp01_1m

wifi:
# Логин и пароль к сети WIFI
  ssid: "dream2"
  password: "********"
# Static IP
# Статический IP адрес
  manual_ip:
    static_ip: 192.168.1.125
    gateway: 192.168.1.1
    subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Sonoff Basic Fallback Hotspot"
    password: "**********"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:
  password: "*********"

ota:
  password: "********"

web_server:
  port: 80

# GPIO Binary Sensor
# Активация внутреннего подтягивания вывода и обозначение кнопки
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "Sonoff Basic Button"
    on_press:
      - switch.toggle: mybutton


switch:
# 
  - platform: template
    name: "Sonoff Basic Relay"
    optimistic: true
    id: mybutton
    turn_on_action:
    - switch.turn_on: relay
    - light.turn_on: led
    turn_off_action:
    - switch.turn_off: relay
    - light.turn_off: led
# Назначение выхода на реле
  - platform: gpio
    id: relay
    pin: GPIO12

# ---------------------------------------->
# Monochromatic Light
# Плавное зажигание светодиода
output:
  - platform: esp8266_pwm
    id: basic_green_led
    pin:
      number: GPIO13
      inverted: True


light:
  - platform: monochromatic
    name: "Sonoff Basic Green LED"
    output: basic_green_led
    id: led
# ----------------------------------------<

sensor:
#  WiFi Signal Sensor
#  Датчик отображающий уровень сигнала Wifi
  - platform: wifi_signal
    name: "Sonoff Basic WiFi Signal"
    update_interval: 60s
#  Uptime Sensor
#  Датчик отображающий время работы
  - platform: uptime
    name: "Sonoff Basic Uptime"
  
text_sensor:
#  Version Text Sensor
#  Датчик отображающий версию прошивки
  - platform: version
    name: "Sonoff Basic ESPHome Version"

Удачи и до новых встреч!


18 комментариев:

  1. Добрый день!
    У меня Sonoff Basic прошит с использованием датчика DHT22.
    Можно его добавить в прошивку?

    ОтветитьУдалить
    Ответы
    1. Да, конечно. Добавьте после "sensor:" следующее (GPIO14 - вывод, куда подключен Ваш DHT22):
      - platform: dht
      pin: GPIO14
      temperature:
      name: "Living Room Temperature"
      humidity:
      name: "Living Room Humidity"
      update_interval: 10s

      Удалить
  2. Сейчас прошивка на Tasmota, хочу перейти на ESPHome

    ОтветитьУдалить
  3. Подскажите, можно ли как то средствами haas сохранить состояние espреле, если espреле был передернут по питанию?

    espреле и в haas было в on, перезапустили espреле - стало off и в hass стало off
    RESTORE_DEFAULT_OFF включено и тут https://esphome.io/components/esphome.html#esp8266-restore-from-flash не рекомнд делать это средствами espреле.
    Спасибо

    ОтветитьУдалить
    Ответы
    1. аналогично как в Esppurna - Switch - Boot mode - Same as Before

      Удалить
    2. Вам нужно чтобы после пропадания электричества реле всегда включалось в состоянии "OFF"?
      Тогда в Esphome так и пишете:
      - platform: gpio
      id: relay
      pin: GPIO12
      restore_mode: ALWAYS_OFF

      Удалить
    3. Другими словами добавляете строку "restore_mode: ALWAYS_OFF", которая задает состояние реле после включения. В Home Assistant состояние реле отобразится автоматически.

      Удалить
    4. Если хотите "Same as Before" то, только RESTORE_DEFAULT_ON
      100000 сохранений это достаточно много много - например, если Вы будете включать реле по 20 раз каждый день - Вам его хватит почти на 7 лет

      Удалить
    5. понял, спасибо. Решил средствами haas. В автоматизации которая включает бойлер ночью добавил триггер
      - platform: state
      entity_id: switch.heater_relay
      from: unavailable
      to: 'off'

      то есть, если ночью пропадет ЭЭ, то hass включит реле после его переподключения и возврат к состоянию off. сам hass на упсе.

      итого


      - id: '1612430464787'
      alias: Heater ON 23:31:00 - 07:30:00
      description: ''
      trigger:
      - platform: state
      entity_id: switch.heater_relay
      from: unavailable
      to: 'off'
      - platform: time
      at: '23:31:00'
      condition:
      - condition: time
      after: '23:31:00'
      before: 07:30:00
      action:
      - service: switch.turn_on
      data: {}
      entity_id: switch.heater_relay
      mode: single

      Удалить
  4. Уважаемый автор, подскажите пожалуйста, а как должен выглядеть мой конфиг, если я хочу, что бы при замыкании GPIO14 и GND - реле GPIO12 включалось и выключалось 1 раз в секунду, до тех пор пока GPIO14 и GND не разомкнуться?

    ОтветитьУдалить
    Ответы
    1. Примерно так:
      ....
      turn_on_action:
      - while:
      condition:
      lambda: 'return true;'
      then:
      - switch.turn_on: relay
      - delay: 500ms
      - switch.turn_off: relay
      - delay: 500ms
      turn_off_action:
      - switch.turn_off: relay

      Удалить
    2. Обсуждали подобное здесь: https://community.home-assistant.io/t/blinking-led-with-esphomeyaml/90472

      Удалить
  5. restore_mode: ALWAYS_ON и RESTORE_DEFAULT_ON почему то отрабатывают, если реле восстанавливает соединение с сетью вай-фай, как сделать, чтобы после восстановления соединения, реле было в предыдущем состоянии?

    ОтветитьУдалить
    Ответы
    1. По идее, если убрать вообще строку restore_mode - реле должно пытаться восстановить предыдущее состояние.

      Удалить
  6. Этот комментарий был удален автором.

    ОтветитьУдалить
  7. Есть осушитель который не имеет ни вайфай, ни ИК порта, но на нём есть кнопки нажатия: вкл, меньше, больше. Получится ли его подключить используя свободные gpio,или gpoi с диодоми индикации?

    ОтветитьУдалить
    Ответы
    1. Не видя схемы тяжело что-либо сказать. Т.к. схему вы вряд-ли найдете, попробуйте сами нарисовать схему подключения кнопок осушителя.

      Удалить