You are currently browsing the Poupar Melhor posts tagged: ESP8266


Controlar a energia elétrica lá de casa

Com a introdução no Home-assistant do Energy Dashboard, os dados de consumos energéticos que é hoje em dia possível obter nos contadores podem ser apresentados nos ecrãs de controlo do resto da casa. Para além dos dados obtidos no IoT, apresentados nos gráficos, é também utilizada a informação no site Electricity Map para obter os dados de impacto ambiental.

Home-assistant – Energy Dashboard

Em Portugal, o contador eRedes disponibiliza uma porta de comunicações que, com o conhecimento suficiente, permite recolher os dados e expor esses dados, e foi o que fiz. Recorrendo a um firmware Tasmota alterado e um script Bash que publiquei no GitHub, construi o pequeno IoT que está no meu contador e, em conjunto com o Home-assistant, regista os dados necessários para depois criar o Energy Dashboard.

Dados obtidos do contador eRedes através da integração com o Tasmota

Medir o sinal WiFi e mostrá-lo no Home-assistant

Sinal Wifi no Home-assistant

Os equipamentos baseados em ESP8266 e ESP32 (ESP) podem também servir-vos para medir a intensidade do sinal Wifi lá de casa. Isto pode ser útil para determinar se precisam de um repetidor de sinal Wifi, mudar o router wifi de sitio ou melhorar a antena do router Wifi.

A velocidade da Internet nos equipamentos sem fios depende da qualidade do sinal Wifi, por isso, é útil ter a capacidade de medir esse sinal como forma de depois sabermos o que temos de melhorar.

Com o ESPhome.io e alguns ESP isto fica tudo muito mais fácil de integrar no Home-assistant. Acrescentar um sensor de sinal Wifi ao Home-assistant através do ESPhome significa apenas acrescentar mais 3 linhas à configuração de cada ESP na secção sensor:.

- platform: wifi_signal
name: "WiFi Signal Sensor"
update_interval: 3600s

No exemplo do ESPhome.io vão encontrar como intervalo de tempo entre cada medida (update_interval) 60s. Para mim, medir a cada 60 minutos, e por isso configuro os sensores com 3600s.

Como todos os outros sensores do ESPhome.io, o Home-assistant vai identificar automaticamente o novo sensor e podemos por isso acrescentá-lo depois aos painéis.

A unidade de medida de apresentação dos resultados é o decibel (dB), que significa “um décimo de um Bel”. Para interpretar de forma útil os valores apresentados, uso como referência que um bom sinal terá de ficar entre os -70dB e -60dB, sendo melhor à medida que se aproxima de 0. Mas a tabela abaixo, traduzida do site MetaGeek, pode ajudar a perceber melhor como é que isto nos pode ser útil.

Força do sinalTL;DR DescriçãoEssencial para:
-30 dBmEspetacularMáxima força do sinal. O equipamento tem de estar muito perto do router Wifi, o que é pouco usual no mundo real.N/A
-67 dBmMuito bomSinal mínimo para aplicações que necessitam de uma ligação estável e atempada dos pacotes de comunicação.VoIP/VoWiFi, streaming video
-70 dBmBomSinal mínimo para considerar uma ligação capaz de entregar pacotes de comunicação.Email, web
-80 dBmNada bomSinam minimo para considerar que há uma ligação. Não é garantida a entrega dos pacotes de comunicação.N/A
-90 dBmInútilA aproximar-se dos limites do impossível. É quase impossível ter qualquer tipo de funcionalidade com esta força de sinal.N/A

Se forem olhar novamente para a imagem que está no inicio deste artigo vão ver que existe um ESP a obter uma medição de -21dB. Este ESP está a menos de um palmo do meu router, e por isso tem esta medição espetacular.

Interruptores smart com ESPhome e Home-assistant

Com o tempo, tenho transformado o meu apartamento numa smart home. Fiz isso usando o Home-assistant (HASS), alguns ESP8266 e ESP32 com vários tipos de sensores, e uns interruptores da marca SonOff, produzidos pela ITEAD.

Até há uns dias, usava código meu nos ESP8266 e ESP32. Nos interruptores, algo bem mais complicado, converti-os do firmware original para um firmware free open source chamado Tasmota. Este firmware Tasmota é largamente utilizado pela comunidade portuguesa do HASS. Nesta conversão, a parte mais difícil é mesmo abrir os interruptores e soldar uns pins a um programador série para fazer upload do código. Só custa a primeira vez…

Aqui há uns dias, converti todos os meus ESP para ESPhome, pelas várias vantagens que já referi. Hoje, decidi testar o ESPhome num dos meus interruptores de testes da SonOff.

As instruções para fazer esta mudança dos SonOff de Tasmota para ESPhome estão no próprio site do ESPhome. Mas ficam aqui os passos que fiz para um SonOff T2.

A primeira coisa que é necessário fazer é gerar um firmware com Over The Air (OTA) e fazer upload para o SonOff. Fiz tal e qual como nas instruções do ESPhome.

