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
“Hi James I realise it has been a long while, but I just checked this on windows 11 (build 23H2)…”