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