SCOPI DEL PROGETTO:
CONCETTI AFFRONTATI:
|
COMPONENTI SOFTWARE UTILIZZATE:
COMPONENTI FISICI UTILIZZATI:
|
PROGETTO INDICATO a UTENTI CON ISTALLAZIONE:![]() |
|
NOTE E DISCLAIMER
|
|
Revisione progetto: 1.2 |
Abstract
In una domotica personale basata su Home Assistant, realizzare un sesore “template” che determini il proprio stato in base ad altre condizioni (a partire da altre entità, per esempio) è un gioco da ragazzi. Lo abbiamo spiegato abbastanza in dettaglio qui.
Quello che invece andiamo illustrando in questo progetto è l’adozione dei sensori Bayesiani, ovvero dei sensori i quali assumano il loro stato (binario, “on/off”) in funzione di un insieme di considizioni a contorno. Si tratta di una tecnica molto elegante che, per essere padroneggiata al meglio, dev’essere compresa alla radice.
Ecco perché spenderemo forse più tempo nel cercare di spiegare il funzionamento di questa tecnica che all’applicazione pratica in sé – la quale, una volta fatte proprie le basi, è alla fine “abbastanza” semplice da applicare.
Si parte
Assunti
Com’è naturale che sia, si assume di avere a bordo di Home Assistant – già installato e funzionante – una serie di integrazioni che diano vita a un certo numero di entità di diversa natura (sensori, luci, switch e così via).
Inoltre, a scopo di esempio daremo per assunta come attiva l’integrazione “Sun” (solitamente attiva di default sull’HUB); latitudine e longitudine di “casa” (impostata presso il menu “Zone” dell’HUB) devono essere altresì corrette.
Come funziona Bayesian

Tutto nasce dall’applicazione del teorema di Bayes, un principio matematico enunciato dal reverendo Thomas Bayes (1702-1761) che descrive come aggiornare la probabilità di un evento alla luce di nuove informazioni. Tipicamente, Bayes si applica in contesti in cui bisogna rivedere una probabilità iniziale (a priori) considerando dati aggiuntivi. Viene utilizzato in molti campi, come medicina (diagnosi basate su test), intelligenza artificiale (apprendimento automatico), finanza (valutazione dei rischi) e scienze forensi (analisi delle prove). In generale, serve per migliorare le previsioni quando le informazioni disponibili cambiano.
Bene: noi lo useremo in domotica personale.
Immaginiamo di aver perso le chiavi di casa. All’inizio pensi che potrebbero essere in cucina o in salotto, perché di solito le lasci in quei posti. Poi inizi a cercare e in cucina non ci sono. A questo punto, la probabilità che siano in salotto aumenta, perché hai escluso una possibilità.
Bayes funziona proprio così: parte da una o più probabilità iniziale (dove di solito si trovano le chiavi) e la aggiorna man mano che ottieni nuove informazioni (hai controllato un posto e non erano lì).
Un altro esempio.
Supponiamo di fare un test per una malattia.
- Il test è positivo nel 90% dei casi se la persona è malata.
- Solo l’1% della popolazione ha la malattia.
- Il test può sbagliare ed essere positivo nel 5% dei casi anche per chi non è malato.
Se una persona risulta positiva, qual è la probabilità che sia davvero malata? Applicando il teorema di Bayes si scoprirà quale sia la probabilità.
Nel pratico
Immaginiamo di aver bisogno di un sensore binario (“on/off”) che indichi quando siamo o non siamo a letto (magari per attivare delle automazioni come per esempio l’attivazione dell’allarme notturno, o altro). Al di là di usare altre tecniche, questo del teorema di Bayes può essere un’ottima soluzione.
Analizziamo lo scenario. C’è da domandarsi “quando si è a letto” quali siano le possibili condizioni da tenere in considerazione (ovviamente sono solo esempi):
- è probabile che il sole sia sotto l’orizzonte;
- è altamente probabile che il sensore di presenza posto in camera da letto ci rilevi come “presenti”;
- per lo più il sensore di movimento in sala e in cucina non dovrebbe rilevarci;
- forse potrebbe esserci accesa una delle due abat-jour, o entrambe;
- se la tapparella della camera è abbassata, è molto probabile che siamo a letto
e altro.
Non è difficile capire che calare condizioni come “è probabile“, “per lo più“, “forse” in un sensore template non sia affatto facile. Appunto per questo vengono in nostro aiuto i sensori Bayesiani.
Esempio concreto
Rimaniamo nel solco tracciato sopra, ovvero quello volto a creare un sensore “di sonno” legato alle variabili proposte nell’elenco.
Un sensore Bayesiano si definisce tramite configurazione YAML con una modellazione come segue:
binary_sensor: - platform: bayesian name: #NOME DEL SENSORE unique_id: #ID CASUALE generato magari con https://www.uuidgenerator.net/ prior: #la probabilità a priori dell'evento (da 0 a 1 con avanzamenti decimali). In qualsiasi momento (ignorando tutte le influenze esterne), quanto è probabile che questo evento si verifichi? probability_threshold: # Soglia di probabilità. (da 0 a 1 con avanzamenti decimali). 1 indica probabilità "certa" al 100% observations: #lista di osservazioni - platform: state entity_id: #entità da osservare prob_given_true: #Da 0 a 1 con avanzamenti decimali. Supponendo che il binary_sensor bayesiano sia vero, la probabilità che si verifichi lo stato dell'entità. prob_given_false: #Da 0 a 1 con avanzamenti decimali. Supponendo che il binary_sensor bayesiano sia falso, la probabilità che si verifichi lo stato dell'entità. to_state: #Lo stato da analizzare
Raccontata così – specie il blocco observations – la cosa si fa nebulosa.
La prima parte aiuta a modellare il sensore binario derivante da quanto siamo facendo:
Campo | Spiegazione |
prior | La probabilità “a priori” dell’evento. In qualsiasi momento (ignorando tutte le influenze esterne), quanto è probabile che l’evento (in questo caso “che siamo a letto“) in assoluto si verifichi? |
probability_threshold | La probabilità a posteriori in cui il sensore dovrebbe attivarsi. Utilizzare valori più alti per ridurre i falsi positivi (e aumentare i falsi negativi). Nota: se la soglia è superiore a quella a priori, lo stato predefinito sarà disattivato. |
è però la seconda parte a fare la vera differenza. Scopriamo perché con ulteriori esempi.
Configurazione completa
Per capire ancora meglio, proponiamo un esempio fatto e finito, sempre rimanendo nel solco dell’esempio del sensore “sonno”.
Ipotizziamo di avere in casa e integrati su Home Assistant:
- due sensori di movimento, uno in sala e uno in cucina, chiamati rispettivamente binary_sensor.salotto e binary_sensor.cucina;
- un sensore di presenza in camera, chiamato binary_sensor.presenza_camera;
- due abat-jour chiamate light.letto_sinistro e light.letto_destro;
- un attuatore per tapparelle chiamato cover.camera_letto;
- due sensori derivanti dall’uso di Home Assistant Companion che indichino se i telefoni sono in carica o meno (sensor.smartphone_marito e sensor.smartphone_marito).
Vediamo la configurazione completa (scorrere orizzontalmente per leggere tutte le indicazioni):
binary_sensor: - platform: bayesian name: "in_bed" unique_id: "172b6ef1-e37e-4f04-8d64-891e84c02b43" # generated on https://www.uuidgenerator.net/ prior: 0.25 # Passiamo circa 6 ore al giorno a letto (6/24=0,25) probability_threshold: 0.8 # Voglio essere abbastanza sicuro. Quindi imposto l'80% di probabilità observations: - platform: state entity_id: binary_sensor.salotto prob_given_true: 0.05 # Se siamo a letto difficilmente siamo in sala, anche se può capitare. Metto una percentuale del 5%. prob_given_false: 0.2 # Se non siamo a letto, 2/10 del tempo quotidiano lo passiamo in sala to_state: "on" - platform: state entity_id: binary_sensor.cucina prob_given_true: 0.03 # Stesso discorso della sala, ma per la cucina. Solo che qui ci capitiamo ancora meno prob_given_false: 0.1 # Se non siamo a letto, 1/10 del tempo lo passiamo in soggiorno to_state: "on" - platform: state entity_id: binary_sensor.presenza_camera prob_given_true: 0.8 # Se siamo a letto (e non di passaggio), il sensore ci vede almeno l'80% del tempo prob_given_false: 0.1 # Se non siamo a letto, ma di passaggio, la possibilità che siamo a letto è bassa to_state: "on" - platform: state entity_id: sun.sun prob_given_true: 0.7 #Se siamo a letto, è probabile che il sole tramonti, ma nelle mattine d'estate potrei ancora essere a letto. prob_given_false: 0.45 # Se siamo svegli, allora c'è una ragionevole possibilità che il sole sia sotto l'orizzonte, soprattutto in inverno. to_state: "below_horizon" - platform: state entity_id: light.letto_destro prob_given_true: 0.4 # Quando siamo a letto, è possibile che l'abat-jour destra sia accesa prob_given_false: 0.05 # Quando siamo svegli, molto di rado l'abat-jour destra è accesa to_state: "off" - platform: state entity_id: light.letto_sinistro prob_given_true: 0.5 # Quando siamo a letto, è possibile che l'abat-jour destra sia accesa, un po' più della sinistra (per motivi diversi) prob_given_false: 0.05 # Quando siamo svegli, molto di rado l'abat-jour sinistra è accesa to_state: "on" - platform: state entity_id: cover.camera_letto prob_given_true: 0.70 # Quando siamo a letto, quasi certamente le tapparelle della camera sono abbassate prob_given_false: 0.8 # Quando siamo svegli, l'80% del tempo sono aperte to_state: "closed" - platform: template value_template: "{{ is_state('sensor.smartphone_marito','Charging') and is_state('sensor.smartphone_moglie','Charging') }}" prob_given_true: 0.70 # Quando siamo a letto, quasi certamente abbiamo i telefoni in carica prob_given_false: 0.8 # Quando siamo svegli, l'80% del tempo non capita che siano in carica contemporaneamnete
Se si legge con calma, la configurazione (e quindi la logica di funzionamento del tutto) dovrebbe essere abbastanza comprensibile.
In pratica, Bayesian funziona con i “pesi” – ovvero quanto pesa per l’appunto un determinato evento sul calcolo complessivo dello stato del sensore, stato che viene aggiornato realtime col cambiare delle condizioni a contorno prese in analisi.
Conclusioni
L’approccio descritto è estremamente comodo perché permette di mettere in analisi condizioni estremamente diverse (e apparentemente slegate) tra loro, al fine di arrivare a uno stato si/no (“on/off”) utilizzabile nei modi più disparati.
Qui abbiamo descritto come ipoteticamente realizzare un sensore “di sonno”, ma è solo una delle infinite possibilità che Bayesian su Home Assistant offre in domotica. Tutti i dettagli su questa integrazione sono forniti sulla documentazione ufficiale.
Come al solito, il limite è la fantasia.
Questa pagina è redatta, manutenuta e aggiornata dallo staff di inDomus, un gruppo di persone molto diverse tra loro che trovi, per domande e supporto, sul forum e sulla chat del sito. Alcuni link sono taggati in qualità di affiliati Amazon e riceviamo un compenso dagli acquisti idonei, utile al sostenimento del sito, ma le nostre recensioni sono tutte indipendenti e non sponsorizzate. Se ti sei perso, a tua disposizione c'è la mappa. |