[Resolvido!] Migração Sonoff POW de Tasmota para ESPHOME

Estou fazendo a migração dos meus sonoffs de Tasmota para ESPHOME, mas estou encontrando dificuldade em ter os mesmos sensores no Sonoff POW R1

Estou com dificuldade para configurar o “Consumo Energético de Ontem” no ESPHOME

Alguem sabe como fazer?

Sensores no Tasmota
Tasmota Exemplo

Meu Código no ESPHOME

substitutions:
  hostname: "Impressora3D"
  ssid_ap: "HA_POW_01"
  versao: "1.0"

esphome:
  name: sonoff_pow_01
  platform: ESP8266
  board: esp01_1m
  board_flash_mode: dout

time:
  - platform: homeassistant
    id: homeassistant_time
  - platform: homeassistant
    on_time:
# Write Energy Yesterday sensor value
      - seconds: 0
        minutes: 59
        hours: 23
        then:
           - sensor.template.publish:
               id: template_yesterday
               state: !lambda return id(power_Wattage).state ;


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_pass

  ap:
    ssid: "$ssid_ap"  
    password: !secret AP_mode_pass

captive_portal:

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API//
api:
  password: !secret api_pass

ota:
  password: !secret ota_pass

uart:
  rx_pin: RX
  baud_rate: 4800

text_sensor:
  - platform: version
    name: "$hostname ESPHome Version $versao"


binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "$hostname Button"
    on_press:
      - switch.toggle: fakebutton
  - platform: template
    name: "$hostname Running"
    filters:
      - delayed_off: 15s
    lambda: |-
      if (isnan(id(power_Wattage).state)) {
        return {};
      } else if (id(power_Wattage).state > 4) {
        // Running
        return true;
      } else {
        // Not running
        return false;
      }

switch:
  - platform: template
    name: "$hostname Relay"
    optimistic: true
    id: fakebutton
    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

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

light:
  - platform: monochromatic
    name: "$hostname Blue LED"
    output: pow_blue_led
    id: led

sensor:
  - platform: hlw8012
    sel_pin:
      number: GPIO5
      inverted: True
    cf_pin: GPIO14
    cf1_pin: GPIO13
    # current_resistor: ${current_res}
    # voltage_divider: ${voltage_div}
    current:
      name: "$hostname Amperage"
      unit_of_measurement: A
    voltage:
      name: "$hostname Voltage"
      unit_of_measurement: V
    power:
      name: "$hostname Wattage"
      unit_of_measurement: W
      id: "power_Wattage"
    change_mode_every: 8
    update_interval: 10s
  - platform: total_daily_energy
    name: "$hostname Total Daily Energy"
    power_id: "power_Wattage"
    filters:
        # Multiplication factor from W to kW is 0.001
        - multiply: 0.001
    unit_of_measurement: kWh  
      
# Extra sensor to keep track of plug uptime
  - platform: uptime
    name: $hostname Uptime Sensor

  - platform: wifi_signal
    name: "$hostname Sinal"
    update_interval: 60s    

  - platform: template
    name: "$hostname Total Yesterday Energy"
    id: template_yesterday
    accuracy_decimals: 3
    unit_of_measurement: kWh
    filters:
      - multiply: 0.001

Tentei tambem fazer pelo HA mas não consegui:

  total_consumo_ontem_impressora3d:   
    friendly_name: "Impressora3d Consumo Ontem"
    icon_template: mdi:counter
    unit_of_measurement: 'kWh'
    value_template: "{{ ( float(states.sensor.impressora3d_total_daily_energy.attributes.last_period) ) | round(0) }}"
1 curtida

No código do ESPHome você está setando como gasto do dia anterior o valor do consumo instantâneo das 23h59 e não do uso total do dia.

Se resto o código parece ok.

Deu certo! Obrigado alexandrepossebom!!!

Estava utilizando o sensor errado, também tirei o " - multiply: 0.001" do sensor ‘Total Yesterday Energy’

Segue o código final:

substitutions:
  hostname: "Impressora3D"
  ssid_ap: "HA_POW_01"
  versao: "1.0"

esphome:
  name: sonoff_pow_01
  platform: ESP8266
  board: esp01_1m
  board_flash_mode: dout

time:
  - platform: homeassistant
    id: homeassistant_time
  - platform: homeassistant
    on_time:
      - seconds: 50
        minutes: 59
        hours: 23
        then:
           - sensor.template.publish:
               id: template_yesterday
               state: !lambda return id(total_daily).state ;


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_pass

  ap:
    ssid: "$ssid_ap"  
    password: !secret AP_mode_pass

captive_portal:

logger:
  baud_rate: 0

api:
  password: !secret api_pass

ota:
  password: !secret ota_pass

uart:
  rx_pin: RX
  baud_rate: 4800

