ESPHome no seu Home Assistant

Hoje vamos falar um pouco sobre ESPHome . O ESPHome é um sistema para controlar o seu ESP8266 / ESP32 por arquivos de configuração simples, mas poderosos, e controlá-los remotamente através de sistemas de automação residencial.

local

Recentemente o ESPHome foi adquirido pelo Nabu Casa que é a empresa responsável pelo Home Assistant, então poderemos ver uma integração mais completa entre eles.

Nabu Casa has acquired ESPHome

Aqui vamos falar mais especificamente para uma solução perfeita criando firmwares personalizados para as suas placas ESP8266 / ESP32, e mostraremos como realizar uma configuração básica usando o complemento (add-on) na aba Supervisor.

O ESPHome é uma ferramenta que lê arquivos de configuração YAML (assim como o Home Assistant) e cria firmwares personalizados. A ferramenta também tem muitos ajudantes que simplificam os dispositivos de flash e tem como objetivo tornar o gerenciamento de suas placas ESP o mais simples possível. Depois de adicionar dispositivos ou sensores na configuração do ESPHome, eles serão exibidos automaticamente na interface do usuário do Home Assistant.

No link abaixo, você consegue verificar todos os guias, dispositivos, componentes, sensores compatíveis com o ESPHome, e ainda existem mais, que aos poucos vão se tornar oficiais.

Eu comecei a utilizar não faz nem duas semanas, então estou aprendendo ainda. Créditos ao Nelson que me ajudou muito a entender um pouco.

Como começar?

  1. Dispositivo ESP

Antes de tudo, você precisar ter um dispositivo ESP para que possa atualizar seu firmware com o ESPHome. E o ESP não é necessariamente uma placa “separada”. Pode ser um interruptor (de várias marcas), um sonoff basic, e inclusive quem tem sonoff com tasmota, pode migrar para o ESPHome.

  1. Instalar o Add-on

Para iniciar, vá em Configurações, Add-ons, vá em “Loja de Add-ons ” no canto direito abaixo e procure o add-on ESPHome.

Procure o ESPHome.

Após instalado você não precisa realizar nenhuma configuração, e você tem a opção de visualizar o menu ESPHome no menu lateral.

image

  1. Primeira configuração

Para esse exemplo, vamos configurar uma placa ESP32. Igual a essa: Placa ESP 32. Com o objetivo de utilizar como um HUB bluetooth para outros dispositivos se conectarem ao ESP através do bluetooth, e com isso integrar no meu HA esses dispositivos bluetooth.
Com o Add-On instalado, vamos acessar o menu ESPHome, e adicionar um novo dispositivo, como na imagem abaixo.

Após clicar no botão, terá 4 passos:

  1. Nome: Irá mostrar um texto com uma breve introdução, e um campo para você definir um nome para seu dispositivo. Nesse caso, vamos colocar esp_escritorio.
    Observação: Os nomes devem estar em minúsculas e não devem conter espaços (caracteres permitidos: a-z, 0-9 e _)

  2. Tipo de dispositivo: Você precisa selecionar o tipo do dispositivo. Para esse caso eu selecionei NodeMCU-32s , mas acredito que a opção Generic ESP32 (WROVER Module) deva funcionar da mesma maneira.

  3. Wifi: Em seguida você precisa definir a rede da sua wifi, a qual o dispositivo irá se conectar. Coloque o SSID e a senha da rede.
    Ainda nessa etapa, possui um campo chamado “Access Password”, essa informação serve para caso você desejar inserir uma senha para realizar as atualizações do seu ESP após configurado. Eu sinceramente não recomendo, pois toda vez que você modificar as configurações do seu ESP, ou atualizar o firmware, sempre terá que digitar essa senha, e fica chato. De qualquer maneira, você pode alterar todas essas configurações posteriormente, mesmo depois de o dispositivo estiver instalado e configurado.

  4. Submeter: Pronto, seu dispositivo está “configurado”. Basta submeter.

  5. Compilar
    Após adicionado o dispositivo, o sistema vai solicitar para selecionar uma opção no canto superior direito da tela, para realizar o upload via USB. Para esse artigo, não vamos utilizar essa alternativa, eu nunca fiz dessa maneira, então não tenho como passar mais detalhes.
    Compile: O que vamos fazer é compilar o arquivo .bin do dispositivo criado para realizar o flash no seu ESP. Com o dispositivo adicionado, nos 3 “pontinhos” image que fica mais a direita. Clique para mostrar as opções disponíveis, e em seguida clique em “ Compile “. Irá iniciar o processo de compilação, e pode demorar um pouco (alguns minutos).

