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:

Plantar um abacate em casa

Abacate no vaso a partir de semente

Abacate no vaso a partir da semente

Com o preço do abacate pela hora da morte, mesmo com desconto, decidimos plantar num vaso a nossa própria árvore de abacate. Há vários vídeos a apresentar árvores de abacate com frutos com cerca de 1 metro, e isso pareceu-nos uma forma de termos estes saborosos frutos sem a despesa de os comprar.

  1. Colocámos a semente num copo com água suspensa por palitos e esperámos. Enquanto esperámos, fomos mudando a água.
  2. Ao fim de uma semana ou duas, a semente rachou, esperámos mais um pouco, e enquanto esperámos, fomos mudando a água.
  3. Quando de dentro da semente brotou um raminho, mudámos para o vaso com terra fofa que está na foto.
  4. Passadas 4 semanas, o pequeno ramo é agora o que está na foto.

A pergunta para a qual não tenho ainda resposta é se a árvore dará frutos.

Nas pesquisas na web encontrei muitas teorias. Uns que diziam que crescido da semente só dava flores depois de 7 anos. Outros que diziam para enxertar um ramo de fruto de uma outra árvore de abacates já com frutos. Havia ainda quem desse uma receita de múltiplos tipos de adubo.

Por agora é a nossa pequena árvore de abacates.

 

 

O IPMA no Home-Assistant

Home Assistant

Home Assistant

Tenho andado entretido a automatizar a minha casa, por isso, o Home-assistant é um tema que visito muitas vezes.

Com a última evolução desde mordomo free open source, foi acrescentado um componente que permite apresentar os dados do nosso Instituto Português do Mar e Atmosfera (IPMA).

Este componente é da autoria do Diogo Gomes que tem um repositório no GitHub repleto de coisas para o Home-assistant.

Conforme os valores no código, o componente atualiza as previsões do IPMA a cada 30 minutos para as coordenadas ou estação meteorológica que tenham configurado.

Para já, vou testar este componente, mas vocês já sabem o que pensamos sobre os supercomputadores do IPMA e como as suas previsões são… voláteis.

 

Estudar o tempo que estamos online

Uma das coisas onde se pensa que perdemos o nosso tempo é online, mas para sabermos mais sobre esse tema, há quem tenha de o estudar.

A amiga @Ritadslopes está a desenvolver um estudo sobre a percepção que temos do tempo de utilização Online diária. Para tal necessita da nossa colaboração.

Sabendo desde já que nos dias que correm o contacto com o mundo virtual parece pronunciar-se cada vez mais em detrimento do mundo real, torna-se essencial um maior aprofundamento do fenómeno.

O desenvolvimento deste estudo deverá contribuir não só para o conhecimento científico, como poderá permitir aos profissionais de saúde direccionarem os seus cuidados às necessidades específicas da população, nomeadamente no que respeita à utilização problemática da Internet.