text_sensor:
  - platform: version
    name: "$hostname ESPHome Version $versao"

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "$hostname Button"
    on_press:
      - switch.toggle: fakebutton
  - platform: template
    name: "$hostname Running"
    filters:
      - delayed_off: 15s
    lambda: |-
      if (isnan(id(power_Wattage).state)) {
        return {};
      } else if (id(power_Wattage).state > 4) {
        // Running
        return true;
      } else {
        // Not running
        return false;
      }

switch:
  - platform: template
    name: "$hostname Relay"
    optimistic: true
    id: fakebutton
    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

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

light:
  - platform: monochromatic
    name: "$hostname Blue LED"
    output: pow_blue_led
    id: led

sensor:
  - platform: hlw8012
    sel_pin:
      number: GPIO5
      inverted: True
    cf_pin: GPIO14
    cf1_pin: GPIO13
    current:
      name: "$hostname Amperage"
      unit_of_measurement: A
    voltage:
      name: "$hostname Voltage"
      unit_of_measurement: V
    power:
      name: "$hostname Wattage"
      unit_of_measurement: W
      id: "power_Wattage"
    change_mode_every: 8
    update_interval: 10s

  - platform: total_daily_energy
    id: total_daily
    name: "$hostname Total Daily Energy"
    power_id: "power_Wattage"
    filters:
        # Multiplication factor from W to kW is 0.001
        - multiply: 0.001
    unit_of_measurement: kWh  
      
  - platform: uptime
    name: $hostname Uptime Sensor

  - platform: wifi_signal
    name: "$hostname Sinal"
    update_interval: 60s    

  - platform: template
    name: "$hostname Total Yesterday Energy"
    id: template_yesterday
    accuracy_decimals: 3
    unit_of_measurement: kWh
1 curtida

bom dia, teve que mudar o firmware do sonoff ?

Olá, boa tarde!! Sabe dizer se essa configuração pode ser usada no sonoff pow R2?

Sim, eu já tinha modificado do firmware original do sonoff para o Tasmota e depois mudei do tasmota para o ESPHOME

Funciona sim, só precisa ter cuidado que o sensor do R2 é diferente do R1.

POW R1 - platform: hlw8012
POW R2 - platform: cse7766

Exemplo:

2 curtidas

Parabéns Gustavo! Artigo muito bom! Migrei meu Sonoff Pow R2 de Tasmota para ESPHome usando este código e funcionou!

Qual a vantagem desta migração para o ESPHome?

Quando mudou paa tesmota ou esphome os dados ficam salvos em que servidor, caso eu queira criar um histórico ou relatorio, onde busco esses dados ?

O Tasmota e o Esphome são firmwares que ao invés de enviar os dados para o servidor da empresa, enviam para um servidor particular que você indica utilizando o protocolo MQTT, portanto a gestão da informação fica para o seu servidor particular, existe um servidor open source chamado HomeAssistant que é o foco principal desse fórum, nele você consegue fazer relatórios e buscar histórico.

Para entrar nesse mundo de HA o bom é que não precisa de muita coisa, dá para fazer muita coisa com um raspberry com SD que é relativamente barato, ou um pc/notebook antigo.

Se quiser saber mais informações indico entrar no discord associado a esse fórum, pode tirar as suas dúvidas mais rápido. http://habr.ml/

eu acho a maior vantagem do esphome que não preciso mim preocupar com mqtt que pessoalmente nunca gostei muito. esphome e Ha são conetados diretamente com api e se entendem sem precisar prestar atenção nos payloads. Além disso, tasmota faz tudo, mas quando quer pessoalizar um pouco, começa a conhecer centenas de SetOption blabla que tem alto potencial de confusão ou esquecer que colocou uma opção que nunca usa. Para mim, onde posso uso esphome, mas cada um é cada um.

porque somente a energia de hoje e ontem e não pela semana passada inteira? Apenas porque o tamota faz assim n quer dizer que o esphome não pode fazer melhor :slight_smile:

eu fiz assim

substitutions:
  meu_nome: 'Maquina lavar ropa'
  meu_dispositivo: sonoff_pow_lavar_ropa
  meu_tempo_reiniciacao: 30min
  meu_intervalo_atualisazao: 1min
  meu_ip_statico: 10.11.12.13


time:
~
    # a ordem recursiva é importante !!!
    on_time:
      - hours: 23
        minutes: 59
        seconds: 55
        then:
          # passando o valor hoje -5 para hoje -6
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_6
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_5).state ;
          # passando o valor hoje -4 para hoje -5
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_5
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_4).state ;
          # passando o valor hoje -3 para hoje -4
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_4
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_3).state ;
          # passando o valor hoje -2 para hoje -3
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_3
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_2).state ;
          # passando o valor hoje -1 para hoje -2
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_2
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_1).state ;
          # passando o valor hoje para hoje -1
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_1
              state: !lambda return id(${meu_dispositivo}_energia hoje).state ;