Cada interruptor smart-home SonOff pode ter uma configuração diferente. Cá em casa tenho vários SonOff T1 com 1 e 2 interruptores. Seguindo as instruções do ESPhome, fiz um teste com o SonOff T1 2ch.

No site está uma tabela com os pins e a configuração que temos de preparar em cada pin.


Pin
Função
GPIO0 Button 1 (inverted)
GPIO12 Relay 1 and Blue LED
GPIO9 Button 2 (inverted)
GPIO5 Relay 2 and Blue LED
GPIO10 Button 3 (inverted)
GPIO4 Relay 3 and Blue LED
GPIO13 Blue LED (inverted)
GPIO1 UART TX pin (for external sensors)
GPIO3 UART RX pin (for external sensors)

Por cada botão, vamos ter de adicionar uma secção destas:

binary_sensor:
- platform: gpio
pin:
number: GPIO0
mode: INPUT_PULLUP
inverted: True
name: "Sonoff 2CH Button 1"
on_press:
- switch.toggle: relay_1

E um destes:

switch:
- platform: gpio
name: "Sonoff 2CH Relay 1"
pin: GPIO12
id: relay_1

Vão ter de arrumar todos os switch e todos os binary_sensor na mesma secção, e não se podem repetir secções.

Reparem que o binary_sensor, que aqui representa um dos botões no painel do SonOff, tem uma condição on_press que altera um switch chamado relay_1. Este nome deve ser colocado como identificador do switch que querem mudar de posição. Neste caso, o id do switch 1 será relay_1.

É esta condição que faz com que a luz se ligue ou desligue de cada vez que pressionam o botão no painel do interruptor.

O resultado final fica assim:

substitutions:
  hostname: 'sonoff_04'
esphome:
  name: $hostname
  platform: ESP8266
  board: esp01_1m
wifi:
  ssid: MINHA_REDE_WIFI
  password: PASSWORD_DA_MINHA_REDE_WIFI
  fast_connect: True
  domain: .home
api:
  reboot_timeout: 0s
  password: "PASSWORD_PARA_API"
ota:
  safe_mode: True
  password: PASSWORD_PARA_OTA
logger:
# SonOff T2 2CH configuration
binary_sensor:
  - platform: gpio
    pin:
     number: GPIO0
     mode: INPUT_PULLUP
     inverted: True
    name: "$hostname Button 1"
    on_press:
     - switch.toggle: relay_1
  - platform: gpio
    pin:
     number: GPIO9
     mode: INPUT_PULLUP
     inverted: True
    name: "$hostname Button 2"
    on_press:
      - switch.toggle: relay_2
switch:
  - platform: gpio
    name: "$hostname Relay 1"
    pin: GPIO12
    id: relay_1
  - platform: gpio
    name: "$hostname Relay 2"
    pin: GPIO5
    id_5
output:
  - platform: esp8266_pwm
    id: sonoff_led
    pin:
      number: GPIO13
      inverted: True
light:
  - platform: monochromatic
    name: "Sonoff LED"
    output: sonoff_led

Reparem como aproveitei o que que explico sobre como configurar o ESPhome para facilitar os nomes de cada sensor e atuador.

Assim, se depois de ter o interruptor a teste uns dias estiver tudo a funcionar sem problemas, basta mudar o nome do hostname na secção substitutions para ter tudo pronto para outro interruptor com a mesma configuração. Só muda o nome.

Configuração facilitada do ESPhome

ESPhome

Para facilitar a minha tarefa de configuração dos ESP8266 e ESP32 com o ESPhome tenho uma secção só de substituições na configuração do ESPhome. Para quem não sabe, o ESPhome facilita a ligação das vossas coisas ao Home-assistant.

Na secção substitutions da configuração do ESPhome podemos nomear as coisas que queremos usar em substituições.

Abaixo podem ver as primeiras linhas YAML de configuração de um ESPhome. O YAML é uma linguagem que depende da indentação (a distância à margem) para ser interpretada, por isso cuidado com os desalinhamentos.

substitutions:
   hostname: 'O_NOME_DA_COISA'
 esphome:
   name: $hostname
   platform: PLATAFORMA_A_CONFIGURAR
   board: TIPO_DE_PLACA
 wifi:
   ssid: MINHA_REDE_WIFI
   password: PASSWORD_DO_MEU_WIFI
   fast_connect: True
   domain: .home
 api:
   reboot_timeout: 0s
   password: "PASSWORD_PARA_API"
 ota:
   safe_mode: True
   password: PASSWORD_PARA_OTA
 logger:

Se repararem, o hostname da terceira linha aparece como $hostname na quinta linha. O texto que tiverem colocado no hostname da secção substitutions é depois utilizado pelo ESPhome no sitio onde escreverem $hostname.

Em futuros exemplos para o ESPhome vão ver-me a usar estas substituições para nomear facilmente os sensores e atuadores das coisas smart lá de casa.

ESPhome e Home-assistant

Se têm como eu uma série de ESP8266 e ESP32 espalhados pela casa, com código vosso e com sensores, sabem o que custa manter tudo a funcionar. Também sabe como as horas que gastaram para por a funcionar um destes equipamentos a primeira vez.