image

  1. Download Binary: Após o sistema realizar a compilação do arquivo .bin com a mensagem “ INFO Successfully compiled program “, basta realizar download para um local em seu computador. Esse arquivo irá servir para realizar o flash no seu dispositivo ESP.

image

Irá gerar um arquivo .bin, e nesse nosso exemplo será esp_escritorio.bin . Se não gerar um arquivo .bin ( Se gerar um arquivo txt por exemplo ), cancele e atualize a página do ESPHome pressionando Ctrl+F5, em seguida execute o processo “4. Compile” novamente.

Flash – Dispositivo ESP

Agora que configuramos o dispositivo no ESPHome, vamos aplicar o flash no dispositivo ESP.
Abaixo já vou deixar o link oficial que explica como realizar esse processo para quem quiser consultar o documento oficial.
esphomeflasher link: https://github.com/esphome/esphome-flasher

Iniciando o processo – esphomeflasher

  1. Para iniciar o flash, você precisa conectar seu dispositivo ESP em seu computador através da porta USB. No caso da placa ESP32 a qual estamos utilizando, é alimentada por um microUSB, basta conectar um cabo microUSB → USB em seu computador.

  2. Agora é preciso baixar o aplicativo “esphomeflasher”, vamos baixar o arquivo “.exe” que serve para o sistema operacional Windows ( ESPHome-Flasher-windows-x64.exe ), se você estiver utilizando outro SO, baixe arquivo conforme sua necessidade.
    Acesse o endereço Releases · esphome/esphome-flasher · GitHub e baixe o arquivo mais atual.

  3. Após baixar o arquivo, basta clicar duas vezes para abrir ( No windows, pode mostrar um alerta informando que o arquivo não é confiável, ignore e execute o arquivo ).
    Irá mostrar a seguinte tela:

  1. Na primeira opção “ Serial port “, você seleciona a porta em que seu dispositivo ESP esteá conectado. Se você não tem certeza, desconecte e conecte novamente para identificar a porta correta. No campo “ Firmware “, selecione o arquivo “.bin” que você compilou e baixou para seu computador. Após isso, basta clicar em Flash ESP e aguardar o flash concluir.

  2. Após concluído, você deve manter seu ESP ligado em ambiente que você desejar. Você pode desconectar do seu computador e ligar em uma tomada por um carregador de celular por exemplo.

Alterando seu dispositivo ESP no ESPHome

Tudo configurado, mas como eu digo para meu ESP funcionar como um HUB para dispositivos bluetooth?

Agora você deve voltar a tela do seu ESPHome dentro do seu Home Assistant e editar o dispositivo “esp_escritorio”.

image

Irá abrir um arquivo YAML, nesse caso “esp_escritorio.yaml”. e você deve inserir o seguinte código dentro desse arquivo para que seu ESP comece a scannear os seus dispositivos bluetooth.

esp32_ble_tracker:
  scan_interval: 60s

Observe que o tempo de intervalo você pode definir como desejar, colocamos aqui 1 minuto (60 segundos).

O resultado final deve ser algo semelhante a imagem abaixo:

Basta salvar, e depois realizar o Upload. Com isso vai atualizar seu dispositivo através do wifi. Aguarde o upload finalizar com a mensagem de “SUCCESS”.

image

Após atualizar, você irá perceber que no log do seu dispositivo, o seu ESP já vai mostrar os dispositivos bluetooth’s que ele consegue identificar. Exemplo:

image

Você pode visualizar o log sempre que quiser, basta acessar o menu ESP Home e clicar em SHOW LOGS no dispositivo que você desejar.

Integrando o seu dispositivo bluetooth com seu ESPHome e Home Assistant

Após scanear seus dispositivos bluetooth, vamos para a última etapa, que nada mais é que integrar seu dispositivo bluetooth com o seu ESP. Para você poder adicionar, é necessario ter o MAC do seus dispositivo, como você viu no último item, você pode obter o mac pelo log do seu ESP. Após ter o MAC em mãos, você deve adicionar o seguinte código:

