0Raccogli raccolte in Home Assistant

Sto sviluppando la mia configurazione smarthome basata su Home Assistant da circa un anno (da quando hai lasciato SmartThings) e dopo una curva di apprendimento iniziale ripida sono stato molto contento dell'assistente domestico, quindi ho iniziato a lavorare per espandere le cose che fa poiché sono convinto che offre una base a lungo termine per la mia casa intelligente. Una cosa che volevo aggiungere erano i dati di raccolta del cestino per ricordarmi quale cestino è dovuto e quando. Dato che vivo a Sheffield, avevo bisogno di estrarre questi dati dal fornitore di fonti esterne delle autorità locali (veolia). I seguenti dettagli su come l'ho fatto, basandosi molto sul lavoro di altri che l'hanno già fatto per altre regioni

Aggiornamento 10 agosto 2022

Ho ottimizzato lo script per renderlo compatibile con l'assistente domestico dopo il passaggio a Python 3

Aggiornamento 20-dic-2021

Ho apportato una modifica sia a questo script bash CHE al modello: il primo per assicurarsi che i pacchetti richiesti siano disponibili e il secondo per correggere una modifica sostanziale apportata dalle recenti versioni di Home Assistant

Ho usato uno script che ho modificato da vari esempi su a Thread di supporto HA di RobBrad. Per eseguire questo script avevo bisogno di installare il modulo beautifulsoup su home-assistant.

Aggiungi uno script

  • Uso l'addon del supervisore "Samba Share" per accedere ai file dell'assistente domestico direttamente dal mio PC Windows - a meno che tu non abbia già un metodo di accesso preferito, ti consiglio di fare lo stesso
  • passare a \\ha-ip-address config
  • creare un script python cartella
  • Crea un nuovo script Python in questa cartella: ho chiamato il mio bin_collection.py
  • Inserisci il seguente script
    import sys
    import subprocess
    import pkg_resources
    
    required = {'bella zuppa4', 'python-dateutil', 'requests'}
    installato = {pkg.key per pkg in pkg_resources.working_set}
    mancante = necessario - installed
    
    if missing:
        python = sys.executable
        subprocess.check_call([pitone, '-m', 'pip', 'installare', *mancanti], stdout=subprocess.DEVNULL)
    
    da bs4 import BeautifulSoup
    data e ora di importazione
    dal parser di importazione dateutil
    richieste di importazione
    import json
    
    url = 'https://wasteservices.sheffield.gov.uk/property/############'
    pagina = request.get(url)
    
    se page.status_code != 200:
        Uscita(1)
    
    soup = BeautifulSoup(page.text, "html.parser")
    
    fuori = {}
    bh3s = soup.find_all("td", class_ ="Nome di Servizio")
    bpds = soup.find_all("td", class_ ="prossimo servizio")
    
    per i nel raggio d'azione(solo(bpds)):
        bin_colour = str(bh3s[io].Contenuti[3]).inferiore().Diviso('>')[1].Diviso('')[0]
        su[bin_colour] = parser.parse(bpds[io].Contenuti[2].lstrip().Diviso(',')[0]).strftime('% Y-% m-% d')
    
    Stampa(json.dumps(su))
    
  • Dovrai sostituire il file ############ con il numero univoco della tua proprietà che ti spiegherò come ottenere nel passaggio successivo

Ottieni il tuo indirizzo univoco

  • Individuare https://wasteservices.sheffield.gov.uk/property/
  • Inserisci il tuo codice postale e seleziona il tuo indirizzo dall'elenco
  • Prendi nota del nuovo URL. Usalo nella riga dell'URL nello script sopra: l'unica parte che dovrai modificare è il 12 cifra numero alla fine

Chiama il tuo script da configuration.yaml

  • Una semplice voce in configuration.yaml è tutto ciò che è necessario per eseguire lo script
  • Potresti voler regolare la frequenza della corsa. Il mio funziona una volta al giorno.
    sensore:
     - piattaforma: riga di comando
       nome: "Raccolte bin"
       comando: "python3 /config/python-scripts/bin_collection.py"
       scan_interval: 86400
       command_timeout: 60 #necessario in quanto il sito web è lento a rispondere e spesso va in timeout se lasciato per impostazione predefinita
    

Crea entità per ogni tipo di contenitore utilizzando configuration.yaml

  • Immediatamente sotto la sezione sopra (quindi ancora sotto il sensore: se-zione) aggiungere il seguente
     - piattaforma: modello
       sensori:
         black_bin:
           device_class: marca temporale
           valore_modello: '{{ strptime((stati("sensor.bin_collections")|from_json())["nero"], "%Y-%m-%d") | as_local }}'
           ID_univoco: "black_bin"
         brown_bin:
           device_class: marca temporale
           valore_modello: '{{ strptime((stati("sensor.bin_collections")|from_json())["Marrone"], "%Y-%m-%d") | as_local }}'
           ID_univoco: "brown_bin"
         blue_bin:
           device_class: marca temporale
           valore_modello: '{{ strptime((stati("sensor.bin_collections")|from_json())["blu"], "%Y-%m-%d") | as_local }}'
           ID_univoco: "blue_bin"
    

Visualizza i risultati sul front-end

  • Per mostrare i risultati sul front-end è sufficiente aggiungere una carta con il 3 sensori su di esso (nello specifico sensor.black_bin, sensor.blue_bin, e sensor.brown_bin)
  • Nota che potrebbe essere necessario riavviare l'assistente domestico per caricare i nuovi sensori aggiunti a configuration.yaml

lascia un commento