Quanta concorrenza nelle automazioni serve a Home Assistant per il controllo di tutta la casa?

Eva Wong è la Technical Writer e smanettatrice residente di ZimaSpace. Una geek da sempre con una passione per homelab e software open-source, si specializza nel tradurre concetti tecnici complessi in guide accessibili e pratiche. Eva crede che l'auto-ospitare debba essere divertente, non intimidatorio. Attraverso i suoi tutorial, dà potere alla comunità di demistificare le configurazioni hardware, dalla costruzione del loro primo NAS al dominio dei container Docker.

Home Assistant non ha bisogno di un numero di concorrenza valido per tutta la casa; ogni automazione necessita di una sovrapposizione sufficiente per la propria frequenza di attivazione e durata delle azioni, senza violare l'ordine.

Dieci stanze e duecento entità non implicano dieci o duecento esecuzioni parallele delle automazioni. La quantità utile è specifica per ogni flusso di lavoro: con quale frequenza può attivarsi, per quanto tempo rimane attiva una singola esecuzione, se le esecuzioni successive sostituiscono quelle precedenti e quanto lavoro parallelo il dispositivo o servizio di destinazione è in grado di accettare. Parti da uno quando l'ordine è importante, quindi aggiungi concorrenza solo quando il lavoro realmente sovrapposto è indipendente e sensibile alle scadenze.

Stima della sovrapposizione necessaria in base alla frequenza di attivazione e alla durata dell'esecuzione

Una prima stima di pianificazione è data dal prodotto tra frequenza di arrivo e durata media dell'attività. Se un'automazione si attiva una volta ogni dieci secondi e normalmente termina in un secondo, la richiesta tipica di sovrapposizione è molto inferiore a uno. Se i picchi producono cinque attivazioni al secondo mentre ogni esecuzione attende due secondi, la richiesta simultanea può arrivare a circa dieci, a meno che il flusso di lavoro non accorpi, riavvii o accodi tali eventi.

La discussione della community sulle modalità delle automazioni di Home Assistant mostra perché la concorrenza sia una scelta comportamentale, non una formula basata sul numero di dispositivi. Singola, riavvio, accodata e parallela rappresentano risposte diverse alla domanda: «Cosa dovrebbe accadere quando arriva un'altra attivazione prima che questa esecuzione sia terminata?»

Usa la formula solo come stima del carico di lavoro, non come raccomandazione per un'impostazione. La variabilità dei picchi, le attese prolungate, le conferme dei dispositivi e i timeout degli errori possono rendere le esecuzioni più lente molto più lunghe della media. Registra anche la durata del novantacinquesimo percentile o la peggiore durata normale, perché la concorrenza viene consumata dalle esecuzioni che rimangono attive più a lungo.

L'ordine e l'idempotenza impongono un limite più rigido della CPU

Alcune azioni che coinvolgono tutta la casa sono logicamente rischiose in parallelo anche quando il server dispone di CPU in abbondanza. Tapparelle motorizzate, serrature delle porte, regolazioni progressive del volume multimediale, valvole d'irrigazione e script con stato possono ricevere comandi contraddittori se diverse esecuzioni indipendenti si sovrappongono. In questi casi, il comportamento accodato o con riavvio può essere più corretto dell'esecuzione parallela.

Una spiegazione pratica delle automazioni di Home Assistant descrive la catena attivazione-condizione-azione come un modello di controllo deterministico. La concorrenza dovrebbe preservare questo determinismo, non massimizzare il numero di copie che l'host è tecnicamente in grado di pianificare.

Chiediti se due esecuzioni possano essere eseguite in qualunque ordine producendo comunque lo stesso risultato sicuro. Se la risposta è no, non aumentare il parallelismo per risolvere la latenza: accorcia l'esecuzione, accorpa gli input o serializza le operazioni sul dispositivo di destinazione. Una maggiore concorrenza non aumenta il throughput quando il dispositivo a valle accetta un solo comando significativo alla volta.

I servizi a valle definiscono il limite utile

Anche le esecuzioni indipendenti finiscono per convergere su risorse finite: un coordinatore Zigbee, un broker MQTT, un'API del fornitore, un servizio di notifiche, un database, un canale Wi-Fi o un dispositivo fisico. Un'analisi indipendente della concorrenza di Home Assistant osserva che le istanze delle automazioni sono attività e che le azioni dei servizi possono sospendersi durante l'I/O esterno; pertanto, pianificare più esecuzioni non fa elaborare più velocemente le richieste al sistema a valle. Le esecuzioni aggiuntive possono soltanto creare nuovi tentativi, accodamento, limitazioni di frequenza o tempi di completamento più lunghi.