sensor:
~
    # sensor de energia
    power:
      name: '${meu_nome} energia'
      id: ${meu_dispositivo}_energia
      unit_of_measurement: W
      accuracy_decimals: 1
~

  # integrando o consúmo de energia diário
  - platform: total_daily_energy
    name: '${meu_nome}_energia_hoje'
    id: ${meu_dispositivo}_energia_hoje
    power_id: ${meu_dispositivo}_energia
    icon: mdi:gauge
    accuracy_decimals: 3
    filters:
      # convertando Wh em kWh
      - lambda: !lambda |-
          return (x/1000.0);
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -1'
    id: ${meu_dispositivo}_energia_hoje_menos_1
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -2'
    id: ${meu_dispositivo}_energia_hoje_menos_2
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -3'
    id: ${meu_dispositivo}_energia_hoje_menos_3
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -4'
    id: ${meu_dispositivo}_energia_hoje_menos_4
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -5'
    id: ${meu_dispositivo}_energia_hoje_menos_5
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: '${meu_nome} energia hoje -6'
    id: ${meu_dispositivo}_energia_hoje_menos_6
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

@marciosvieira vc poderia compartilhar seu código que funciona com o Pow R2? Desde já agradeço!

Sonoff Pow R2
Consegui dessa forma com ajuda do codigo acima!

  meu_nome: rack
  meu_dispositivo: sonoff_pow_rack

esphomeyaml:
  name: rack
  platform: ESP8266
  board: esp01_1m
  board_flash_mode: dout

time:
  - platform: homeassistant
    # a ordem recursiva é importante !!!
    on_time:
      - hours: 23
        minutes: 59
        seconds: 55
        then:
          # passando o valor hoje -5 para hoje -6
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_6
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_5).state ;
          # passando o valor hoje -4 para hoje -5
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_5
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_4).state ;
          # passando o valor hoje -3 para hoje -4
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_4
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_3).state ;
          # passando o valor hoje -2 para hoje -3
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_3
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_2).state ;
          # passando o valor hoje -1 para hoje -2
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_2
              state: !lambda return id(${meu_dispositivo}_energia_hoje_menos_1).state ;
          # passando o valor hoje para hoje -1
          - sensor.template.publish:
              id: ${meu_dispositivo}_energia_hoje_menos_1
              state: !lambda return id(${meu_dispositivo}_energia_hoje).state ;


wifi:
  ssid: "......"
  password: "....."
  manual_ip:
    static_ip: ......
    gateway: ......
    subnet: ......
    
# Enable logging
logger:
  baud_rate: 0

uart:
  rx_pin: RX
  baud_rate: 4800

# Enable Home Assistant API
api:

ota:

binary_sensor:
  - platform: gpio
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    name: "${meu_nome} Button"
    on_press:
      - switch.toggle: fakebutton

switch:
  - platform: template
    name: "${meu_nome} Relay"
    optimistic: true
    id: fakebutton
    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

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

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

sensor:
  - platform: wifi_signal
    name: "${meu_nome} WiFi Signal"
    update_interval: 60s
  - platform: uptime
    name: "${meu_nome} Uptime"
  - platform: cse7766
    update_interval: 2s
    current:
      name: "${meu_nome} Corrente"
    voltage:
      name: "${meu_nome} Voltagem"
    power:
      name: '${meu_nome} Energia'
      id: ${meu_dispositivo}_energia
      unit_of_measurement: W
      accuracy_decimals: 1


  # integrando o consumo de energia diário
  - platform: total_daily_energy
    name: ${meu_nome}_energia_hoje
    id: ${meu_dispositivo}_energia_hoje
    power_id: ${meu_dispositivo}_energia
    icon: mdi:gauge
    accuracy_decimals: 3
    filters:
      # convertando Wh em kWh
      - lambda: !lambda |-
          return (x/1000.0);
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -1
    id: ${meu_dispositivo}_energia_hoje_menos_1
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -2
    id: ${meu_dispositivo}_energia_hoje_menos_2
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -3
    id: ${meu_dispositivo}_energia_hoje_menos_3
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -4
    id: ${meu_dispositivo}_energia_hoje_menos_4
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -5
    id: ${meu_dispositivo}_energia_hoje_menos_5
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh

  - platform: template
    name: ${meu_nome} energia hoje -6
    id: ${meu_dispositivo}_energia_hoje_menos_6
    accuracy_decimals: 3
    icon: mdi:gauge
    unit_of_measurement: kWh
    
text_sensor:
  - platform: version
    name: "Rack"

Do código que colocou como exemplo além de alterar as váriaveis seria apenas mudar o platform?