Da dove parto
Questa guida non spiega come collegare il robot a Home Assistant: parte da quando il robot è già presente fra i dispositivi, con una sua entità vacuum. Racconta la scheda «Robot» del mio dashboard, che ho riscritto una volta, e i due avvisi che gli ho affiancato.
Dell'entità vacuum Home Assistant sa fare le cose di base: avvia, ferma, mette in pausa, rimanda alla base, localizza. Un robot con base come il mio ne espone molte di più: pulsanti (ripristino filtro, spazzole, asciugatura manuale), interruttori, impostazioni, sensori di usura per ogni materiale.
Prima versione: solo quello che riconoscevo
Il primo script cercava nel registro le entità del robot e le riconosceva per parola chiave: batteria, filtro, spazzola principale, spazzola laterale, mop, sensori, area pulita, tempo di pulizia, stato della base, serbatoio dell'acqua, sacchetto, errore. Quello che non rientrava nelle parole cercate restava fuori dalla scheda. Lo script stampa a video l'elenco completo delle entità del dispositivo e quale usa per ogni voce, e dice «non trovata» per quelle che mancano.
Seconda versione: tutte le entità, per tipo
Il secondo script, espandi-dreame.ps1, sostituisce interamente la scheda e prende tutte le entità del dispositivo, non solo quelle riconosciute. Le organizza in base al dominio, che dice già a cosa servono:
- Comandi: il robot stesso, con i pulsanti di avvio, pausa, stop, rientro alla base e localizzazione, e tutti i pulsanti
button.*(ripristino filtro, spazzole e simili). - Interruttori: tutti gli
switch.*(per esempio blocco bambini o potenziamento dei tappeti). - Impostazioni: i
select.*e inumber.*(velocità di aspirazione, livello dell'acqua, programmi). - Stato: tutti i
binary_sensor.*(serbatoio dell'acqua installato, robot bloccato e così via). - Statistiche: tutti i
sensor.*(batteria, aree pulite, tempo, usura di ogni materiale). - Mappa: la
camera.*, se il robot ne espone una.
$tutte = @($reg.data.entities | Where-Object { $_.device_id -eq $vac.device_id -and -not $_.disabled_by })
# per dominio, senza nomi indovinati
$comandi = $tutte | Where-Object { $_.entity_id -like 'button.*' }
$interruttori = $tutte | Where-Object { $_.entity_id -like 'switch.*' }
$impostazioni = $tutte | Where-Object { $_.entity_id -match '^(select|number)\.' }
$stato = $tutte | Where-Object { $_.entity_id -like 'binary_sensor.*' }
$statistiche = $tutte | Where-Object { $_.entity_id -like 'sensor.*' }
$mappa = $tutte | Where-Object { $_.entity_id -like 'camera.*' } | Select-Object -First 1
Le due metà delle statistiche, che prima stavano in due riquadri, le ho unite in uno solo, in seconda colonna, con un altro piccolo script: in questa scheda non serve che le altezze siano allineate.
I nomi dei pulsanti nella scheda restano quelli inglesi dell'integrazione (come «Backup Saved Map», «Base Station Self Repair», «Manual Drying»): sono quelli veri delle entità e non li ho tradotti.
I due avvisi
Anche qui gli script leggono le entità vere. Gli avvisi passano dallo script avviso e hanno il menu dei canali nella scheda «Messaggi» (vedi la guida sui messaggi).
- Robot: materiale di consumo in esaurimento. Guarda il valore più basso fra tutti i sensori che finiscono con
_left(filtro, spazzole, mop, sensori e simili) e parte se è sotto la soglia. La soglia predefinita è il 15% e si cambia con-SogliaConsumabili. Al massimo un avviso a settimana. - Robot: errore o bloccato. Parte se il robot va in errore o resta bloccato, al massimo uno ogni 10 minuti.
La logica «il più basso fra tutti» è la stessa che uso per la stampante e per le telecamere Blink: un avviso solo, invece di uno per ogni componente.