noiwid / tiko_heating_api

Component allowing to manage traditional radiators connected via the TIKO solution from within Home Assistant server. It requires hosting a web page that will serve as an endpoint to communicate with TIKO through their API.
19 stars 6 forks source link

Remontée de la consommation par radiateur #13

Closed Najihel closed 11 months ago

Najihel commented 1 year ago

Bonjour,

Serait-il possible d'ajouter la partie consommation pour chaque radiateur afin de les intégrer dans le Dashboard énergie ?

Consommation globale : https://particuliers-tiko.fr/api/v3/properties/220001641/consumption_summary/

Par exemple :

{
    "status": "ok",
    "response": {
        "today_total_wh": 1124,
        "yesterday_total_same_time_wh": 5799,
        "last_month_total_wh": 7374,
        "this_month_total_wh": 101868,
        "last_month_total_same_day_wh": 771
    }
}

Consommation par radiateur : https://particuliers-tiko.fr/api/v3/properties/220001641/status/

Example :

{
    "status": "ok",
    "response": [
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 1,
            "timestamp": 1700149048535,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149048371,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149048816,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149049164,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149048976,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149048359,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149048000,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "DEH",
            "consumption": 0,
            "timestamp": 1700149049128,
            "connected": true,
            "relay_state": 0
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 19.9,
            "humidity": 75,
            "timestamp": 1700148946352,
            "rssi": -59,
            "batteryLevel": 97,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 18.7,
            "humidity": 74,
            "timestamp": 1700148836548,
            "rssi": -39,
            "batteryLevel": 92,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 18.5,
            "humidity": 76,
            "timestamp": 1700148880886,
            "rssi": -70,
            "batteryLevel": 96,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 17.9,
            "humidity": 79,
            "timestamp": 1700148910464,
            "rssi": -60,
            "batteryLevel": 96,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 18.2,
            "humidity": 86,
            "timestamp": 1700148797515,
            "rssi": -66,
            "batteryLevel": 92,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 18.5,
            "humidity": 74,
            "timestamp": 1700149039284,
            "rssi": -64,
            "batteryLevel": 93,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 17,
            "humidity": 76,
            "timestamp": 1700149028772,
            "rssi": -71,
            "batteryLevel": 93,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        },
        {
            "mac": "FFFF<snip>",
            "code": "SEN",
            "temperature": 18.3,
            "humidity": 80,
            "timestamp": 1700148762802,
            "rssi": -67,
            "batteryLevel": 92,
            "leftButtonPress": false,
            "rightButtonPress": false,
            "connected": true
        }
    ]
}

Cordialement

noiwid commented 12 months ago

Hello, Je viens de creuser un peu le sujet, la donnée qui remonte dans le champ consumption sur https://particuliers-tiko.fr/api/v3/properties/220001641/status/ est difficilement exploitable, c'est la consommation d'un radiateur à l'instant T en W, et ne peut donc pas être utilisée pour alimenter le dashboard Energy de H.A, ni pour faire aucun calculs...

Qu'en penses-tu?

Najihel commented 12 months ago

Bonjour,

La consommation à l'instant T en Watt peut aller dans un sensor, ensuite il est possible d'utiliser ce sensor dans un autre sensor pour le "convertir" en Wh ou kWh pour obtenir la consommation détaillée de chaque radiateur.

Exemple pour un onduleur

template:
  - sensor:
    - name: "Grenier-Onduleur Power"
      unique_id: sensor.grenier_onduleur_power
      state_class: measurement
      device_class: power  
      unit_of_measurement: "W"
      state: "{{ states('sensor.grenier_onduleur_load')|float * 0.01 * 480|round(2) }}"
    - name: "Grenier-Onduleur Energy"
      unique_id: sensor.grenier_onduleur_energy
      unit_of_measurement: "Wh"
      state: "{{ states('sensor.grenier_onduleur_watt') }}"
      state_class: "total_increasing"
      device_class: "energy"
sensor:
  - platform: integration
    name: "Grenier-Onduleur Watt"
    unique_id: sensor.grenier_onduleur_watt
    source: sensor.grenier_onduleur_power
    round: 2
    unit_prefix: k
noiwid commented 12 months ago

Oui, je vois bien, mais le problème, c'est la fiabilité de la donnée remontée... Un radiateur a de très grandes variations de consommation (de 0 à 1000 W pour les miens) en quelques secondes, donc pour avoir une donnée fiable et agrégée, il faudrait quasiment récupérer cette info toutes les secondes... ce qui nous éloignerait d'un 'fair use' de leur API.

Et j'ai justement été contacté hier par les équipes de TIKO qui commencent à s'inquiéter du très (trop ?) grand nombre d'appels lié à l'utilisation de leur API 'hors cadre' 🙈, qui représenteraient pour chaque utilisateur d'une dizaines d'appels chaque minute à une cinquantaine pour le plus gourmand (ou chatelain, difficile à dire 🏰).

Pour prendre un peu de recul, par utilisateur ca représente :

L'API n'est actuellement pas exactement fait pour l'usage qu'on en a, et j'ai été contraint de faire pas mal d'appels (1 global + 1 par pièce à chaque mise à jour)... ce qui pourrait clairement être optimisé si ils consentaient à réaliser quelques menus changements sur les données renvoyées.

J'espère pouvoir faire avancer la discussion dans cette direction avant que la situation ne dégénère et qu'ils décident de restreindre les accès à cet API, voire fermer complètement le robinet... En attendant, il serait sage de ne pas accentuer la pression sur cet API, voire envisager réduire quelque peu les délais de mise à jour... Cela dit : je garde en tête ta demande, et si ils acceptent de faire des évolutions sur cet API, je leur demanderai s'il est possible d'ajouter la consommation agrégée par pièce dans le retour de l'API. On peut toujours rêver 😅.

phid78 commented 12 months ago

C'est peut etre que comme l'addon ne fonctionne pas (de ce que j'ai pu voir sur des forums, depuis quelques temps), les gens s'excitent a moduler les demandes de temperature qui reviennent dans la minute a leur reglage d'origine (ca a été mon cas le premier jour). Ca peut etre un argument a leur donner si il te contacte a nouveau et voir si ils peuvent te donner un coup de main pour rendre l'addon fonctionnel, c'est une priorité autant pour eux que pour nous (sauf si effectivement, ils veulent pas se prendre la tete et fermer l'API). Peut etre voir si @paulchartres a le meme soucis avec son addon, puisqu'apparement il a copier ton addon, il y a de forte chance et avec les pubs a la télé, y a de plus en plus de personne qui demande l'installation( dixit l'installeur), donc possiblement de personnes qui domotisent via l'api. Dans mon cas, les pieces sont louées et chaque locataire doit pouvoir gerer son chauffage, sauf que depuis l'installation c'est pas le cas, donc c'est le bordel. J'ai envoyé un mail pour demander un acces par rapdiateur sur leur site, mais pas de reponse a ce jour...

Najihel commented 12 months ago

Effectivement je n'avais pas conscience de la pression engendrée sur l'API.

La vraie solution serait la possibilité d'interroger la gateway localement et non taper leur API 😇

Merci de ton implication en tout cas