Mantenho alguns destes pela casa, tudo harmoniosamente ligado ao meu Raspberry Pi que, por sua vez, corre o Home-assistant (HASS). Mas não foi simples.

Uma das principais dificuldades era a necessidade de configurar manualmente os ESP no HASS. De cada vez que mudava qualquer coisa no ESP, lá tinha de ir também garantir que a configuração do HASS estava correta. E quando não estava, re-iniciar o HASS, o que demora o seu tempo.

Acrescentando a esta dor, haviam ainda as dificuldades em conjugar sistemas eletrónicos, de que percebo muito pouco, com código fonte, que não sou especialista.

O ESPhome tornou-me a vida muito mais fácil. O trabalho dele foi simplificar a manutenção do código que corre nos ESP. Facilita porque o código é gerado com base em configurações feitas num ficheiro YAML, mas também porque permite correr um interface gráfico onde tudo é feito.

Mas primeiro tive de perceber como é que aquilo tudo funcionava. O texto no homepage do ESPhome não é muito claro para os principiantes.

O ESPhome apresenta-se como um add-on do HASS.io, a versão de distribuição do Home-assistant (HASS), ou como um utilitário de linha de comandos.

Para quem tem HASS.io é só ir à loja de add-ons do HASS e começar. Provavelmente, a primeira vez que tiverem de fazer upload do vosso código para o ESP, convém ligá-lo por fio ao servidor HASS.io. Se programarem o vosso código para ter Over The Air (OTA), os carregamentos posteriores já em tem de fazer mais nada.

Para quem, como eu, instalou o HASS num servidor a correr uma distribuição de sistema operativo diferente da HASS.io.

Em qualquer das duas opções podem executar tudo à mesma da linha de comando de um outro computador, que é o que fiz. As instruções de instalação estão no próprio site do ESPhome.

Para correr o interface gráfico de utilizador, o que facilita bastante todo este trabalho, criem um diretório onde queiram que fiquem guardadas todas as configurações e executem o comando:

esphome <caminho para o diretório> dashboard --open-ui

O ESPhome vai lançar uma janela de browser e correr um interface gráfico que vos permite fazer tudo com os vossos ESP:

  • Configurar;
  • Carregar o código;
  • Monitorar o funcionamento;
  • Analisar os registos de execução (logs).

Cada ESP tem o seu código guardado depois no diretório que criaram e o binário resultante, compilado pelo ESPhome, está lá também, caso necessitem de forçá-lo de outro modo para um ESP.

O site ESPhome oferece uma série de receitas prontas a usar. Estas receitas incluem, para além do próprio YAML para alterarem e configurarem os vosso ESP, instruções de como ligar sensores e atuadores.

Depois de carregarem o código, basta irem ao interface do HASS e, nas configurações, usar a facilidade mais recente do HASS para as integrações.

Nas integrações identificam que querem acrescentar uma integração com ESPhome e introduzem o caminho para o novo ESP e a password que definiram quando configuraram o novo ESP.

Duas notas sobre segurança:

  1. Para além de outras defesas que tenho na minha rede, para evitar dissabores, o acesso aos ESP para carregamento de código OTA é feito com recurso a uma password complexa.
  2. Também, ao contrário dos utilizadores de HASS.io, não vou manter o ESPhome Dashboard aberto a não ser que precise dele, por isso não é instalado no meu Raspberry Pi.

Algumas coisas que deram jeito aprender:

Que ESP? Uma comparação de Espressif

ESP2866 placa programável com WiFi

ESP2866 placa programável com WiFi

Quando comprei o ESP8266 foi para me iniciar na criação de “coisas interligadas”. A primeira coisa que fiz foi uma espécie de “hello world” que mede a temperatura e a humidade.

Ultrapassados as primeiras dificuldades e concluída a aprendizagem, a construção de coisas interligadas está bastante facilitada por estes módulos. Só que o módulo é bastante volumoso porque têm muitos pontos de ligação e a parte de configuração tudo na mesma peça.

Existem módulos de volume mais reduzido, mas que podem não ter tudo o que precisamos. Por isso, fui à procura duma comparação entre estes módulos ESP8266, e encontrei. Esta página contém também uma comparação entre os módulos de desenvolvimento.

Adaptei a tabela de comparação sobre os módulos ESP8266 que podem encontrar no site.

ESP-01 ESP-12 ESP-201
ESP01v0 ESP-12 ESP-12
Pins GPIO 2 11 11

ADC (Analog-to-Digital Converter)

1 1
Antena PCB PCB Externa e PCB
Facilidade de utilizar numa Breadboard Media Boa
Tamanho Pequeno Médio Grande
Aplicação Standalone
ou como wifi shield para um Arduino
Standalone Standalone
Preço aproximado €2,00 €1,74 €3,31

O site tem também detalhes sobre os módulos de desenvolvimento, como o que veem na imagem acima, e a opinião do autor sobre cada módulo.

Encontrei também outra página, mas é uma comparação que vai para além dos módulos baseados em ESP8266, mas isso fica para outro dia.