Vai al contenuto
Home » Package per la raccolta differenziata su Home Assistant

Package per la raccolta differenziata su Home Assistant

Il problema

Potrei sintetizzare la mia esigenza con “sono rimbambito”, ma ho fiducia nel prossimo, quindi mi piace pensare che ne esistano altri come me. Ecco perché ho pensato di realizzare un package per la raccolta differenziata su Home Assistant che mi ricordi cosa buttare e che lo continui a fare finché non gli confermo di averlo fatto.

Sì esatto, non sono solo rimbambito, ma lo sono di quelli della peggior specie.

I requisiti

Per usare il mio package dovrete soltanto aver attivato questi ultimi (basta creare una cartella e mettere una riga nel configuration.yaml…online trovate come e cosa fare), aver configurato almeno una app companion su uno smartphone e avere installato da HACS l’estensione per gli Amazon Echo Alexa media player.

Come potete vedere nella pagina dedicata al mio hardware, uso uno smartphone Android e assistenti vocali Alexa, quindi mi scuseranno i possessori di dispositivi Apple, Google Home, ecc. se non troveranno una configurazione già pronta per loro, ma vi garantisco che con pochissime modifiche, potrete adattare il codice anche per le vostre esigenze.

La soluzione

Per prima cosa per far parlare “in coro” tutti i miei echo, uso un gruppo che ho creato proprio sulla app di Alexa chiamato “ovunque” in cui ho aggiunto tutti i dispositivi. Createne uno anche voi.

Nel codice del package troverete una parte iniziale dove fare delle modifiche per configurarlo, eccola:

      ########################
      # IMPOSTAZIONI PACKAGE #
      ########################
      setting:
        Media Player Alexa: &alexa media_player.ovunque
        Device per notifica push 1: &push1 entita_smartphone_1
        Device per notifica push 2: &push2 entita_smartphone_2
        Device per notifica push 3: &push3 entita_smartphone_3
        Device per notifica push 4: &push4 entita_smartphone_4
        Device per notifica push 5: &push5 entita_smartphone_5
        Rifiuto 1: &rifiuto1 "🤷‍♂️ Indifferenziato"
        Rifiuto 2: &rifiuto2 "🍌 Umido"
        Rifiuto 3: &rifiuto3 "🔪 Plastica e metalli"
        Rifiuto 4: &rifiuto4 "🥡 Carta e cartone"
        Rifiuto 5: &rifiuto5 "🪞 Vetro"

Sostanzialmente dovrete impostare tre cose: il nome del gruppo creato sull’app di Alexa (se avete creato il gruppo “ovunque” come consigliato sopra non sarà necessario cambiarlo); l’elenco degli smartphone dove è installata l’app companion per ricevere la notifica; la lista delle tipologie di rifiuto che si raccolgono nella zona dove abitate.

Per cambiare il nome del gruppo, basta sostituire la parola “ovunque” con quella scelta da voi nell’app Alexa in questa riga:

        Media Player Alexa: &alexa media_player.ovunque

L’elenco dei dispositivi con l’app companion a cui inviare la notifica invece, vanno inseriti sostituendo le voci “entita_smartphone_X” (è possibile inserire fino a 5 device) con il nome dell’entità, che potete recuperare andando in: Strumenti per sviluppatori -> Servizi e cercando “notify“. Scegliendo nell’elenco dei dispositivi quello che riconoscete essere lo smartphone interessato (se non lo avete rinominato, di solito inizia con “mobile”) avrete il nome dell’entità.

ATTENZIONE: nella configurazione del package dovrete inserire solo la parte DOPO IL PUNTO. Quindi NON dovrà essere riportato anche il testo “notify.”.

Infine se necessario, andate a modificare i testi che contengono il tipo di rifiuto qualora da voi siano diversi, facendo attenzione a restare all’interno delle virgolette di ogni riga e senza cancellare quest’ultime!

Salvo esigenze particolari avete finito. Passiamo adesso alla spiegazione delle parti più interessanti.

Dopo aver dichiarato alcuni aiutanti che ci serviranno a realizzare una piccola interfaccia che ci permetterà di usare e configurare definitivamente il package, creo due sensori:

###########
# SENSORI #
###########
sensor:
  - platform: template
    sensors:
      # GIORNO DELLA SETTIMANA
      giorno_della_settimana:
        friendly_name: "Giorno della settimana"
        value_template: >
          {{ ['lun','mar','mer','gio','ven','sab','dom'][now().weekday()] }}
        icon_template: >-
          mdi:{{['emoticon-dead-outline', 'emoticon-angry-outline', 'emoticon-sad-outline','emoticon-neutral-outline','emoticon-cool-outline','emoticon-excited-outline','emoticon-happy-outline'][now().weekday()] }}
      # NOME DELL'INPUT DEL GIORNO DELLA SETTIMANA
      input_giorno_settimana_rifiuti:
        value_template: >
          {{ "raccolta_differenziata_" + states.sensor.giorno_della_settimana.state }}

Il primo capisce in quale giorno della settimana ci troviamo usando now().weekday().
Il secondo invece, usando il primo, costruisce un testo composto dalla stringa “raccolta_differenziata_” e il nome del sensore precedente per ottenere ad esempio “raccolta_differenziata_lun” il lunedì, “raccolta_differenziata_mar” il martedì, e così via. Il sensore “input_giorno_settimana_rifiuti” in definitiva, conterrà il nome dell’input da andare a verificare per capire cosa si butta quello specifico giorno.

E’ un passaggio un po’ ostico da capire, ma chiave per il package. Senza questo “giochetto” non avrei potuto far altro che creare una automazione per ogni giorno della settimana.

Le automazioni infatti sono la parte conclusiva e più importante del mio package per la raccolta differenziata su Home Assistant. Sono tre ed ecco cosa fanno:

  # ATTIVA DA NOTIFICARE QUANDO ORARIO DI INIZIO NOTIFICHE
  - alias: Attiva da notificare raccolta differenziata
    id: Attiva da notificare raccolta differenziata
    mode: single
    trigger:
      - platform: time
        at: "04:59:00"
    action:
      - service: input_boolean.turn_on
        target:
          entity_id: input_boolean.raccolta_differenziata_da_notificare

Semplicemente subito prima delle 5 del mattino si riattiverà la possibilità di notificare che va buttata l’immondizia. Mi serve per poter riattivare le notifiche una volta al giorno anche se sono state disattivate.

  # DISATTIVA DA NOTIFICARE QUANDO ORARIO DI FINE NOTIFICHE
  - alias: Disattiva da notificare raccolta differenziata
    id: Disattiva da notificare raccolta differenziata
    mode: single
    trigger:
      - platform: time
        at: input_datetime.raccolta_differenziata_notifiche_end_time
    action:
      - service: input_boolean.turn_off
        target:
          entity_id: input_boolean.raccolta_differenziata_da_notificare

Con il codice qui sopra invece disattivo l’invio di notifiche quando l’orario di fine notifica scelto dall’interfaccia è stato raggiunto. In altre parole se scegliete di non voler più ricevere notifiche dopo le 23, con questa automazioni le disattivo (saranno riattivate per il giorno dopo dall’automazione precedente).

  # RICORDA RACCOLTA DIFFERENZIATA
  - alias: Ricorda raccolta differenziata
    id: Ricorda raccolta differenziata
    mode: single
    trigger:
      - platform: template
        value_template: "{{ now().minute % states('input_number.frequenza_notifiche_raccolta_differenziata')|int(2) == 0 }}"
    condition:
      - condition: state
        entity_id: input_boolean.raccolta_differenziata_da_notificare
        state: "on"
      - condition: time
        after: input_datetime.raccolta_differenziata_notifiche_start_time
        before: input_datetime.raccolta_differenziata_notifiche_end_time
    action:
      - service: notify.raccolta_differenziata_gruppo_notifiche_app
        continue_on_error: true
        data:
          title: 🚮 Ricordati di buttare l'immondizia
          message: >-
            {{ states("input_select.raccolta_differenziata_" + states.sensor.giorno_della_settimana.state) }}
      - service: notify.alexa_media
        continue_on_error: true
        data:
          target:
            - *alexa
          data:
            type: announce
            method: spoken
          message: >-
            Ricordati di buttare l'immondizia. Oggi si butta {{ states("input_select.raccolta_differenziata_" + states.sensor.giorno_della_settimana.state)[2:] }}

Ecco infine l’automazione “rompiscatole” che ci fa ottenere notifiche come quella che vedete di seguito. Provo a spiegarla a pezzi.

Notifiche package per raccolta differenziata su Home Assistant

Dall’interfaccia è possibile scegliere ogni quanti minuti si vuole essere disturbati per ricordarci di buttare l’immondizia. Questa ripetizione viene fatta da questo codice:

"{{ now().minute % states('input_number.frequenza_notifiche_raccolta_differenziata')|int(2) == 0 }}"

Dove vado a capire se i minuti dell’orario attuale, divisi per i minuti impostati come frequenza, hanno come resto della divisione 0. Ad esempio quindi se sono le 22:30 e abbiamo impostato 15 minuti come frequenza, 30 (i minuti di 22.30) diviso 15 ha un resto della divisione pari a 0. Quindi l’automazione si attiverà.

Ci sono poi delle condizioni basate sugli orari impostati come validi e se le notifiche sono state disattivate. Infine le due action che inviano rispettivamente una la notifica sugli smartphone e l’altra sugli echo.

