Binary.sensor avec delay

Bonjour,

J’ai mis une prise sur ma machine à laver, afin de suivre sa consommation électrique. Le but ici est de détecter quand ma machine est terminé, et de recevoir une notification sur mon téléphone.

D’aprés le suivi que j’ai, je peux me baser sur le fait que si la consommation est supérieur a 10W pendant au moins 10min (pour éviter d’avoir des fausses alertes), alors mon sensor serait ON
inversement, si la conso est inférieur a 10W pendant au moins 10min, alors mon sensor serait OFF.

Grâce a ceci, je pourrais faire ensuite une automatisation pour m’envoyer une notification, mais aussi faire une vignette pour mon dashboard.

Rien de bien compliqué jusque là :slight_smile:
mais, je galère un peu sur la mise en place :frowning:

J’ai ajouté ceci dans mon configuration.yaml

template:
  - binary_sensor:
      - name: "Statut Lave-linge"
        unique_id: "binary_sensor_Statut_Lave-linge"
        state: >
          {{ states('sensor.lave_linge_consommation_actuelle')|float > 10 }}
        delay_on: '00:10:00'
        delay_off: '00:10:00'

Le soucis est que l’état de mon sensor reste sur unknown.

Si j’enlève les delay, par contre tout fonctionne bien !

Il me semblais avoir lu qu’il fallait faire comme ceci sur un autre poste sur le forum, mais ça ne semble pas fonctionner chez moi :frowning:

J’imagine que quelqu’un ici dois avoir la solution :slight_smile:

Merci par avance pour votre aide !
merci

salutations

Ma configuration


System Information

version core-2024.5.5
installation_type Home Assistant OS
dev false
hassio true
docker true
user root
virtualenv false
python_version 3.12.2
os_name Linux
os_version 6.6.29-haos
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.34.0
Stage running
Available Repositories 1393
Downloaded Repositories 5
HACS Data ok
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 12.3
update_channel stable
supervisor_version supervisor-2024.05.1
agent_version 1.6.0
docker_version 25.0.5
disk_total 30.8 GB
disk_used 3.9 GB
healthy true
supported true
board ova
supervisor_api ok
version_api ok
installed_addons Terminal & SSH (9.14.0), File editor (5.8.0), Matter Server (6.0.0)
Dashboards
dashboards 4
resources 3
views 7
mode storage
Recorder
oldest_recorder_run 30 mai 2024 à 10:51
current_recorder_run 5 juin 2024 à 15:34
estimated_db_size 20.76 MiB
database_engine sqlite
database_version 3.44.2
Sonoff
version 3.7.3 (e240aaf)
cloud_online 23 / 35
local_online 17 / 17
___

Salut

Tu te compliques la vie, il y a les blueprints!

Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.

Sinon essaie ça :

template:
  - binary_sensor:
      - name: "Statut Lave-linge"
        unique_id: "binary_sensor_Statut_Lave-linge"
        state: >
          {{ (states('sensor.lave_linge_consommation_actuelle')|float(0)) > 10 }}
        delay_on: '00:10:00'
        delay_off: '00:10:00'
1 « J'aime »

Il y a de nombreuses discussion sur le sujet.
Par exemple, je te conseille la lecture de ce sujet:
Obtenir le temps d’utilisation d’un appareil électrique sur une période donnée - Home Assistant - Tutoriels & Partages / Intégration - Home Assistant Communauté Francophone (hacf.fr)

Sinon utiliser le trigger avec la notion de « temps » :

et ajouter une condition qui pourrait être une tranche horaire ou un imput boolean que tu crées grâce au helper depuis l’interface web de HA qui s’active (par une autre automation) si par exemple, tu dépasses le seuil de 10w

exemple

machine démarre dépasse les 10W de conso, l’automatisation détecte la conso au-dessus de 10W et donc active l’input-boolean = ON et quand ta machine descend en dessous de 10W pendant 10 min alors l’autre automatisation détecte et va vérifier si la condition input_boolean = ON, alors, je notifie que la machine est terminée

Oui, 2 ou 3 automatisations est le plus simple.
Ci-dessous ce que j’ai pour la charge de ma voiture, y compris les notifications de fin et de consommation.

Automatisation n°1:

- id: '1681401623013'
  alias: 'Charge voiture : 1 - Start'
  description: Charge voiture start
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_2
    above: 2000
    for:
      hours: 0
      minutes: 1
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.charge_voiture_cycle
    state: 'off'
  action:
  - service: utility_meter.calibrate
    data:
      value: '0'
    target:
      entity_id: sensor.charge_voiture_power_cycle
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.charge_voiture_cycle
  mode: single

Automatisation n°2:

- id: '1681401766283'
  alias: 'Charge voiture : 2 - Fin'
  description: Charge voiture Fin
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_2
    below: 10
    for:
      hours: 0
      minutes: 5
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.charge_voiture_cycle
    state: 'on'
  action:
  mode: restart

