4Sensori per piante MiFlora in Home Assistant

Ho citato in giudizio l'integrazione di MiFlora Home Assistant per ottenere dati su varie piante d'appartamento da un po' di tempo. Tuttavia lungo la strada ho dovuto superare vari ostacoli tra cui una gamma limitata di Bluetooth, problemi di durata della batteria, e ottenere i valori della batteria da segnalare. Alla fine mi sembra di aver risolto tutti questi problemi e ora ho un sistema che funziona in modo affidabile con molte piante in casa. Ho riassunto ciò che ho usato di seguito.

Hardware

La prima cosa da dire è che ho un bluetooth USB dongle collegato al mio sistema di assistente domestico. Questo monitora direttamente le piante nel raggio d'azione (i.e. quelli nella stessa stanza del box HA). Per monitorare più dispositivi a distanza ho utilizzato una scheda ESP32 con modulo bluetooth integrato che ho all'interno di una piccola custodia economica e ho alimentato con un vecchio micro-USB caricatore del telefono

  • USB Dongle: quello che ho ricevuto non è più disponibile - a causa dell'età - ma ci sono un sacco di amazon e altrove - assicurati solo che abbia il supporto in linux
  • Scheda ESP32: ho un JZK ESP32-S che è attualmente £ 6,49 su Amazon
  • Custodia per ESP32: Ho trovato la custodia per un NodeMCU Wroom-32D (antenna corta) montato sulla mia tavola - questo era £ 4,20 da ebay

Integrazioni per Home Assistant

Sebbene l'integrazione di base di MiFlora sia integrata nell'assistente domestico, ho scoperto che utilizza molta batteria se utilizzato in modo nativo. Invece io uso il Monitor Bluetooth a basso consumo energetico 3rd integrazione del partito che puoi installare facilmente utilizzando RITARDO
Ho poi installato anche il Integrazione ESPHome per l'assistente domestico per gestire il mio ripetitore ESP32 BLE
Finalmente, per visualizzare le piante in modo carino ho aggiunto un particolare fork della carta della pianta del lovelace addon tramite LAG

Configurazione

Una volta che BLE Monitor è stato installato e configurato con il mio dongle bluetooth, ha raccolto i sensori MiFlora nel raggio d'azione e li ha elencati nel suo menu a discesa "dispositivi", oltre a elencare i dispositivi e le entità sulla sua scheda nella configurazione HA
La cosa grandiosa del monitor BLE è che ascolta la trasmissione dei sensori, piuttosto che interrogarli attivamente, che scaricherebbero le batterie. tuttavia, i sensori non trasmettono informazioni sulla batteria, quindi per ottenerlo dobbiamo eseguire attivamente il polling. Sondaggio solo per questo, e l'ascolto passivo degli altri dati sembra essere il miglior compromesso se si desidera avere tutti i dati disponibili ma anche massimizzare la durata della batteria del sensore. Ho separato il mio configuration.yaml in più file separati per mantenere le cose un po' più facili da gestire, quindi ho solo la seguente riga nel mio configuration.yaml —

sensore: !include sensori.yaml

Quindi in sensori.yaml ho elencato ogni pianta come segue

 - piattaforma: sbocciato
   Mac: 'Mac:indirizzo:of:sbocciato:sensore:qui'
   nome: basilico
   aggiornamento forzato: vero
   scan_interval: 08:00
   mediano: 3
   go_unavailable_timeout: 43200
   condizioni_controllate:
     - batteria

Avanti: per far apparire bene le piante, ho una configurazione delle piante. Come prima, una singola riga in configuration.yaml per cominciare: 

pianta: !includi piante.yaml

E poi in plants.yaml ho quanto segue

basilico:
  sensori:
    umidità: sensor.ble_moisture_basil
    batteria: sensore.basilico_batteria
    temperatura: sensor.ble_temperature_basil
    conducibilità: sensor.ble_conductivity_basil
    luminosità: sensore.ble_illuminance_basil
  min_batteria: 15
  minima_luminosità: 2500
  max_luminosità: 60000
  min_temperatura: 8
  max_temperatura: 32
  minima_umidità: 15
  max_umidità: 60
  min_conduttività: 350
  max_conduttività: 2000

Notare la sottile differenza tra il nome dell'entità per la batteria rispetto agli altri sensori. L'entità della batteria proviene dalla piattaforma miflora in sensori.yaml mentre l'altra 4 i sensori provengono dall'integrazione BLE. C'è un'entità batteria elencata dall'integrazione BLE, ma questo viene semplicemente visualizzato come "sconosciuto" per questo impianto. Questa configurazione è necessaria affinché la scheda della pianta mostri la pianta in un modo ben presentato
Quindi vai semplicemente nel punto in cui desideri aggiungere la tua pianta e aggiungi la carta della pianta lovelace. Dovrai "configurare" la scheda manualmente, ma ci vogliono solo 3 righe...

tipo: costume:carta di fiori
entità: basilico.pianta
specie: basilicale

Si noti che la specie è elencata per 2 motivi. Per prima cosa visualizzerà il nome sulla carta, ma più import-antly, visualizzerà anche un'immagine della pianta se hai scaricato le immagini della pianta e le hai aggiunte in configwwwimagesplants usando i nomi latini — le informazioni sul database sono disponibili sulla documentazione della scheda della pianta di lovelace

Estendere la gamma

Finalmente, dobbiamo estendere la gamma che possiamo raggiungere. Per questo abbiamo bisogno del dispositivo ESP32. La prima cosa da fare è collegarlo al computer tramite USB e esegui il flashing con un'immagine ESPHome di base
Ho usato il Lampeggiatore ESPHome e la cp210x driver universale per Windows di SiLabs e ho seguito la guida fornita dall'integrazione di ESPHome HomeAssistant
La configurazione che ho usato per il mio dispositivo ESP32 è di seguito

esphome:
  nome: jzk-esp-32s
  piattaforma: ESP32
  asse: esp32doit-devkit-v1

# Abilita registrazione
logger:

# Abilita Assistente domestico API
api:

Wi-Fi:
  ssid: !wifi_ssid segreto
  parola d'ordine: !password_wifi segreta

  # Abilita hotspot di fallback (portale captivo) nel caso in cui la connessione wifi fallisca
  ap:
    ssid: "Esp32 Hotspot di fallback"
    password: "password casuale qui"
    
componenti_esterni:
  - fonte: github://componenti myhomeiot/esphome
    
esp32_ble_tracker:
    
ble_gateway:
  dispositivi:
    - indirizzo MAC: Mac:indirizzo:of:sbocciato:sensore:a:tenere sotto controllo:va:qui
  su_ble_advertise:
    allora:
      assistente.evento:
        evento: esphome.on_ble_advertise
        dati:
          pacchetto: !pacchetto di ritorno lambda;
          
myhomeiot_ble_host:

miohomeiot_ble_client:
  - indirizzo MAC: Mac:indirizzo:of:sbocciato:sensore:a:tenere sotto controllo:va:qui
    servizio_uuid: '1204'
    caratteristico_uuid: '1A02'
    intervallo di aggiornamento: 4h
    su_valore:
      allora:
        assistente.evento:
          evento: esphome.on_ble_advertise
          dati:
            pacchetto: !lambda |-
              se (x.dimensione()  2)
              {
                ESP_LOGE("miohomeiot_ble_client", "payload has wrong size (%d)", x.dimensione());
                ritorno "";
              };
              ESP_LOGI("miohomeiot_ble_client", "Batteria (%d%%), firmware (%S)", 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(buffer, sizeof(buffer), "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(buffer).c_str();

Quindi salva e aggiorna sul tuo dispositivo esp32 tramite wifi. Il dispositivo ESP32 raccoglierà i dati dal sensore miflora e li 'spingerà' via wifi all'integrazione BLE che creerà automaticamente un dispositivo ed entità. I dispositivi spinti in questo modo sembrano mostrare il loro livello di batteria (grazie al codice in fondo alla sezione myhomeiot_ble_client credo). Quindi devi solo dare al dispositivo un bel nome (e lascia che anche le entità vengano rinominate) e quindi crea una voce in plants.yaml con le entità corrette

Leave a Reply

4 Comments

JSJon Scaife

Ciao
sì, In realtà ora utilizzo io stesso i ripetitori ESP32 poiché sono in grado di utilizzare la modalità "passiva" E raccogliere i dati della batteria.
Se hai un USB dispositivo bluetooth quindi puoi accoppiare i dispositivi MiFlora direttamente a quello prima e poi quando imposti l'ESP32 invierà le informazioni in HA e verrà visualizzato automaticamente per le entità corrette

È necessario utilizzare il codice come descritto nella sezione "Estensione dell'intervallo"..
È inoltre necessario che sia installata l'integrazione "Bluetooth Low Energy Monitor". (tramite HACS)

Se non hai un USB Bluetooth quindi c'è un modo per far apparire i dispositivi in ​​​​Bluetooth Low Energy Monitor. Non ricordo il link dove l'ho letto, ma penso che faccia parte del Wiki Bluetooth Low Energy Monitor o delle FAQ

Se lo fai in questo modo, non è necessario utilizzare lo YAML manuale utilizzato da Barry. Il suo post è di 2020 - Penso che prima che Bluetooth Low Energy Monitor potesse farlo o forse prima ancora che esistesse.

rispondere
TTony

Ciao, grazie per aver pubblicato questa fantastica soluzione.
Il gateway Bluetooth esp32 può trasmettere dati a più di un dispositivo Bluetooth o è necessario fornire un ESP 32 per ogni dispositivo Bluetooth di cui vogliamo estendere la portata?

rispondere
JSJon Scaife

Ciao Tony
L'ESP trasmetterà i dati per qualsiasi dispositivo BT entro il raggio, credo, anche se il mio è attualmente utilizzato solo per 1 Dispositivo BT non posso confermare 100% — ma questa è certamente la mia comprensione

rispondere