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 contento 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 inteligente.. 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, Construyendo mucho sobre el trabajo de otros que ya lo han hecho para otras regiones.
Actualización 20-dic-2021
Hice un cambio tanto en el script bash como en la plantilla – el primero para asegurarse de que los paquetes requeridos 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
- Yo uso "Samba Share"’ complemento supervisor 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 hacer lo mismo
- navegar a \\ha-dirección-ip config
- crear un scripts de Python carpeta
- Cree una nueva secuencia de comandos de Python en esta carpeta – Llamé mía bin_collection.py
- Inserte la siguiente secuencia de comandos
import sys import subprocess import pkg_resources required = {'beautifulsoup4', 'python-dateutil'} instalado = {pkg.key para pkg en pkg_resources.working_set} faltante = requerido - installed if missing: python = sys.executable subprocess.check_call([python3, '-metro', 'pip3', '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 la secuencia de comandos anterior – la única parte que tendrá que 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: secció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 configuration.yaml
Tienes algunos pensamientos de su propio? Sumérjase a continuación comentando! Si desea suscribirse por favor utilice el enlace de suscripción en el menú en la parte superior derecha. También puede compartir esto con tus amigos mediante el uso de los enlaces sociales inferiores. Aclamaciones.
Deja una respuesta