Lire les données de consommation d'eau depuis un fichier json

Bonjour
J’ai un fichier json qui est rafraichi tous les jours :

 cat saur_daily.json
[
    {
        "startDate": "2024-06-01T00:00:00",
        "endDate": "2024-06-02T00:00:00",
        "value": 0.1
    },
    {
        "startDate": "2024-06-02T00:00:00",
        "endDate": "2024-06-03T00:00:00",
        "value": 0.17
    },
    {
        "startDate": "2024-06-03T00:00:00",
        "endDate": "2024-06-04T00:00:00",
        "value": 0.08
    },
    {
        "startDate": "2024-06-04T00:00:00",
        "endDate": "2024-06-05T00:00:00",
        "value": 0.15
    },
    {
        "startDate": "2024-06-05T00:00:00",
        "endDate": "2024-06-06T00:00:00",
        "value": 0.1
    },
    {
        "startDate": "2024-06-06T00:00:00",
        "endDate": "2024-06-07T00:00:00",
        "value": 0.13
    },
    {
        "startDate": "2024-06-07T00:00:00",
        "endDate": "2024-06-08T00:00:00",
        "value": 0.15
    },
    {
        "startDate": "2024-06-08T00:00:00",
        "endDate": "2024-06-09T00:00:00",
        "value": 0.17
    },
    {
        "startDate": "2024-06-09T00:00:00",
        "endDate": "2024-06-10T00:00:00",
        "value": 0.19
    },
    {
        "startDate": "2024-06-10T00:00:00",
        "endDate": "2024-06-11T00:00:00",
        "value": 0.08
    },
    {
        "startDate": "2024-06-11T00:00:00",
        "endDate": "2024-06-12T00:00:00",
        "value": 0.35
    },
    {
        "startDate": "2024-06-12T00:00:00",
        "endDate": "2024-06-13T00:00:00",
        "value": 0.29
    },
    {
        "startDate": "2024-06-13T00:00:00",
        "endDate": "2024-06-14T00:00:00",
        "value": 0.12
    },
    {
        "startDate": "2024-06-14T00:00:00",
        "endDate": "2024-06-15T00:00:00",
        "value": 0.33
    },
    {
        "startDate": "2024-06-15T00:00:00",
        "endDate": "2024-06-16T00:00:00",
        "value": 0.19
    },
    {
        "startDate": "2024-06-16T00:00:00",
        "endDate": "2024-06-17T00:00:00",
        "value": 0.2
    },
    {
        "startDate": "2024-06-17T00:00:00",
        "endDate": "2024-06-18T00:00:00",
        "value": 0.15
    },
    {
        "startDate": "2024-06-18T00:00:00",
        "endDate": "2024-06-19T00:00:00",
        "value": 0.14
    },
    {
        "startDate": "2024-06-19T00:00:00",
        "endDate": "2024-06-20T00:00:00",
        "value": 0.23
    },
    {
        "startDate": "2024-06-20T00:00:00",
        "endDate": "2024-06-21T00:00:00",
        "value": 0.08
    },
    {
        "startDate": "2024-06-21T00:00:00",
        "endDate": "2024-06-22T00:00:00",
        "value": 0.09
    },
    {
        "startDate": "2024-06-22T00:00:00",
        "endDate": "2024-06-23T00:00:00",
        "value": 0.14
    },
    {
        "startDate": "2024-06-23T00:00:00",
        "endDate": "2024-06-24T00:00:00",
        "value": 0.18
    },
    {
        "startDate": "2024-06-24T00:00:00",
        "endDate": "2024-06-25T00:00:00",
        "value": 0.2
    },
    {
        "startDate": "2024-06-25T00:00:00",
        "endDate": "2024-06-26T00:00:00",
        "value": 0.22
    },
    {
        "startDate": "2024-06-26T00:00:00",
        "endDate": "2024-06-27T00:00:00",
        "value": 0.28
    },
    {
        "startDate": "2024-06-27T00:00:00",
        "endDate": "2024-06-28T00:00:00",
        "value": 0.21
    },
    {
        "startDate": "2024-06-28T00:00:00",
        "endDate": "2024-06-29T00:00:00",
        "value": 0
    },
    {
        "startDate": "2024-06-29T00:00:00",
        "endDate": "2024-06-30T00:00:00",
        "value": 0
    },
    {
        "startDate": "2024-06-30T00:00:00",
        "endDate": "2024-07-01T00:00:00",
        "value": 0
    }
]

J’aimerai le charger dans homeassistant pour l’afficher par exemple avec apex-charts
Comment faire ?
merci

Salut,

il n’y a pas une intégration SAUR qui existe déjà ?

