Salta al contenuto principale
Smart Sleep: la mia automazione per spegnere Music Assistant al momento giusto!
  1. Articles/

Smart Sleep: la mia automazione per spegnere Music Assistant al momento giusto!

Indice dei contenuti

Un recente aggiornamento dell’app Sonos mi ha portato a fare una scoperta fantastica: Music Assistant! Ed è stata una vera e propria benedizione, specialmente per un problema che avevamo da tempo.

Ricordate la funzione “auto sleep” di Sonos? Quella che, una volta attivata, spegneva la musica dopo un certo periodo? Era super comoda, soprattutto per noi genitori che la usavamo per aiutare i bambini ad addormentarsi, specialmente in quelle serate in cui serviva un po’ di calma extra. Il problema? La mia dolce metà a volte si dimenticava di impostare il timer e la musica andava avanti tutta la notte!

Per aumentare il WAF (o HAF, come preferite) ho deciso di prendere in mano la situazione. Visto che in Music Assistant la funzione di auto sleep non c’è, mi sono rimboccato le maniche e ho creato un’automazione su misura. E ho cercato di renderla ancora più “smart” rispetto all’opzione di Sonos, facendo sì che la musica si spenga solo alla fine della canzone in riproduzione. Così non c’è il rischio di spegnimenti bruschi a metà brano!

Ecco come funziona:

  • Trigger: Il media player è in riproduzione da 1 ora e 15 minuti.

  • Condizione: L’ora attuale è tra le 19:30 e le 07:00 del mattino.

  • Azioni:

    • Attendere un massimo di 15 minuti che la canzone finisca (cambio di titolo).

    • Spegnere la musica!

Codice automazione
#

E per i più tecnici, ecco il codice YAML dell’automazione:

	description: ""
	mode: parallel
	triggers:
	  - alias: nessie_play
	    trigger: state
	    entity_id:
	      - media_player.nessie
	    for:
	      hours: 1
	      minutes: 15
	      seconds: 0
	    id: nessie_play
	    enabled: true
	    to: playing
	conditions:
	  - condition: time
	    after: "19:30:00"
	    before: "07:00:00"
	    enabled: true
	actions:
	  - wait_for_trigger:
	      - trigger: state
	        entity_id:
	          - media_player.nessie
	        attribute: media_title
	    timeout:
	      hours: 0
	      minutes: 15
	      seconds: 0
	      milliseconds: 0
	  - action: media_player.media_stop
	    metadata: {}
	    data: {}
	    target:
	      device_id: 9bcc2148607323743c51c688b54a7e8d
	max: 10

Resilienza in caso di reboot: la soluzione con un “timer aiutante”
#

La soluzione che vi ho mostrato è un buon punto di partenza, ma c’è un dettaglio importante da considerare: cosa succede se Home Assistant si riavvia? Purtroppo, il timer del trigger basato sullo stato del media player andrebbe perso, vanificando la nostra automazione. Per rendere la nostra soluzione veramente robusta e a prova di riavvio, possiamo ricorrere a un “timer aiutante” (o helper).

Gli helper di Home Assistant, in particolare i timer, ci permettono di gestire i tempi in modo più indipendente e, soprattutto, di mantenere lo stato anche dopo un riavvio. L’importante è ricordarsi di attivare l’opzione “Ripristina stato al riavvio” nelle impostazioni del timer helper che andremo a creare.

Questo significa che la nostra automazione avrà ora due “eventi” principali (trigger) da monitorare. Il primo sarà l’avvio della musica sul player, che darà il via al nostro timer helper. Il secondo trigger sarà lo scadere di questo timer, che ci segnalerà il momento di spegnere la musica. Per mantenere tutto pulito e gestibile in un’unica automazione, useremo gli id dei trigger, permettendoci di differenziare le azioni in base a quale evento ha attivato l’automazione.

Ecco come si presenta il codice YAML della nostra automazione migliorata:

	alias: Auto Sleep Timer Sonos
	description: ""
	triggers:
	  - alias: nessie_play
	    trigger: state
	    entity_id:
	      - media_player.nessie
	    id: nessie_play
	    enabled: true
	    to: playing
	  - trigger: event
	    event_type: timer.finished
	    event_data:
	      entity_id: timer.timer_sleep_nessie
	    id: Timer-nessie
	conditions:
	  - condition: time
	    after: "19:30:00"
	    before: "07:00:00"
	    enabled: true
	actions:
	  - choose:
	      - conditions:
	          - condition: trigger
	            id:
	              - nessie_play
	        sequence:
	          - if:
	              - condition: state
	                entity_id: timer.timer_sleep_nessie
	                state: idle
	            then:
	              - action: timer.start
	                metadata: {}
	                data: {}
	                target:
	                  entity_id:
	                    - timer.timer_sleep_nessie
	      - conditions:
	          - condition: trigger
	            id:
	              - Timer-nessie
	        sequence:
	          - wait_for_trigger:
	              - trigger: state
	                entity_id:
	                  - media_player.nessie
	                attribute: media_title
	            timeout:
	              hours: 0
	              minutes: 15
	              seconds: 0
	              milliseconds: 0
	          - action: media_player.media_stop
	            metadata: {}
	            data: {}
	            target:
	              device_id:
	                - ff2bbd4dc403c6f1cc829328f8dc5022
	mode: parallel
	max: 10

Related

Il mio viaggio Open Source nel mondo della musica
Integrazione Daikin Madoka in Home Assistant: la soluzione definitiva con ESPHome!
Migliora l'aria del tuo ufficio (o di casa) con un sensore DIY e Home Assistant