ZimaSpace descrive lo stesso limite nella scalabilità dei worker basata sugli eventi: la profondità della coda può giustificare l'aggiunta di worker solo finché il percorso a valle non diventa la risorsa limitante. La concorrenza delle automazioni di Home Assistant dovrebbe fermarsi allo stesso tipo di confine del servizio.

Per un picco di illuminazione locale, misura quante chiamate simultanee al servizio il coordinatore riesce ad assorbire senza conferme ritardate o nuovi tentativi. Per le notifiche, rispetta i limiti di frequenza del provider. Per le azioni cloud, considera il comportamento dei timeout. Il limite massimo corretto è il più basso tra quelli imposti dalla correttezza, dalla capacità a valle e dall'obiettivo di latenza, non il numero più alto che la CPU può avviare.

Usa soglie invece di un numero universale

Mantieni la concorrenza a uno per i flussi di lavoro in cui una nuova attivazione sostituisce l'intento precedente o in cui l'ordine deve essere preservato. Usa una coda ridotta quando ogni evento deve essere eseguito prima o poi, ma la destinazione è seriale. Usa esecuzioni parallele solo per azioni indipendenti e idempotenti il cui servizio a valle dispone di margine misurato. Aumenta il limite di un'unità alla volta, osservando l'età dell'esecuzione più vecchia e la latenza di completamento.

Un caso del forum di Home Assistant relativo a integrazioni cloud che rallentano il sistema mostra perché le attese esterne prolungate possono aumentare il lavoro attivo. È un forte avvertimento contro il dimensionamento del massimo basato soltanto sul comportamento di una connessione WAN stabile, quando la stessa automazione include chiamate verso Internet.

Una regola pratica per fermarsi è: nessun evento obbligatorio perso, nessuna coda più vecchia della scadenza domestica, nessuna violazione dell'ordine sul dispositivo di destinazione e nessun arretrato in crescita durante il peggiore picco normale. Se queste condizioni sono rispettate, una maggiore concorrenza non offre alcun valore all'utente. Se falliscono, accorcia prima la fase lenta o separa il lavoro indipendente; aumenta il limite solo quando la sovrapposizione restante è realmente sicura.

Esegui un test di picco prima di modificare il limite

Crea un picco di eventi rappresentativo invece di un ciclo infinito sintetico. Registra il numero di attivazioni, le esecuzioni attive, quelle in coda, l'età dell'esecuzione più vecchia, la durata delle azioni, le conferme dei dispositivi, il carico della CPU, il ritardo del ciclo degli eventi se disponibile e gli errori dell'integrazione di destinazione. Ripeti il test con un'impostazione di concorrenza superiore e una inferiore, mantenendo invariato lo stesso picco di input.

Un recente articolo sull'architettura local-first sottolinea che l'affidabilità di Home Assistant dipende dal mantenere limitati i percorsi di controllo critici, invece di aggiungere complessità ovunque. La concorrenza è uno di questi limiti: dovrebbe assorbire la sovrapposizione normale senza trasformare una raffica di eventi in una contesa che coinvolga tutta la casa.

Scegli l'impostazione più bassa che completa il lavoro richiesto entro la scadenza e supera il picco senza una coda in crescita. A seconda del flusso di lavoro, potrebbe trattarsi di una singola esecuzione, di una coda breve o di un numero parallelo moderato. Ripeti il test dopo aver aggiunto chiamate cloud, ritardi prolungati o nuovi sensori ad alta frequenza, perché queste modifiche alterano la durata e la frequenza di arrivo anche quando il numero di dispositivi rimane invariato.

Domande frequenti

Il limite predefinito di 10 è un obiettivo di concorrenza consigliato per ogni automazione?

No. Un limite predefinito è un meccanismo di sicurezza, non una raccomandazione di dimensionamento. Molte automazioni funzionano correttamente con una sola esecuzione, mentre altre richiedono una coda limitata più piccola o più grande in base al proprio carico di lavoro e al sistema a valle.

La modalità parallela rende Home Assistant più veloce?

Solo quando le esecuzioni sono indipendenti e il collo di bottiglia può elaborarle contemporaneamente. Se la destinazione è seriale, soggetta a limiti di frequenza o sensibile all'ordine, la modalità parallela può aumentare le attese e gli errori invece di ridurre la latenza.

Ogni stanza dovrebbe avere una propria automazione per ridurre la concorrenza?

Non necessariamente. Suddividere la logica può migliorare la gestione, ma può anche creare più processi indipendenti che scrivono sullo stesso dispositivo o elemento di supporto. La struttura dovrebbe seguire i confini di controllo e i requisiti di ordinamento, non l'obiettivo di massimizzare il numero di automazioni.

Hub Tecnologico e AI

Altro da leggere

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.