You have searched the Poupar Melhor blog archives for wifi. If you are unable to find anything in these search results, you can try with different search query


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:

Raspberry Pi Zero W com camera ligada ao Homebridge

Raspberry Pi Zero W

Raspberry Pi Zero W

Recebi recentemente o novo da Raspberry Pi (RPi) Foundation, o RPi Zero W. Este computador miniaturizado é do tamanho de uma placa de prototipagem para o ESP8266, mas com porta USB, uma porta para uma camera, um leitor de cartão mini SSD e uma porta HDMI. Alguns dos detalhes destas portas não são de ignorar:

  1. A porta HDMI é mini, o que significa que podem não ter um cabo para ligar isto lá em casa.
  2. Só uma das porta USB é que permite a ligação de periféricos, o que dificulta ligar um rato e um teclado.

Por causa destes detalhes, o meu objetivo foi compor isto tudo sem ecrã (headless) e sem periféricos, como explico mais à frente e sem ter de passar pela confusão de ligar periféricos, ecrã e outros que teria mais tarde de desinstalar.

Preparação do disco

Tal como com outros RPi, para o começarmos a usar, necessitamos de um disco SSD, para o caso um mini SSD, formatado em Master Boot Record e FAT32. Tinha um mini SSD de 4GB disponível, por isso, o primeiro passo foi ligá-lo ao OSX e formatá-lo na linha de comando:

sudo diskutil eraseDisk FAT32 RPIZEROW MBR /dev/disk3

No meu caso, o disco a limpar era o “/dev/disk3”, mas no vosso caso pode ser outro. Esta operação no Windows é feita diretamente no interface gráfico de utilizador. Não sou fã do sistema operativo em causa, por isso, vou abster-me de mais  comentários.

Depois de formatado do disco, usei o software Etcher para copiar a imagem do MotionEyeOS para o disco.

Preparação do acesso remoto (SSH) e WiFi

Com o disco gravado, e antes de o colocar no meu RPi Zero W, foi necessário endereçar o problema do ecrã e periféricos. Para isso, o acesso remoto (SSH) tinha de estar disponível ao arranque e o RPi Zero W ligado à minha rede interna.

Para conseguir isto é necessário colocar no diretório “boot” do mini SSD um ficheiro com o nome “ssh” e outro com o nome “wpa_suplicant.conf”. O ficheiro “ssh” pode até estar vazio, mas o “wpa_suplicant.conf” necessita de ter a configuração do vosso WiFi, conforme exemplo abaixo:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=PT

network={
ssid=”O SSID da rede WiFi”
psk=”A password da rede WiFi”
key_mgmt=WPA-PSK
}

Primeiro acesso

O objetivo de instalar este dispositivo é ter uma camera de vigilância em casa, com Motion no RPi Zero W para mostrar imagens no meu Home-assistant e no meu iPhone através do Homebridge. Com o MotionEyeOS não é preciso instalar coisas. Está lá tudo o que é preciso.

O primereiro acesso é feito no url http://meye-*.home, onde o o * é substituido pelo número da instalação. Se não criaram o disco SSD com a opção de IP fixo, terão de procurar por todos os IP da vossa rede interna para saberem onde ficou o vosso RPi Zero B.

Depois de aceder, o primeiro acesso é feito com o user “admin” e a password de origem é só deixar o campo vazio. Escusado será dizer que devem criar uma password forte usando mnemónicas que incluam simbolos, letras e números.

Não se ponham com ideias de abrir portas no Router para aceder diretamente ao interface da camera porque isso é perigoso. Não sabemos muito bem quão robusto é este MotionEyeOS. É aqui que entra o Homebridge ou o Home-assistant.

Homebridge e Home-assistant

Este passo é um adicional. Posso fazê-lo porque tenho cá em casa um RPi 3 que está sempre ligado e onde corro software variado para recolha e apresentação de dados no meu iPhone através do Homebridge. A instalação do Homebridge é trivial. A configuração dos plugins, já nem tanto.

Para integrar os meus IoT sem ter de os configurar um a um no Homebridge para aparecerem no meu iPhone, estou a usar um plugin do Homebridge para este se ligar ao Home-assistant. Isto permite-me expor sensores de temperatura e interruptores nos dois meios, mas não permite partilhar a camera.

Para aceder à camera, esta ou qualquer outra camera ip, através do Homebridge, temos de instalar um dos plugins do Homebridge para cameras e configurar-lhe a localização da camera. O plugin que já testei foi o Homebridge-camera-ffmpeg.

