Régler une valeur de couleur RGB avec un light template

Tu veux dire aller dans l’onglet « services », sélectionner le service : « rest_command.couleur_h1_horloge » et lancer ? Si oui ça donne rien.

Sinon tu avais raison pour les sliders, le fait de les créer fait que la rosace renvoie maintenant des données.

Edit : J’ai rien dit ! Appeler le service fonctionne. Les données de la rosace sont récupérées et ça renvoie bien à l’horloge. Par contre juste bouger le curseur de la rosace donne rien.

Avec ton entité à toi

Donc next step : faire une automatisation qui sur variation d’un des 3 sliders déclenche l’appel REST
(on remplacera les sliders pas ton mire de couleur plus tard)

Bon que dire à part que tu es un génie et un dieu de la patience parce que ça fonctionne ! La rosace aussi. Je l’ai édité plus haut mais tu n’as pas du voir. Par contre, les valeurs renvoyées sont erronées.

Par exemple, avec H=315, S=71 et V=0,3, j’obtiens http://192.168.1.15/h1color?value=0&red=76&green=-5355&blue=-5355

Le problème vient de S qui doit être compris entre 0 et 1. Le soucis c’est que quand je borne mon slider comme ça, j’ai une erreur lorsque je bouge la rosace.
L’erreur en question : "Echec d’appel du service « light/turn_on ». Invalid value for input_number.s_input: 100 (range 0.0 - 1.0)

Ayé, je vais plus rentrer dans mes chaussures ! :rofl:
Plus sérieusement, ça vient avec le temps quand on comprends les concepts, donc il ne faut pas hésiter à lire, relire la doc pour trouver le bon truc.

Essaye de faire un slider de 0 à 10 et diviser sa valeur par 10 dans le calcul du template

J’ai édité au dessus avec l’erreur. Je n’ai pas le choix de faire un slider à 100. Je ne m’y connais pas du tout en code Python, peux tu dans ta grande pitié pour mon cas désespéré me l’écrire ?

Pourquoi 100 ?

ça tombe bien il y a pas de python

100 parce que c’est la valeur qui est affichée lorsque je vais au bord de la rosace.

Ha c’est pas du Python ? Ben voila tu as mon niveau de connaissances :smiley:

1 « J'aime »

OK à partir de la rosace…
Donc par exemple

        set_color:
          - service: input_number.set_value
            data:
              value: "{{ h / 100 }}"
              entity_id: input_number.h_input

Bon la division fonctionne mais les nombres obtenus c’est n’importe quoi. En gros pour gérer la couleur c’est la valeur de H qui prime. Jusque la pas de soucis. En gros ça tourne autour de la rosace de 0 à 360. En mettant les deux autres valeurs à fond les couleurs seront saturées.
Normalement, mettre la valeur à 360 affiche du rouge, j’obtiens http://192.168.1.15/h1color?value=0&red=255&green=0&blue=0 donc OK
Par contre, la valeur à 240 devrait afficher du bleu, j’obtiens http://192.168.1.15/h1color?value=0&red=255&green=0&blue=77
120 ça devrait être du vert, j’obtiens http://192.168.1.15/h1color?value=0&red=255&green=0&blue=0

La je comprends pas et ça commence à me chauffeeeer.

Tu as gardé ton V à partir de ton H ? Si oui, change et mets un V fixe pour l’instant
Et confirme les bornes / calculs avec ça

Non j’ai créé un slider pour le V. Voila le code :

          {%- set h = states("input_number.h_input")|float %}
          {%- set s = states("input_number.s_input")|float %}
          {%- set v = states("input_number.v_input")|float %}

          {%- set i = (h * 6)|int %}
          {%- set f = h * 6 - i %}
          {%- set p = v * (1 - s) %}
          {%- set q = v * (1 - f * s) %}
          {%- set t = v * (1 - (1 - f) * s) %}

          {%- if i % 6 == 0 %}
            {% set r = v %}
            {% set g = t %}
            {% set b = p %}
          {%- elif i % 6 == 1 %}
            {% set r = q %}
            {% set g = v %}
            {% set b = p %}
          {%- elif i % 6 == 2 %}
            {% set r = p %}
            {% set g = v %}
            {% set b = t %}
          {%- elif i % 6 == 3 %}
            {% set r = p %}
            {% set g = q %}
            {% set b = v %}
          {%- elif i % 6 == 4 %}
            {% set r = t %}
            {% set g = p %}
            {% set b = v %}
          {%- elif i % 6 == 5 %}
            {% set r = v %}
            {% set g = p %}
            {% set b = q %}
          {%- endif %}

            {%- set red_h1 = (255*r)|round(0) %}
            {%- set green_h1 = (255*g)|round(0) %}
            {%- set blue_h1 = (255*b)|round(0) %}

          http://192.168.1.15/h1color?value=0&red={{ red_h1 }}&green={{ green_h1 }}&blue={{ blue_h1 }}

