Al momento stai visualizzando Notifiche da Deliveroo, Glovo e JustEat in Home Assistant

Notifiche da Deliveroo, Glovo e JustEat in Home Assistant

  • Autore dell'articolo:
  • Categoria dell'articolo:Home Assistant
  • Commenti dell'articolo:4 commenti
  • Ultima modifica dell'articolo:30 Gennaio 2022

Usi Home Assistant ed ordini cibo da asporto da Deliveroo, Glovo o JustEat? Allora questo articolo ti sarà molto utile!

Ti sei mai trovato nella situazione che mentre stai tornando a casa dal lavoro il rider è arrivato e ti chiama mentre sei alla guida? A quel punto devi chiamare chi è è casa per avvisare di uscire a prendere la consegna. Oppure mentre sei a casa dimentichi il tuo telefono da qualche parte e il rider arriva prima che tu sia pronto ad uscire perchè non hai letto le notifiche di avvicinamento…

Non sarebbe comodo essere avvisati tramite gli assistenti vocali di casa e che la notifica arrivi sullo smartphone anche degli altri componenti della famiglia?

E’ esattamente così che è nato questo package!

Se hai letto altri miei articoli sai che colgo l’occasione per mostrarti “un metodo“, oltre che il package stesso. Così potrai applicarlo a molti altri contesti di utilizzo in cui potrebbe essere utile integrare delle notifiche di app che non sono integrabili.

Principio di funzionamento

Con questo package integriamo le notifiche dei tre principali servizi di delivery service in Home Assistant: Deliveroo, Glovo e Justeat. Ma come è possibile farlo? Inviano solo la notifica sul tuo smartphone tramite la loro app… Non ci sono API da integrare. Non esiste niente!

E allora utilizziamo proprio le notifiche che le app inviano sul tuo smartphone, le inviamo ad Home Assistant che le divulgherà tramite lo script multinotify agli altri smartphone e ai dispositivi Alexa!

Lo smartphone su cui arrivano le notifiche da inviare ad Home Assistant può essere solo Android. iPhone, infatti, non permette alle app di accedere alle notifiche che inviano altre app. I dispositivi Apple, però, possono ricevere i messaggi che sono stati raccolti grazie ad un telefono Android.

Configuriamo l’app Home Assistant Companion sul tuo Smartphone

Configuriamo l’app Home Assistant Companion per intercettare le notifiche delle app che ci interessano. Segui questi semplici passi.

Home Assistant Companion app - Configurazioni
1) Accedi a Configurazioni dal menu dell’app
Home Assistant Companion app - App complementare
2) Accedi alla voce App complementare
Home Assistant Companion app - Gestione dei sensori
3) Scorri la paginata e clicca su Gestione dei sensori
Home Assistant Companion app - Sensori di notifica
4) Scorri fino alla sezione Sensori di notifica e clicca sulla voce Ultima notifica
Home Assistant Companion app - abilitazione sensore
5) Abilita il sensore tramite lo switch in alto e restando nella stessa pagina…
Home Assistant Companion app - Consenti elenco
6) Scorrendo verso il basso clicca sulla voce Consenti elenco
Spunta i nomi delle app di Deliveroo, Glovo, JustEat per ricevere le notifiche in Home Assistant
7) spunta le voci: com.deliveroo.orderapp per Deliveroo, com.glovo per Glovo e com.justeat.app.it per JustEat (a seconda di quali di queste app hai installato)

A questo punto tutte le notifiche che le app che hai selezionato mostreranno sul tuo smartphone verranno inviate in un nuovo sensore di Home Assistant!

Rendiamo le notifiche di Deliveroo, Glovo, JustEat e Home Assistant affidabili

Per default le versioni moderne di Android effettuano una ottimizzazione energetica delle app al fine di aumentare la durata della batteria.

Per default, normalmente, lasciano in esecuzione i servizi in background delle app fintanto che le utilizziamo di frequente ma, quando non lo facciamo, i servizi in background vengono sospesi.
Questo comporta l’interruzione della ricezione di notifiche puntuali (e altro, come una geolocalizzazione non costante ed altro ancora).

A titolo puramente esemplificativo sul mio Samsung S8 per effettuare questa opzione devo andare nelle informazioni dell’app da Configurazione di Android -> Applicazioni e cliccare su Home Assistant:

Come rendere affidabili le notifiche di Deliveroo, Glovo, JustEat e Home Assistant

Verificare che le attività in background siano consentite e premere su Ottimizza uso batteria, scegliere l’elenco di tutte le app e disabilitare l’ottimizzazione batteria per l’app. In tal modo i processi in background saranno sempre permessi.

E’ spesso presente anche uno switch che determina il permesso di effettuare operazioni in background, cosa che ovviamente è fondamentale per ricevere le notifiche.

Ripetere questa operazione per le app che devono aggiornarci sullo stato degli ordini di delivery: Deliveroo, Glovo, JustEat, oltre che Home Assistant.

Verifica in Home Assistant

