Créer une automatisation dans ESPHOME pour lire un capteur dans des conditions bien précise

Mon problème

Bonjour,

Je continue mon projet de monitoring chaudière et plus précisément sur la mesure du niveau de fioul dans la cuve.

J’ai abandonné la mesure ultrason qui me renvoie n’importe quoi, probablement a cause de la forme de la cuve faute d’avoir un capteur avec un angle de lecture très faible.

Donc j’ai bricolé un système utilisant la jauge d’origine (par pression hydrostatique) en y incluant un capteur de pression.

Ca fonctionne plutôt bien mais, il y a des fuites donc il faut « gonfler » le système avant de prendre la mesure, j’ai donc installer une pompe à air d’aquarium pour « gonfler » le circuit.

Par contre il n’y a aucun intérêt de faire fonctionner cette pompe en permanence, car il n’y a aucun intérêt de mesurer le niveau en permanence. Un fois par jour sera suffisant.

Toujours pareil je galère avec les doc ESPHOME, et j’ai essayé un script.

Je le lance avec un « on_interval », et j’arrive à faire démarrer la pompe durant la durée nécessaire pour regonfler le système, mais je ne vois pas comment déclencher et sauvegarder la mesure de pression lors de l’arrêt de la pompe. Cette mesure restant la seule valide avant la prochaine mesure.
Donc voila mon script et la définition du sensor qui fonctionne, ma question c’est comment les mettre bout à bout.

J’ai aussi essayé avec une variable globale mais échec !..

#déclenchement du script (10 s c'est pour faire les essais !)  

- interval: 10s
    then:
      - script.execute: mesure_niveau_cuve




# Le script 
script:
  - id: mesure_niveau_cuve
    then:
      - switch.turn_on: pompe
      - delay: 5s
      - switch.turn_off: pompe
      - delay: 0.5s
# La mesure de pression est à prendre maintenant  !


# Le sensor de pression (ici une mesure toutes les 10 secondes je ne vois pas comment l'intégrer dans le script au dessus)

  - platform: hx711
    name: "Pression"
    id: "pression_fioul"
    dout_pin: 26
    clk_pin: 27
    gain: 128
    update_interval: 10s
    filters:
      - calibrate_linear:
          - 180000 -> 0
          - 8000000-> 100
    unit_of_measurement: "%"
    accuracy_decimals: 0    
        

Bon bref j’ai essayé, variable globals, lambda etc , soit j’ai des erreurs de compilation soit la valeur retour reste à zéro.

Si quelqu’un à déjà fait ou vu cela je suis preneur.

Merci d’avance.

Philippe

A+

Ma configuration


System Information

version core-2023.3.4
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.10.10
os_name Linux
os_version 5.15.90
arch x86_64
timezone Europe/Paris
config_dir /config
Home Assistant Community Store
GitHub API ok
GitHub Content ok
GitHub Web ok
GitHub API Calls Remaining 5000
Installed Version 1.31.0
Stage running
Available Repositories 1250
Downloaded Repositories 5
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 9.5
update_channel stable
supervisor_version supervisor-2023.03.1
agent_version 1.4.1
docker_version 20.10.22
disk_total 30.8 GB
disk_used 11.9 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons File editor (5.5.0), Mosquitto broker (6.1.3), Duck DNS (1.15.0), Samba share (10.0.0), AdGuard Home (4.8.3), Node-RED (14.1.0), SSH & Web Terminal (13.0.3), NGINX Home Assistant SSL proxy (3.2.0), ESPHome (2023.3.0), MariaDB (2.5.2), Studio Code Server (5.5.4), motionEye (0.18.0), Zigbee2MQTT Edge (edge)
Dashboards
dashboards 2
resources 3
views 11
mode storage
Recorder
oldest_recorder_run 9 mars 2023 à 20:21
current_recorder_run 16 mars 2023 à 06:56
estimated_db_size 235.66 MiB
database_engine mysql
database_version 10.6.10
___

A ma connaissance tu ne peux pas avoir un capteur disponible que par moment dans ESPHome malheureusement :frowning:

Merci Vincent,

Je m’en doutais aussi, mais il y surement moyen de dupliquer la valeur de ce capteur variable et de sauvegarder cette valeur bien précise à l’instant T, afin de l’utiliser dans l’affichage plutôt que le capteur d’origine. En tout cas c’est ce que je veux faire.

A+

Oui effectivement et dans ce cas tu peux arriver à tes fins assez facilement en décidant de copier la valeur du capteur réel uniquement quand tu es dans les bonnes conditions dans le capteur remonté à HA :wink: Le reste du temps ton capteur remonté à HA reste figé sur la dernière valeur transmise quand ton système était dans les conditions :sunglasses:

Et comment fait-on ça dans le script ? c’est ma question en fait.

A+ Philippe

Bon finalement, j’ai reçu de l’aide sur le forum HA (en Anglais). L’auteur d’une config assez complète m’a dirigé sur son travail et en fouillant cet exemple assez complet, je trouve, j’ai trouvé mon bonheur.

La solution que j’y ai trouvée est assez simple quand on a un exemple.

J’ai mis l’intervalle de lecteur du capteur à « never » (ca ne s’invente pas mais je n’avais pas trouvé cette piste dans la doc) , comme ça il ne se met pas à jour de lui même.

Ensuite il faut utiliser : "component.update: " pour lancer une lecture du capteur quand on le souhaite (je l’ai inséré dans mon Template au bon endroit).

Pour avoir une valeur au démarrage j’ai fait une première mesure (lancer le template) dans la section « on_boot »

Et ensuite dans un intervale à 24 heures une nouvelle mesure (relance du template).

A+ Philippe

1 « J'aime »

Ah oui effectivement merci pour le partage de l’astuce que je ne connaissais pas non plus et bien plus élégante que la « magouille » que je t’avais indiqué :wink: