0Coletas de lixo no Home Assistant

Venho desenvolvendo minha configuração de smarthome com base no Home Assistant há cerca de um ano (desde que saiu da SmartThings) e depois de uma curva de aprendizado inicial íngreme, estou muito feliz com o assistente doméstico, então comecei a trabalhar para expandir as coisas que ele faz, pois estou certo de que oferece uma base de longo prazo para meu smarthome. Uma coisa que eu queria adicionar eram os dados de coleta de lixeira para me lembrar qual lixeira é devida quando. Como moro em Sheffield, precisei obter esses dados do provedor de fontes externas das autoridades locais (Veolia). Os seguintes detalhes de como eu fiz isso, baseando-se muito no trabalho de outros que já o fizeram para outras regiões

Atualização de 10 de agosto de 2022

Eu ajustei o script para torná-lo compatível com o assistente doméstico após a mudança para o Python 3

Atualização 20 de dezembro de 2021

Fiz uma alteração no script bash E no modelo - o primeiro para garantir que os pacotes necessários estejam disponíveis e o segundo para corrigir uma alteração importante feita por versões recentes do assistente doméstico

Eu usei um script que modifiquei de vários exemplos em um Tópico de suporte HA por RobBrad. Para este script rodar eu precisei instalar o módulo beautifulsoup no home-assistente.

Adicione um script

  • Eu uso o complemento de supervisor 'Samba Share' para acessar meus arquivos do assistente doméstico diretamente do meu PC com Windows - a menos que você já tenha um método de acesso preferido, recomendo fazer o mesmo
  • navegar para \\ha-ip-address config
  • criar um scripts-python dobrador
  • Crie um novo script python nesta pasta - eu chamei o meu bin_collection.py
  • Insira o seguinte script
    import sys
    import subprocess
    import pkg_resources
    
    required = {'beautifulsoup4', 'python-dateutil', 'requests'}
    instalado = {pkg.key para pkg em pkg_resources.working_set}
    ausente = obrigatório - installed
    
    if missing:
        python = sys.executable
        subprocess.check_call([píton, '-m', 'pip', 'instalar', *ausência de], stdout = subprocess.DEVNULL)
    
    from bs4 import BeautifulSoup
    import datetime
    from dateutil import parser
    import requests
    import json
    
    url = 'https://wasteservices.sheffield.gov.uk/property/############'
    page = requests.get(url)
    
    if page.status_code != 200:
        Saída(1)
    
    sopa = BeautifulSoup(page.text, 'html.parser')
    
    out = {}
    bh3s = soup.find_all('td', class_ ="Nome do Serviço")
    bpds = soup.find_all('td', class_ ="próximo serviço")
    
    para eu no alcance(unicamente(bpds)):
        bin_colour = str(bh3s[eu].conteúdo[3]).mais baixo().Dividido('>')[1].Dividido('')[0]
        Fora[bin_colour] = parser.parse(bpds[eu].conteúdo[2].tira().Dividido(',')[0]).strftime('% Y-% m-% d')
    
    imprimir(json.dumps(Fora))
    
  • Você precisará substituir o ############ com o número único do seu imóvel que explicarei como chegar no próximo passo

Obtenha seu endereço exclusivo

  • Navegue até https://wasteservices.sheffield.gov.uk/property/
  • Insira seu código postal e selecione seu endereço na lista
  • Anote o novo url. Use-o na linha de url no script acima - a única parte que você precisará alterar é a 12 algarismo no final

Chame seu script de configuration.yaml

  • Uma simples entrada em configuration.yaml é tudo o que é necessário para fazer o script funcionar
  • Você pode querer ajustar a frequência da execução. Mine runs once per day.
    sensor:
     - plataforma: command_line
       name: "Coletas de lixo"
       comando: "python3 /config/python-scripts/bin_collection.py"
       scan_interval: 86400
       command_timeout: 60 #necessário, pois o site é lento para responder e frequentemente atingirá o tempo limite se for deixado no padrão
    

Crie entidades para cada tipo de bin usando configuration.yaml

  • Imediatamente abaixo da seção acima (então ainda sob o sensor: sec-ção) adicione o seguinte
     - plataforma: template
       sensors:
         black_bin:
           device_class: timestamp
           value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["Preto"], "%Y-% m-% d") | as_local }}'
           unique_id: "black_bin"
         brown_bin:
           device_class: timestamp
           value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["Castanho"], "%Y-% m-% d") | as_local }}'
           unique_id: "brown_bin"
         blue_bin:
           device_class: timestamp
           value_template: '{{ strptime((estados("sensor.bin_collections")|from_json())["azul"], "%Y-% m-% d") | as_local }}'
           unique_id: "blue_bin"
    

Exibir os resultados no front end

  • Para mostrar os resultados no front end basta adicionar um cartão com o 3 sensores nele (especificamente sensor.black_bin, sensor.blue_bin, e sensor.brown_bin)
  • Observe que pode ser necessário reiniciar o Home Assistant para carregar os novos sensores adicionados ao configuration.yaml

Deixe uma resposta