non pas a ce que je sache

Bonjour @Benoit_Dierickx

Je suis chez Saur également, si un jour une intégration existe je serai intéressé, ce serait sympa de me communiquer l’info. En attendant, j’ai vu une vidéo d’un petit jeune sui touche sa bille pour une camera au dessus du compteur avec un esp32cam. J’essaierai quand je trouverai un peu de temps. Bon week-end

bonjour je suis interressé par la video
cordialement

Bonsoir @Benoit_Dierickx

Bonne fin de soirée

Si les autres propos ne sont pas suffissantes … Tu peux l’ajouter commes des attributes dans une simple entité et ensuite utiliser apex.

EDIT: par voie fichier local

  - sensor: 
        name: testconso
        scan_interval: 1500
        command: >
             echo "{\"conso\":" $(
             curl 
             -s 
             'http://192.168.1.20:8124/local/test5.json'
             ) "}" 
        value_template: > 
            {{ value_json.conso | length }}
        json_attributes:
            - conso   

te donne ça ou avec apex est une option

@vingerha
nikel ta solution je vais prendre la tienne

j’ai donc ajouter le paragraphe suivant dans mon fichier configuration.yaml dans la partie sensor
La ou j’ai deja tous mes sensors

sensor:
  - sensor:
    name: consoeau
    scan_interval: 100
    command: >
      echo "{\"conso\":" 
      $(curl -s 'http://192.168.1.20:8123/local/saur_day.txt' ) "}" 
    value_template: > 
       {{ value_json.conso | length }}
    json_attributes:
      - conso   

Ce qui m’etonne c’est que ton sensor n’est pas la directive (platform:)

sensor:
  - platform: xxxx
    xxxxxx

Alors que tout mes autres sensors dans la partie (sensor:) ont la forme suivante (avec platform:) :

  - platform: statistics
    name: consom_min
    entity_id: sensor.wemos_consom
    state_characteristic: value_min
    max_age:
      hours: 24

quand je cliquer sur « check_configuration » j’ai cette erreur

Invalid config for 'sensor' at configuration.yaml, line 196: required key 'platform' not provided 

Peux tu m’aider
thx

Ah… c’est command line, j’avais copié le tout

command_line:
  - sensor:
...
...
1 « J'aime »

Hello,

Comment récupères-tu le json? Tu peux utiliser le composant RESTful:

Avec un device_class water:

Peu importe comment tu récupères tu peux toujours faire un template au pire avec les bon paramètres pour que ça se mette dans le dashboard énergie.

Explique moi comment tu le fait car les données ne sont pas des statistiques, juste une liste et sans trucquerie pas possible

L’exemple de l’OP donne aucun attribut (key de base) donc comment mettre les détails dans les attributes?

bon j’avance mais
j’ai mis dans mon configuration.yaml

command_line:
  - sensor:
    name: consoeau
    scan_interval: 100
    command: >
      echo "{\"conso\":" 
      $(curl -s 'http://192.168.1.22:8123/local/saur_day.txt' ) "}" 
    value_template: > 
       {{ value_json.conso | length }}
    json_attributes:
      - conso   

Quand je check j’ai les erreurs suivantes :

Invalid config for 'command_line' at configuration.yaml, line 195: expected a dictionary for dictionary value 'command_line->0->sensor', got None
Invalid config for 'command_line' at configuration.yaml, line 196: 'name' is an invalid option for 'command_line', check: command_line->0->name
Invalid config for 'command_line' at configuration.yaml, line 197: 'scan_interval' is an invalid option for 'command_line', check: command_line->0->scan_interval
Invalid config for 'command_line' at configuration.yaml, line 198: 'command' is an invalid option for 'command_line', check: command_line->0->command
Invalid config for 'command_line' at configuration.yaml, line 201: 'value_template' is an invalid option for 'command_line', check: command_line->0->value_template
Invalid config for 'command_line' at configuration.yaml, line 203: 'json_attributes' is an invalid option for 'command_line', check: command_line->0->json_attributes

Si je fais :

sensor:
  - platform: command_line
    name: consoeau
    scan_interval: 100
    command: >
      echo "{\"conso\":" 
      $(curl -s 'http://192.168.1.22:8123/local/saur_day.txt' ) "}" 
    value_template: > 
       {{ value_json.conso | length }}
    json_attributes:
      - conso   

quand je « check » c’est ok , je « restart ha »
ensuite si je regarde dans « developper tools » et « states » je vois pas mon sensor consoeau

Je me suis assuré en ligne de command que le curl fonctionne :

➜   echo "{\"conso\":"$(curl -s 'http://192.168.1.22:8123/local/saur_day.txt' ) "}" 
{"conso":[ { "startDate": "2024-06-01", "endDate": "2024-06-02", "value": 0.1 }, { "startDate": "2024-06-02", "endDate": "2024-06-03", "value": 0.17 }, { "startDate": "2024-06-03", "endDate": "2024-06-04", "value": 0.08 }, { "startDate": "2024-06-04", "endDate": "2024-06-05", "value": 0.15 }, { "startDate": "2024-06-05", "endDate": "2024-06-06", "value": 0.1 }, { "startDate": "2024-06-06", "endDate": "2024-06-07", "value": 0.13 }, { "startDate": "2024-06-07", "endDate": "2024-06-08", "value": 0.15 }, { "startDate": "2024-06-08", "endDate": "2024-06-09", "value": 0.17 }, { "startDate": "2024-06-09", "endDate": "2024-06-10", "value": 0.19 }, { "startDate": "2024-06-10", "endDate": "2024-06-11", "value": 0.08 }, { "startDate": "2024-06-11", "endDate": "2024-06-12", "value": 0.35 }, { "startDate": "2024-06-12", "endDate": "2024-06-13", "value": 0.29 }, { "startDate": "2024-06-13", "endDate": "2024-06-14", "value": 0.12 }, { "startDate": "2024-06-14", "endDate": "2024-06-15", "value": 0.33 }, { "startDate": "2024-06-15", "endDate": "2024-06-16", "value": 0.19 }, { "startDate": "2024-06-16", "endDate": "2024-06-17", "value": 0.2 }, { "startDate": "2024-06-17", "endDate": "2024-06-18", "value": 0.15 }, { "startDate": "2024-06-18", "endDate": "2024-06-19", "value": 0.14 }, { "startDate": "2024-06-19", "endDate": "2024-06-20", "value": 0.23 }, { "startDate": "2024-06-20", "endDate": "2024-06-21", "value": 0.08 }, { "startDate": "2024-06-21", "endDate": "2024-06-22", "value": 0.09 }, { "startDate": "2024-06-22", "endDate": "2024-06-23", "value": 0.14 }, { "startDate": "2024-06-23", "endDate": "2024-06-24", "value": 0.18 }, { "startDate": "2024-06-24", "endDate": "2024-06-25", "value": 0.2 }, { "startDate": "2024-06-25", "endDate": "2024-06-26", "value": 0.22 }, { "startDate": "2024-06-26", "endDate": "2024-06-27", "value": 0.28 }, { "startDate": "2024-06-27", "endDate": "2024-06-28", "value": 0.21 }, { "startDate": "2024-06-28", "endDate": "2024-06-29", "value": 0.46 }, { "startDate": "2024-06-29", "endDate": "2024-06-30", "value": 0.11 }, { "startDate": "2024-06-30", "endDate": "2024-07-01", "value": 0 } ] }

Tu sais pas ou je peux voir les logs de mon capteur consoeau ?
si je scanne les logs de ha

grep -i consoeau home-assistant.log

je vois rien

merci encore de ton aide

le json je le recupere avec un script bash

/config/saur_day.sh >saur_day.json

config # cat saur_day.sh
curl --location 'https://apib2c.azure.saurclient.fr/admin/auth' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic Og==' \
--data-raw '{"username":"MYEMAIL","password":"MONPASSWORD","client_id":"frontjs-client","grant_type":"password","scope":"api-scope","isRecaptchaV3":true,"captchaToken":true}'\
| jq -r '.token.access_token'>access_token


access_token=$(cat access_token)
echo "${access_token}"


