пятница, 24 апреля 2020 г.

Прошивка SonOff POW R2 на ESPHome и подключение к Home Assistant

      Прошивка на ESPHome и подключение к системе умный на базе Home Assistant  модуля Sonoff POW R2. По умолчанию модулем можно управлять с любой точки мира используя приложение eWeLink - Smart Home. Также данный может измерять ток, напряжение и мощность. 


     Ссылка на модуль в магазине BangGood: SONOFF® POW R2 AC90-250V 16A 3500W

       В предыдущих статьях расписано как установить и настроить Home Assistant с ESPHome на Raspberry и x86 совместимый неттоп. Также на примере Sonoff basic подробно описано как сохранить оригинальную прошивку и прошить альтернативную

Внешний вид розетки:

Упаковка:

Комплект поставки:

Фото модуля и его платы:




Схема подключения
      Для подключения к адаптеру USB используются выводы Tx, Rx, GND и 3.3V. При подключении к ПК так же как и на Sonoff Basic для прошивки необходимо зажать кнопку на модуле



     На модуле для подключения к программатору имеется разъем J2. Необходимо только припаять разъем типа гребенка или же припаяться напрямую к контактам:




ПРОФИЛЬ ESPHOME И ЕГО ОПИСАНИЕ

Алгоритм работы:

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



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



Профиль ESPhome для Sonoff POW R2:


substitutions:
  plug_name: sonoff_pow
  
esphome:
  name: ${plug_name}
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: "dream2"
  password: "********"
  manual_ip:
    static_ip: 192.168.1.129
    gateway: 192.168.1.1
    subnet: 255.255.255.0
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "${plug_name} Fallback Hotspot"
    password: "********"

captive_portal:

# Enable logging
logger:
  baud_rate: 0

uart:
  rx_pin: RX
  baud_rate: 4800

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

web_server:
  port: 80
  
ota:
  password: "********"

time:
  - platform: homeassistant
    id: homeassistant_time
    
binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "${plug_name} Button"
    on_press:
      - switch.toggle: mybutton

  - platform: template
    name: "${plug_name} Running"
    filters:
      - delayed_off: 15s
    lambda: |-
      if (isnan(id(power).state)) {
        return {};
      } else if (id(power).state > 4) {
        // Running
        return true;
      } else {
        // Not running
        return false;
      }

switch:
  - platform: template
    name: "${plug_name} Relay"
    optimistic: true
    id: mybutton
    turn_on_action:
    - switch.turn_on: relay
#    - light.turn_off: led
    turn_off_action:
    - switch.turn_off: relay
#    - light.turn_on: led

  - platform: gpio
    id: relay
    pin: GPIO12
    icon: mdi:water-boiler
    restore_mode: ALWAYS_ON


output:
  - platform: esp8266_pwm
    id: pow_blue_led
    pin:
      number: GPIO13
      inverted: True

light:
  - platform: monochromatic
    name: "${plug_name} Blue LED"
    output: pow_blue_led
    id: led

sensor:
  - platform: wifi_signal
    name: "${plug_name} WiFi Signal"
    update_interval: 60s
  - platform: uptime
    name: "${plug_name} Uptime"
  - platform: cse7766
    update_interval: 2s
    current:
      name: "${plug_name} Current"
    voltage:
      name: "${plug_name} Voltage"
    power:
      name: "${plug_name} Power"
      id: power
      on_value_range:
        - above: 4.0
          then:
            - light.turn_on: led
        - below: 3.0
          then:
            - light.turn_off: led
      unit_of_measurement: W
            
  - platform: total_daily_energy
    name: "${plug_name} Total Daily Energy"
    power_id: power
    filters:
        # Multiplication factor from W to kW is 0.001
        - multiply: 0.001
    unit_of_measurement: kWh
    icon: mdi:clock-alert
text_sensor:
  - platform: version
    name: "${plug_name} ESPHome Version"


Добавляется в Home Assistant через меню Настройки-Интеграции:

2 комментария:

  1. Супер, спасибо за идею с нагрузкой и светодиодом.
    Выключатель синего светодиода можно скрыть из интерфейса параметром "internal: true"

    ОтветитьУдалить
  2. Возможно тема слишком старая и не актуальная, но всё-таки для бойлера очень полезен датчик температуры как перестраховки выключения реле. На плате есть ІО4 и ІО5, как думаете, к ним можно подключить датчик типа ds18b20 в железной оправе ?

    ОтветитьУдалить