Faire clignoter une ampoule/prise

Voilà, c’est testé et ça marche comme c’est prévu!
L’état initial est bien récupéré (sauf en ‹ rapide › mais ce mode fait bugger plus qu’autre chose chez moi, sans doute trop rapide).
Ça va être top! Merci!

Édit: Après réflexion, peut-être qu’ajouter une pause (100ms?) avant d’envoyer le dernier état dans le mode ‹ rapide › résoudrait le problème (chez moi). Ou ralentir le ‹ rapide › ? A 200ms?

J’ai fait ça. Testé de mon côté, ça marche bien. Je pense qu’on est prêt pour une review.

1 « J'aime »
4 « J'aime »

Excellente idée !
C’est via la création de clignotement manuel que j’avais constaté un souci avec l’état initial des Philips Hue.

Si je peux faire clignoter ma maison en rouge lorsqu’un détecteur de fumée s’enclenche sans devoir créer 30 lignes de scène comme je le fais aujourd’hui, je suis preneur :slight_smile:

Merci pour ton boulot !

1 « J'aime »

@cicoub13 Tiens moi au courant quand ta PR est prête à être review :slight_smile:

Hello. J’ai pris en compte tes retours concernant le statut bloquant de l’action mais je rencontre quelques soucis lors des tests réels. Je reviens vers toi (et ici pour d’autres testeurs) dès que je me remets dessus.

1 « J'aime »

J’ai réussi à fixer le problème, mais je bloque maintenant sur les tests.

J’utilise la fonction setTimeout de timers/promises (qui est un timeout sous forme de Promise).
Cela donne dans ma boucle for :

Mais lors des tests, je ne veux pas gérer de notion de temps et résoudre ma Promise immédiatement. J’utilise donc proxyquire pour remplacer la méthode par une Promise simple de fake.

J’ai fait ça :

Mais ce n’est pas pris en compte, j’obtiens l’erreur suivante :

scene.blink-lights
       should blink light in slow mode:
     Error: Timeout of 2000ms exceeded. For async tests and hooks, ensure "done()" is called; if returning a Promise, ensure it resolves. (/Users/cyril.beslay.home/workspace/Gladys/server/test/lib/scene/actions/scene.action.blinkLights.test.js)
      at listOnTimeout (node:internal/timers:569:17)
      at process.processTimers (node:internal/timers:512:7)

Une idée ?

En attendant, une nouvelle image :whale: est disponible cicoub13/gladys:blinking-lights. Ce qui a été corrigé est le fait que l’action soit bloquante.

Par exemple, si vous ajoutez une action « Envoyer un message », cela ne se fera qu’après que la lumière est finie de clignoter.

2 façons de résoudre ça :slight_smile:

Déjà, si tu peux influer sur le temps dans les tests !

Sinon, tu peux utiliser des temps beaucoup plus petits dans tes tests pour que ça passe plus vite

J’étais parti sur l’option fake clock (qui me paraît plus simple) mais ça ne marchait pas. Je vais réessayer, merci

bonjour @cicoub13

Juste 2 petites remarques :
Pourquoi ne pas multiplier ta constante blinking_time directement dans sa déclaration pour éviter le calcul dans la boucle
const blinkingTime = action.blinking_time * 1000 ;
J’ai toujours utilisé des noms de variables doublée (ii aul lieu de i) c’est plus facile à tracer ensuite !

Pour le reste pas assez calé dans ce langage ! :woozy_face:

Salut @cicoub,

Je ne sais pas si cela peut t’aider et si le cas de figure correspond :
server/test/services/netatmo/lib/netatmo.pollRefreshingValues.test.js

… j’espère …

J’ai galéré à le faire fonctionner. Mais avec un mix copilot / chatGPT / stackoverflow, ça a fonctionné avec cette combinaison (le 1er test notamment)

Tu remarqueras cette partie dans le 2ème test :

    clock.tick(120 * 1000);
    clock.restore();
    // eslint-disable-next-line no-promise-executor-return
    await new Promise((resolve) => setTimeout(resolve, 50));

Pour passer 120 secondes puis arrêter le clock et réaliser la Promesse. Ca ne fonctionnait pas sans le clock.restore() car ça rentre en conflit de gestion d’horloge (de ce que j’en ai compris… ^^)

1 « J'aime »

C’est corrigé, merci

Ça marche avec les fake timers de SinonJS. J’ai dû mettre à jour en version 8.1.1 (précédemment 7.2.4) pour bénéficier de clock.tickAsync().

D’ailleurs, ils en sont à la version 17 :sweat:

Merci @Terdious et @pierre-gilles, c’était pas évident ces tests avec notion de temps :sweat_smile:

Je te préviens quand tout est prêt

2 « J'aime »

PR prête (fonctionnellement, développement, tests) :tada:

3 « J'aime »

Merci pour la PR @cicoub13 :slight_smile:

J’ai trouvé un petit bug en faisant un test en réel :

Mais rien de très grave, le comportement sinon marche bien !

1 « J'aime »

C’est corrigé

4 « J'aime »

Merci pour le fix @cicoub13 ! C’est bon pour moi, c’est mergé sur master et ça partira dans la prochaine version de Gladys :slight_smile:

4 « J'aime »

Cette fonctionnalité est disponible dans Gladys Assistant 4.38 :slight_smile:

Je ferme ce sujet pour libérer les votes, n’hésitez pas à créer d’autres sujets en cas de bugs/retours :slight_smile:

Merci à @cicoub13 pour le développement :pray:

4 « J'aime »