Automatisation n°3:

- id: '1681401962227'
  alias: 'Charge voiture : 3 - Fin, notifications'
  description: Charge voiture Fin, notifications
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_2
    below: 10
    for:
      hours: 0
      minutes: 10
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.charge_voiture_cycle
    state: 'on'
  action:
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.charge_voiture_cycle
  - service: notify.mobile_app_sm_s906b
    data:
      title: Charge voiture terminée
      message: La charge s'est déroulée de {{ ((state_attr('automation.charge_voiture_start_2','last_triggered'))
        | as_local).strftime("%Hh%M") }} à {{ now().strftime("%Hh%M") }}, coût {{
        ((states('sensor.charge_voiture_power_cycle') | float(default=0) * float(states('input_number.prix_du_kwh_d_electricite'))))  |
        round(2) }}€
  - service: persistent_notification.create
    data:
      title: Charge voiture terminée
      message: "La charge s'est déroulée de {{ ((state_attr('automation.charge_voiture_start_2','last_triggered'))
        | as_local).strftime(\"%Hh%M\") }} à {{ now().strftime(\"%Hh%M\") }}  \nDurée
        {{ float((((state_attr('automation.charge_voiture_fin','last_triggered'))
        - (state_attr('automation.charge_voiture_start_2','last_triggered'))).seconds
        / 3600 )) | int }}h {{float(((((state_attr('automation.charge_voiture_fin','last_triggered'))
        - (state_attr('automation.charge_voiture_start_2','last_triggered'))).seconds
        % 3600 )/60 ))| round(0) }}min \nLe cycle a consommé {{ states('sensor.charge_voiture_power_cycle')
        }}kWh, soit {{ ((states('sensor.charge_voiture_power_cycle') | float(default=0)
        * float(states('input_number.prix_du_kwh_d_electricite'))))  | round(2) }}€\n"
  - continue_on_error: true
    service: notify.consommations
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Voiture ; {{ ((state_attr(''automation.charge_voiture_start_2'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.charge_voiture_fin'',''last_triggered''))
        - (state_attr(''automation.charge_voiture_start_2'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.charge_voiture_fin'',''last_triggered''))
        - (state_attr(''automation.charge_voiture_start_2'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m ; {{ states(''sensor.charge_voiture_power_cycle'')
        }}kWh ; {{ ((states(''sensor.charge_voiture_power_cycle'') | float(default=0)
        * float(states(''input_number.prix_du_kwh_d_electricite''))))  | round(2)
        }} EUR'
  mode: single

Voilà @matthieuC dans l’exemple de @Gilles2 il y a 3 automatisations distinctes

1 « J'aime »

Merci bcp, avec toute cette docs et ces infos je devrais pouvoir me débrouiller :slight_smile:
je vais regarder mais ça devrais aller !

merci bcp pour votre aide et vos réponses !
c’est grandement apprécié :slight_smile:

merci

1 « J'aime »

C’est exactement ainsi que j’ai procédé simple et efficace car ça permet de contrer les pics de consommation, il faut bien regarder comment se décompose un cycle type
En gros j’ai un booléen que j’active lorsque le pic de consommation arrive et donc lorsque le pic vas se reproduire vu que le cycle est déjà sur on alors on ne notifie pas sinon à chaque pic tu as une notification et lorsque le cycle se termine tu repasses le booléen a off

Mes 2 automations

alias: machine à laver démarrage
description: ""
trigger:
  - type: power
    platform: device
    device_id: 5a6124afb763bed7fa8c25aaa11097fc
    entity_id: d4e6585c93459d3e50e96ee6821d661a
    domain: sensor
    above: 500
    for:
      hours: 0
      minutes: 0
      seconds: 20
condition:
  - condition: state
    entity_id: input_boolean.machine_a_laver
    state: "off"
action:
  - service: notify.mobile_app_kb2003
    data:
      title: Machine à laver
      message: Cycle commencé "{{ states('sensor.date_short_et_heure') }}"
  - service: input_boolean.turn_on
    target:
      entity_id: input_boolean.machine_a_laver
    data: {}
mode: single
alias: machine à laver fin de cycle
description: ""
trigger:
  - type: power
    platform: device
    device_id: 5a6124afb763bed7fa8c25aaa11097fc
    entity_id: d4e6585c93459d3e50e96ee6821d661a
    domain: sensor
    for:
      hours: 0
      minutes: 1
      seconds: 0
    below: 10
condition:
  - condition: state
    entity_id: input_boolean.machine_a_laver
    state: "on"
action:
  - service: notify.mobile_app_kb2003
    data:
      title: Machine à laver
      message: Cycle terminé "{{ states('sensor.date_short_et_heure') }}"
  - service: input_boolean.turn_off
    target:
      entity_id: input_boolean.machine_a_laver
    data: {}
mode: single
1 « J'aime »