curl --location 'https://apib2c.azure.saurclient.fr/deli/section_subscription/600030690001165422/consumptions/monthly?year=2024&month=6' \
--header 'Host: apib2c.azure.saurclient.fr' \
--header 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0' \
--header 'Accept: application/json, text/plain, */*' \
--header 'Accept-Language: en-US,en;q=0.5' \
--header 'Accept-Encoding: gzip, deflate, br, zstd' \
--header 'Authorization: Bearer '${access_token} \
--header 'Origin: https://mon-espace.saurclient.fr' \
--header 'Connection: keep-alive' \
--header 'Referer: https://mon-espace.saurclient.fr/' \
--header 'Sec-Fetch-Dest: empty' \
--header 'Sec-Fetch-Mode: cors' \
--header 'Sec-Fetch-Site: same-site' \
--header 'host: apib2c.azure.saurclient.fr'>saur_day.json

et un script python:

import json
import sys

# File path to the JSON file
file_path = 'saur_day.json'

# Read the JSON data from the file
with open(file_path, 'r') as file:
    data = json.load(file)


filtered_consumptions = [
    {
        "startDate": item["startDate"].split('T')[0],
        "endDate": item["endDate"].split('T')[0],
        "value": item["value"]
    }
    for item in data["consumptions"]
]

result = json.dumps(filtered_consumptions, indent=4)
print(result)

Pour ça tu ne regardes pas les attributes, juste le status de ton sensor qui doit être ta consommation.

  1. Soit ta consommation de la journée/mois/etc donc qui se remet à 0 à un moment
  2. Soit ta consommation totale, donc une valeur qui ne fait que d’augmenter (par exemple ton compteur électrique)

Je ne sais plus s’il faut pas créer une entrée (helper) counter pour avoir le sensor total à mettre dans la dashboard energy.

J’ai mon sensor en device_class: water via MQTT:

mqtt:
  sensor:
    - name: Cold Water usage
      device_class: water
      unit_of_measurement: "m3"
      state_topic: "wmbusmeters/ColdWater"
      json_attributes_topic: "wmbusmeters/ColdWater"
      value_template: "{{ value_json.total_m3 }}"
      icon: "mdi:water"

Ensuite tu peux créer un compteur de services publics:
image

Tu lui donnes ton sensor créé et tu indiques s’il se remet à zéro tous les jours, tous les mois ou s’il incrément le total.

Tu devrais avoir un sensor « usage »:

Et ça tu dois pouvoir le mettre dans ton dashboard energy.

Je suis pas super précis, désolé mais j’ai fait ça y’a un moment en suivant le tuto de Thomas pour récupérer les valeurs en radio, mais pour les sensor c’est le même esprit:

Tu veux juste avoir la valeur journalière dans le status du sensor, pas utiliser d’attribut. L’historique sera celle dans HA.

Ça devrait prendre la première valeur (0th, zeroth, zéorième donc la 1ere car on indexe à partir de 0 en informatique):

Si je comprends bien, avec ces données:

[
    {
        "startDate": "2024-06-01T00:00:00",
        "endDate": "2024-06-02T00:00:00",
        "value": 0.1
    },
    {
        "startDate": "2024-06-02T00:00:00",
        "endDate": "2024-06-03T00:00:00",
        "value": 0.17
    }
...
]

Ce composant prendra:

    {
        "startDate": "2024-06-01T00:00:00",
        "endDate": "2024-06-02T00:00:00",
        "value": 0.1
    }

en valeur. Il faut ensuite lui dire de lire value en tant que state du sensor.

Ce sont des pistes, j’ai jamais utilisé et pas le temps de tester malheureusement.

Ce qui est sûr c’est qu’on peut fournir ce qu’on veut au dashboard energy pour autant que le sensor soit bien configuré (device_class, state_class, unit_of_measurment)

Pas le bon structure, command_line a changé depuis 6mois+ voir les docus, je ne peux pas détailler tous

Command line - Home Assistant (home-assistant.io)

Encore… tu ne peux pas utiliser ces données dans dashboard energie car ce ne sont pas des statistiques-de-HA…donc toujours (!) décalés. Il faut les importer par l’api / webservice et ça c’est pas facile. Je sais d’ou je parle car j’ai crée l’importation de gaz (grdf)

ok je vois ce que tu veux dire. C’est pas live.

Par contre si tu peux extraire la dernière valeur tous les jours, tu auras la valeur de la veille si je comprends bien. Tu pourrais avoir ça dans le dashboard energy mais décalé d’un jour :confused:

En gros c’est ce que j’ai avec mon sensor MQTT. Tous les jours à 2 ou 3h du matin il donne la valeur total de mon compteur d’eau chaude et d’eau froid. HA compare avec la dernière valeur connue et met dans mon dashbaord. Je suis donc en décalé:

Si tu regardes à la journée tu vois une grosse consommation (surtout que mon compteur est précis à 100L) en plein nuit:

(note: je viens de voir que le json récupère apparemment le mois courant et indique 0 pour les jours futurs).
Ici il faudrait extraire juste la donnée de la veille, HA prendrait donc ça comme la valeur du jour, il y aurait donc un décalage d’un jour comme j’ai actuellement et une consommation forte à une heure précise.

J’aime le dashboard energy, dommage d’avoir ce décalage, je crois que c’est une feature request assez demandé de pouvoir modifier facilement les valeurs du passé.

Correcte…et créer une intégration pour l’importer n’est pas facile, pas super-complexe non plus mais que pour ceux qui savent dev sous ‹ python ›. Et le créer juste pour soi-même… ??
J’ai fait ça pour grdf (dçaclé entre 2 et 5 our plus jours) et préparé un peu pour enedis…avant j’avais Apexcharts aussi (et encore)