Impossible d'exploiter Sensor :'(

Bonjour.

Je pensais arriver ici (ou Github) avec une contribution sympa (avoir une exploitation des créneaux Tempo mais sans Zlinky mais juste un module connecté + pince) mais j’ai un autre problème à résoudre… j’ai eu beau chercher encore et encore mais le résultat est toujours le même. Pas facile, pas facile… et là franchement mes yeux me piquent!! Je vais probablement avoir l’air con… mais bon.

Postulat de départ: exploitation d’un module connecté avec 2 pinces ampèremétriques. 1 pince sur l’arrivée maison (A), 1 autre sur la prod fournie pas des PV (B). Création de sensors, etc… jusque là pas de pb du tout… mais comme l’a fait remarquer Felix62 dans son super post à propos de la Gestion de la Prod Solaire il y a un tas de réactions induites par l’installation. Dans mon cas j’ai remarqué que la nuit sur la pince B j’avais une prod, ou plutôt une conso, de fait ce sensor passe en négatif. C’est normal, MAIS je ne veux pas que ça apparaisse, notamment la nuit. Je me suis donc dit que je devais filtrer tous les résultats inférieur à 0 et exploiter que cette valeur.

Mon problème:

J’arrive à exercer un filtre MAIS je n’arrive pas à exploiter la valeur du sensor! Celui-ci en exploit est nul (0.00) ou unknow et de fait cela fausse tous mes calculs de jour.

Voyez par vous-même ma config:

template:
  - sensor:
      - name: ML_Power_A
        unit_of_measurement: "W"
        device_class: power
        #update_interval: 1s
        state: "{{ (states('sensor.current_voltage') | float(default=0) * states('sensor.power_factor_a') | float(default=0) * states('sensor.current_a') | float(default=0)) | round(2)}}"

      - name: "ML_Power_B_Minushmsconso"
        unique_id: "ML_Power_B_Minushmsconso"
        unit_of_measurement: "W"
        device_class: power
        #update_interval: 1s
        state: "{{ (((states('sensor.current_voltage') | float(default=0) * states('sensor.power_factor_b') | float(default=0) * states('sensor.current_b') | float(default=0))) - 3.03) | round(2)}}"

      - name: "ML_Power_b_final"
        unique_id: "ML_Power_b_final"  
        unit_of_measurement: "W"
        device_class: power
        #update_interval: 1s
        states: >-
          {% if states('sensor.ml_power_b_minushmsconso') | float(0) > 0 %}{{ states('sensor.ml_power_b_minushmsconso') }}
          {% else %}
          0.00
          {% endif %}

{{ states ('sensor.ml_power_a') }}
{{ states ('sensor.ml_power_b_minushmsconso') }}
{{ states ('sensor.ml_power_b_final') }}

Donne:

J’ai essayé :

  • de changer de filtre via un is_state(‹ sensor.ml_power_b_minushmsconso | int > 0 ›)
    même résultat

  • loger le résultat dans un input_number,

input_number:
ml_power_b_exploit:
name: ml_power_b_exploit
min: 0
max: 5000
data:
value: « {{ states(‹ sensor.ml_power_b_final ›) | float(default=0) | round(2)}} »

Output de l’input_number: 0.0

Merci à l’âme généreuse qui saura me sortir de ce cauchemard !!!

Ma configuration


[center]## System Information

version core-2024.2.1
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.1
os_name Linux
os_version 6.1.63-haos-raspi
arch aarch64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 4918
Installed Version 1.34.0
Stage running
Available Repositories 1471
Downloaded Repositories 13
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 11.5
update_channel stable
supervisor_version supervisor-2024.02.1
agent_version 1.6.0
docker_version 24.0.7
disk_total 109.3 GB
disk_used 12.6 GB
healthy true
supported true
board rpi4-64
supervisor_api ok
version_api ok
installed_addons Mosquitto broker (6.4.0), Zigbee2MQTT (1.36.0-1), Duck DNS (1.15.0), File editor (5.8.0), Terminal & SSH (9.9.0), InfluxDB (5.0.0), Grafana (9.1.3), Home Assistant Google Drive Backup (0.112.1), Samba share (12.3.0), Studio Code Server (5.15.0), AppDaemon (0.16.4), Glances (0.21.0), SQLite Web (4.1.2)
Dashboards
dashboards 4
resources 6
views 4
mode storage
Recorder
oldest_recorder_run 1 mars 2024 à 16:56
current_recorder_run 7 mars 2024 à 14:58
estimated_db_size 248.46 MiB
database_engine sqlite
database_version 3.44.2
[/center]

Bonjour et bienvenue RobMicky,

j’espère avoir compris ta question :stuck_out_tongue: j’avais plus ou moins le même probleme avec un shelly EM3 lorsque la production solaire est a zéro, j’ai ou plutôt j’avais une consommation de 11 watts j’ai donc fait ceci dans un template.

 # fix values for shelly when solar drops below 0w
    - name: solar_relative
      unique_id: solar_relative
      device_class: energy
      unit_of_measurement: 'W'
      state: >
        {% if states('sensor.shellyem3_3494547b98b2_channel_a_power') | int < 0 %}
          0
        {% else -%}
          {{ (states('sensor.shellyem3_3494547b98b2_channel_a_power') | float) | abs }}  
        {% endif %}      

Bonsoir Vincha,

Merci pour ton aide. Je vais essayer ton code.

De mon coté, j’arrive à peu près à faire ce que je veux SAUF qu’à l’issu du traitement la valeur du sensor est 0 ou unknow. :pensive:

Encore ce soir j’ai essayé en m’inspirant ce qu’à fait Felix62, et toujours et encore le même probléme :frowning:

Look:

J’ai mis 8.00 en sortie du travail sur le sensor B afin d’avoir une visu plus expressive (est-ce que ça passe dans la condition ou pas). J’ai bien des valeurs qui varient entre 0 et des poussières et 8.00, mais si je fais un {{ states(‹ sensor.ml_power_a_forward ›) }} ou b_reverse je n’ai que des unknow alors qu’on voit bien dans le screen de droite qu’une valeur a été calculée pour a ou b…

Salut
As tu défini tes sensors dans un fichier yaml (configuration.yaml ou autre) parce que la des captures que tu montres j’ai l’impression que tu essaies de les définir dans outils de développement/modeles

Hello Tochy,

Je les ai initialement défini dans mon configuration.yaml oui mais depuis le bug que j’ai constaté je bosse essentiellement dans développement/modeles oui.

J’y ai en effet développé de nouveaux sensors. On ne peut pas ? Cette interface de test n’est pas faite pour ça ? Tester avant de mettre en prod…

L’interface Dev/Modèle dit pourtant qu’elle est à l’écoute:

Ce modèle est mis à jour au début de chaque minute.

Ce modèle écoute les événements de changement d'état suivants :

Entité: binary_sensor.afternoon
Entité: binary_sensor.evening
Entité: binary_sensor.morning
Entité: binary_sensor.night
Entité: sensor.ctclampa_power_flow
Entité: sensor.ctclampb_power_flow
Entité: sensor.current_a
Entité: sensor.current_b
Entité: sensor.current_voltage
Entité: sensor.ml_conso_versus_prod
Entité: sensor.ml_power_a
Entité: sensor.ml_power_a_forward
Entité: sensor.ml_power_b_final
Entité: sensor.ml_power_b_minushmsconso
Entité: sensor.ml_prod_versus_conso
Entité: sensor.ml_reverse_b
Entité: sensor.power_factor_a
Entité: sensor.power_factor_b
Entité: sensor.solar_relative, rounded=True, with_unit=True

L’ensemble des capteurs testés ont été créé dans Dev/Modèles…
pour certains d’eux un {{ states (‹ sensor ›) }} donne leur valeur, pour d’autres non:

Je ne pense pas que les sensors se définissent dans outils de dev/modeles.
Pour moi tu définis ton capteur dans un yaml et dans outils de dev tu peux tester des calculs ou mises en formes sur le capteur que tu peux reproduire ensuite soit dans la définition du capteur soit dans une carte a afficher, mais je peux me planter aussi.


La j’ai simplement recopier un de tes sensors et outils de dev me dis qu’il l’écoute mais pour autant il n’existe pas dans ma config d’où le unknown en résultat

Bon tu n’as pas défini le sensor, mais je comprends ta logique.

Je vais (1) de définir dans configuration.yaml, et (2) de voir l’exploit dans Modèle…
Si c’est ainsi au final l’interface Dev\Modèle est vachement limitée si on ne peut créer ou modifier la définition de sensors…

Pas la solution pour moi Vincha.

Via ton code mon sensor qui parfois délivre une valeur négative, se voit affecter soit 0 s’il est inférieur à 0 de 1 (à partir de -1) sinon la valeur négative (par exemple -0.36) est convertie en positive. Ce n’est pas mon but. Perso dès que ça passe vers le négatif je veux que ce soit arrondi à 0.

… voir à la limite je pense même à une autre façon de faire: si le créneau est par exemple entre 0h et 8h ou entre 19 et 23h59, forcer le capteur à l’état 0.

Merci quand même :pray:

1 « J'aime »