Problème template sensor (on/off appareils ménagers)

Bonjour,

Mon problème

Salut à tous,

En vue de pouvoir détecter si mes appareils ménagers (ex. four, machine à laver,…) sont allumés ou éteints entre autres analyses, j’ai installé des prises A1Z Nous et créé un template sensor (dans sensors.yaml), celà fonctionne.

J’ai créé récemment une notif dans automatisation envoyant un message sur le GSM de ma compagne quand la machine à laver a terminé son cycle. Celà fonctionne aussi ! :slight_smile:

Sauf que…
A chaque redémarrage de HA, l’automatisation et la notif de fait se mettent en route étant donné que la puissance de la prise est différente de 0 (puissance indisponible ?) durant le démarrage et que mon automatisation est basée sur ce point.

Voici le code d’origine :

# Sensor Lave-vaisselle
- platform: template
  sensors:
    lave_vaisselle_etat:
      friendly_name: Etat Lave-vaisselle
      value_template: >-
        {% if is_state("sensor.lavevaisselle_power", "0") %}
          Arrêt
        {% else %}
          Marche
        {% endif %}

J’ai donc modifié mon template en me basant sur « plus petit que », « plus grand que » et prévu un état « inconnu » mais mon sensor est toujours en état indisponible :

# Sensor Four
- platform: template
  sensors:
    four_etat:
      friendly_name: Etat Four
      value_template: >-
        {% if is_state('sensor.four_power')|float <= 15 %}
          Arrêt
        {% elif is_state('sensor.four_power')|float > 15 %}
          Marche
        {% else %}
          Inconnu
        {% endif %}

Quelque chose m’échappe :frowning:
Ce doit sûrement être une connerie …

Question subsidiaire :
De temps en temps pendant son cycle la puissance de mon lave-linge descend à 0, je voudrais pouvoir également conditionner le fait qu’il descend en dessous de … W pendant 15 sec, une idée de la syntaxe ?

Ma configuration


Version core-2024.6.4
Installation type Home Assistant OS
Développement false
Supervisor true
Docker true
Utilisateur root
Virtual environment false
Python version 3.12.2
Operating system family Linux
Operating system version 6.6.31-haos-raspi
CPU architecture aarch64
Fuseau horaire Europe/Brussels
Configuration directory /config

Bonjour,
quel est le but d’avoir l’état inconnu ?

Ton entité sensor.four_power est un nombre entier ou décimal ?
Si entier, il faut utiliser int et pas float.

- platform: template
  sensors:
    four_etat:
      friendly_name: Etat Four
      value_template: >-
        {% if states('sensor.four_power') |int(0) <= 15 %}
          Arrêt
        {% else %}
          Marche
        {% endif %}

Bonjour,
Il y a de nombreuses discussions sur ce forum qui parlent de ce sujet.
En gros, le plus simple est de créer un booléen du style « machine à laver en marche ». Tu fais une automation qui le passe à 1 quand la puissance mesurée par ta prise est supérieure à un seuil donné, et tu le repasse à 0 quand la consommation retombe à 0 (avec un délais certaines fois nécessaire pour prendre en compte que sur la plupart des machines, il y a une attente avant la véritable fin du cycle (les 15s dont tu parles).
Ensuite, une automatisation autonome pour gérer les notifications.
Ci-dessous le code des mes automations :

Démarrage du sèche linge
- id: '1681555823957'
  alias: 'Sèche-Linge : 1 - Start'
  description: Sèche-linge start
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_5
    above: 10
    for:
      hours: 0
      minutes: 1
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.seche_linge_cycle
    state: 'off'
  action:
  - service: utility_meter.calibrate
    data:
      value: '0'
    target:
      entity_id: sensor.seche_linge_power_cycle
  - service: input_boolean.turn_on
    data: {}
    target:
      entity_id: input_boolean.seche_linge_cycle
  mode: single
Détection de la fin du cycle du sèche linge
- id: '1681556207552'
  alias: 'Sèche-linge : 2 - Fin'
  description: Sèche-linge Fin
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_5
    below: 3
    for:
      hours: 0
      minutes: 2
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.seche_linge_cycle
    state: 'on'
  action:
  mode: restart
Notifications de fin du sèche linge
- id: '1681556096656'
  alias: 'Sèche-Linge : 3 - Fin, notification'
  description: Sèche-linge Fin, notifications
  trigger:
  - platform: numeric_state
    entity_id: sensor.tz3000_2putqrmw_ts011f_active_power_5
    below: 3
    for:
      hours: 0
      minutes: 3
      seconds: 0
  condition:
  - condition: state
    entity_id: input_boolean.seche_linge_cycle
    state: 'on'
  action:
  - service: input_boolean.turn_off
    data: {}
    target:
      entity_id: input_boolean.seche_linge_cycle
  - service: notify.mobile_app_sm_s906b
    data:
      title: Sèche-linge terminé
      message: Le cycle s'est déroulé de {{ ((state_attr('automation.seche_linge_1_start','last_triggered'))
        | as_local).strftime("%Hh%M") }} à {{ now().strftime("%Hh%M") }} pour {{ (states('sensor.seche_linge_power_cycle')
        | float(default=0) * float(states('input_number.prix_du_kwh_d_electricite')))
        | round(2) }}€
  - continue_on_error: true
    service: persistent_notification.create
    data:
      title: Sèche-linge terminé
      message: "Le cycle s'est déroulé de {{ ((state_attr('automation.seche_linge_1_start','last_triggered'))
        | as_local).strftime(\"%Hh%M\") }} à {{ now().strftime(\"%Hh%M\") }} \nSoit
        une durée de {{ (((state_attr('automation.seche_linge_3_fin_notification','last_triggered'))
        - (state_attr('automation.seche_linge_1_start','last_triggered'))).seconds
        / 3600 )| int }}h{{((((state_attr('automation.seche_linge_3_fin_notification','last_triggered'))
        - (state_attr('automation.seche_linge_1_start','last_triggered'))).seconds
        % 3600 )/60 )| round }}m\nLe cycle a consommé {{ states('sensor.seche_linge_power_cycle')
        }}kWh, soit {{ (states('sensor.seche_linge_power_cycle') | float(default=0)
        * float(states('input_number.prix_du_kwh_d_electricite'))) | round(2) }}€\n"
  - continue_on_error: true
    service: notify.send_message
    target:
      entity_id: notify.consommations2
    data:
      message: '{{ now().strftime("%d/%m/%Y") }} ; Seche-linge ; {{ ((state_attr(''automation.seche_linge_1_start'',''last_triggered''))
        | as_local).strftime("%Hh%M") }} - {{ now().strftime("%Hh%M") }} ;  {{ (((state_attr(''automation.seche_linge_2_fin'',''last_triggered''))
        - (state_attr(''automation.seche_linge_1_start'',''last_triggered''))).seconds
        / 3600 )| int }}h{{((((state_attr(''automation.seche_linge_2_fin'',''last_triggered''))
        - (state_attr(''automation.seche_linge_1_start'',''last_triggered''))).seconds
        % 3600 )/60 )| round }}m ; {{ states(''sensor.seche_linge_power_cycle'') }}kWh
        ; {{ ((states(''sensor.seche_linge_power_cycle'') | float(default=0) * float(states(''input_number.prix_du_kwh_d_electricite''))))  |
        round(2) }} EUR'
  mode: single

Avoir un état MARCHE (> 15W), ARRET (< 15W) et INCONNU (autre que numérique) pourra me servir pour créer une notification (automatisation) avec cette logique : si le lave-linge passe de MARCHE à ARRET pendant 15 sec…
Le problèmes actuellement avec le premier code mentionné : le lave-linge est en état MARCHE le temps du démarrage étant donné que l’entite puissance n’a pas encore démarre et est donc différente de « 0 ».

Ma puissance numérique semble être renseignée en nombre entier :

J’essaierais int à la place de float ?

oui, int = nombre entier , float = nombre décimal.

Après perso, je ne mettrai pas une prise Nous A1Z derrière un four. Regarde, mais ta prise doit bien chauffer quand ton four tire dessus.

Je t’avoue que j’ai hésité pour la prise mais étant donné que 2500W donnent env 10A et qu’elle fait 16A max, celà doit fonctionner non ?
Je n’ai jamais vraiment vérifier vu que la prise est derrière le micro-onde qui lui-même est dans le meuble cuisine.

Nada… Ca ne fonctionne pas :frowning:

- platform: template
  sensors:
    four_etat:
      friendly_name: Etat Four
      value_template: >-
        {% if is_state("sensor.four_power")|int <= 15 %}
          Arrêt
        {% elif is_state("sensor.four_power")|int > 15 %}
          Marche
        {% else %}
          Inconnu
        {% endif %}

Il faut vérifier dans outils de dev et onglet modèle, voir ce que ca dit.
test le template:

       {% if is_state("sensor.four_power")|int <= 15 %}
          Arrêt
        {% elif is_state("sensor.four_power")|int > 15 %}
          Marche
        {% else %}
          Inconnu
        {% endif %}

Voici le résultat :

test ce template, ca donne quoi ?

          {% if states('sensor.four_power') | int(0) <= 15 %}
            Arrêt
          {% elif states('sensor.four_power') | int(0) > 15 %}
            Marche
          {% else %}
            Inconnu
          {% endif %}

Super, celà fonctionne ! (Encore) merci :slight_smile:
Et tu me conseillerais de retirer ma prise four ?

Perso, je mettrai plutôt un module avec pince.
image

16A chinois :sweat_smile:

De fait… C’est peut-être pas super « secure ».
Je vais la mettre sur un autre appareil.
Merci :slight_smile:

Tout a fais !
Ce genre de prise, du 1000w c’est supportable pendant un moment. dépasser les 2000w, la prise commence à bien chauffé et ne m’a jamais inspiré confiance.

Je pense que le lave-linge a également des pic à 2000W mais moins longtemps… ??

1 « J'aime »

Oui, j’ai une prise sur le lave-linge. Mon lave-linge tire 2000w pendant 15 min au début, puis max 300w sur tout le cycle.

Et ça, donc aucun souci ?
C’est en cas d’utilisation à 2000W prolongée ?

De toute façon, je viens de l’installer sur ma machine à café, problème réglé.

oui, disons 1h. Pars expérience, un souffleur à 2000w allumer pendant 1h, impossible de toucher le prise tellement elle était chaude.

1 « J'aime »