0Colecciones de contenedores en Home Assistant

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.

Deja una respuesta