Automatisation avec input_number.cover

@Nyco :

En lisant la documentation du delay, on s’aperçoit qu’il y a plusieurs façon de l’utiliser :

  1. Seulement un nombre représentant des secondes (donc on peut utiliser un input_number)
# Seconds
# Waits 5 seconds
- delay: 5

est équivalent à :

#Déclaration de l'entité
# Example configuration.yaml entry
input_number:
  temporisation:
    name: "Temporisation modifiable dans Lovelace et par automatisations/scripts"
    min: 0
    max: 60
    step: 1
     
 #Utilisation de l'entité pour l'action delay
 # X secondes
- delay: {{ states('input_number.temporisation') | int }}

L’utilisation de la fonction states() renvoie un texte (string) alors que l’action delay dans ce cas attend un nombre (integer). On obtient un nombre en convertissant l’état renvoyé à l’aide de l’utilisation d’un filtre (filter) Jinja en l’occurrence int.

Dans l’exemple ci dessus, la temporisation ne pourra pas dépasser 1 minute (max: 60 ).

  1. Avec un format HH:MM (ou HH:MM:SS) (donc on peut utiliser un input_datetime)
# HH:MM
# Waits 1 hour
- delay: '01:00'

est équivalent à :

#Déclaration de l'entité
input_datetime:
  temporisation:
    name: "Temporisation modifiable dans Lovelace et par automatisations/scripts"
    has_date: false
    has_time: true
 
 #Utilisation de l'entité pour l'action délay
 # HH:MM:SS
- delay: "{{ states('input_datetime.temporisation') }}"

Ici, l’action attends un texte donc pas de conversion à faire. Il faut simplement englober la formule et ne pas utiliser les mêmes que dans la formules : on englobe avec des guillemets " car la formule utilise déjà des apostrophes '.

  1. Avec toutes les clés définies :
#Temporisation de 1 minute et 30 secondes
- delay:
    days: 0
    hours: 0
    minutes: 1
    seconds: 30
    milliseconds: 0

est équivalent à :

#Déclaration de l'entité
input_number:
  temporisation_heures:
    name: "Temporisation (H)"
    min: 0
    max: 24
    step: 1
input_number:
  temporisation_minutes:
    name: "Temporisation (m)"
    min: 0
    max: 59
    step: 1
input_number:
  temporisation_secondes:
    name: "Temporisation (s)"
    min: 0
    max: 59
    step: 1
 #Utilisation de l'entité pour l'action délay
 # HH:MM:SS
- delay:
    hours: {{ states('input_number.temporisation_heures') | int }}
    minutes: {{ states('input_number.temporisation_minutes') | int }}
    seconds: {{ states('input_number.temporisation_secondes') | int }}

Du coup, pour ton code :

position: {{(states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int)}}

Tu récupère l’état de l’entité input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree :

position: {{ states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") }}

Mais comme la clé position attend un nombre, il faut convertir l’état en nombre d’où | int :

position: {{ states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int }}

Et donc pour reprendre ton code du premier post :

position: {{ 100 - ( states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int ) }}`

Pour pouvoir retourner une valeur calculée, il faut indiquer à l’interpréteur où se trouve ton calcul d’où les accolades {{ }}(qui manquent dans ton premier post pour la position).

Elles indiquent à l’interpréteur que le texte à l’intérieur est du code :

  • {{ le code ici }} : fait le traitement du code et renvoie la valeur dans la clé
  • {% %} : fait le traitement du code mais ne renvoie pas de valeur (utilisé pour les affectations)
  • : > ou : | : indique à l’interpréteur que le code se trouve sur plusieurs ligne. C’est l’indentation qui fixe le début et la fin du code (généralement 2 espaces après le début de la clé)

Un exemple concret avec ton code serait :

position: >
  {% set Position_Ouverte = 100 %}
  {% set Position_Pre_Fermeture = states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int %}
  {{ Position_Ouverte - Position_Pre_Fermeture  }}

Des questions ? Attention ! Car tu auras des réponses ! :wink:

3 « J'aime »