binary_sensor:
   - platform: ble_presence
     mac_address: XX:XX:XX:XX:XX
     name: "Celular Douglas - Ble"

sensor:
- platform: ble_rssi
mac_address: XX:XX:XX:XX:XX
name: “Sinal BLE - Celular Douglas”

Basta salvar, e em seguida realizar o upload para atualizar seu ESP. Após o upload realizado, se seu HA estiver configurado para descobrir novos dispositivos, seu HA já irá mostrar uma nova notificação informando que encontrou dois novos dispositivos, e já estará disponível para você utilizar dentro do seu HA, com suas automações, notificações, etc.

Você pode visualizar seus novos dispositivos também em “Configurações – Integrações”.

Outros Exemplos – Interruptor Zemismart

Até o momento eu apenas fiz esse configuração e com um dispositivo interruptor da marca Zemismart . E fiz o mesmo processo, porém ao invés de scanear dispositivos bluetooth, eu configurei switch, o status do led, e sensores com sinal do wifi e tempo de utilização, através dos GPIO do dispositivo Zemismart, que nada mais que uma placa ESP também. O Exemplo do interruptor com um botão (gang) ficou da seguinte maneira:

esphome:
    name: zemismart_cozinha
    platform: ESP8266
    board: esp01_1m

wifi:
    ssid: "SeuSSID"
    password: "SuaSenhaWifi"

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

binary_sensor:
    - platform: gpio
      pin:
         number: GPIO0
         mode: INPUT
         inverted: True
      name: "Botao"
      on_press:
         - switch.toggle: load1
  
switch:
    - platform: gpio
      name: "Luz Frente"
      pin: GPIO12
      id: load1

status_led:
    pin:
       number: GPIO2
       inverted: yes

sensor:
    - platform: wifi_signal
      name: "Cozinha WiFi sinal"
      update_interval: 60s

    - platform: uptime
      name: "Cozinha uptime"

image

Esse é o interruptor que apliquei o flash ESPHome, abri ele e conectei via USB no meu PC para aplicar o flash

Xiaomi MiFlora BLE Sensor

Eu também comprei o dispositivo Xiaomi MiFlora, porém comprei agora e deve chegar entre 40 e 60 dias. Mas para quem quser configurar para que o dispositivo MiFlora conecte-se com um HUB através de um ESP, basta pegar o MAC do MiFlora e seguir os passos da página abaixo:

https://esphome.io/components/sensor/xiaomi_miflora.html

Esses são apenas alguns exemplos. Existem diversos na página do ESPHome, você pode acessar e verificar as diversas possibilidades que o ESPHome oferece, e que vem aumentando a cada dia.

Como falei no início do artigo, eu estou começando a utilizar agora o ESPHome, esse artigo pode ter diversas melhorias, e todo o crédito vai para o “ nelson_silvafilho “, quem tiver interesse de contribuir, basta falar comigo para adicionar as informações no artigo, ou com o remontti para ter acesso a página de administrador e poder editar e adicionar novos artigos.

Estrutura dentro do seu HA

Você deve perceber, que após tudo configurado, dentro do seu HA foi criada uma pasta esphome. Dentro dessa pasta estão todas as configurações dos seus dispositivos adicionado, a qual pode editar com seu editor de texto, inclusive colocar um arquivo secrets.yaml para suas senhas, etc.

image

É isso, um abraço!

Vídeo que pode ajudar:

Vídeo ensinando a criar um multisensor com ESPHome:

Video conhecendo ESPHome:

10 Likes

Douglas, teria como atualizar as imagens deste tutorial, elas não estão sendo carregadas.

Também to precisando @douglas

Adicionado. Obrigado por avisar.

2 Likes

Adicionado Armando, pode conferir, por favor.

1 Like

Muito Obrigado Douglas.

Bacana, fiz com um nodemcu e um módulo relé 4 canais, tudo perfeito.
Douglas, teria como integrar isso com comando de voz (Google Home Mini), uma vez que o mesmo já esta no HA ?

1 Like

A interação é com o google assistant, se for para controlar por comando de voz você precisa integrar seu HA com o assistant da google.

Douglas, consegui por comando de voz, porém o Nabu Casa é pago, teste de apenas 30 dias, mas tá valendo.

Tem como fazer o ble tracker pelo nodemcu esp8266 ou só pelo esp32?

1 Like

@elias, como ficou teu código?

Tenho uma bomba submersa do tipo sapo em um poço artesiano. Na minha configuração, tenho interesse de colocar um sensor HC-SR04 pra medir o nível desse reservatório (do qual não possuo controle de reposição) e informá-lo em meu HA. Esse mesmo registro do nível impedirá que a relé da bomba submersa seja ativada se o nível for perigoso para a bomba (nível inferior do poço). Meu ESP32 terá um botão físico para ativar o relé da bomba. Pergunta: como faço o controle desse botão físico ligado no ESP32?

Código quase todo escrito; estou montando os componentes para testar e ajustar o código. Assim que der, vou criar um tópico.

Para contribuir com o fórum ta ai a configuração do Sonoff Mini.

esphome:
  name: sonoffmini_luz_fundo
  platform: ESP8266
  board: esp01_1m

wifi:
  ssid: "SeuID"
  password: "SuaSenha"
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Sonoff mini Fundo"
    password: "SuaSenha"

captive_portal:

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

binary_sensor:
  - platform: gpio
    id: button
    pin:
      number: GPIO0
      mode: INPUT_PULLUP
      inverted: True
    on_press:
      - light.toggle: light01
  - platform: gpio
    pin:
      number: GPIO4
      mode: INPUT_PULLUP
      inverted: False
    name: "Interruptor do Fundo"
    on_press:
      - light.toggle: light01
    on_release:
      - light.toggle: light01


output:
  - platform: gpio
    pin: GPIO12
    id: relay

light:
  - platform: binary
    name: "Luz do Fundo"
    id: light01
    output: relay
    restore_mode: restore_default_off
5 Likes

Bom dia, fiquei com uma dúvida no caso da placa usada (esp01) pelo pinoult só vejo os pinos: GPIO0, GPIO1, GPIO2, GPIO3.
Eu poderia trocar neste código, por exemplo: GPIO4 por GPIO1 e GPIO12 por GPIO2?

Boa noite Douglas
Desde já grande trabalho, obrigado.
A minha questão é sobre a linha de dispositivos da Finder Yesly que são dispositivos Bluetooth se serão reconhecidos pelo hub esp32 que explicaste no tópico acima.
Vou colocar estes dispositivos na minha casa mas não tenho forma de integrar no home assistant.
Obrigado.
Continuação do grande trabalho.

Boa noite, gostaria muito da ajuda de vcs, estou com dificuldades para trazer o estado dos meus módulos reles para o home assistant, eles funcionam tanto pelo HA quanto pelo interruptor paralelo, o problema é que não sei quando estão ligados ou desligados, alguém poderia me ajudar?

É possível usar o mesmo arquivo secrets.yaml do Home Assistant para variáveis do ESPHome, muito útil para nome e senha da rede wifi e senhas da API e do OTA dos dispositivos.

Assim é possível concentrar todas as suas variáveis importantes em um único arquivo, veja o post a seguir:

Configuração que uso no meu sonoff mini

substitutions:
  device_name: mini-sonoff-sala
  

esphome:
  name: ${device_name}
  platform: ESP8266
  board: esp01_1m
  
  
wifi:
  networks:
  - ssid: !secret wifi1
    password: !secret senhawifi1
  - ssid: !secret wifi2
    password: !secret senhawifi2
    

  # caso a conexão falhe, pode acessar usando
  ap:
    ssid: ${device_name}
    password: "12345678"
    

# sensores

sensor:
  - platform: wifi_signal
    name: ${device_name} sinal wireless
    icon: mdi:signal-cellular-2
    update_interval: 60s
    
  - platform: uptime
    name: ${device_name} tempo de atividade
    icon: mdi:timeline-clock

text_sensor:
  - platform: wifi_info
    ip_address:
      name: ${device_name} ip
      icon: mdi:ip-network
    ssid:
      name: ${device_name} conectado à
      icon: mdi:wifi
    bssid:
      name: ${device_name} mac do roteador
      icon: mdi:access-point
    mac_address:
      name: ${device_name} mac do dispositivo
      icon: mdi:lan-connect
      
      
