4Sensores de plantas MiFlora no Home Assistant

Estou processando a integração do MiFlora Home Assistant para obter dados sobre várias plantas da casa há algum tempo. No entanto, ao longo do caminho, tive que superar vários obstáculos, incluindo alcance limitado de bluetooth, problemas de duração da bateria, e obtendo os valores da bateria para relatar. Eu finalmente pareço ter quebrado tudo isso e agora tenho um sistema que funciona de forma confiável com muitas plantas ao redor da casa. Eu resumi o que eu usei abaixo.

ferragens

A primeira coisa a dizer é que eu tenho um bluetooth USB dongle conectado ao meu sistema de assistente doméstico. Isso monitora as plantas na faixa diretamente (i.. os que estão na mesma sala que a caixa HA). Para monitorar dispositivos mais distantes usei uma placa ESP32 com módulo bluetooth embutido que tenho dentro de um case baratinho e alimentei com um micro antigo-USB carregador de telefone

  • USB dongle: o que eu tenho não está mais disponível - devido à idade - mas há muitos amazon e em outros lugares - apenas certifique-se de que ele tenha suporte no linux
  • placa ESP32: eu tenho um JZK ESP32-S que atualmente custa £ 6,49 na Amazon
  • Caso para ESP32: Encontrei o caso de um NodeMCU Wroom-32D (antena curta) encaixou na minha prancha - isso custava £ 4,20 de ebay

Integrações para o Home Assistant

Embora a integração básica do MiFlora esteja integrada ao assistente doméstico, descobri que ele usa muita bateria quando usado nativamente. Em vez disso, eu uso o Monitor Bluetooth de Baixa Energia 3terceiro integração de terceiros que você pode instalar facilmente usando RETARDAÇÃO
Eu também instalei o Integração ESPHome para o assistente doméstico gerenciar meu repetidor ESP32 BLE
Finalmente, para exibir as plantas de uma maneira agradável, adicionei um garfo específico do cartão de planta lovelace dar via HACS

Configuração

Depois que o BLE Monitor foi instalado e configurado com meu dongle bluetooth, ele pegou os sensores MiFlora dentro do alcance e os listou em seu menu suspenso "dispositivos", além de listar os dispositivos e entidades em seu cartão na configuração HA
A grande vantagem do monitor BLE é que ele escuta os sensores para transmitir, em vez de enquete-los ativamente, que iria esgotar suas baterias. No entanto, os sensores não transmitem informações sobre a bateria, portanto, para obter isso, precisamos pesquisar ativamente. Votação só para isso, e ouvir passivamente os outros dados parece ser o melhor compromisso se você quiser ter todos os dados disponíveis, mas também maximizar a vida útil da bateria do sensor. Eu separei meu configuration.yaml em vários arquivos separados para manter as coisas um pouco mais fáceis de gerenciar, então tenho apenas a seguinte linha no meu configuration.yaml —

sensor: !include sensors.yaml

Então, em sensores.yaml, tenho cada planta listada da seguinte maneira

 - plataforma: miflora
   mac: 'Mac:endereço:de:floresceu:sensor:here'
   name: basil
   force_update: true
   scan_interval: 08:00
   mediana: 3
   go_unavailable_timeout: 43200
   condições_monitoradas:
     - bateria

Próximo — para fazer as plantas parecerem bem, eu tenho uma configuração de plantas. Como antes, uma única linha em configuration.yaml para começar: 

plantar: !incluir plantas.yaml

E então em plantas.yaml eu tenho o seguinte

basil:
  sensores:
    umidade: sensor.ble_moisture_basil
    battery: sensor.basil_battery
    temperature: sensor.ble_temperature_basil
    conductivity: sensor.ble_conductivity_basil
    brightness: sensor.ble_illuminance_basil
  min_battery: 15
  min_brightness: 2500
  max_brightness: 60000
  min_temperature: 8
  max_temperature: 32
  min_umidade: 15
  max_umidade: 60
  min_condutividade: 350
  max_condutividade: 2000

Observe a sutil diferença entre o nome da entidade para a bateria em comparação com os outros sensores. A entidade bateria vem da plataforma miflora em sensores.yaml enquanto a outra 4 sensores estão vindo da integração BLE. Existe uma entidade de bateria listada pela integração BLE, mas isso apenas aparece como "desconhecido" para esta planta. Esta configuração é necessária para que o cartão da planta mostre a planta de uma forma bem apresentada
Em seguida, basta ir ao local em que deseja adicionar sua planta e adicionar o cartão de planta lovelace. Você terá que “configurar” o cartão manualmente, mas só precisa de 3 linhas...

tipo: custom:flower-card
entity: plant.basil
species: ocimum basilicum

Observe que a espécie está listada para 2 REAs-ons. Em primeiro lugar, ele exibirá o nome no cartão, mas mais import-antly, ele também exibirá uma foto da planta se você baixou as imagens da planta e as adicionou em configwwwimagesplants usando os nomes latinos — as informações no banco de dados estão disponíveis na documentação do cartão da planta lovelace

Alcance estendido

Finalmente, precisamos estender o alcance que podemos alcançar. Para isso precisamos do dispositivo ESP32. A primeira coisa a fazer é conectá-lo ao seu computador via USB e faça o flash com uma imagem básica do ESPHome
Eu usei o ESP Home Flasher e a driver universal para windows cp210x da SiLabs e seguiu o guia fornecido pela integração ESPHome HomeAssistant
A configuração que usei para o meu dispositivo ESP32 está abaixo

espirrar:
  nome: jzk-esp-32s
  platform: ESP32
  board: esp32doit-devkit-v1

# Enable logging
logger:

# Enable Home Assistant API
api:

Wi-fi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp32 Fallback Hotspot"
    senha: "random-password-here"
    
external_components:
  - source: github://myhomeiot/esphome-components
    
esp32_ble_tracker:
    
ble_gateway:
  dispositivos:
    - mac_address: mac:endereço:de:floresceu:sensor:para:monitor:goes:here
  on_ble_advertise:
    depois:
      homeassistant.event:
        event: esphome.on_ble_advertise
        data:
          packet: !lambda return packet;
          
myhomeiot_ble_host:

myhomeiot_ble_client:
  - mac_address: mac:endereço:de:floresceu:sensor:para:monitor:goes:here
    service_uuid: '1204'
    characteristic_uuid: '1A02'
    update_interval: 4h
    on_value:
      depois:
        homeassistant.event:
          event: esphome.on_ble_advertise
          data:
            packet: !lambda |-
              se (x.size()  2)
              {
                ESP_LOGE("myhomeiot_ble_client", "payload has wrong size (%d)", x.size());
                retorno "";
              };
              ESP_LOGI("myhomeiot_ble_client", "Bateria (%d%%), firmware (%é)", x[0], std::string(x.begin(), x.end()).substr(2).c_str());
              char buffer[70 + 1];
              const uint8_t *remote_bda = xthis.remote_bda();
              snprintf(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis ​​​​no ganho de unidade, sizeof(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis ​​​​no ganho de unidade), "043E2002010000%02X%02X%02X%02X%02X%02X14020106030295FE0C1695FE41209800000A1001%02X00",
                remote_bda[5], remote_bda[4], remote_bda[3], remote_bda[2], remote_bda[1], remote_bda[0], x[0]);
              return std::string(Sem olhar mais para isso, acho que pode ser porque eles não são estáveis ​​​​no ganho de unidade).c_str();

Em seguida, salve e atualize para o seu dispositivo esp32 via wifi. O dispositivo ESP32 pegará os dados do sensor miflora e o 'enviará' via wifi para a integração BLE que criará um dispositivo e entidades automaticamente. Dispositivos empurrados dessa maneira parecem mostrar seu nível de bateria (graças ao código na parte inferior da seção myhomeiot_ble_client, acredito). Você só precisa dar ao dispositivo um bom nome (e deixe as entidades serem renomeadas também) e, em seguida, crie uma entrada em plantas.yaml com as entidades corretas

Deixe uma resposta

4 Comentários

JSJon Scaife

Oi
Sim, Na verdade, eu mesmo uso repetidores ESP32 agora, pois eles podem usar o modo “passivo” E coletar dados da bateria.
Se você tem um USB dispositivo bluetooth, então você pode emparelhar os dispositivos MiFlora diretamente com ele primeiro e, quando você configurar o ESP32, ele enviará as informações para o HA e aparecerá para as entidades corretas automaticamente

Você precisa usar o código conforme descrevo na seção "Estendendo o intervalo".
Você também precisa ter a integração “Bluetooth Low Energy Monitor” instalada (via HACS)

Se você não tem um USB Bluetooth, então há uma maneira de fazer com que os dispositivos apareçam no Bluetooth Low Energy Monitor. Não me lembro do link onde o li, mas acho que faz parte do Wiki do Bluetooth Low Energy Monitor ou das perguntas frequentes

Se você fizer dessa forma, não precisará usar o manual YAML que Barry usa. A postagem dele é de 2020 — Acho que antes que o Bluetooth Low Energy Monitor pudesse fazer isso ou talvez antes mesmo de existir.

Resposta
TTony

Olá, obrigado por postar esta ótima solução.
O gateway Bluetooth esp32 pode transmitir dados de mais de um dispositivo bluetooth ou ou você precisa fornecer um ESP 32 para cada dispositivo Bluetooth queremos estender o alcance para?

Resposta
JSJon Scaife

Oi Tony
O ESP transmitirá dados para qualquer dispositivo BT dentro do alcance, acredito, embora o meu atualmente seja usado apenas para 1 Dispositivo BT não consigo confirmar 100% - mas esse é certamente o meu entendimento

Resposta