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.

Valores NPK

Quando compramos adubo ou qualquer outro produto que constitua “alimento” para as plantas, os valores NPK devem ser sempre equacionados com atenção. O termo NPK vem das iniciais dos elementos químicos Azoto (N), Fósforo (P) e Potássio (K).

As plantas, cujo “alimento” principal é a água (H20) e dióxido de carbono (CO2), para efetuar a fotossíntese, precisam no entanto de outros nutrientes. E os nutrientes NPK são os principais, sendo essenciais para as seguintes vertentes:

  • O azoto (N) é sobretudo responsável pelo crescimento das folhas das plantas.
  • O fósforo (P) é o que contribui para o crescimento das raízes, e o desenvolvimento das flores e frutos.
  • O potássio (K) é o nutriente da qualidade, contribuindo para o tamanho, cor, sabor, etc.

Dos valores NPK há que saber essencialmente dois aspetos:

  • Quanto maior são os valores, maior é a concentração do nutriente. Assim, um NPK de 10-10-10 tem o dobro de nutrientes de um 5-5-5, quando comparado o mesmo peso.
  • O valor de N representa a percentagem de peso de azoto. Assim, um NPK de 10-10-10 significa que existem 100 gramas de azoto por quilo. Os valores de P e K estão relacionados percentualmente, mas a conversão não é linear, conforme pode ver neste artigo.

Os valores de NPK aplicam-se quer a adubos químicos, quer orgânicos. Alguns destes últimos não têm esta informação, pelo que deverá estar atento à sua possível qualidade.

Em termos téoricos, deveria conhecer a composição do seu solo, antes de adicionar nutrientes. É como uma planta que já tenha água: não precisa mais. Se o solo já tem um dos nutrientes, só precisará dos restantes. Adicionalmente, determinados nutrientes serão mais importantes em determinados momentos do crescimento das plantas, mas esta e outras vertentes analisaremos em artigos subsequentes.

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:

Bolha no Imobiliário?

Nos últimos tempos tenho ouvido muitos conhecidos meus expressar receios sobre a evolução dos preços da habitação. Na minha opiniao, a subida começou no centro das cidades, sobretudo de Lisboa, em função da procura dos estrangeiros. Felizmente, porque tal procura a que se juntou a vinda de turistas foram o que provavelmente mais contribuíram para que tenhamos esquecido a crise financeira, que pelo País permanece, mas da qual ninguém quer saber. Mas, recentemente, estendeu-se para a periferia das cidades, a partir do momento em que os Portugueses perceberam que tinha baixado o custo da comutação…

O meu barómetro nestas coisas é sempre a informação mais independente vinda de análises que observam a nossa realidade, encaixada na evolução internacional. Quando queremos olhar para além do nosso umbigo, temos que nos comparar com os outros.

Recentemente, a Bloomberg elaborou uma lista dos países com mais riscos de bolhas na habitação. E Portugal está lá. Mas o site Visual Capitalist foi um pouco mais longe e elaborou um infográfico onde a bolha está à vista. Porque uma imagem vale por mil palavras:

Top de Linguagens de programação

Por necessidades profissionais, a necessidade de conhecer diversas linguagens de programação tem feito com que ao longo da vida tenha vindo a acompanhar as principais novidades. De vez em quando, lá tenho que apreender mais uma. Um recurso importante é aquele que referimos neste artigo.

No outro dia, numa conversa sobre qual seria a linguagem de programçaõ mais utilizada, não se chegou a um consenso. Mas fiquei com a pulga atrás da orelha, e fui procurar online se haveria estatísticas neste domínio?

Dos vários artigos que li online, havia um que aparecia sempre: o índice TIOBE. O que mais me surpreendeu foi que eles mantêm um gráfico da evolução do Top das linguagens de programação desde 2002! Para quem estiver interessado na forma de cálculo, podem ver neste link.

Como se pode ver abaixo, o domínio continua a ser do Java e do C. Como é do conhecimento de quem anda no meio, o Python está a ter um resurgimento, enquanto o C++ e PHP estão claramente em queda. Emfim, vale o que vale, mas dá uma bela leitura e discussão!