Subredes numa ligação da NOS

Há muito tempo que tinha previsto separar a rede de casa em várias subredes. A proliferação de equipamentos, e certamente as boas práticas em termos de segurança, sugerem que não se misturem telemóveis, IOTs, computadores, e outros equipamentos. A rede era uma coisa muito controlada por mim, e por isso nada de WiFi para visitas, e coisas do género, o que me merecia algumas críticas…

Este fim de semana meti mãos à obra. Com os conhecimentos que tinha, devia ser uma coisa simples. Munido de um router simpático, comecei a configurar tudo, com várias redes internas separadas. A meio da coisa, resolvi começar a ligar à Internet, para começar a testar. Fui aí que descobri que o router da NOS não suporta este tipo de ideias…

Percorri vários foruns, e a ideia estabelecida é a de que tal não é possível. A única forma é a de utilizar o router da NOS em modo bridge e utilizar outro router para substituir o da NOS. A partir daí, fica limitado apenas às capacidades desse router. Por várias razões, não queria ir por aí, pelo que continuei a insistir, até descobrir uma solução (quase perfeita).

A solução passa por utilizar a funcionalidade de subrede nas “Definições” de “Rede Local” do router da NOS. Não consegui encontrar documentação detalhada desta funcionalidade, mas a verdade é que não procurei quase nada. Parece ser que o router cria uma sub-interface com o IP definido em “Gateway de sub-rede”, com a correspondente “Máscara de Sub-Rede”:

Subredes no router NOS

Tal possibilita que o router passe a saber que existe uma subrede adicional à da rede principal do router NOS. Note-se que o router NOS não suporta o conceito da rota estática (“static route”), pelo que a opção que eu acabei por fazer foi englobar toda a restante rede interna dentro da subrede 192.168.1.0/24, subdividindo-a posteriormente no meu router em várias subredes separadas. Admito, porque não testei, que se possam adicionar subredes adicionais no router NOS.

A configuração anterior não faz com que uma configuração tradicional funcione. Não existindo o conceito de rota estática, o router NOS pensa que os dispositivos da rede 192.168.1.0/24 estão directamente acessíveis. O router NOS não sabe, nem se lhe consegue dizer, qual é o endereço IP do nosso router interno! Por isso, quando tenta contactar com um dispositivo da rede 192.168.1.0/24, tem que enviar um pedido ARP para resolução do correspondente endereço MAC.

E é aqui que esta solução que encontrei deixa de ser óptima. Para que funcione, o nosso router tem que suportar algo chamado “Proxy ARP”: fazer-se passar pelos endereços IP da rede 192.168.1.0/24. Aí, o router NOS pensa que encontrou o endereço MAC do endereço IP com o qual está a tentar comunicar, mandando assim o pacote para o nosso router. Este, depois de receber o pacote, já sabe o que fazer…

Esta é uma solução um pouco rebuscada, e que terá alguns problemas de segurança. Dependerá sobretudo da forma exacta com que o nosso router implemente o “Proxy ARP”, algo que continuarei a investigar de seguida.

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.

ESP8266: um amigo para o RPi

ESP2866 placa programável com WiFi

ESP2866 placa programável com WiFi

O Espressif 8266(ESP8266) é uma placa programável com WiFi. Tal como o Raspberry Pi (RPi), mas com menos capacidade, dá-nos a liberdade de criarmos para nós coisas que a que dificilmente teríamos acesso por um preço tão baixo.

Aqui em casa vai servir para fazer tarefas que não posso por o RPi a fazer porque está agarrado à televisão a fazer de gestor de conteúdos multimédia ou Home Theater PC. O sensor de temperatura e humidade que tinha ligado ao RPi esteve a registar dados na sala, mas se quero dados de qualquer outro sitio, não posso andar a passear com isto tudo pela casa.

Como já sabemos, o RPi custa cerca de €35,00, enquanto o ESP8266 custa cerca de €5,00, na versão de desenvolvimento e menos que isso na versão definitiva. A diferença entre estas duas versões é a facilidade em programar e alimentar o ESP8266.

A versão de desenvolvimento tem uma porta USB que permite a programação sem mais nada para além de um cabo USB, enquanto a outra é mais pequena e a  programação depende da placa ser ligada através de outro equipamento.

O resultado prático é o mesmo que tinha já quando publiquei a informação sobre como ligar o HomeKit da Apple a equipamentos não certificados através do Homebridge. A diferença é que posso ter mais sensores por um preço muito baixo.