ESPHome com Sensores de Temperatura e Umidade da Xiaomi

Sabia que você pode transformar um ESP32 em um hub Bluetooth? Desta forma, é possível se conectar a sensores Bluetooth, obter seus dados e disponibiliza-los no Home Assistant!
https://cdn.givingcompass.org/wp-content/uploads/2019/12/02081412/Climate-Change-and-the-New-Language-of-Weather-800x450.jpg

Você gostaria de monitorar a temperatura e umidade de sua casa? Ué, mas para que eu precisaria disso, seu doido? Bom, você pode alterar o comportamento do seu ar condicionado a depender dessa informação. Pode ligar e desligar umidificadores e desumidificadores também. Principalmente se você mora em Brasília! 🙂

Por exemplo, quando você for dormir, a temperatura externa pode estar em 28 graus. Para você, isso é muito quente, logo, você liga o ar condicionado, senão não consegue dormir. Entretanto, durante a noite, a temperatura externa cai para algo em torno de 21 graus. 

Temperatura boa e aceitável para você dormir tranquilamente. O problema é que você já está dormindo e o ar condicionado continuará ligado mesmo assim. Por que não ter uma automação nome Home Assistant que verifica essa temperatura e desliga o ar condicionado se a temperatura externa chegar a 21 graus? Economia de energia!

Você pode fazer isso se tiver alguns sensores de temperatura espalhados por sua casa. Ok, eu sei! Você também pode fazer isso usando dados metereológicos, mas a vantagem do sensor local é que ele dará a temperatura naquele momento para aquele local em específico e não uma média da sua cidade.

Sensores de Temperatura

Uma solução legal para este problema é você criar seu próprio sensor de temperatura usando um ESP8266 e um sensor DHT11. Dá um pouco mais de trabalho, mas é bem divertido. Outra solução, é usar um sensor de temperatura de algum fabricante. 

A vantagem é que já vem tudo pronto e, provavelmente, terá um aspecto mais bonito e profissional. Para a minha casa, resolvi investir em sensores de temperatura da Xiaomi iguais ao da foto abaixo.

Sensor Xiaomi LYWSDCGQ

Este sensor é alimentado por baterias AAA e pode ser colocado em qualquer lugar da casa, independente de tomadas. Era exatamente o que eu precisava. Outro detalhe, a bateria dura bastante tempo. 

Só havia um problema para ser resolvido! Os dados desse sensor são disponibilizado apenas por Bluetooth Low Energy (BLE)! Como coleto esses dados e os envio para o Home Assistant? O ESPHome vem para nos salvar!

Usando o ESPHome, podemos coletar esses dados e disponibiliza-los para o Home Assistant! Simples e eficiente!

Preparando o Terreno

Vamos ao que você precisará para ter uma solução semelhante à que tenho em minha casa:

  • ESP32
  • Sensor da Xiaomi
  • ESPHome

Caso você nunca tenha ouvido falar do ESPHome, sugiro que leia nosso artigo entitulado ESPHome – Automações Mais Fáceis Usando ESP32/ESP8266. Neste artigo, fizemos uma introdução ao ESPHome e detalhamos todos os passos de instalação.

Você também precisará do sensor da Xiaomi, modelo LYWSDCGQ. No meu caso, eu os comprei na Aliexpress, neste link. Por último, também será necessário ter um ESP32 em mãos. Sugiro um ESP32 DevKit V1.

Descobrindo o MAC Address

Antes de prosseguirmos, precisamos identificar qual o endereço MAC do sensor de temperatura. Sem essa informação, não poderemos nos conectar a ele. Infelizmente, essa informação não vem na caixa ou no próprio dispositivo. Entretanto, não se preocupe, não é tão difícil assim!

Os próximos passos dependem do seu sistema operacional. No caso do Windows, você precisará, inicialmente, parear o sensor com o seu computador (espero que você tenha bluetooth em sua máquina!).

Faça isso apertando o botão que fica atrás do sensor até que o ícone de Bluetooth comece a piscar no visor. No Windows, em Configurações -> Bluetooth, adicione um novo dispositivo. Este sensor deve aparecer com o nome MJ_HT_V1. Conecte-se a ele!

