lorisbc / sieva-home-assistant

Sieva home assistant integration
0 stars 0 forks source link

Probleme configuration yaml #1

Open Jocelyne69380 opened 1 month ago

Jocelyne69380 commented 1 month ago

Bonjour

J'ai installé via depot personnalisé l'intégration Sieva. j'ai modifié mon fichier de conf.yaml lorsque je vérifie la conf j'ai ce message erreur : Platform error 'sensor' from integration 'sieva' - Exception importing custom_components.sieva.sensor

Pouvez-vous m'aider

Merci bcp

lorisbc commented 1 month ago

Bonjour, Désolé, je n'ai pas maintenu cette intégration pour la Sieva, ils ont eu pas mal de problèmes de données ces derniers mois (et je ne pensais pas que d'autres personnes seraient intéressées...)

Aujourd'hui, j'utilise un script qui tourne sur un autre serveur, il se connecte tous les jours à la Sieva, télécharge en csv la consommation de chaque jour, fait la somme globale et envoie à mon instance Home Assistant la valeur totale en m3 grâce à l'API Home Assistant.

Je vous mets le code ici, si ça peut aider ou si vous avez la motivation de recréer une intégration Home Assistant.

import base64
import functions_framework
from os import getenv
import csv
from requests_html import HTMLSession
import time
import requests

def get_consumption():
    sieva = Sieva(getenv("LOGIN"), getenv("PASSWORD"), getenv("PI"))
    m3 = sieva.get_consumption()
    print(m3)
    post_state(m3)

class Sieva:
    def __init__(self, login, password, delivery_point):
        """Init sieva class

        Args:
            login: login
            password: password
            delivery_point: delivery point identifier
        """
        self.login = login
        self.password = password
        self.delivery_point = delivery_point

    def get_consumption(self):

        session = HTMLSession(verify=False)
        # Login
        login_page = session.get("https://ael.sieva.fr/Portail/fr-FR/Connexion/Login")

        verification = login_page.html.xpath('//*[@id="out_container"]/div[2]/form/input')
        verification_token = verification[0].attrs['value']

        time.sleep(10)

        session.post('https://ael.sieva.fr/Portail/fr-FR/Connexion/Login', data={
            'Login': self.login,
            'MotDePasse': self.password,
            '__RequestVerificationToken': verification_token
        })

        time.sleep(10)

        # Get data from csv export
        csv_response = session.get(f"https://ael.sieva.fr/Portail/fr-FR/Usager/Abonnement/ExportGraphReleveDataCSV?pointDInstallationId={self.delivery_point}&dateDebut=&dateFin=&granularite=Jour")
        decoded_csv_response = csv_response.content.decode('utf-8')

        print(f"Csv response : {decoded_csv_response}")

        cr = csv.reader(decoded_csv_response.splitlines(), delimiter=';')
        lines = list(cr)
        lines.pop(0)  # Remove header

        index_m3 = 0
        for row in lines:
            index_m3 += float(row[2])

        return index_m3

def post_state(state_value):
    url = "https://[YOUR_HA_URL].ui.nabu.casa/api/states/sensor.sieva_m3"
    bearer_token = getenv("BEARER")
    headers = {
        "Authorization": f"Bearer {bearer_token}",
        "Content-Type": "application/json",
    }
    data = {
        "state": state_value,
        "attributes": {
            "unit_of_measurement": "m³",
            "icon": "mdi:water",
            "device_class": "water",
            "state_class": "total_increasing"
        },
    }

    response = requests.post(url, json=data, headers=headers, verify=False)

    print(response.status_code)
    print(response.text)

requirements.txt

functions-framework==3.*
requests-HTML==0.10.0
lxml-html-clean==0.2.2
requests==2.28.*