logger:
  
  
api:
  password: !secret senhaapi


ota:
  password: !secret ota_password
  

web_server:
  port: 80
  auth:
    username: admin
    password: !secret web_senha



##################################################
# A configuração do dispositivo começa abaixo    #
##################################################

binary_sensor:
  # as 7 linhas abaixo definem o botão de reset
  - platform: gpio
    pin: GPIO00
    id: reset
    internal: true  # hides reset switch from HomeAssistant
    filters:
      - invert:
      - delayed_off: 10ms

  # as 3 linhas abaixo alternam o relé principal
    on_press:
      - light.toggle:
          id: light_id

  # as 13 linhas abaixo alternam o relé principal
  - platform: gpio
    name: liga_desliga
    internal: true  # oculta no homeassistant
    pin: GPIO04
    id: gpio_light_id
    on_press:
      then:
        - light.toggle:
            id: light_id
    on_release:
      then:
        - light.toggle:
            id: light_id

  # as 2 linhas abaixo criam um entidade de status no homeassistant
  - platform: status
    name: ${device_name}_status

status_led:
  pin:
    number: GPIO13
    inverted: true
    

# output

output:
  # as 3 linhas controlam o relê principal
  - platform: gpio
    pin: GPIO12
    id: main_light_relay
    
  # as 3 linhas abaixo controlam o led
  - platform: esp8266_pwm
    id: blue_led
    pin: GPIO13
    inverted: True

# light

light:
  # as 4 linhas abaixo definem o relé principal como uma luz
  - platform: binary
    name: ${device_name} # aqui vc escolhe o nome que aparecerá no homeassistant
    output: main_light_relay  
    id: light_id

    
  # as 4 linhas abaixo definem a luz LED no Mini, para expor na linha de remoção do HomeAssistant "internal: true"
  - platform: monochromatic
    name: ${device_name}_blueled
    output: blue_led
    internal: true # esconde o LED azul do Homeassistant

    
# time

time:
  - platform: sntp # você pode usar homeassistant em lugar de sntp
    id: sntp_time
    servers:
      - b.st1.ntp.br 
      - b.ntp.br
    timezone: America/Sao_Paulo
    
      # Desligar todos os dias da semana nos horários abaixo
    on_time:
      - seconds: 0 # pode ser 1,2,3... ou 0-59
        minutes: 0 # pode ser 1,2,3... ou 0-59
        hours: 10 # pode ser 1,2,3... ou 0-23
        days_of_week: 1-7 # pode MON-FRI. 1 a 7 equivale aos dias da semana
        then:
          - light.turn_off: light_id

Olá Pessoal

Tenho home assistant instalado em um mini computador rodando debian 11. Enfim tenho aproximadamento 60 esp’s integrados via esphome (esp8266 e esp32) Acontece que desde as duas ultimas atualizacoes do esphome estou um tanto confuso. Eu faco flash na placa ela fica online, faco a intregracao ate ai tudo bem. Quando comeco a adicionar as entidades, seja sensores, interruptores, reles vai tudo bem ate finalizar o upload a partir dai a placa perde a integracao com o home assistant mas continua on line e eu consigo alterar a programacao, se eu delelar o que fiz e enviar novamente o arquivo bin por wifi a placa volta a estar integrada. A outras 60 placas estao funcionando perfeitamente, copiei e colei toda a programacao de uma delas e continua dando o mesmo problema. Este o final do upload:

INFO Uploading /data/banheiro-social/.pioenvs/banheiro-social/firmware.bin (933696 bytes)
Uploading: [============================================================] 100% Done…

INFO Waiting for result…
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from banheiro-social.local using esphome API
WARNING Can’t connect to ESPHome API for banheiro-social.local: Error resolving IP address: [Errno -2] Name or service not known
INFO Trying to reconnect to banheiro-social.local in the background

Eu tentei de tudo e nao sei se perdi alguma coisa com esta atualizacao que acabei nao lendo mas, esgotei tudo o que poderia fazer. Se agluem puder me ajudar eu agradeco.
Pecos desculpas pelos erros de digitacao meu teclado esta bugado.