Intégration des données Ecocito (Service de gestion des déchets)

Bonjour,

Ma communauté de communes utilise Ecocito pour la gestion des déchets, en particulier le nombre de levées par an pour facturer celle en sus d’un nombre forfaitaire. Afin de suivre ça directement dans HA j’ai créé une petite application Appdaemon pour récupérer les informations (je ne sais pas si c’est la meilleure méthode, a voir pour créer une vrai intégration HA) et créer les capteurs correspondants

J’ai dans mon compte seulement les levées déchets ménager et tri selectif donc je n’ai implémenté que ça.

Le fichier python (ecocito.py):

import hassapi as hass
import datetime
from datetime import datetime as dt
from requests import session
import json

MATIERE_DECHETS_MENAGER=1
MATIERE_TRI_SELECTIF=2
MATIERE_DECHETS_VERT=3
MATIERE_BIO_DECHETS=4
MATIERE_VERRE=5
MATIERE_ALL=-1

SERVICE_PAV="ObtenirStatistiqueApportPAVMensuel"
SERVICE_COLLECTE="ObtenirStatistiqueLeveesMensuel"

BASE_URL="https://{cc}.ecocito.com/Usager/Json/{service}?dateDebut={year_start}-01-01T01%3A00%3A00.000Z&dateFin={year_end}-12-31T23%3A59%3A00.000Z&idMatiere={type_matiere}"

class Ecocito(hass.Hass):

    def initialize(self):
        time = datetime.time(17, 00, 0)
        # Schedule a daily callback that will call run_daily() at 17h
        self.connection_payload={
            'Identifiant': self.args["user"],
            'MotDePasse': self.args["passw"],
            'MaintenirConnexion': 'false',
            'FranceConnectActif': 'False'
        }
        self.cc = self.args["cc"]
        self.set_sensors_callback()
        self.run_daily(self.set_sensors_callback, time)

    def get_year_total(self, data):
        total = 0
        for elem in data:
            total = total + elem["Nombre"]
        return total

    def set_sensors_callback(self, *kwargs):
        with session() as c:
            c.post(F'https://{self.cc}.ecocito.com/Usager/Profil/Connexion', data=self.connection_payload)
            totalCollecte = json.loads(c.get(BASE_URL.format(cc=self.cc, service=SERVICE_COLLECTE, year_start=dt.now().year, year_end=dt.now().year, type_matiere=MATIERE_ALL)).text)
            totalDechetsMenager = json.loads(c.get(BASE_URL.format(cc=self.cc, service=SERVICE_COLLECTE, year_start=dt.now().year, year_end=dt.now().year, type_matiere=MATIERE_DECHETS_MENAGER)).text)
            totalTriSelectif = json.loads(c.get(BASE_URL.format(cc=self.cc, service=SERVICE_COLLECTE, year_start=dt.now().year, year_end=dt.now().year, type_matiere=MATIERE_TRI_SELECTIF)).text)
            
            self.set_state("sensor.ecocito_total",state=self.get_year_total(totalCollecte))
            self.set_state("sensor.ecocito_dechets_menager",state=self.get_year_total(totalDechetsMenager))
            self.set_state("sensor.ecocito_tri_selectif",state=self.get_year_total(totalTriSelectif))

Le fichier yaml (ecocito.yaml) correspondant:

Ecocito-app:
  class: Ecocito
  module: ecocito
  user: !secret ecocito_user
  passw: !secret ecocito_passw
  cc: !secret ecocito_cc

Dans l’arborescence Appdaemon ça ressemble à:
image

Dans home assistant ça donne ça après ajout dans un tableau de bord:
image

(j’ai mis l’icône sombre pour la ligne qui sert à la facturation :slight_smile: )

Si vous avez des commentaires je suis preneur.

3 « J'aime »

Bonjour @Cyril,

Merci pour ton travail, c’est top !
Par contre, je n’avais pas le bon nombre de levées car dans BASE_URL la date de fin est au 30/10.
As-tu une idée de comment on pourrait calculer le prix par rapport à chaque levées et location des poubelles ?

Bonjour,
merci pour le retour :slight_smile: j’ai corrigé dans le post initial

pour le prix oui il faut juste la formule de calcul

par exemple sous la forme tarif_loc_annuel (100) + X levées déchets ménager * tarif (10) + Y levées recyclage (5)

self.set_state("sensor.redevance",state= 100 + int(self.get_year_total(totalDechetsMenager)) * 10 + int(self.get_year_total(totalTriSelectif)) * 20 )

J’ai pas ce mode de calcul pour mon cas mais ça peut être une option à ajouter si plusieurs personnes ont ce mode là. Pour ma part j’ai un forfait de 10 levées en déchets ménager (si on dépasse c’est 10€ par levée) et illimité en recyclage et pas de comptage pour les déchetteries

Je vais essayer ta formule.
Dans notre communauté de commune pour les ordures ménagères c’est 177,35€ le forfait annuel pour 6 levés dans l’année et 4,45 € chaque levée supplémentaire. Sinon pour l’emballage c’est 10€ la location par an.