Être capable d'injecter une variable dans requête HTTP + contrôler un appareil

Va falloir créer des bots qui vote (pas le choix ^^) :stuck_out_tongue:

1 « J'aime »

Je vote pour ! En fait, j’avais poussé la même idée en novembre, mais elle n’avait pas eu autant de succès :wink: : Permettre d'injecter une variable dans une action "faire une requête HTTP"

Effectivement, est il possible de fusionné les deux ainsi que les votes @pierre-gilles / @VonOx / @Tlse-vins ?

Fusionner ce n’est pas possible à ma connaissance mais il faut dire a @Lokkye de supprimer son vote de l’autre et de voter sur celle-ci.
On pourra fermer l’autre demande.

Je viens de supprimer mon vote sur l’autre :slight_smile:

1 « J'aime »

Salut à tous !

J’ai travaillé sur ce sujet aujourd’hui. Ce n’est pas le sujet le plus demandé du forum, mais c’est un « quick win » et je pense que cette fonctionnalité est très utile pour des gens qui veulent passer à Gladys mais tout en gardant une autre instance à côté (HA, Node-RED, etc…) pour gérer des appareils non géré par Gladys.

Pour l’action « Faire une requête HTTP », cela ressemble donc à ça:

Même comportement que l’action « Envoyer un message » :slight_smile:

La PR est disponible ici:

En revanche, je n’arrive pas trop à voir comment on pourrait faire ça dans l’action « Contrôler un appareil » car cette vue n’a pas de champs texte.

Je me demande au final si c’est pas un développement différent…

Ceux qui voulaient cette fonctionnalité dans l’action « contrôler un appareil », c’était pour faire quoi ?

Est-ce que vous avez un exemple de cas d’usage ?

2 « J'aime »

Tu fais une requête get qui récupère une valeur, cette valeur te permet de définir l’état d’un appareil gladys. Peut importe la feature.

Ça évite un node red juste pour faire ça ( dans la pratique ça peut être compliqué car s’il faut convertir le type de données…)

1 « J'aime »

Ok je vois, effectivement c’est utile.

Après, pour le coup ça sera un visuel totalement différent, vu qu’on veut juste injecter une valeur « pure », et pas un texte concaténé comme dans le cas d’envoie d’un message ou d’une requête HTTP.

Le problème de la conversion de donnée est aussi important, car du coup c’est plus du texte mais des nombres qu’on envoie.

Ca sera une PR différente du coup

Jai cru que cetait dans la new release avant de relire et me rendre compte que la mr est en cours :smiley:
La fausse joie ! M’enfin cest cool jai hâte

1 « J'aime »

Pour ma part, pour mon chauffage j’ai besoin de la température extérieur. Comme je n’ai pas de capteur de température extérieur (pour l’instant), j’utilise Node Red pour faire une requête vers l’API openweathermap (la même api que Gladys) pour récupérer la température et l’envoyé dans un fake device mqtt.
Si on peut le faire directement dans Gladys se serait cool!

Ce serait bien aussi de pouvoir corriger le problème de variables dans les requêtes

@cicoub13 a proposé une PR mais je ne sais pas si il a fini ces tests

La PR est prête. Si quelqu’un peut review :pray:

2 « J'aime »

Merci pour la PR @cicoub13 !

J’ai une question, tu as trouvé où cette solution ? C’était recommandé par la librairie de faire comme ça ?

Parce que ça ressemble quand même très fortement à un bug de la lib qu’on utilise, et forcer un ordre est un peu un hack non ?

D’ailleurs, est-ce que l’ordre que tu défini change l’ordre d’affiche de la dropdown ?

Dans ma tête :slight_smile:

Non, j’avoue que je n’ai pas cherché la source en dehors du code du fichier. C’est peut-être une mauvaise gestion des listes.

Le problème est qu’on essaie de remplacer dans un texte des tags qui sont présents sous plusieurs formes :
Texte

Bonjour, la nuit, les chats sont gris et les libellules sont grises.

Tags à remplacer

gris, grises

Résultat

Bonjour, la nuit, les chats sont gris et les libellules sont grises.

Le remplacement du tag gris remplace aussi le mot « grises »

La solution que je propose semble effectivement un hack.
Texte

Bonjour, la nuit, les chats sont gris et les libellules sont grises.

Tags à remplacer

grises, gris (triés du plus long au plus court)

Résultat

Bonjour, la nuit, les chats sont gris et les libellules sont grises.

Le remplacement du tag gris remplace seulement le mot « gris » car le remplacement du tag « grises » a eu lieu avant.

Non, l’ordre est conservé. C’est uniquement l’opération de recherche et de remplacement qui est touchée.

Tu es sûr ?

J’ai fais un test de ta PR, et j’obtiens ça:

Avant:

Après:

Les boxs sont mixées après, ça rend l’utilisation vraiment pas simple

Ce ne sont pas deux soucis différents liés au ticket ?
On ne souhaite ici que passer des variables au bloc requête http.

Cette fonctionnalité a déjà été développée :wink: (Déjà dispo sur le tag Docker dev, et sera présent dans la prochaine release prod)

En soit ce qui me bloque pour fermer cette demande, c’est la deuxième partie de la demande sur le bloc « Contrôler un appareil », je n’ai aucune idée de comment faire en terme de design, c’est peut-être même un bloc différent à développer.

1 « J'aime »

A super ! :open_mouth:

Cf plus haut:

Salut, je me demandais comment tu voyais le truc quand tu imagines un possible bloc différent pour contrôler un appareil avec une variable.

J’ai tenté quelque chose en réutilisant le composant qui existait déjà pour l’insertion des variables. Si la valeur est un nombre, on enregistre comme d’habitude la nouvelle valeur dans value, sinon elle est enregistré comme une chaine de caractère. Dans mon essai j’ai ajouté un champs en base de données evaluate_value. Puisqu’on a également une demande pour faire des calcul sur les variables je me suis dit que ça permettrait de faire les deux.

Quand la scène se lance si on rencontre des champs evaluate_value comme valeur des actions « contrôler un appareil », on remplace les variables avec leur valeurs et on lance le calcul (je pensais utiliser le package simple-evaluate).

Côté vérification j’ai ajouté sur le champs evaluate_value une validation @hapi/joi avec une regex n’autorisant que les nombres, les opérateurs et les {{variables}} (une formule complète si l’utilisateur entre "{{variable…}} + " sans deuxième deuxième valeur ça ne sauvegardera pas).

Qu’en pensez vous ? Quelle était ta vision du fonctionnement ?