Faire une opération mathématique sur une “variable de scène”

Je reçois bien la valeur dans l’envoi de message.

image

La valeur provient d’un device créé via MQTT

device alimenté via sur requête dans NodeRed

En fait, cela equivaut au bug rencontré par lmilcent le 22/09, bug qui avait été corrigé. Une régression ?

N’oublies pas que la scene doit se declencher seule pour que ça marche. Le bouton « tester » n’envoie pas de vrai valeur.

Tu as un nom de device et de feature a rallonge peut etre que le soucis est la sinon?

C’est bon, effectivement je faisais mes tests avec le bouton ‹ Essayer ›. Et je confirme également qu’il faut supprimer les espaces sinon pas de résultat de calcul.
Merci pour les infos et pour votre réactivité.

1 « J'aime »

Salut, comme dit ici, j’ai commencé à regarder pour pouvoir faire des calculs directement dans les scènes. Je fais ça sur les blocs « condition » et « contrôler un appareil » voilà ce que ça donne pour l’instant

Maintenant j’ai besoin de vous. Petite explication une fois les variables remplacés par les valeurs lors de l’exécution de la scène, on utilise la librairie mathjs pour exécuter le calcul. Le problème c’est que la méthode utilisée evaluate() pourrait permettre d’injecter du code js non désiré dans Gladys donc on doit limiter cette méthode aux fonctions mathématiques que l’on veut vraiment utiliser dans Gladys. De base, on aura au moins les opérateurs classiques +, -, *, /. Quelles sont les autres fonctions mathématiques que vous souhaiteriez utiliser (ou que vous utilisez déjà avec l’API mathjs) ?
Une liste est disponible ici math.js | an extensive math library for JavaScript and Node.js

3 « J'aime »

Génial, merci pour ton aide pour faire avancer le sujet :blush:

Je partirais sur les opérations basiques que tu évoques, perso je n’ai rien pu utiliser d’autre encore.
Ne pas oublier les parenthèses evidemment !

1 « J'aime »

Pourquoi pas la comparaison de 2 valeurs.
Je ne sais pas si c’est pertinent.
Par exemple comparé la valeur de la température de consigne et la valeur de température dans la pièce.
Alors si les deux valeurs sont égale on stop le chauffage.
Je ne sais pas si c’est réalisable.

4 « J'aime »

peut etre aussi l arrondi et le modulo ?

2 « J'aime »

Oui en effet

Je ne sais pas si tu as vu dans le screenshot, j’ai prévu d’ajouter dans cette PR la possibilité de mettre des variables dans la valeur du bloc « Continuer seulement si », est ce que ce n’est pas ce que tu demandes ?

Oui on peut mettre arrondi au plus proche, arrondi à l’entier supérieur et arrondi à l’entier inférieur ça peut être intéressant d’avoir les 3. Bonne remarque sur le modulo je note

1 « J'aime »

Ce n’ai pas forcément une demande pour moi mais le « continuer seulement si » c’est bien.

Pour compléter sur les conditions, il y a les opérateurs des expressions conditionnel dans mathjs ? : comme les ternary en js ça permettra de faire des pseudos si…sinon dans une action.

Plus globalement sur l’ajout des calculs dans les scènes, je pense qu’on devrait autoriser tous les opérateurs et limiter les fonctions mathjs (celles qu’on appel avec des parenthèses et des paramètres, c’est là que les problèmes de sécurité peuvent apparaitre)

Ça y est, la PR est là

Le code permet d’utiliser des variables et faire des calculs dans les scènes au niveau des blocs « continuer seulement si » et « contrôler un appareil » (voir captures d’écrans un peu plus haut)

Si vous voulez faire des tests, une image est disponible ici bertrandda/gladys:scene-var-eval

5 « J'aime »

Merci pour le travail @bertrandda :clap: C’est vraiment chouette !

Je t’ai fais quelques retours sur la PR : Add calcul and use device value in scene by bertrandda · Pull Request #1742 · GladysAssistant/Gladys · GitHub

C’est fixé
L’image bertrandda/gladys:scene-var-eval est à jour

1 « J'aime »

@bertrandda Je ne sais pas si tu avais vu mes feedbacks ? :slight_smile:

Oui j’ai vu, mais je n’ai pas encore eu le temps de régler tout ça, j’essayerai de le faire ce soir

2 « J'aime »

C’est bon, tes retours sont réglés et l’image docker est à jour

1 « J'aime »

@bertrandda Merci pour les retours, c’est nickel comme ça :slight_smile: Beau boulot, c’est très clair et ça fonctionne super ! J’ai testé en réel, j’ai pas trouvé de bug :raised_hands:

C’est mergé sur master et ça partira dans la prochaine version de Gladys.

4 « J'aime »

Super ça !! :grin:

1 « J'aime »