Faire clignoter une ampoule/prise

Feature description
Permettre d’avoir l’option ‹ faire clignoter (1x,2x,3x par seconde) pendant X minutes › dans les choix d’actions dans les scènes.
Actuellement, le clignotement est très contraignant car nécessite une succession de blocs allumer/attendre/éteindre/attendre en boucle.
Avec le nouveau mode alarme, ça fait sens de simplifier la création du type de scène ‹ compte à rebours ›, ‹ sonnerie+lumière › etc.

Je rencontre la même problématique alors je vote !! :slight_smile:

Dans la même idée mais permettant d’aller encore un peu loin je proposerai meme de pouvoir, dans une scène, en appeler une autre en la répétant N fois !

J’ai commencé à travailler sur cette fonctionnalité et j’ai commencé simple.

On peut choisir :

  • la ou les lumières à faire clignoter
  • le nombre de fois
  • le délai entre chaque « clignotement » en ms

Voici une capture d’écran de l’action (ne regardez pas le style mais plutôt les options :sweat_smile: )

image

et le rendu

Pensez-vous que la lumière doit revenir dans l’état initial (avant clignotement) ou pas ?

J’imagine que vous avez envie de pouvoir choisir la couleur, l’intensité, et plein d’autres paramètres pour chaque lampe, mais on verra ça dans une prochaine version :smiley:

7 « J'aime »

L’idéal serait d’avoir (pour ouverture portail garage par exemple) :
intervalle clignotement
durée clignotement + durée allumage + durée clignotement + extinction

1 « J'aime »

Merci beaucoup pour cette avancée !
Si je puis faire une proposition :

  • Clignoter pendant… (Temps)
  • Vitesse du clignotement (très lent, lent, normal etc.)

Serait plus ‹ user Friendly ›
Mais certains voudront quelque-chose de bien plus personnalisable, on y revient.
Un petit calcul en background te permettrait de compter le nombre de fois que ta boucle sera répétée, plutôt que ce soit à l’utilisateur à le faire.
Et en effet, un retour à l’état initial ou éventuellement, un choix (allumée, éteinte ou état précédent - peut-être plus tard)
Des couleurs… Comme pour faire une guirlande de Noël ? Avec un random ? Ça peut être marrant :wink:

C’est très chouette @cicoub13 :clap:

Une image est disponible pour tester (en local, ne pas passer par Gladys Plus)

cicoub13/gladys:blinking-lights

Voici la nouvelle interface pour l’action

image

avec 3 modes :

  • Lent (toutes les secondes)
  • Normal (toutes les 0,5 secondes)
  • Rapide (toutes les 0,1 secondes)

Chaque lumière revient à son état initial après clignotement.

Je vais m’arrêter là pour la partie fonctionnelle.


Si cela vous convient, je passe aux tests :sweat_smile:

2 « J'aime »

Magnifique !
Je teste ça ce soir!
Merci!

1 « J'aime »

Tout d’abord, merci!
Voilà, après un simple test…
C’est pas génial avec une lampe fonctionnant via Tasmota http.
Ça fait plus des flash qu’un clignotement et c’est totalement irrégulier. Je dirais que tu dois avoir le même temps d’allumage que d’extinction (exemple : lent=0,5s on + 0,5s off). Qu’en penses-tu?
Le changement de vitesse de change rien chez moi.
Le temps est bon.
La lampe ne revient pas à son état initial.

Veux-tu que je teste d’autres paramètres (intégrations, Pi etc.) ou on attend la version suivante ?
Peux-tu directement proposer de contrôler une prise en sus des lampes ?

Édit : Rectification, la changement de vitesse fait bien quelque-chose. J’ai l’impression qu’il faudrai qu’aucun mode ne soit présélectionné au risque d’avoir qqch d’aléatoire si l’utilisateur n’a pas lui-même choisi.
Ça me fait penser… Si quelqu’un choisit ‹ rapide › pendant 1 minute, n’y a-t-il pas un risque d’overflood sur le device?

@GBoulvin

C’est certainement du à l’électronique interne de la lampe il faudrait voir les caractéristique de la lampe il doit y avoir une sécurité interne qui empêche la lampe de scintiller en cas de faux contact ce qui userait grandement ou grillerait la lampe
Il y a un circuit RC dans la lampe qui permet l’allumage progressif de la lampe LED et assure la mise en phase de la tension et du courant (pour le Cos phi) d’où le flash irrégulier certainement si l’allumage suivant intervient avant que le circuit RC soit déchargé sans compter la partie commande zigbee ! Donc il faut je pense faire des essais et ne pas aller en dessous d’un seuil minimal d’extinction/rallumage.

@cicoub13, est -il prévu de pouvoir faire clignoter une prise ? (cas d’une lampe branchée sur une prise, comme je vois juste « Faire clignoter les lumières »)

@GBoulvin Merci d’avoir testé. Oui, je suis parti sur du flash plutôt que du clignotement. Je vais essayer et voir ce que ça donne comme tu proposes.

Pas dans cette fonctionnalité. Mais si ça marche et que vous êtes satisfaits, j’enchaîne ensuite avec le « clignotement de prise » (il faudra trouver un nom).


Pour la sécurité, je fais quelques tests et je mettrai des valeurs seuils.

3 « J'aime »

Une nouvelle image est disponible. Les lumières ne flashent plus, mais clignotent.

docker pull cicoub13/gladys:blinking-lights

:warning: N’oubliez pas de supprimer votre container, le redémarrer ne le mettra pas à jour.

2 « J'aime »

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 ?