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


Home-assistant é dos projetos com maior atividade no GitHub

Home Assistant
Home Assistant

O fim do ano de 2022 está quase aí e começa a ser altura de se fazer o balanço do ano. O GitHub publicou o seu “The state of the Open Source” com uma análise rápida dos dados recolhidos no que é hoje um dos principais sítios para suportar e acompanhar os projetos colaborativos de desenvolvimento na Internet.

Nesta descrição, o Home-assistant, projeto de que aqui nos tornámos fãs, foi identificado como o projeto com o segundo maior número de contribuições e o primeiro projeto em termos de crescimento do número de utilizadores que contribuem. Convém fazer notar que estes contributos são as participações efetuadas pelos utilizadores na forma de desenvolvimento de código fonte, através de pedidos de alteração, confirmação de código a alterar, comentários, abertura de incidentes de melhoria e correção e outras tarefas necessárias para garantir que estas coisas todas continuam a funcionar.

Este esforço partilhado tem sido apoiado pelas empresas participantes que mantêm o seu código fonte no GitHub, afetando assim o esforço pago pelos investidores em projetos que são depois beneficiados pela participação desta comunidade. A maioria dos projetos com maior atividade em destaque em 2022 são na sua maioria projetos destes, onde o Home-assistant é a exceção, ainda que os seus principais de colaboradores e fundadores estejam na Nabu Casa.

Mudar o Home-assistant de máquina

Home Assistant
Home Assistant

Um dia é dia e o vosso Home-assistant tem de ser mudado de máquina. Tem de mudar, quer seja porque querem melhorar o hardware, ou porque querem mesmo refazer o sistema operativo que, sabe-se lá porquê, instalaram numa versão de sistema operativo que não era de 64 bit. E agora, tinham o vosso sistema todo configurado e a funcionar, por isso não estão com muita vontade de perder isso. Este é mais ou menos o meu caso.

A minha lista de afazeres inicial, numa perspectiva mais geral, foi a seguinte:

  1. Verificar que estão num disco externo todos os scripts, configurações e outros ficheiros do sistema original acrescentados para além da instalação do Home-assistant.
  2. Fazer um backup do Home-assistant.
  3. Copiar o novo Home-assistant para o micro sd.
  4. Arrancar o novo Home-assistant.
  5. Recuperar o backup.

O meu sistema é composto por um Raspberry Pi 4, com um micro sd de 64 GB e um disco externo de 500 GB. Por hábito, já mantenho a parafernália que vou fazendo à minha medida no disco externo, por isso, em princípio, tudo isto seria um passeio. Só que não…

  • Tinha um script no home do root que verifica se o disco externo está montado, e, se não estiver, monta.
  • Tinha um ficheiro .git-credentials no home do root com o token de autenticação da minha conta GitHub.
  • Tinha chaves de autenticação no .ssh para aceder a outros sistemas a partir do RPi, como por exemplo o MotionEyeOS de uma das cameras.
  • Não me recordava que modelo de Raspberry Pi 4 comprei.
  • Tinha qualquer coisa no crontab de um dos utilizadores chave.
  • Tinha qualquer coisa no fstab.
  • O Home-assistant insiste em fazer backup com o conteúdo do disco externo porque o mount point é no /usr/share/hassio/share/.
  • Toda a casa está dependente do Home-assistant neste momento por causa do AdGuard, e por isso há que reconfigurar a rede para distribuir um DNS diferente já que o IP do Home-assistant vai estar indisponível por uns momentos.

Uma vez que decidam iniciar o processo, se forem como eu, vão pensar: “Ah e tal, se calhar é má ideia fazer isto sem um backup integral do SSD e se correr mal e tal…”.

Preços dos combustíveis melhorado para o Home-Assistant

Preços do combustível no Home-Assistant

Para obter o preço dos combustíveis do site da DGEG vão ter de mexer um bocado com as ferramentas de desenvolvimento de um browser internet de forma a descobrir o identificador único do posto de combustível onde querem ler os preços. O que estão à procura é um pedido ao site da DGEG com “/api/PrecoComb/GetDadosPostoMapa?id=” no URL.