Je confirme avec ton calculateur que je n’obtiens pas les bonnes couleurs. Mais il y a un aspect aléatoire. Modifier aux mêmes bornes la valeur de H ne donnera pas toujours la même couleur. J’ai l’impression que les variables du calcul ne sont pas réinitialisées entre deux calculs.
Je confirme que les bornes sont les bonnes. Par rapport au 1er lien que tu as transmis on est bien sur 0-360, 0-1 et 0-1 au maximum.

alors il y a peut-être un impact, si tu joue trop vite sur les curseurs… ou dans la séquence d’envoi depuis la rosace.
Pour l’instant passer par les curseurs pour faire tes essais et compare avec le calculateur en ligne

0-360 oui mais 0-100
image
tu peux aussi fixer V à 100, ça impacte peu

Oui tout à fait 0-100 sur ton calculateur mais la personne qui a fait le calcul de base met bien des bornes de 0 à 1.

1 « J'aime »

C’est bon j’ai trouvé le problème… Il fallait diviser H par 360… Dans l’exemple il divise son nombre aléatoire par 360… maintenant ça fonctionne parfaitement. Le code donne ça :

          {%- set h = (states("input_number.h_input")|float)/360 %}
          {%- set s = (states("input_number.s_input")|float)/100 %}
          {%- set v = states("input_number.v_input")|float %}

          {%- set i = (h * 6)|int %}
          {%- set f = h * 6 - i %}
          {%- set p = v * (1 - s) %}
          {%- set q = v * (1 - f * s) %}
          {%- set t = v * (1 - (1 - f) * s) %}

          {%- if i % 6 == 0 %}
            {% set r = v %}
            {% set g = t %}
            {% set b = p %}
          {%- elif i % 6 == 1 %}
            {% set r = q %}
            {% set g = v %}
            {% set b = p %}
          {%- elif i % 6 == 2 %}
            {% set r = p %}
            {% set g = v %}
            {% set b = t %}
          {%- elif i % 6 == 3 %}
            {% set r = p %}
            {% set g = q %}
            {% set b = v %}
          {%- elif i % 6 == 4 %}
            {% set r = t %}
            {% set g = p %}
            {% set b = v %}
          {%- elif i % 6 == 5 %}
            {% set r = v %}
            {% set g = p %}
            {% set b = q %}
          {%- endif %}

            {%- set red_h1 = (255*r)|round(0) %}
            {%- set green_h1 = (255*g)|round(0) %}
            {%- set blue_h1 = (255*b)|round(0) %}

          http://192.168.1.15/h1color?value=0&red={{ red_h1 }}&green={{ green_h1 }}&blue={{ blue_h1 }}

Par contre, vu la place que ça prend, je pense quand même passer par un script pour faire de la place dans mon configuration.yaml. Je dois quand même mettre un code similaire 4 fois.

1 « J'aime »

https://forum.hacf.fr/t/organisation-du-fichier-configuration-yaml/205
Attention si tu gardes les sliders il en faut 4 triplets différents

Bon via les scripts ça ne fonctionne pas. La valeur des couleurs ne remonte pas dans l’URL. Du coup flemme, je vais créer un fichier rest_command.yaml

Voilà, j’ai ajouté mes 4 chiffres à HA pour lesquels je peux modifier individuellement la couleur. A voir si j’aurai la foi de faire le reste de l’horloge parce que ça fait beaucoup de boulot !

Merci encore à toi pour toute ton aide !

Salut

Tu verras, à l’usage, que :

  • c’est parfois pas utile de mettre des options partout, elles servent pas (c’est par contre formateur)
  • que c’est loin d’être le genre de config la plus compliquée de HA

Il y a, je crois, moyen de factoriser du code dans HA pour « éviter de dupliquer le même morceaux »… Personnellement j’ai très peu trempé là dedans, j’arrive à me retrouver avec un découpage par fichiers de mes 3000+ lignes de config

Bon courage !

1 « J'aime »