Automatisation avec input_number.cover

Et quand tu seras bien bien chaud, tu regarderas l’intégration template cover :smile:

Je tiens à vous présenter mes excuses pour le petit abandon du poste. Je place ce poste en résolu, je peux bien programmer ma fermeture et mon ouverture de volets ce qui en fait la demande originale et je me suis un peu focus sur mon problème de positionnement qui aurait dû faire parti d’un autre poste. J’aurais bien aimé apporter la solution à ce problème dans ce poste mais si mais je n’ai toujours pas trouvé de solution et cela fait un moment que ce poste est ouvert. @Clemalex Je te remercie sincèrement de tous tes précieux conseils et des connaissances que tu m’as apportées.

1 « J'aime »

Non, mais on peux quand même essayer de résoudre ton problème ici, je mettrais à jour le post marqué résolu…:innocent:

Je pensais que c’était bon cette histoire :grin:

Tu en es où exactement ? Qu’est ce qui ne fonctionne pas ?

Bonsoir et merci d’avance pour ton aide, j’ai ce code je cherche à contrôler la position de mon volet avec une intégration. J’arrive bien à contrôler la position de mon volet avec ce code :

- device_id: 094433a079fc3abacb93177271540c77
        domain: cover
        entity_id: cover.shenzhen_neo_electronics_co_ltd_unknown_type_0200_id_102c_level
        type: set_position
        position: 85

là il n’y a pas de problème le code fonctionne le problème apparaît quand je cherche à remplacer mon 85 par une intégration. Je pense avoir fait une erreur dans la ligne suivante :

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

mais je ne vois pas laquelle, dans l’outil de développement mon entrée à l’herbe correcte.

Exécute l’automatisation avec le code qui ne marche pas et poste le message contenu dans le fichier home-assistant.log.

Peut être que le service n’accepte pas de modèle Jinja…car ton code est bon :+1:

Je n’ai pas pu exécuter le script, car juste en redémarrant il détecte l’erreur voici le contenu du fichier log.

2020-12-22 10:03:04 ERROR (SyncWorker_0) [homeassistant.util.yaml.loader] invalid key: "OrderedDict([("100-(states('input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree')| int)", None)])"
  in "/config/packages/volet.yaml", line 204, column 0
2020-12-22 10:03:04 ERROR (MainThread) [homeassistant.bootstrap] Failed to parse configuration.yaml: invalid key: "OrderedDict([("100-(states('input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree')| int)", None)])"
  in "/config/packages/volet.yaml", line 204, column 0. Activating safe mode

Et en ajoutant la balise _template à la clé position :

- device_id: 094433a079fc3abacb93177271540c77
  domain: cover
  entity_id: cover.shenzhen_neo_electronics_co_ltd_unknown_type_0200_id_102c_level
  type: set_position
  position_template: {{ 100 - ( states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int ) }}`

?

Sinon, essaye plutôt d’utiliser ce service pour contrôler ton entité (cover.set_cover_position).

Merci de ta réponse, en rajoutant la balise _template cela ne fonctionne pas. Quant aux services il faut que je me penche dessus car il me manque des notions pour comprendre.

je viens de tester en créant un petit fichier de test:


input_boolean:
    bouton_test:
        name: test
        
automation:
  - id: 'notification_test'
    alias: 'notification_test'
    description: 'notification_test'
    trigger:
    - platform: state
      entity_id: input_boolean.bouton_test
    condition: []
    action:
     - service: cover.set_cover_position
       data:
        entity_id: cover.shenzhen_neo_electronics_co_ltd_unknown_type_0200_id_102c_level
        position: {{ 100 - ( states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int ) }}

Cela marche quand je mets une valeur numérique mais des que je mets la ligne je retrouve une erreur de configuration log:
Error loading /config/configuration.yaml: invalid key: « OrderedDict([(‹ 100 - ( states(« input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree ») | int ) ›, None)]) » in « /config/packages/test.yaml », line 17, column 0

13:57:34 – Hass.io (ERROR)

invalid key: « OrderedDict([(‹ 100 - ( states(« input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree ») | int ) ›, None)]) » in « /config/packages/test.yaml », line 17, column 0

13:57:34 – util/yaml/loader.py (ERROR)

Je viens de comprendre !

Pff des fois c’est un truc tout simple… :upside_down_face:

input_boolean:
    bouton_test:
        name: test
        
automation:
  - id: 'notification_test'
    alias: 'notification_test'
    description: 'notification_test'
    trigger:
    - platform: state
      entity_id: input_boolean.bouton_test
    condition: []
    action:
     - service: cover.set_cover_position
       data:
        entity_id: cover.shenzhen_neo_electronics_co_ltd_unknown_type_0200_id_102c_level
        position: '{{ 100 - ( states("input_number.pourcentage_de_pre_fermeture_du_volet_de_la_baie_vitree") | int ) }}'

Quoi ?

Tu ne remarques même pas les guillemets après la clé position: :eyes: :grin: :sweat_smile:

:smiling_imp:

C’est pour cette raison que je préfère mettre sous cette forme :

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

Mais l’interface graphique est pas mal, car elle permet de détecter une erreur rapidement car en sauvegardant voici ce que contient l’automatisation :

- id: '1234567890'
  alias: Nouvelle automatisation
  description: ''
  trigger:
  - platform: state
    entity_id: input_boolean.bouton_test
    to: 'on'
  condition: []
  action:
  - service: cover.set_cover_position
    entity_id: cover.mon_volet
    data:
      position:
        '[object Object]':   #<-- ?????
  mode: single

Super cela fonctionne je te remercie aussi le code utilisé :

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

il me reste plus qu’à étudier le code que tu m’as donné pour le calcul des heures je t’avoue que cette partie me reste complètement obscure
Un très gros merci @Clemalex pour toutes les connaissances que tu m’as reportées.

1 « J'aime »

N’hésite pas à poser des questions ?

time: >
              {% set taille_du_tableau = states('input_number.volet_salon_decalage').split('-')|length %}
              {% if taille_du_tableau == 1 %}
                {# Décalage positif #}
                {{  ( as_timestamp(state_attr('sun.sun', 'next_setting')) | int
                       + 
                       state_attr('input_datetime.decalage_coucher_de_soleil', 'timestamp') | int 
                    )| timestamp_custom('%H:%M', true)
                }}
              {% else %}
                {# Décalage négatif #}
                {{  ( as_timestamp(state_attr('sun.sun', 'next_setting')) | int
                       - 
                       state_attr('input_datetime.decalage_coucher_de_soleil', 'timestamp') | int 
                    )| timestamp_custom('%H:%M', true)
                }}
              {% endif %}

toute cette partie là je n’y comprends rien. Tu crées un tableau tu regardes si la taille du tableau est inférieure à 1 %

Pas à 1% mais à 1 simplement (le % va avec l’accolade pour marquer la fin de la syntaxe {% le code ici %} (documentation).

En fait la fonction split permet de récupérer un tableau avec comme séparateur, ici le caractère négative (-).

Donc, si la taille du tableau (le nombre d’élément le constituant) est de 1 (donc un seul élément) cela veux dire que le caractère n’a pas été retrouvé (et donc le decalage est positif).

Si l’offset (l’input_number) est negatif, l'état (state) équivaut à - XXX. Donc avec la fonction split et le délimiteur, on obtient un tableau de 2 éléments (dont le premier est null car rien devant le signe négatiif).

['15'] # tableau quand l'input_number est à la position +15
['', '15'] # tableau quand l'input_number est à la position -15

Le délimiteur choisi est le signe négatiif car c’est le seul caractère qui est différent entre une valeur positive et négative.

1 « J'aime »

OK super merci pour l’explication est encore une fois merci pour toutes les connaissances que tu m’as a portées.

1 « J'aime »