Clicando no mapa no site da DGEG, com as ferramentas de desenvolvimento do browser abertas, quando clicarem no posto de onde querem ver os preços, por exemplo um posto no Barreiro, o pedido com os dados dos preços é feito pelo browser nesta forma:

--> https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=67080&f=json

Se abrirem este URL numa janela/tab nova, vão ver os dados sem a decoração, e que se pedirem 0 (zero) elemento do grupo Combustiveis, está lá a informação para o sensor:

TipoCombustivel“GPL Auto”
Preco“0,919 €/litro”

Infelizmente, os dados na DGEG misturam unidades (€/litro) de medida com valores (0,919), obrigando a alguma ginástica de pré-preparação antes de serem apresentados no Home-Assistant. Isso foi feito com o templating do Home-Assistant e algumas substituições com RegEx. Fpo também preciso lidar com o valor para que o Home-Assistant entende-se como um valor decimal:

  • float: Converte o resultado do value_json num décimal;
  • | regex_replace: substitui o texto ” €/litro” e “,”.

Para inserirem o vosso sensor RESTfull no Home-Assistant ainda é preciso editar a configuração manualmente. Abrem o vosso ficheiro config.yaml e inserem lá o URL:

sensor:
  - platform: rest
    resource: https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=67080&f=json
    name: "fuel_posto_67080_barreiro_gpl"
    scan_interval: 3600
    value_template: '{{ float(value_json.resultado.Combustiveis[0].Preco | regex_replace(find=" €/litro", replace="", ignorecase=True) | regex_replace(find=",", replace=".", ignorecase=True),default) }}'
    unit_of_measurement: '€'
  - platform: rest
    resource: https://precoscombustiveis.dgeg.gov.pt/api/PrecoComb/GetDadosPostoMapa?id=67080&f=json
    name: "fuel_posto_67080_barreiro_gasoleo_simples"
    scan_interval: 3600
    value_template: '{{ float(value_json.resultado.Combustiveis[2].Preco | regex_replace(find=" €/litro", replace="", ignorecase=True) | regex_replace(find=",", replace=".", ignorecase=True),default) }}'
    unit_of_measurement: '€'

Neste exemplo insiro apenas 2 sensores, mas podem repetir o exercício tantas vezes quantas quiserem. No controlo do vosso servidor Home-Assistant, depois de selecionar “REST entities and notify services”, ele recarrega os valores.

Em 2018, quando o @RodolfoVieira, da Comunidade Portuguesa de Home-Assistant (CPHA) me pediu para o ajudar a obter os preços do combustível para publicar no seu dashboard doméstico, não me passava pela cabeça que viesse a ser utilizado por outras pessoas.

Nessa altura, o site de onde íamos buscar os valores não facilitava muito a vida a quem queria incluir os dados nas suas próprias construções.

A solução na altura foi ler o conteúdo, fingindo ser um browser internet, e identificar no texto do site as partes interessantes para recolher, enviando-as ao Home-Assistant para os apresentar.

Hoje em dia, com estes sites a serem construídos com dados mais abertos, é possível obter a informação de forma mais simples para o Home-Assistant.

O Home-Assistant oferece o sensor RESTful, uma integração para este tipo de informação que, depois de algum trabalho para limpar os dados obtidos, permite obter o mesmo resultado com muito menos esforço de configuração.

Hoje, há utilizadores do CPHA que publicam os resultados obtidos, como o que hoje ilustra este post. Há também utilizadores que, por integraram o Home-Assistant com o Telegram, conseguem de qualquer lado enviar uma mensagem e receber de volta o preço dos combustíveis.

Estatísticas de instalações do Home-Assistant

Home-Assistance analytics
Home-Assistance analytics

O Home-Assistant disponibiliza agora um conjunto de dados estatísticos da sua utilização. Estes dados eram-me desconhecidos até agora.

Aquilo que retive deste site foi que existem neste momento registadas 11866 instalações de Home-assistant em todo o mundo e que 189 são em Portugal.

Já tínhamos falado no PouparMelhor sobre o Home-assistant. Continuo fã, mas não sei se foi boa ideia terem ligado as instalações todas a um servidor de estatística quando o Home-assistant sempre foi visto como uma forma de desligarmos as nossas casas da nuvem…

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.