Mettre à jour input_number en fonction de la valeur d'un sensor (rest)

Bonjour,

le contexte.

J’ai un « input_number.chaudiere_temp_eco » qui permet de régler la température consigne de ma chaudière.

Cet input_number déclenche une automatisation qui va lancer un rest_command pour mettre à jour la valeur dans la mémoire de la chaudière. Cela fonctionne.

Automatisation n°1

  - service: rest_command.chaudiere_temp_nuit
    data: {}
    response_variable: retour_chaudiere

J’ai un « sensor.temperature_consigne_eco » mis à jour par rest: qui permet de récupérer la température de consigne dans la chaudière. Il fonctionne et est mis à jour toutes les minutes.

- resource: http://192.168.10.18:88/vm/vito/vito_data_cr_json.php
  scan_interval: 60
  sensor:
    - name: "temperature_consigne_eco"
      value_template: "{{ value_json[0].value|int }}"

Ma question :
comment mettre à jour (automatiquement) « input_number.chaudiere_temp_eco » par la valeur récupérée par le « sensor.temperature_consigne_eco » ?

L’automatisation n°2 ci-dessous fonctionne sauf qu’elle va déclencher systématiquement le lancement de l’automatisation n°1 qui va lui mettre à jour sur la chaudière la valeur inutilement

action:
  - service: input_number.set_value
    metadata: {}
    data:
      value: "{{ states.sensor.temperature_consigne_eco.state | float }}"
    target:
      entity_id: input_number.chaudiere_temp_eco

Bonjour,

Je sais pas si il y a une raison pour laquelle tu utilise un input_number mais à ta place j’utiliserai plutôt un template sensor qui a pour valeur la valeur de ton sensor rest. Comme ça à chaque fois qu’il change, ça met à jour automatiquement le sensor template

Merci Marc pour l’idée.

J’avais trouvé une solution avec l’automatisation dessous mais je trouve que ce n’est pas propre.

je suis en train de regarder pour mettre en place ton conseil de template number qui devrait faire l’affaire, mais je bute sur ce que je dois mettre dans set_value.

trigger:
  - platform: state
    entity_id:
      - sensor.temperature_consigne_eco
    id: sensor
  - platform: state
    entity_id:
      - input_number.chaudiere_temp_eco
    id: input
condition:
  - condition: template
    value_template: >-
      {{ states.sensor.temperature_consigne_eco.state |int !=
      states.input_number.chaudiere_temp_eco.state |int}}
action:
  - if:
      - condition: trigger
        id:
          - input
    then:
      - service: rest_command.chaudiere_temp_nuit
        metadata: {}
        data: {}
        response_variable: retour_chaudiere
    else:
      - service: input_number.set_value
        metadata: {}
        data:
          value: "{{ states.sensor.viessmann_temp_nuit.state | float }}"
        target:
          entity_id: input_number.chaudiere_temp_eco
mode: single

Déclare juste dans ton configuration.yaml quelque chose du genre :

template:
  - sensor:
      - name: "chaudiere_temp_eco"
        unique_id: chaudiere_temp_eco
        device_class: "temperature"
        unit_of_measurement: "°C"
        state: >
          {{ states('sensor.temperature_consigne_eco') | float }}

Désolé je suis sur mobile donc je peux pas vérifier grand chose et je n’ai fais de tête… mais l’idée est là

merci, mais avec sensor je crois que je ne peux pas mettre un slider.

En fait le slider me permet de régler la température désirée.

Hello,

Ah j’ai du prendre des raccourcis dans mon analyse.
Dis moi si je me trompe mais ce que tu veux c’est :

  • sensor.temperature_consigne_eco qui récupère la température de consigne de ta chaudière
  • input_number.chaudiere_temp_eco qui est un slider qui permet de changer la consigne. Quand tu changes la consigne, ça fait un rest_command pour changer la consigne de ta chaudière

Tu veux que input_number.chaudiere_temp_eco soit toujours à la valeur de sensor.temperature_consigne_eco. Si tu changes la valeur par ton input_number, ca la changera au prochain refresh rest (60s) pour ton sensor. Donc pas de problème.
Le problème est donc surement pour que ton input_number soit identique à ton sensor dans la cas où la consigne a était changé sur la chaudière directement, ca met à jour ton sensor mais pas ton input_number. C’est bien ca ?

Si c’est ca, je pense en effet que le mieux serait une configuration de ce type :

template:
  - number:
      - name: "chaudiere_temp_eco"
        unique_id: chaudiere_temp_eco
        device_class: "temperature"
        unit_of_measurement: "°C"
        state: >
          {{ states('sensor.temperature_consigne_eco') | float }}
        set_value:
          - service: rest_command.update_chaudiere_temp
            data:
              value: "{{value}}"
        min: 15
        max: 40
        step: 0.5

Et tu doit avoir dans ton rest_command.chaudiere_temp quelque chose comme ca :

rest_command:
  update_chaudiere_temp:
    url: "https://xxxxxxxxxx?temperature={{value}}"
    verify_ssl: false
    timeout: 30

Comme je connais pas comment tu peux fournir ta température par ta rest_command, j’ai fais n’importe quoi mais il faut passer {{value}} à l’endroit où tu mettrait normalement ta température que tu veux définir.
Cette variable est fournit par ton input_number qui a chaque changement (set_value) va appeler le rest_command avec le paramètre value qui contient la position de ton slider.

Donc si tu changes le slider, ca demande en rest_command le changement de temperature (avec la température de ton slide), puis sensor.temperature_consigne_eco va récupérer une nouvelle valeur de température, et comme l’état de ton input_number est lié à sensor.temperature_consigne_eco, il va changer. Sauf qu’en fait il est déjà à la bonne valeur puisque c’est lui qui à défini la valeur actuelle.
Si tu change par la chaudière, sensor.temperature_consigne_eco récupère la valeur et comme l’état de l’input_number est lié à sensor.temperature_consigne_eco ton input_number se mettra à jour.
Avec ça, normalement pas besoin d’automatisation.

J’ai pas testé mais ca devrait fonctionner comme tu le souhaites

2 « J'aime »

Merci pour ton aide.

Pour le set-value on met donc le contenu de « Action » d’une automatisation.

Pour info device-class et unit_of_measurement ne peuvent être mis pour un number.

J’ai perdu pas mal de temps car j’avais oublié de modifié mon rest_command qui utilisait toujours l’ancien input_number :wink: , plus une automatisation que j’avais oublié de désactiver

name: ajeter_test
step: 1
min: 15
max: 20
icon: mdi:thermometer
state: "{{states.sensor.temperature_consigne_eco.state |float}}"
set_value:
  - service: rest_command.update_chaudiere_temp:
    data:
      value: "{{value}}"
# forcer le refresh des capteurs
  - service: rest.reload
    metadata: {}
    data: {}

pour rest_command

  update_chaudiere_temp:
    url: http://192.168.10.18:88/data_change.php
    method: POST
    headers:
      content-type: "application/x-www-form-urlencoded"
    payload: "command=red_raum_soll_temp&value={{ value |int }}"

Grace à ton aide j’ai développé mes compétences sur HA et surtout un peu plus compris les aides HA qui parfois semblent obscures.

Merci @mguyard

1 « J'aime »