jjacques68 Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 (modifié) Hello tout le monde ! j'ai besoin de vos conseils Dans une scène : 1- Comment mettre le déroulement d'un script "en pause" pendant un certain temps, SANS utilisé fibaro.sleep() ? Le setTimeout étant asynchrone, la suite du scripte continuera ! 2- Est-il possible d'avoir un trigger de type CRON avec comme value, une variable, afin d'éviter la bonne vieille méthode de bouclage de la HC2 : function MaFonction() if os.date("%H:%M", os.time()) == MaVariable then [...] end fibaro.setTimeout(60*1000, MaFonction) end 3- Quelle est la bonne méthode pour faire clignotter une ampoule pendant x minutes ? (toujours pareil sans les fibaro.sleep()) merci pour vos conseils !! EDIT : je cherche à me séparer les fibaro.sleep(), car si on stoppe une scène avec ces sleep, on a une erreur sans libellés qui apparait ! Modifié le 21 décembre 2020 par jjacques68
Dragoniacs Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 Je ne connais pas d'autre méthode pour la pause d'un script que les 2 que tu as cité. Il faut peut être que tu revois la structure de ton code et de tes fonctions (principale et secondaires) pour que l'une des 2 fonctionne.Pour le déclenchement, tu as essayé de faire appel à une variable globale dans les paramètres de déclenchement de la scène ?Envoyé de mon RMX1993 en utilisant Tapatalk
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 il y a 7 minutes, Dragoniacs a dit : Il faut peut être que tu revois la structure de ton code et de tes fonctions (principale et secondaires) pour que l'une des 2 fonctionne Je vois pas comment le faire, les scènes sont de la programmation séquentielle, j'ai du mal à imaginer comment faire autrement il y a 8 minutes, Dragoniacs a dit : Pour le déclenchement, tu as essayé de faire appel à une variable globale dans les paramètres de déclenchement de la scène ? Je vois pas quelle syntaxe utiliser, et y a rien du tout sur le site de fibaro sur de tels cas ! Je me demande si c'est possible...
Lazer Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 Comme Dragoniacs, pour moi il faut que tu structures ton code avec des fonctions qui vont s'appeler les unes et les autres. Alors il sera facile avec setTimeout() de relancer une fonction quelques secondes ou minutes plus tard. Pour les déclencheurs de scènes, c'est bien documenté : https://manuals.fibaro.com/home-center-3-lua-scenes/ Mais je n'ai pas encore testé, je n'ai que des QuickApps, et GEA est mon moteur de scénarios pour l'instant.
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 Justement, c'est bien documenté, et visiblement y a pas moyen. On peut pas mettre fibaro.getGlobalVaraible() dans le trigger de la scène...
Lazer Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 "fibaro.getGlobalVaraible()" dans un trigger, surement pas, y'a aucune chance. Mais on doit pouvoir y mettre "global-variable" d'après ce que je vois. Après je n'ai pas testé, mais c'est possible, forcément. Je récupère le trigger des variables globales via l'API RefreshStates dans GEA, donc ça déclenche bien un événement. Faut juste que tu trouves la bonne syntaxe.
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 il y a 2 minutes, Lazer a dit : Je récupère le trigger des variables globales via l'API RefreshStates Pour déclencher des actions sur changement de VG oui ok !! Et directement dans une scène aussi ! Mais pour trigger sur une condition Date/heure avec une valeur dans une VG... j'ai un sérieux doute
Lazer Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 Ah ok, je n'avais pas compris que tu voulais déclencher sur 2 conditions. ..... mais .... dans ce cas pourquoi ne pas utiliser GEA ? Tu as envie de réinventer la roue ?
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 euh... on s'est pas compris là, pour un déclenchement sur Date/Time on utilise : { type = "date", property = "cron", operator = "match", value = {"30", "15", "*", "*", "*", "*"}, isTrigger = true } Et bien moi je souhaiterai pas mettre 15h30 en dur dans le trigger, mais prendre une heure stockée dans une VG !
Lazer Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 (modifié) ah.....ok J'avais effectivement rien compris Bah je ne pense pas que ça soit possible, la déclaration des triggers semble être statique (comme sur HC2) et non dynamique. EDIT : je reviens sur GEA, c'est ce que permet le VD Alarme, que je n'ai pas encore porté en QA, mais c'est prévu Modifié le 21 décembre 2020 par Lazer
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 Ben... Je n'utilise pas GEA, désolé Par contre j'ai bien un QA qui tourne et analyse le RefreshState... pour plusieurs raisons... Il suffirait d'y ajouter un contrôle de l'heure et comparer avec la VG... Mais je trouve ça lourd... 1
Lazer Posté(e) le 21 décembre 2020 Signaler Posté(e) le 21 décembre 2020 Le QA unique, c'est l'approche que @jang a utilisé sur le forum officiel, auquel tous les autres QA peuvent souscrire : https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/page/6/?tab=comments#comment-202423 Bon après tu fais comme tu le sens
jjacques68 Posté(e) le 21 décembre 2020 Auteur Signaler Posté(e) le 21 décembre 2020 (modifié) oui c'est un peu ce que je fais. J'en avais discuté avec lui à l'époque. Pour mes histoire de "sleep", je sens que ça finir dans une sorte de "handler", comme j'ai déjà fait pour les mouvements des caméras... Aussi discuter avec @jang à l'époque... Modifié le 21 décembre 2020 par jjacques68
jjacques68 Posté(e) le 22 décembre 2020 Auteur Signaler Posté(e) le 22 décembre 2020 (modifié) Et bien j'arrive à me séparer totalement des "sleep" avec justement un "handler". ça complique la compréhension du code, mais ça marche super bien... Encore faut-il bien structurer son tableau de fonctions... Après avec ça, j'ai l'impression que l’intérêt de la scène disparaît complètement ! Ce principe de handler couplé avec le contrôle du RefreshState = fini les scènes ! tout passe dans les QA !! Punaise, je me suis lancé trop vite au mois de mars, j'ai envie de refaire plein de script... Après pour mon excuse, toutes les fonctionnalités n'étaient pas encore présentes à l'époque Modifié le 22 décembre 2020 par jjacques68
Lazer Posté(e) le 22 décembre 2020 Signaler Posté(e) le 22 décembre 2020 Ah ben ça, depuis le temps que je dis que les scènes sur HC3 ne servent pas à grande chose, comparées à la puissance des QuickApps !! Le seul intérêt en fin de compte, c'est pour le néophyte, celui qui ne veut pas programmer, alors les scènes en mode bloc permettent d'exécuter des scénarios basiques : si... alors... En multipliant les scènes, il peut se faire quelques scénarios pour sa domotique. Et même sur HC2 c'était déjà un peu le cas, franchement je n'utilisais les scènes que pour 2 situations bien particulières qui n'étaient pas faisables avec les modules virtuels : - déclencheurs instantanés - connexions https Et même si je les ai utilisé au début, ça fait bien longtemps que j'avais viré toutes mes scènes blocs, trop limitées pour mon usage. 1
Dragoniacs Posté(e) le 22 décembre 2020 Signaler Posté(e) le 22 décembre 2020 Oui, j'avoue que les scènes sur la HC3 n'ont plus grande utilité.... Envoyé de mon RMX1993 en utilisant Tapatalk 1
jjacques68 Posté(e) le 23 décembre 2020 Auteur Signaler Posté(e) le 23 décembre 2020 (modifié) Que pensez-vous de ce contournement pour mon histoire de déclenchement de scène sur une date/heure paramétrable ? Du coup : Plus aucunes scènes. J'ai un QA principal qui tourne en boucle toutes les minutes. Dans ce QA, je lui donne une liste de QA, qui contiennent une action à effectuer à une heure particulière. Dans cette liste, je précise l'ID du QA, le nom de la variable contenant l'heure, et la fonction à exécuter, A chaque boucle, je vais lire les variables des QA (fonction GetVariableQA() de @Lazer ->merci !!) Si l'heure courante = l'heure stockée dans la variable alors j'execute la fonction précisée. ça à l'aire de bien marcher... Que ce soit pour des QA Parents ou Child... Bon la c'est grossier, mais c'est pour tester le principe ! Si je modifie l'heure de déclenchement dans un QA, ça le prends très bien en compte. Si vous avez de meilleurs idées ?? elles sont bienvenues !! function QuickApp:onInit() self:debug("onInit") self.timeLoop = 60*1000 --Liste des QA ayant une fonction à déclencher à une horaire précise self.listTrigger = { {id=731, var="MaVarX", func="MaFonc1"}, {id=732, var="MaVarY", func="MaFonc2"}, } self:main() end --[[------------------ FUNCTION MAIN --------------------]] function QuickApp:main() --pour chaque QA de la liste for _, myDevice in ipairs(self.listTrigger) do --récupère l'heure de déclenchement dans le QA local QA_Time = lib:GetVariableQA(myDevice.id, myDevice.var) --si l'heure courante = l'heure du QA, on execute la fontion du QA if os.date("%H:%M", os.time()) == QA_Time then fibaro.call(myDevice.id, myDevice.func) end end --boucle de rafraichissement pour la lecture des variables des QA setTimeout(function() self:main() end, self.timeLoop) end Modifié le 23 décembre 2020 par jjacques68
jjacques68 Posté(e) le 23 décembre 2020 Auteur Signaler Posté(e) le 23 décembre 2020 ben j'ai beau faire des essais dans tous les sens, ça marche bien ! J'ai ajouter la possibilité de décaler l'heure stockée dans la variable du QA, une sorte d'offset...
jjacques68 Posté(e) le 23 décembre 2020 Auteur Signaler Posté(e) le 23 décembre 2020 les QA concernés sont ceux de mes réveils : le QA parent : Mais ya quand même un problème avec la gestion de ces foutus ID des Child... Dans le QA Parent, on voit les 2 boutons Set Left et Set Right. Le code derriere ces boutons est le suivant : function QuickApp:BTN_SET_LT(event) self:setWakeup(731) end function QuickApp:BTN_SET_RT(event) self:setWakeup(732) end C'est nul !! Si je supprime les Child et que je les recréé, il faut que j'aille changer l'ID de ces 2 boutons, sinon, ça marche plus... C'est pourri !! Si on pouvait avoir une listebox dans les QA, on alimenterait dynamiquement cette listebox avec la liste des Child, et il suffirait de sélectionné le child que l'on veut régler, et le tour est joué !!
Lazer Posté(e) le 23 décembre 2020 Signaler Posté(e) le 23 décembre 2020 Tu peux faire des boutons pour parcourir la liste des child. A chaque appui, il scanne les child, et passe au suivant (qu'il affiche dans un label pour que tu saches lequel a été sélectionné)
jjacques68 Posté(e) le 23 décembre 2020 Auteur Signaler Posté(e) le 23 décembre 2020 (modifié) oui c'est vrai, c'est que j'ai fait dans un autre QA d'ailleurs... Mais y avait plus de Child aussi... Mais c'est lourd... Modifié le 23 décembre 2020 par jjacques68
Lazer Posté(e) le 23 décembre 2020 Signaler Posté(e) le 23 décembre 2020 A priori les listbox existent dans les QA, mais on ne peut pas encore les utiliser. Sauf à hacker les QA, c'est à dire en les injectant directement dans leur JSON.... sauf que c'est déconseillé car tu ne peux alors plus modifier le design du QA via l'interface Web normale. Bref, patience, la personnalisation des QA finira bien par arriver, en attendant il vaut mieux se contenter de design simples et ne pas perdre trop de temps là-dessus. 1
Dragoniacs Posté(e) le 23 décembre 2020 Signaler Posté(e) le 23 décembre 2020 C'est pas possible d'utiliser une liste comme expliqué dans le manuel ? : https://manuals.fibaro.com/knowledge-base-browse/hc3-quick-apps-managing-child-devices/ we can create some kind of map for our sample model, which may look like this: hub device id -> hc device id. We’ll be able to check which device from the Home Center represents a particular device from a hub. We would have to do this on child device creation......Now by using devicesMap we can properly synchronize our devices. It can help us with updating properties as well. Envoyé de mon RMX1993 en utilisant Tapatalk
jjacques68 Posté(e) le 24 décembre 2020 Auteur Signaler Posté(e) le 24 décembre 2020 si si tout à fait, dans mon cas précis, j'ai qu'un seul type de child, les binarySensor...
Messages recommandés