Home Assistant – Sensore raccolta rifiuti

By | 2019-05-28T20:45:37+00:00 27 Maggio 2019|Categories: Home Assistant|2 Comments

Con il mio amico Carlo che ringrazio ci siamo domandati come poteva Home Assistant aiutarci a ricordare quale tipologia di rifiuti è in raccolta quindi fondamentalmente quale bidone dobbiamo preparare per la raccolta.
Noi abbiamo optato per sfruttare quello che già ci mette a disposizione Home Assistant senza andare ad installare componenti customs.

Il risultato che otterremo è questo:

Le cose da fare sono solamente 3:

  1. Creare un’immagine per ogni tipologia di rifiuto da ritirare, ad esempio un bidone giallo per la plastica, un bidone nero per l’indifferenziata etc. Noi vi forniremo alcune immagini ma voi siete liberi di crearvi le vostre. Se invece volete usare le nostre e vi manca qualche colore o qualche abbinamento di colori fateci richiesta qui sotto che provvediamo a realizzarle.
  2. Creare un sensore “template” che viene valorizzato con il numero del giorno della settimana, noi lo abbiamo chiamato “Rifiuti”
  3. Creare una card che mostra le informazioni relative al giorno del sensore “Rifiuti”

1. Le immagini che abbiamo creato le trovate qui, scaricate lo zip, estraete il contenuto e mettete la cartella “rifiuti” nella cartella corrispondente al percorso “local” della vostra installazione di Home Assistant, nel mio caso è \\indirizzo_ip_raspberry\homeassistant\www\rifiuti

2. Creiamo il sensore “Rifiuti” nella sezione sensor: del file configuration.yaml(purtroppo qui va a capo, cliccate il “+” nel blocco di codice in alto a destra per espandere)

sensor:
  - platform: template
    sensors:
      rifiuti:
        friendly_name: "Rifiuti"
        icon_template: mdi:delete-restore
        value_template: "
        {% if (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '1' %} Indifferenziato
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '2' %} Plastica e umido
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '3' %} Indifferenziato
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '4' %} IUmido
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '5' %} Umido
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '6' %} Niente
        {% elif (now().timestamp() | int - (11*60*60)) | timestamp_custom('%w') == '0' %} Carta e umido
        {% endif %} 
        "
        entity_id: sensor.date_time

3. Creiamo nel file ui-lovelace.yaml una card di tipo picture-entity, posizionatela dove ritenete opportuno stando attenti a rispettare l’indentatura

- type: picture-entity
  entity: sensor.rifiuti
  name: "Rifiuti da mettere fuori"
  aspect_ratio: 16x10
  tap_action: none
  state_image:
    "Niente": /local/rifiuti/niente.svg
    "Plastica e umido": /local/rifiuti/giallomarrone.svg
    "Indifferenziato": /local/rifiuti/nero.svg
    "Carta e umido": /local/rifiuti/biancomarrone.svg
    "Umido": /local/rifiuti/marrone.svg

Questo è quanto per creare il sensore e mostrarlo nella vostra UI.

Cerchiamo di capire cosa fa il codice del value_template in modo che possiate personalizzarlo secondo le vostre esigenze

Tutto è incentrato su questa riga

(now().strftime('%s') | int - (11*60*60)) | timestamp_custom('%w') == '1'

In pratica leggiamo l’orario attuale in secondi con l’istruzione

(now().strftime('%s')

Togliamo 11 ore (calcolate in secondi) con l’istruzione

int - (11*60*60))

Questo mi permette di far “cambiare” il valore del sensore alle 11:00 del mattino.
Questo perchè nella mia città il ritiro dei rifiuti è previsto al mattino in un orario variabile che va dalle 06:00 alle 11:00 e il sensore impostato in questo modo mi permette di sapere cosa devo predisporre per il conferimento se mi trovo tra le 11:01 del giorno precedente al conferimento alle 10:59 del giorno del conferimento.

L’ultima istruzione invece trasforma in numero del giorno della settimana, la data in secondi derivata dal calcolo precedente.

timestamp_custom('%w')

L’ultima parola di ogni singola istruzione, ad esempio “Indifferenziato” o “Plastica e umido” è il valore che verrà visualizzato nella UI e quello che comanda l’immagine da visualizzare.

L’ultima riga del sensore template invece indica al sensore che si deve aggiornare ad ogni aggiornamento de sensore date_time quindi ad ogni cambio di orario.

entity_id: sensor.date_time

Passiamo ora ad analizzare la UI. Le prime 5 righe credo non abbiano bisogno di spiegazione.

Nello state_image invece stiamo dicendo alla card quale immagine visualizzare in base allo stato del sensore, ovvero

niente.svg se il sensore è uguale a “Niente”,  giallomarrone.svg se “Plastica e umido” e così via.

state_image: 
  "Niente": /local/rifiuti/niente.svg 
  "Plastica e umido": /local/rifiuti/giallomarrone.svg 
  "Indifferenziato": /local/rifiuti/nero.svg 
  "Carta e umido": /local/rifiuti/biancomarrone.svg 
  "Umido": /local/rifiuti/marrone.svg

Questo è quanto, spero vi sia utile. Non esistate a commentare o a chiedere ulteriori info.

 

 

 

 

About the Author:

Programmatore da oltre 20 anni, appassionato di tecnologia ed elettronica.

2 Commenti

  1. Marco maggio 28, 2019 al 10:46 - Rispondi

    Ciao, si potrebbe fare l’abbinamento di colori giallo e verde?

    • Christian maggio 28, 2019 al 20:54 - Rispondi

      Certo, ho aggiornato il file delle immagini, prova a riscaricarlo.
      Ti informo che abbiamo riscontrato un potenziale errore su alcune installazioni di hassio, abbiamo quindi sostituito la funzione strftime(‘%s’) con la più corretta timestamp()
      Ciao.

Scrivi un commento