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

Notifiche da Deliveroo, Glovo e JustEat in Home Assistant

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 va di darmi una mano?

Il contenuto di questo sito è completamente gratuito senza pubblicità invasive e il fine non è certo guadagnare …ma mantenere un sito ha un costo. Se ti va di darmi una mano per sostenere le spese o ti va di sostenere questo progetto hai le seguenti modalità:


  • Donazione con Paypal:

  • Regalami un caffè su Buymeacoffee:


  • Effettua i tuoi acquisti Amazon a partire da QUESTO LINK (o tramite i prodotti sotto)

  • Effettuare i tuoi acquisti AliExpress usando QUESTO LINK

Henrik Sozzi

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

Questo articolo ha 18 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.

      1. damiano

        Ciao Henrik

        scusa la risposta solo ora…
        ecco come ho chiamato il sensore:

        package.node_anchors:
        entity_id: &notify_entity_id sensor.mi10_last_notification

        ma lo stato è ancora unknown.. non riesco a capire.

        1. Henrik Sozzi

          Cioè intendi che lo stato del sensore sensor.mi10_last_notification è sempre unknown? L’hai attivato sull’app del tuo telefono? Hai attivato le app che devono mandarti gli aggiornamenti come indicato nell’articolo? Deliveroo ogni tanto non manda proprio le notifiche di consegna (ma te ne accorgi perchè non ti arriva nessuna notifica dalla loro app…) puoi provare a includere Whatsapp e farti mandare un messaggio, per fare una prova.

  3. damiano

    si resta sempre cosi anche attivando le notifiche di altre app…lo stato non cambia..

    1. Henrik Sozzi

      Può essere che non stai ricevendo gli aggiornamenti dall’app Android. Se usi Android devi abilitare i permessi per l’esecuzione in background e l’avvio in automatico dell’app e disabilitare l’ottimizzazione batteria per l’app. Non so guidarti meglio perchè ogni produttore si personalizza dove mettere e sotto che forma mostrare tali opzioni…
      Se usi iOS ci sono opzioni simili ma non so dirti dove sono perchè non lo uso.

  4. Damiano

    Ho la MIUI dello Xiaomi, l’app è già abilitata in background e disabilitato risparmio energetico per quest ultima…tutti i sensori posizione ed altri si aggiornano e sono funzionanti tranne questo..strano..

    1. Henrik Sozzi

      Non che sia una incompatibilità con la MIUI… Ma mi sembra strano. Cmq se gli altri sensori si aggiornano e questo no non è questione di impostazioni come poteva essere.
      Farò una prova con uno Xiaomi che ho e ti faccio sapere (non so quando riuscirò però)

  5. Mirko

    Ciao Henrik complimenti per il lavoro, una domanda, magari banale, ma se volessi avere 2 dispositivi da cui recuperare l’ultima notifica. come faccio ad inserirlo in yaml?
    homeassistant:
    customize:
    package.node_anchors:
    entity_id: &notify_entity_id sensor.a52s_mirko_last_notification
    entity_id: &notify_entity_id sensor.2109119dg_last_notification
    Al momento così mi da errore. dove sbaglio?

    1. Henrik Sozzi

      Ciao Mirko, grazie! Se vuoi usare due trigger devi cancellare la parte in alto in customize: e scrivere direttamente i tuoi trigger nell’automazione. Ma poi devi usare l’oggetto trigger nelle azioni per recuperare la notifica da dove è arrivata. Se faccio in tempo te la scrivo più tardi

  6. Graziano

    Nell’app companion non mi compare “consenti elenco” quindi non riesco ad andare avanti…….

    1. Henrik Sozzi

      Come no? Ho appena verificato (mica che avessero cambiato le schermate riportate nell’articolo) ma sono ancora tutte corrette. Stiamo parlando dell’app Companion su Android, non mi risulta che su iOS sia presente il sensore “Ultima notifica”, confermi che stai usando Android?
      Non è che hai una App Companion non aggiornata? Verifica sul Play Store che sia aggiornata.
      Hai scrollato verso il basso? La schermata è lunga e la penultima voce è proprio “consenti elenco” che cliccando ti apre l’elenco delle app installate sul telefono che puoi spuntare per dire quali notifiche ricevere su HA.

  7. Giuseppe

    Ciao Henrik, seguendo la tua guida ho abilitato il sensore ed homassistant riceve regolarmente le notifiche dall’app che a me interessa (nello specifico telegram). E’ possibile filtrare ulteriormente le notifiche a seconda delle parole in essa contenute? grazie

    1. Henrik Sozzi

      Ciao Giuseppe, dal trigger no, non è possibile. Ma dall’automazione che crei per recepire la notifica assolutamente si. Basta fare, ad esempio, una condizione dove con un semplice template fai eseguire l’automazione solo se nel messaggio è contenuta una delle parole che vuoi filtrare.

  8. Alex

    Ciao Henrik, magnifica guida. Ho un problema con il trovare le stesse corrispondenze in Iphone, sapresti aiutarmi?

    1. Henrik Sozzi

      Ahi, non l’ho specificato nell’articolo (rileggendo) ma mi risulta che su iPhone non sia possibile alle app accedere alle notifiche di altre app. Per questo motivo non è possibile effettuare questa cosa su iphone.
      Aggiungo anche che l’app di deliveroo da un po’ di tempo a questa parte sembra che non invii più le notifiche quando il rider si avvicina a casa, purtroppo… Sto contattando il supporto ma senza esito finora.

Rispondi

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