0Collections de bacs dans Home Assistant

Je développe ma configuration de maison intelligente basée sur Home Assistant depuis environ un an maintenant (depuis son départ de SmartThings) et après une courbe d'apprentissage initiale abrupte, je suis très satisfait de l'assistant domestique, alors j'ai commencé à travailler pour étendre les choses qu'il fait car je suis convaincu qu'il offre une base à long terme pour ma maison intelligente. Une chose que je voulais ajouter était les données de collecte des bacs pour me rappeler quel bac est dû quand. Comme je vis à Sheffield, je devais extraire ces données du fournisseur externe des autorités locales (Veolia). Les détails suivants comment j'ai fait cela, s'appuyant beaucoup sur le travail d'autres qui l'ont déjà fait pour d'autres régions

Mise à jour 10 août 2022

J'ai modifié le script pour le rendre compatible avec l'assistant domestique après le passage à Python 3

Mise à jour 20-déc-2021

J'ai modifié à la fois ce script bash ET le modèle - le premier pour s'assurer que les packages requis sont disponibles et le second pour corriger une modification radicale apportée par les versions récentes de l'assistant domestique

J'ai utilisé un script que j'ai modifié à partir de divers exemples sur un Fil de support HA par RobBrad. Pour que ce script s'exécute, j'avais besoin d'installer le module beautifulsoup sur home-assistant.

Ajouter un script

  • J'utilise le module de supervision «Samba Share» pour accéder aux fichiers de mon assistant personnel directement à partir de mon PC Windows - à moins que vous n'ayez déjà une méthode d'accès préférée, je vous recommande de faire de même
  • naviguer vers \\adresse-ip ha config
  • créer un scripts python dossier
  • Créez un nouveau script python dans ce dossier - j'ai appelé le mien bin_collection.py
  • Insérez le script suivant
    importer système
    sous-processus d'importation
    importer pkg_resources
    
    requis = {'belle soupe4', 'python-dateutil', 'demandes'}
    installé = {pkg.key pour pkg dans pkg_resources.working_set}
    manquant = obligatoire - importer système
    sous-processus d'importation
    importer pkg_resources
    
    requis =:
        importer système
    sous-processus d'importation
    importer pkg_resources
    
    requis =([python, '-m', 'pépin', 'installer', *manquant], stdout=sous-processus.DEVNULL)
    
    depuis bs4 importer BeautifulSoup
    import date / heure
    depuis l'analyseur d'importation de données
    demandes d'importation
    importer json
    
    url = 'https://wasteservices.sheffield.gov.uk/property/############ '
    page = requests.get(URL)
    
    si page.status_code != 200:
        Sortie(1)
    
    soupe = BeautifulSoup(page.text, "html.parser")
    
    out = {}
    bh3s = soup.find_all(«td», class_ ="Nom du service")
    bpds = soup.find_all(«td», class_ ="prochain service")
    
    pour i dans la gamme(seulement(bpds)):
        bin_colour = str(bh3s[je].Contenu[3]).plus bas().Divisé(»>»)[1].Divisé('')[0]
        en dehors[bin_colour] = parser.parse(bpds[je].Contenu[2].bande().Divisé(»,»)[0]).strftime(«% Y-% m-% d»)
    
    impression(json.dumps(en dehors))
    
  • Vous devrez remplacer le ############ avec le numéro unique de votre propriété que je vous expliquerai comment obtenir à l'étape suivante

Obtenez votre adresse unique

  • Accédez à https://wasteservices.sheffield.gov.uk/property/
  • Entrez votre code postal et sélectionnez votre adresse dans la liste
  • Notez la nouvelle URL. Utilisez-le dans la ligne URL du script ci-dessus - la seule partie que vous devrez modifier est le 12 numéro de chiffre à la fin

Appelez votre script depuis configuration.yaml

  • Une simple entrée dans configuration.yaml suffit pour exécuter le script
  • Vous voudrez peut-être ajuster la fréquence de la course. Le mien coule une fois par jour.
    capteur:
     - Plate-forme: ligne de commande
       Nom: "Collections de bacs"
       commander: "python3 /config/python-scripts/bin_collection.py"
       scan_interval: 86400
       command_timeout: 60 #nécessaire car le site Web est lent à répondre et expirera souvent s'il est laissé par défaut
    

Créez des entités pour chaque type de chutier à l'aide de configuration.yaml

  • Immédiatement sous la section ci-dessus (donc toujours sous le capteur: sec-tion) ajouter ce qui suit
     - Plate-forme: modèle
       capteurs:
         black_bin:
           classe_appareil: horodatage
           value_template: »{{ l'heure du strp((États("sensor.bin_collections")|from_json())["noir"], "%A-%m-%d") | as_local }}'
           identifiant unique: "black_bin"
         brown_bin:
           classe_appareil: horodatage
           value_template: »{{ l'heure du strp((États("sensor.bin_collections")|from_json())["marron"], "%A-%m-%d") | as_local }}'
           identifiant unique: "brown_bin"
         blue_bin:
           classe_appareil: horodatage
           value_template: »{{ l'heure du strp((États("sensor.bin_collections")|from_json())["bleu"], "%A-%m-%d") | as_local }}'
           identifiant unique: "blue_bin"
    

Afficher les résultats sur le front-end

  • Pour afficher les résultats sur le front-end, ajoutez simplement une carte avec le 3 capteurs dessus (spécifiquement sensor.black_bin, sensor.blue_bin, et sensor.brown_bin)
  • Notez que vous devrez peut-être redémarrer l'assistant domestique pour charger les nouveaux capteurs que vous avez ajoutés à configuration.yaml

Leave a Reply