Aller au contenu

[HC2] Actions répétées sur un VD


Messages recommandés

Posté(e) (modifié)

Bonjour à tous,

 

Aujourd'hui, j'aimerais savoir comment les programmeurs parmi vous effectuent des répétitions d'actions dans leurs scènes.

Par exemple, appuyer sur le bouton 5 de tous les VDs de lampes de mon domicile.

 

local VDs = {1,2,12,13,25,23,34,54,43,53,56,54,98,99,123,145};

for i=1,#VDs do
  fibaro:call(VDs[i], "pressButton", "5");
end

 

Utiliser la méthode ci-dessus mène une fois sur trois sur une boucle qui arrive à son terme, mais sans que l'appui ait été fait sur tous les boutons.

Ce n'est jamais le(s) même(s) VD qui ne sera pas appuyé et il n'y a aucune logique dans ces non-actions.

J'ai déjà tenté de temporiser avec un fibaro:sleep(); entre chaque appui, mais le résultat reste aléatoire, avec un temps d'exécution évidemment plus long.

 

Certains d'entre-vous ont-ils déjà constaté cela?

Comment y remédiez-vous ?

Modifié par J3R3M
Posté(e) (modifié)

Oui, désolé, j’ai écrit ce code rapidement pour la donner un exemple, je vais rectifier immédiatement cette erreur. Merci!

Mais oui, il s’agit bien de VDs et la liste des id n’est pas fixe dans mon cas, mais est plutôt variable en fonction des paramètres précédents du script :-)

Indirectement, des tableaux de plusieurs tailles ont donc été testés et exploités.

Modifié par J3R3M
Posté(e)

Les VDs sur lesquels agissent les boucles sont, notamment, les VD Sonos et Hue.

Par exemple, lorsque je veux éteindre toutes les Hues d'une pièce, ou augmenter le volume de chaque enceinte, via une scène.

 

Effectivement @pepite, j'ai déjà essayé en dehors d'une boucle. Tout fonctionne parfaitement en écrivant toutes les lignes à la suite.

Comme cela marche souvent parfaitement au sein de ces boucles d'ailleurs.

 

Je précise quand même que l'exemple ci-dessus est un simple exemple destiné à aider à la compréhension de mon problème.

En pratique, mon code est bien plus complexe, les IDs des VDs et valeurs étant récupérées dans une VG.

Et c'est la même scène qui gère toutes mes pièces, donc la boucle est automatiquement ajustée en fonction du déclencheur :)

Posté(e)

Bonjour, 

 

Je me doutais que la scène était plus complexe ;-) 

Plutôt qu'avec un sleep, as tu essaye avec un setTimeout ? 

 

J'ai le cas (enfin avait) avec le VD Sonos quand je voulais d'abord baisser le son puis mettre la lecture, enchainé cela ne fonctionnait pas, avec un setTimeout, ca passe ;-) .

Sur les VDs, impression que la HC2 a besoin de temps. :60:

Posté(e) (modifié)

Je n'ai pas encore essayé avec le setTimeout(), car bien que je l'utilise, je n'ai pas encore totalement apprivoisé cette fonction.

Je peux presque comprendre le besoin de temporiser lorsque deux actions s'enchaînent sur le même VD, comme effectivement baisser un slider puis appuyer sur un bouton.

Mais enchaîner les appuis sur les boutons de différents VD? Surtout lorsque ça fonctionne sans temporiser dans 70% des cas, j'en reste dubitatif :huh:

Modifié par J3R3M
  • 3 semaines après...
Posté(e)

Merci de ces réponses. Je n'ai pas encore essayé.

J'avoue que ça me chiffonne pas mal que l'enchainement ne se fasse pas correctement.

Et je trouve ça vraiment aberrant de devoir temporiser pour espérer que des actions fonctionnent dans 100% des sollicitations. Surtout quand les messages de debug sont bien executés!

 

En fait, lorsque toutes les chambres de chez moi sont en mode "DODO", une boucle est générée pour envoyer un preset bleu foncé aux Hues des pièces partagées (et ainsi on ne se fait pas flasher la tronche lorsqu'on se réveille et se déplace dans la nuit). Le même principe a lieu lorsqu'une des chambres quitte le mode "DODO", une boucle renvoie une preset adéquat.

Mais ce n'est pas rare qu'une lampe soit restée blanche dans la nuit, ou bleue au réveil... Surtout quand le debug affiche bien le traitement de toutes les pièces, c'est légèrement déconcertant...

×
×
  • Créer...