Problème pour récupérer et décoder une trame JSON

Je voudrais récupérer sous HA les données de consommations électriques que fourni le compteur d’energie schneider Wiser EM5 + module IP EER31800. C’est la suite du post https://forum.hacf.fr/t/solution-wiser-energy-de-chez-schneider-electric/2045/13
avec la commande

curl -X GET -k -u m2madmin:xxxx  "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"

je récupère la trame

{ "sId": 205, "ch": 5, "EP": 0, "EPR": 0, "EQ": 0, "ES": 0, "EPz": 12280648, "EPRz": 0, "EQz": 0, "ESz": 0, "IA": 0, "IB": 0, "IC": 0, "UAB": 0, "UBC": 0, "UCA": 0, "VA": 0, "VB": 0, "VC": 0, "PA": 0, "PB": 0, "PC": 0, "P": 1370, "Q": 0, "S": 0, "PF": 0, "F": 0, "lL": 0, "cS": false }

Aprés pas mal de recherches j’ai mis le code suivant :

  - platform: rest
    name: Wiser
    resource: "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"
    method: GET
    username: m2madmin
    password: xxxx
    authentication: basic
    headers:
        Content-Type: application/json
        User-Agent: Home-Assistant
    verify_ssl: false
    device_class: energy
    unit_of_measurement: Wh
    json_attributes:
        - sId
        - ch
        - P

Dans les logs je vois ceci :

homeassistant.exceptions.InvalidStateError: Invalid state encountered for entity ID: sensor.wiser. State max length is 255 characters.

J’en déduis que la requête a réussi mais je ne comprends pas, je n’ai pas de champs State.

Ma configuration


[center]## System Health

version core-2022.2.8
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.9.7
os_name Linux
os_version 5.10.92-v8
arch aarch64
timezone UTC
Home Assistant Community Store
GitHub API ok
Github API Calls Remaining 4896
Installed Version 1.22.0
Stage running
Available Repositories 979
Downloaded Repositories 17
Home Assistant Cloud
logged_in false
can_reach_cert_server ok
can_reach_cloud_auth ok
can_reach_cloud ok
Home Assistant Supervisor
host_os Home Assistant OS 7.4
update_channel stable
supervisor_version supervisor-2022.01.1
docker_version 20.10.9
disk_total 232.2 GB
disk_used 15.5 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons File editor (5.3.3), Check Home Assistant configuration (3.10.0), Terminal & SSH (9.3.0), ESPHome (2022.2.1), WireGuard (0.6.0), InfluxDB (4.3.0), Grafana (7.4.1), Vaultwarden (Bitwarden) (0.15.0), motionEye (0.17.0), Mosquitto broker (6.0.1), FTP (4.4.1), Samba share (9.5.1), Network UPS Tools (0.9.1), Let’s Encrypt (4.12.0)
Lovelace
dashboards 1
resources 7
views 15
mode storage
[/center]

Salut,

L’info importe est là :

Ton Json (donc le state puisque c’est la réponse) en fait 286

Réponse ÷ State !?

A ben forcément !:grin:

Par contre comment on augmente la taille de ce buffer ?

A ma connaissance on peux pas.
Il faut voir si une autre intégration est exploitable

D’après ce topic
https://community.home-assistant.io/t/rest-sensor-state-max-length-is-255-characters/31807/13

On devrait pouvoir contourner le PB.

Bon pour l’instant je suis sur mon téléphone avec ma fille dans les bras :crazy_face::grin:

Je regarde ça tout à l’heure.

Merci pour m’avoir mis sur la piste :wink:

1 « J'aime »

J’ai eu le problème pour récupérer la version « active » de plex, je te mets mon code en exemple :

  • Dans mon fichier rest.yaml :
- resource: https://plex.tv/api/downloads/5.json
  scan_interval: 600
  sensor:
    - name: "Plex Query"
      json_attributes_path: "$.computer"
      value_template: "ok"
      json_attributes:
        - "Linux"

Tu notes le « value_template » qui va donner comme état au sensor la valeur « OK », si tu ne fais pas ça c’est toute la trame qui sera considérée comme état. Et comme elle est trop longue => « error ».

  • Ensuite j’ai créé un sensor avec la platforme template, dont l’état sera celui de l’attribut du sensor créé ci-dessus :
  - name: "Plex Current Version"
    unique_id: plex_current_version
    state: "{{ state_attr('sensor.plex_query', 'Linux')['version'] }}"
    icon: mdi:plex

Donc chez toi un truc comme ça devrait pouvoir fonctionner :

  - platform: rest
    name: Wiser
    resource: "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"
    method: GET
    username: m2madmin
    password: xxxx
    authentication: basic
    headers:
        Content-Type: application/json
        User-Agent: Home-Assistant
    verify_ssl: false
    device_class: energy
    unit_of_measurement: Wh
    value_template: "ok"
    json_attributes:
        - sId
        - ch
        - P

Et ensuite un sensor par valeur, exemple avec le sId :

  - name: "Wiser sID"
    unique_id: wiser_sid
    state: "{{ state_attr('sensor.wiser', 'sId') }}"
    icon: mdi:plex

Je suis pas certain d’avoir était clair mais j’entends dans l’oreillette que c’est l’heure du repas :wink:

[EDIT] de retour après le repas, j’ai pris le temps de lire le topic avec un peu plus de concentration. Je vois que tu étais déjà sur la piste. Donc mon message ne va pas t’apporter grand chose en plus à part le fait d’extraire l’attribut pour en faire un sensor à part entière.

Je reviens vers vous car j’ai réussi a récupérer les infos de la requête JSON dans HA grâce a vos pistes.

Dans la sections sensors:

  - platform: rest
    name: "Wiser 205 5"
    resource: "https://192.168.0.40/rsa1/MeasurementData;sId=205;ch=5"
    method: GET
    authentication: basic
    username: m2madmin
    password: !secret wiser_psswd
    scan_interval: 60
    headers:
        Content-Type: application/json
        User-Agent: Home-Assistant
    verify_ssl: false
    value_template: "OK"
    json_attributes:
        - P

Et dans la section template :

    sensor:
      - name: "Wiser Conso Maison"
        unique_id: wiser_maison
        state: "{{ state_attr('sensor.wiser_205_5','P') }}"
        device_class: energy
        unit_of_measurement: Wh

Ca fonctionne mais en pratique les valeurs que je récupère ne sont pas vraiment exploitables.

Je vais essayer de décoder la trame :

curl -k --user m2madmin:xxxxxx" https://wiserIp/rsa1/MeterInstantData
{ "MeterInstantData": [ { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 607, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 5 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 0 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 1 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 15, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 2 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 0, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 3 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 582, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 205, "channel": 4 }, { "currentA": 0, "currentB": 0, "currentC": 0, "voltageAB": 0, "voltageBC": 0, "voltageCA": 0, "voltageAN": 0, "voltageBN": 0, "voltageCN": 0, "powerA": 0, "powerB": 0, "powerC": 0, "powerTActive": 25, "powerTReactive": 0, "powerTApparent": 0, "powerFactorT": 0, "frequency": 0, "slaveId": 201, "channel": 2 } ] }