Aller au contenu

Questions générales sur les scènes


jjacques68

Messages recommandés

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

"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.

Lien vers le commentaire
Partager sur d’autres sites

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 :( 

Lien vers le commentaire
Partager sur d’autres sites

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 !

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

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é par Lazer
Lien vers le commentaire
Partager sur d’autres sites

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... :( 

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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 :)

 

Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

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.

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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é par jjacques68
Lien vers le commentaire
Partager sur d’autres sites

les QA concernés sont ceux de mes réveils : 

image.png.fa13f057a73c0c5ed3a1aa5aaa264376.png

 

le QA parent : 

image.png.812e32bbfb41800c462d2fb3c020c93f.png

 

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é !!

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

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.

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

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

 

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...