Verifichiamo ora il sensore che è stato creato in Home Assistant.
Lo accediamo da Configurazioni -> Dispositivi e servizi -> App per dispositivi mobili: clicca sul tuo telefono -> 1 dispositivo -> clicca sulla riga del tuo dispositivo.

Nella sezione Sensori compare il sensore sensor.NOME_TELEFONO_ultima_notifica che conterrà sempre l’ultima notifica ricevuta, tra le app abilitate che abbiamo selezionato precedentemente.
(chiaramente all’inizio il valore sarà vuoto)

Sensore ultimo_messaggio che riceverà le notifiche di Deliveroo, Glovo, JustEat in Home Assistant

Il package per le notifiche da Deliveroo, Glovo, JustEat in Home Assistant

Scarica il file zip premendo il tasto sopra, estrai il file contenuto app_notifications.yaml e copialo nella cartella dei tuoi package di Home Assistant.

Se non sai cosa sono i packages fai riferimento a questa sezione della documentazione che spiega come utilizzarli oppure al capitolo “I packages” dell’articolo di Vito Antonucci
Questo package è presente nel mio Repository su GitHub. Se vuoi migliorarlo, estenderlo o correggerlo fai un fork o apri un issue.

A questo punto aprilo con il tuo editor di testo preferito (ti consiglio VSCode!) e dopo l’intestazione modifica la seguente voce:

# Modifica la stringa sensor.tel_henrik_ultima_notifica con il nome del sensore ultima_notifica della tua app
homeassistant:
  customize:
    package.node_anchors:
      entity_id: &notify_entity_id sensor.tel_henrik_ultima_notifica

Nell’ultima riga, dopo &notify_entity_id, sostituisci la stringa sensor.tel_henrik_ultima_notifica con l’entity id del sensore ultima_modifica che abbiamo abilitato prima nell’app companion.

Finito 🙂 Buone appetito!

…ma come al solito non finisce qui: spiego anche il principio di funzionamento, resta ancora un po’ con me!

Come funziona il package?

Gli anchor

All’inizio del package troviamo il seguente codice yaml:

homeassistant:
  customize:
    package.node_anchors:
      entity_id: &notify_entity_id sensor.tel_henrik_ultima_notifica

La sezione homeassistant -> customize -> package.node_anchors è una sezione dummy, ovvero non ha alcun effetto, e serve solo per dichiarare delle chiavi in cui definire gli anchor.

Gli anchor sono la definizione di un frammento di yaml che possiamo in seguito richiamare più volte nel codice e ci permette di non dover scrivere più e più volte lo stesso codice. Se ad esempio cambierai telefono ti basterà modificare l’entity id definito nell’anchor affinché venga utilizzato da tutte le automazioni senza far altro.

In questo caso il nome dell’anchor è &notify_entity_id ed è seguito dal valore, intervallato da uno spazio.

Per richiamarne il valore sarà sufficiente richiamare l’anchor con il suo nome preceduto dall’asterisco: *notify_entity_id . Sarà esattamente come aver scritto il suo valore: sensor.tel_henrik_ultima_notifica .

Se vuoi approfondire l’argomento sugli Anchor ti consiglio caldamente questa lettura

Le automazioni per le notifiche da Deliveroo, Glovo, JustEat in Home Assistant

Prendiamo per esempio la prima automazione, riguardante Deliveroo.

automation:
  #Ricezione notifiche da Deliveroo
  - id: 50188629-f6d0-4120-bef3-704ec7d7b561
    alias: 'App - Notifica - Deliveroo'
    description: "Notifica gli aggiornamenti sugli ordini di Deliveroo tramite Alexa e tutte le app"
    variables:
      ultima_notifica: *notify_entity_id
    trigger:
      - platform: state
        entity_id: *notify_entity_id
        attribute: post_time
    condition:
      - alias: "Solo se l'app è Deliveroo"
        condition: state
        entity_id: *notify_entity_id
        attribute: package
        state: "com.deliveroo.orderapp"
    action:
      - alias: "Invia notifica ad Alexa e tutte le app"
        service: script.multinotify
        data:
          message: "Notifica da Deliveroo: {{state_attr(ultima_notifica, 'android.title')}}. {{states(ultima_notifica)}}"
          notify_app: notify.all_devices
          channel: meal
          group: meal
          icon: meal
          critical: true
          alexa_target: media_player.ovunque

Come prima cosa ho definito la variabile ultima_notifica contenente il valore dell’anchor definito sopra come variable.

Questo ci permette di usare il valore ultima_notifica nei template di condizioni ed action, senza bisogno di referenziare direttamente l’entità, definita nell’anchor.

Il trigger

Il trigger è semplicemente il cambio di stato dell’attributo post_time dell’entità definita in ultima_notifica.

    trigger:
      - platform: state
        entity_id: *notify_entity_id
        attribute: post_time

Uso l’attributo post_time e non semplicemente lo stato (che contiene il testo della notifica) per evitare il (raro) caso in cui due notifiche con stesso testo siano generate consecutivamente. Verificando invece post_time (che contiene la data/ora di generazione della notifica in formato unix timestamp) questo valore cambierà ad ogni notifica, indipendentemente dal testo.

La condizione

Ok, il trigger scatta ad ogni notifica intercettata ma ora dobbiamo filtrare per la specifica app:

    condition:
      - alias: "Solo se l'app è Deliveroo"
        condition: state
        entity_id: *notify_entity_id
        attribute: package
        state: "com.deliveroo.orderapp"

La condizione verifica quindi che l’attributo package dell’entità definita nell’anchor notify_entity_id sia quello dell’app da noi desiderata.

Attenzione che package non corrisponde al nome dell’applicazione che vediamo nello store ma è un identificativo interno univoco definito dal creatore dell’app.

La notifica con multinotify

Per inviare la notifica a tutti i dispositivi Alexa di casa ed a tutte le app companion ci affidiamo allo script multinotify:

    action:
      - alias: "Invia notifica ad Alexa e tutte le app"
        service: script.multinotify
        data:
          message: "Notifica da Deliveroo: {{state_attr(ultima_notifica, 'android.title')}}. {{states(ultima_notifica)}}"
          notify_app: notify.all_devices
          channel: meal
          group: meal
          icon: meal
          critical: true
          alexa_target: media_player.ovunque

Per ulteriori informazioni sullo script multinotify e per installarlo, se ancora non ce l’hai, leggi il relativo articolo.

Il messaggio viene composto inserendo l’attributo android_title del sensore ultima_notifica, contenente il titolo della notifica di Deliveroo e lo stato del medesimo sensore, contenente il testo della notifica dell’app.

Il messaggio viene inviato a tutte le app per via di notify_app: notify.all_devices che è il servizio che raggruppa tutti i servizi di notifica delle app companion definito nello script multinotify.

La notifica verrà inviata al canale meal (che nel mio caso riproduce il suono dell’azione di mangiare di minecraft…), nel gruppo meal (così che le notifiche di questo tipo siano tutte raggruppate tra loro) e con icona meal (presente nell’articolo su multinotify).

La notifica verrà inviata immediatamente tramite il parametro critical: true (che può essere omesso: è il default).

Lo stesso messaggio sarà riprodotto da tutti i dispositivi Alexa presenti in casa per mezzo del parametro alexa_target: media_player.ovunque .

Conclusione

Questo package dimostra quanto sia semplice utilizzare i sensori dell’app companion e nello specifico utilizzare le notifiche di app che non sono integrabili in Home Assistant.

Tale metodo può essere utilizzato per qualunque condizione: l’app della banca che notifica un avvenuto pagamento, un’app di messaggistica come Whatsapp, l’app di una piattaforma di trading, ecc.

Spero di averti fornito di qualche ulteriore strumento che ti possa ispirare per creare nuove e meravigliose automazioni 🙂

Ti è piaciuto questo contenuto?

Se ti è stato utile l’articolo che hai letto potresti pensare di darmi una mano offrendomi qualche caffè!
Oltre ad aiutarmi a star sveglio nelle nottate di ricerche e scrittura mi daresti una mano concreta nel sostenere le spese del server web, incentivandomi a produrre altri contenuti di qualità.

Puoi usare Paypal:

Oppure Buymeacoffee:

Henrik Sozzi

Sono un analista programmatore per lavoro e per passione. Amo la domotica, la stampa 3D e la tecnologia in generale.

Questo articolo ha 4 commenti.

  1. Roberto

    Ciao, ho letto con molto piacere questa guida e sto cercando di fare funzionare tutto anche se sono ancora alle prime armi.
    Se volessi una notifica anche da altre app basterebbe modificare il file app.notifications.yaml duplicando l’automazione e cambiando i parametri relativi all’app?
    L’ID numerico alla prima riga a cosa si riferisce? (id: 43b64b8a-1757-4745-9703-56c1a62b45bb).
    M piacerebbe fare delle prove, magari puoi aiutarmi.

    Grazie mille
    Roberto

    1. Henrik Sozzi

      Ciao, si certo! Ricorda di attivare l’invio delle notifiche di quell’app dal sensore come spiegato nell’articolo però 🙂
      L’id è una stringa che identifica univocamente l’automazione tra tutte le altre, per questo trovo molto comodo usare un GUID generato con un click da un plugin di VSCode. Dovrai pertanto modificare tale valore con uno univoco (puoi anche scriverci “paperino”, per intenderci, basta che non sia usato da più parti).
      Puoi anche non specificarlo l’id ma io lo faccio sempre perchè senza tale parametro HA non memorizza il debug dell’esecuzione delle automazioni.

  2. damiano

    Ciao, volevo complimentarmi con te per l’ottimo lavoro, segue sempre molto le tue guide/consigli, in tal senso vorrei chiederti un info, nell automazione sopra delle notifiche ricevo il seguente errore:

    UndefinedError: ‘ultima_notifica’ is undefined

    mi sai dire come mai?
    grazie

    1. Henrik Sozzi

      Ciao Damiano, grazie per i complimenti e scusa il ritardo nella risposta. Nel frattempo hai risolto? Sembrerebbe che non hai attivato il sensore del tuo telefono come indicato o non l’hai specificato in testa al package nell’anchor notify_entity_id.

Rispondi

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