Agora, ainda na tela de Bluetooth, clique na opção Dispositivos e Impressoras. Lá, você verá o dispositivo MJ_HT_V1. Clique com o botão direito do mouse e selecione Propriedades. Selecione a aba Dispositivo Conectado. Lá você verá algo como a imagem abaixo (meu Windows está em inglês). O MAC Address está em Unique Identifier.

Preferências do Bluetooth no Windows 10.

No caso do Linux, você pode usar o hcitool! Basta usar o comando hcitool scan --refresh. Este comando irá listar todos os dispositivos próximos, assim como seu MAC Address. No MacOS, você precisa abrir o Terminal e digitar o comando system_profiler SPBluetoothDataType.

YAML

Vamos ver como ficará nosso arquivo YAML (vamos nomea-lo xiaomi.yaml) para que o ESP32 funcione como uma espécie de Gateway Bluetooth. Ele ficará obtendo os dados de um ou mais sensores desse tipo, tornado-os disponíveis para o Home Assistant.

No meu caso, tenho um único ESP32 obtendo os dados de três sensores da Xiaomi! Isso mesmo, não é necessário você ter um ESP32 para cada sensor, apenas um resolve o problema. Claro, tudo depende também da distância que o sensor está do ESP32, pois o bluetooth tem uma limitação de 10 metros de distância.

Agora, vamos deixar de conversa fiada e analisar como vai ficar nosso arquivo YAML, que está logo abaixo.

esphome:
  name: ble_xiaomi
  platform: ESP32
  board: esp32doit-devkit-v1

wifi:
  ssid: "ssid"
  password: "password"

esp32_ble_tracker:

sensor:
  - platform: xiaomi_lywsd02
    mac_address: 58:2D:34:3A:AE:5F
    temperature:
      name: TempSala
      id: temp_sala
    humidity:
      name: UmidadeSala 
      id: umidade_sala

api:

As quatro primeira linhas são triviais e apenas definem o nome, a plataforma e a placa que vamos usar. Tudo isso está bem detalhado no nosso primeiro post sobre o ESPHome. 

As linhas sobre o WiFi também são autoexplicativas, não vamos perder tempo com isso, tudo bem? Logo após a configuração do WiFi, temos a primeira parte que precisamos prestar atenção! Note que estamos informando que queremos usar o componente esp32_ble_tracker. Ele é importante e, sem ele, não poderemos monitorar dispositivos Bluetooth.

Esse componente é o responsável por transformar seu ESP32 em um Hub de Bluetooth! Ele vai monitorar dispositivos Bluetooth Low Energy (BLE), obtendo e disponibilizando os dados gerados por ele. 

Okay! Mas, apenas definir esse componente não resolve nosso problema. Ainda precisamos de um pouco mais de código. Neste caminho, definimos, logo em seguida, um sensor.

Note que este sensor é da plataforma xiaomi_lywsd02. Exatamente o sensor que compramos! Isso mesmo, o ESPHome já dá suporte a este sensor. Em seguida, precisamos informar qual o MAC Address desse sensor para que o ESPHome possa se conectar a ele.

Finalmente, definimos um ID e um nome para cada dado que esse dispositivo nos provê. Neste caso, temos dois sensores nele, um de temperatura e outro de umidade. 

Para fechar esse arquivo, usamos o componente Native API, que permitirá que os dados obtidos do sensor estejam visíveis no Home Assistant! A Native API realiza a integração nativa, direta com o Home Assistant. 

Tudo pronto! Agora, como já discutimos no artigo de introdução ao ESPHome, precisamos compilar e fazer o upload! No terminal, é só digitar, primeiro, esphome xiaomi.yaml compile e, depois, esphome xiaomi.yaml upload.

Home Assistant

Ótimo! Agora já temos nosso Hub Bluetooth pronto e funcionando! Vamos nos conectar a ele através do Home Assistant? É muito fácil, você nem vai acreditar de tão fácil, pois o Home Assistant já tem uma integração com o ESPHome.

Melhor ainda, você não precisa nem adicionar a integração, pois o dispositivo será descoberto automaticamente pelo Home Assistant. Veja a minha tela do Home Assistant na imagem abaixo. Não foi necessário fazer nada no Home Assistant para aparecer o dispositivo!

Home Assistant

E agora? Bom, agora só depende de você fazer as automações para ligar ou desligar outros dispositivos a partir dos dados desses sensores!