He estado desarrollando mi configuración de smarthome basada en Home Assistant durante aproximadamente un año (desde que salí de SmartThings) y después de una curva de aprendizaje inicial empinada, he estado muy feliz con el asistente del hogar, así que comencé a trabajar para expandir las cosas que hace, ya que estoy seguro de que ofrece una base a largo plazo para mi hogar. Una cosa que quería agregar eran los datos de la colección de contenedores para recordarme qué contenedor vence cuando. Como vivo en Sheffield, necesitaba obtener estos datos del proveedor externo de las autoridades locales. (veolia). Los siguientes detalles de cómo hice esto, basarse en gran medida en el trabajo de otros que ya lo han hecho para otras regiones
Actualización 10-ago-2022
Modifiqué la secuencia de comandos para que sea compatible con el asistente doméstico después del cambio a Python. 3
Actualización 20-dic-2021
Hice un cambio tanto en este script bash como en la plantilla: el primero para asegurarme de que los paquetes necesarios estén disponibles y el segundo para corregir un cambio importante realizado por versiones recientes de Home Assistant.
Usé un script que modifiqué a partir de varios ejemplos en un Hilo de soporte HA por RobBrad. Para que este script se ejecute, necesitaba instalar el módulo beautifulsoup en Home-Assistant.
Agregar una secuencia de comandos
- Utilizo el complemento de supervisor "Samba Share" para acceder a los archivos de mi asistente doméstico directamente desde mi PC con Windows; a menos que ya tenga un método de acceso preferido, le recomiendo que haga lo mismo.
- navegar a \\ha-dirección-ip config
- crear un scripts de Python carpeta
- Cree un nuevo script de Python en esta carpeta: llamé al mío bin_collection.py
- Inserte la siguiente secuencia de comandos
import sys import subprocess import pkg_resources required = {'beautifulsoup4', 'python-dateutil', 'requests'} instalado = {pkg.key para pkg en pkg_resources.working_set} faltante = requerido - installed if missing: python = sys.executable subprocess.check_call([pitón, '-metro', 'pip', 'Instalar en pc', *desaparecido], stdout = subproceso.DEVNULL) desde bs4 importar BeautifulSoup importar fecha y hora desde el analizador de importación dateutil solicitudes de importación importar json url = 'https://wasteservices.sheffield.gov.uk/property/############ ' página = solicitudes.get(url) if page.status_code != 200: salida(1) soup = BeautifulSoup(texto de la página, 'html.parser') fuera = {} bh3s = soup.find_all('td', class_ ="Nombre del Servicio") bpds = soup.find_all('td', class_ ="siguiente servicio") porque yo en el rango(solamente(bpds)): bin_colour = str(bh3s[yo].contenido[3]).más bajo().división('>')[1].división('')[0] fuera[bin_colour] = parser.parse(bpds[yo].contenido[2].lstrip().división(',')[0]).strftime('% Y-% m-% d') imprimir(json.dumps(fuera))
- Deberá reemplazar el ############ con el número único de su propiedad que le explicaré cómo llegar en el siguiente paso
Obtenga su dirección única
- Vaya a https://wasteservices.sheffield.gov.uk/property/
- Ingrese su código postal y seleccione su dirección de la lista
- Anote la nueva URL. Úselo en la línea de la URL en el script anterior; la única parte que deberá cambiar es la 12 número de dígito al final
Llame a su secuencia de comandos desde configuration.yaml
- Una simple entrada en configuration.yaml es todo lo que se necesita para ejecutar el script.
- Es posible que desee ajustar la frecuencia de la carrera.. El mío se ejecuta una vez al día.
sensor: - plataforma: línea de comando nombre: "Colecciones de contenedores" mando: "python3 /config/python-scripts/bin_collection.py" scan_interval: 86400 command_timeout: 60 #necesario ya que el sitio web tarda en responder y, a menudo, se agota el tiempo de espera si se deja en el valor predeterminado
Cree entidades para cada tipo de contenedor usando configuration.yaml
- Inmediatamente debajo de la sección anterior (tan quieto bajo el sensor: sec-ción) agregue lo siguiente
- plataforma: plantilla sensores: black_bin: device_class: marca de tiempo value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["negro"], "%Y-% m-% d") | as_local }}' Identificación única: "black_bin" brown_bin: device_class: marca de tiempo value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["marrón"], "%Y-% m-% d") | as_local }}' Identificación única: "brown_bin" blue_bin: device_class: marca de tiempo value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["azul"], "%Y-% m-% d") | as_local }}' Identificación única: "blue_bin"
Mostrar los resultados en la interfaz
- Para mostrar los resultados en la parte frontal, simplemente agregue una tarjeta con el 3 sensores en él (específicamente sensor.black_bin, sensor.blue_bin, y sensor.brown_bin)
- Tenga en cuenta que es posible que deba reiniciar el asistente doméstico para cargar los nuevos sensores que agregó a la configuración.
“Hi James I realise it has been a long while, but I just checked this on windows 11 (build 23H2)…”