Creare un sensore di livello del pellet per una stufa e integrarlo su Home Assistant

Nel precendete articolo ho raccontato come sono riuscito a domotizzare una stufa a pellet Thermorossi Mon Amour integrandola con Home Assistant. Quelle che però ancora mancava era la possibilità di conoscere il livello di pellet in tempo reale. Ho così deciso di realizzare un sensore in modo da poter mostare la percentuale di pellet presente nella stufa e inviare questa informazione ad Home Assitant.

Ho utilizzato un esp8266 D1 Mini Tasmotizzato, dove ho collegato un sensore VL53L0X che grazie ad un modulo laser riesce a misurare la distanza che si frappone tra lui e il primo ostacolo. Ho aggiunto anche un display oled SSD1306 su cui visualizzare la percentuale di pellet ancora rimanente. Il tutto alimentato da un covertitore 220VAC-5VDC HLK-PM01.

ESP 8266 D1 Mini

 

VL53L0X

 

SSD1306

 

HLK-PM01

 

Una volta assemblato il tutto, ho posizionato il sensore VL53L0X sulla griglia posta sopra il serbatoio del pellet, rivolgendolo verso il basso, in modo da misurare la distanza che lo separa dal pellet. Più la distanza sarà breve e più il serbatoio sarà considerato pieno. Contrariamente, più sarà lunga la distanza e più il serbatoio sarà considerato vuoto.

Il sensore VL53L0X e il display SSD1306 utilizzano entrambi il bus I2C per comunicare con il D1 Mini per cui vanno collegati in parallelo ai pin D1 e D2 del D1 Mini, utilizzando i pin relativi ai segnali SCL e SDA (come riportato sullo schema in alto).

Tasmotizzare il D1 Mini

Come dicevo prima, sul D1 Mini ho installato il custom firmware Tasmota v9.2.0. Ho compilato manualmente firmware aggiungendo il supporto per il display SSD1306 e per il sensore VL53L0X. Per fare questo basta aggiungere le seguente righe nel file user_config_override.h:

#define USE_DISPLAY
#define USE_DISPLAY_SSD1306
#define USE_VL53L0X

Caricarto il firmware sul D1 Mini, l’ho configurato come modulo generico andando ad assegnare ai pin D1 e D2 rispettivamente le funzioni I2C SDA e I2C SDL.

Dal menù “Impostazioni / MQTT” ho inoltre impostato il topic che deve essere utilizzato per trasmettere le informazioni via mqtt: tasmota_pellet

A questo punto se tutto è collegato nel modo giusto, possiamo verificare che il D1 Mini veda correttamente sia il display SSD1306 e sensore VL53L0X. Per fare questo, dall’intefaccia web di Tasmota ci posizioniamo sulla funzione di Console e impariamo il comando I2CSCAN. In questo modo dovrebbero comparire a video gli indirizzi (0x29 e 0x3c) dei due componenti presenti sul bus I2C:

stat/tasmota_pellet/RESULT = {"I2CScan":"Device(s) found at 0x29 0x3c"}

Verificato che i due componenti sono riconosciuti correttamente passo a inizializzare il display con seguenti comandi sempre da Console:

DisplayAddress 0x3c
DisplayModel 2
DisplayDimmer 100
DisplayMode 0

Imposto a 10 secondi il periodo di invio dati relativi alla telemetria e imposto a zero il numero di decimali che dovranno essere gestiti nelle operazioni matematiche.

TelePeriod 10
CalcRes 0

Adesso definisco le variabili MEM1 e MEM2 che andranno ad indicare rispetivamente la distanza minima e massima misurabile dal sensore per considerare il serbatoio pieno e vuoto:

  • MEM1: distanza misuarata dal sensore per considerare il livello del pellet al 100% (nel mio caso ho impostato 50 millimetri)
  • MEM2: distanza misuarata dal sensore per considerare il livello del pellet allo 0% (nel mio caso ho impostato 300 millimetri)
Mem1 50
Mem2 300

Adesso definisco ed attivo la Rule1 per convertire la distanza misurata dal sensore nella percentuale di capienza e la pubblico via mqtt sul topic tele/tasmota_pellet/PERCENT in modo che Home Assistant possa raccogliere il valore:

Rule1
  ON tele-VL53L0X#distance DO Backlog var1 %value%; event checklimit=%value%; event senddistance; ENDON
  ON event#checklimit>%mem2% DO var1 %mem2% ENDON
  ON event#checklimit<%mem1% DO var1 %mem1% ENDON
  ON event#senddistance DO SCALE1 %var1%, %mem1%, %mem2%, 100, 0 ENDON
  ON event#senddistance DO event pubdata=%var1% ENDON
  ON event#senddistance DO event dispgr=%var1% ENDON
  ON event#pubdata DO publish tele/tasmota_pellet/PERCENT %var1% ENDON
 
Rule1 1

Come ultima cosa definisco la seconda rule che si occupa di mostrare sul display il livello di pellet:

Rule2
  ON event#pubdata=%var2% DO BREAK
  ON event#pubdata DO var2 %value% ENDON
  ON event#pubdata DO DisplayText [zx1y1u127:63:5] ENDON
  ON event#pubdata DO Backlog DisplayText [c5l2f0s2p-3]%var1%; DisplayText[c5l3f0s2p-3]% ENDON
  ON event#dispgr=%var3% DO BREAK
  ON event#dispgr DO var3 %value% ENDON
  ON event#dispgr&gt;90 DO DisplayText [x1y1U127:63:5] BREAK
  ON event#dispgr&gt;80 DO DisplayText [x1y1U114:63:5] BREAK
  ON event#dispgr&gt;70 DO DisplayText [x1y1U101:63:5] BREAK
  ON event#dispgr&gt;60 DO DisplayText [x1y1U89:63:5] BREAK
  ON event#dispgr&gt;50 DO DisplayText [x1y1U76:63:5] BREAK
  ON event#dispgr&gt;40 DO DisplayText [x1y1U63:63:5] BREAK
  ON event#dispgr&gt;30 DO DisplayText [x1y1U50:63:5] BREAK
  ON event#dispgr&gt;20 DO DisplayText [x1y1U37:63:5] BREAK
  ON event#dispgr&gt;10 DO DisplayText [x1y1U24:63:5] BREAK
  ON event#dispgr&gt;5 DO DisplayText [x1y1U12:63:5] BREAK
  ON event#dispgr=0 DO DisplayText [x1y1u127:63:5] BREAK
 
Rule2 1

A questo punto se tutto è stato fatto nel modo corretto dovremmo poter visualizzare sul display il livello di pellet presente nel serbatoio della stufa.

Configuriamo Home Assistant

Per far si che Home Assistant possa mostraci il livello di pellet della stufa, dobbiano andare a definire manulmente nel file configuration.yaml un’entità di tipo sensore:

sensor:
  - platform: mqtt
    name: pellet_percentuale
    state_topic: "tele/tasmota_pellet/PERCENT"
    unit_of_measurement: "%"
    availability_topic: "tele/tasmota_pellet/LWT"
    payload_available: "Online"
    payload_not_available: "Offline"

Definito il sensore possiamo riavviare Home Assistant in modo che si accorga della modifica eseguita sul file di configurazione.

A questo punto sarà possibile definire una scheda sull’interfiaccia Lovelace di Home Assistant che ci permetterà di mostrare il livello di pellet presente nella stufa.

 

 

 

 

 

8 pensieri su “Creare un sensore di livello del pellet per una stufa e integrarlo su Home Assistant

  1. Complimenti per l’ottima guida, voglio provare a farlo anche io, solo che andrà integrato in openHAB.
    Solo una domanda, con il sensore laser hai dei problemi di lettura visto che la superficie “di misura” è irregolare?

  2. ciao, c’è una distanza minima massima dal lettore al fondo? avendo una Slim Extraflame ho serbatoio da 20kg stretto e lungo, volevo crearmi il sensore visto che di pronto non ce nulla e mi chiedevo se ci fosse un limite

  3. Ciao, sto provando a realizzare il progetto, vorrei però che ad home assistant venga inviato direttamente il valore della distanza letta dal sensore senza calcoli in modo da effettuare la taratura pieno vuoto e la scalatura direttamente su home assistant; stessa cosa per il display, vorrei che mi mostri solo il valore della distanza letta senza grafico in quanto lo userei solo per diagnostica; come potrei modificare le due regole?

    Per la rule 1 forse potrebbe andare bene una cosa del genere?

    Rule1
    ON tele-VL53L0X#distance DO Backlog var1 %value%; event senddistance; ENDON
    ON event#senddistance DO event pubdata=%var1% ENDON
    ON event#senddistance DO event dispgr=%var1% ENDON
    ON event#pubdata DO publish tele/tasmota_pellet/VALUE %var1% ENDON

    Rule1 1

    Per la 2 invece come si potrebbe fare?
    Sono proprio alle prime armi con l’ESP, è la prima volta che metto mano su apparati di questo genere.
    Grazie mille.

  4. Ciao @Riccardo,
    sono passati diversi anni da quando ho realizzato questo progetto e solo in quel momento mi sono interessato alle Rule di Tasmota adesso non ricordo bene come funzionano, magari per approfondire dai un’occhiata direttamente alla documentazione di Tasmota.

    Comunque se non ricordo male la distanza viene inviata direttamente senza fare niente, quindi dovresti trovala direttamente tra i sensori di Home Assistant.

    A senso le rule le farei cosí ma non ti garantisco che funzionino correttamente

    Rule1
    ON tele-VL53L0X#distance DO Backlog var1 %value%; event senddistance; ENDON
    ON event#senddistance DO event pubdata=%var1% ENDON
    ON event#pubdata DO publish tele/tasmota_pellet/VALUE %var1% ENDON

    Rule1 1

    Rule2
    ON event#pubdata=%var1% DO BREAK
    ON event#pubdata DO var2 %value% ENDON
    ON event#pubdata DO DisplayText [c5l2f0s2p-3]%var1%;

    Rule2 1

  5. Ciao @lejubila, ok grazie faccio qualche prova e ti faccio sapere come va; comunque sono andato avanti e ti confermo che in effetti tasmota visualizza la lettura nella home dell’interfaccia web semplicemente collegando il sensore e configurando i due pin i2c (ovviamente il firmware deve essere il sensor oppure compilato manualmente con l’integrazione sensor) e una volta dati i parametri per la connessione MQTT home assistant rileva il dispositivo tasmota mediante la sua integrazione nativa ed è già in grado di ricevere diversi dati telemetrici di sistema (firmware, segnale wifi, ip e altro) tra cui anche la distanza letta dal sensore; quindi per il grosso di quello che mi serve sono già apposto senza nessuna rule; il display per me sarebbe un plus farò un po’ di tentativi. Grazie mille per l’aiuto.

  6. io lho ideato questo allarme gia 4 anni orsono poi ho fatto stop per mancanza di fondi e funziona benissimo e funziona con le pile ciao a tutti ermanno baricca

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.