Su quest’ultima da notare una cosa importante in questa parte di codice:

{{ states("input_select.raccolta_differenziata_" + states.sensor.giorno_della_settimana.state)[2:] }}

Quel “[2:]” non è un errore ma serve a rimuovere dal testo dell’immondizia del giorno i primi due caratteri. Questo perché ho messo una emoticon ed uno spazio prima di ogni tipologia di rifiuto. Ad esempio abbiamo “🤷‍♂️ Indifferenziato”. Quel codice serve a rimuovere da questa stringa l’omino e lo spazio per fare in modo che Alexa non pronunci la parte del disegno (sbagliando).

Prima di concludere, è importante ricordarvi che nell’archivio che scaricherete alla fine di questo articolo, troverete anche un file chiamato ui.yml. Al suo interno troverete il codice yaml da incollare in una vostra plancia al fine di visualizzare i dati da impostare per adeguare il package per la raccolta differenziata su Home Assistant secondo le vostre esigenze. Senza questa parte non avrete modo ad esempio di scegliere a che ora ricevere le notifiche, ogni quanto e quale spazzatura buttare in base al giorno!

Impostazioni package raccolta differenziata

Conclusioni

Sono cosciente del fatto che online si trovano molte soluzioni per la gestione dei rifiuti, ma questa è la mia: semplice ed efficace per me che ho bisogno di essere ricordato continuamente cosa devo fare. E’ perfetta per me e spero possa essere utile anche a voi.

Supporto reciproco

La realizzazione di questo articolo ha richiesto tempo, studio ed impegno.

Vi chiedo quindi mettere una mano sul cuore e l’altra sul portafogli per ricompensare il mio sforzo con un contributo libero:

Grazie.

Il download ed un piccolo extra

Il package completo è scaricabile da qui:

Download “Raccolta differenziata” raccolta_differenziata_1_0.zip – Scaricato 783 volte – 2,28 KB

al suo interno, oltre a trovare il file raccolta_differenziata_1_0.yaml da caricare nella vostra cartella packages, troverete anche il file chiamato ui.yml.

Per disattivare in anticipo le notifiche perché magari siete già andati a buttare l’immondizia vi lascio un paio di consigli:

  • se avete configurato Alexa per poter ad esempio richiamare scenari (quindi ad anche script), eccovene uno da associare ad una routine e poter dire ad esempio: “Alexa, ho buttato la spazzatura” e non essere più disturbato:
alias: Spazzatura buttata
sequence:
  - service: automation.trigger
    data:
      skip_condition: true
    target:
      entity_id: automation.disattiva_da_notificare_raccolta_differenziata
mode: single
icon: mdi:delete-empty
  • anche un TAG NFC può semplicemente richiamare l’automazione “disattiva_da_notificare_raccolta_differenziata” ed interrompere le notifiche…
  • …oppure un pulsante come quelli che ho preso io da IKEA
  • …oppure una automazione che capisca quando hai aperto la porta e sei uscito…
  • …oppure me ne dite qualcuna voi nei commenti!!!

Insomma sarebbe inutile aggiungere, a chi come noi si diverte a smanettare su aggeggi del genere, che la fantasia è maggiore se uniamo le forze. Io ci sto mettendo il mio impegno, spero ne mettiate un pochino anche voi.

36 commenti su “Package per la raccolta differenziata su Home Assistant”

  1. Complimenti per il tuo lavoro, sto utilizzando il tuo package..nel mio caso la raccolta differenziata avviene di lunedi (ritiro Verde) Mercoledi (carta umido plastica) sabato ( umido vetro secco) in questo caso dovrei modificare il package togliendo i giorni dove non ritirano, aggiundendo più, chiamiamole “entità”….esempio mercoledi con carta,umido, plastica?! In più,dovrei aggiundere il verde.. ( nella card non esiste la voce “niente” nei giorni della settimana)
    grazie

    1. Ciao Fabio, grazie per il commento. Credo che con poche modifiche, oltre alla configurazione adatta, puoi ottenere quello che ti serve.

      Se hai difficoltà sono a disposizione.

      1. ciao. sto usando il package, molto ben fatto e utile.
        domanda : come imposto più rifiuti nello stesso giorno ?
        esempio : il martedì viene ritirato carta e vetro ; come li imposto ?
        grazie mille.
        ciao. roberto.

        1. Ciao, come prima soluzione immediata mi viene da suggerirti di impostare uno dei rifiuti con entrambe le tipologie. Si potrebbe fare anche meglio e diversamente ma così sicuramente puoi risolvere facilmente senza stravolgere troppo il package. Insomma mi immagino un rifiuto di tipo carta, uno vetro e uno carta e vetro.

          1. scusami, ma non ho capito dove dovrei inserire entrambe le tipologie. credo a questo punto si debba metter mano al codice del package ? giusto ?

            1. Sì, devi modificare il package. Ti ho solo indicato una soluzione ma per applicarla devi ovviamente modificare il package.

            2. scusami ancora una domanda, tu hai previsto che ogni giorno della settimana c’è un rifiuto da esporre, ma è possibile impostare solo alcuni giorni ? ovvero… lunedì rifiuto xyz, martedì rifiuto xyz, mercoledì nulla, giovedi rifiuto xyz, venerdi sabato e domenica nessun rifiuto. Anche in questo caso bisogna modificare il codice del package ? grazie mille.

              1. Sì, anche in questo caso bisognerebbe modificare il codice, cambiando anche un po’ la logica probabilmente. Il package è realizzato sulle mie esigenze e vuole essere principalmente uno spunto per poterlo adeguare alle vostre.

      2. Ciao ho provato la tua automazione e con qualche modifica l’ho adattata al mio utilizzo e funziona perfettamente.
        Bravo ottimo lavoro.
        Volevo solo 2 chiarimenti se e possibile:
        1- Per disattivare le notifiche dopo aver buttato ad esempio l’immondizia devo per forza deselezionare la spunta in alto (Raccolta differenziata da notificare)? Non sarebbe possibile fare un tasto che se premuto smette con le notifiche fino a quando appunto si resetta (ore 23.00)
        2- Lo scenario da associare alla routine per dire ad alexa di non disturbare più dove e come devo inserirla? Questo passaggio non mi è chiaro, forse perchè sono ancora poco pratico…
        In ogni caso complimenti e grazie….

        1. Ciao e grazie per i complimenti.

          Vengo alle risposte:

          1) il package dovrebbe averti creato una entità input_boolean.raccolta_differenziata_da_notificare
          Basta creare un pulsante per cambiare quella.
          2) questa è più articolata e non riuscirei a spiegarla in un commento. Bisogna innanzitutto aver fatto in modo che Alexa riconosca come scenario uno script (online trovi la procedura per farlo ma è complessa). Poi bisogna creare uno script che cambia il valore dell’input booleano del punto precedente direttamente o attraverso una automazione (già creata dal package: si chiama automation.disattiva_da_notificare_raccolta_differenziata).

      3. Ciao.
        Bel lavoro !!!!
        Se ho capito bene il tutto funziona in base al giorno giusto ? Cioè se ho una raccolta ogni 2 settimane non riesco a gestirla così, vero ?
        Grazie !

        1. Esatto ma puoi modificare il package per ottenere quello che dici tu. Ad esempio puoi impostare un input boolean che gestisce il salto della settimana e cambiargli lo stato ogni domenica notte.

          1. Ti ringrazio per la pronta risposta.
            In realtà stavo “giocando” con il calendario locale, vediamo se riesco ad integrare i sensori che ho integrato.
            Grazie !

      4. Buongiorno, ottima integrazione, forse solo due consigli.
        1) le notifiche vocali, mancano di un “if” a mio parere, controllo se effetivamente uno dei cellulari sia in casa(altrimenti sembra la casa dei fantasmi).
        2) putroppo mi constringe a tenere la scheda nella mia home(solo per settare le impostazioni)..
        Complimenti e grazie

        1. Ciao Silvio, grazie per i complimenti ed i consigli. Riguardo il punto 2, non ho capito cosa intendi. Io comunque ho creato la scheda in una sezione che uso solo per i test, ho impostato i valori e poi l’ho rimossa.

              1. Ultima cosa, ho notato che le notifiche scompaiono appena apri HA(tramite notifica), mentre alexa continua a pronunciare di buttare l’immondizia per tutto il tempo selezionato.

                1. Sì ma su questo non possiamo fare niente. Le notifiche degli smartphone funzionano così con qualsiasi app.

          1. Ciao Marco, purtroppo io ho solo Alexa e quindi il package è configurato per quelli. Se hai un po’ di dimestichezza però, non credo sia difficile adattarlo. Magari se lo fai contattami che ne condividiamo una versione mista.

        2. Ciao ottimo lavoro e soprattutto utile, ho bisogno di una mano devo disattivare un giorno della settimana come faccio purtroppo in programmazione non ci capisco una mazza grazie

          1. Ciao e grazie per i complimenti.
            Purtroppo se non ne capisci proprio niente non è facile darti indicazioni.

            Ti posso direi che ci sono varie soluzioni. Mi viene ad esempio in mente di aggiungere una condizione al servizio di notifica che verifichi che NON sia il giorno che vuoi evitare.

                1. ok grazie, L’icona del vetro nel file da scaricare viene rappresentata come un “? “

          Lascia un commento

          Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *