ericl78 Posté(e) le 22 février 2021 Signaler Posté(e) le 22 février 2021 Bonjour, Je viens de créer un QA remote pour gérer ma clim. Sous ma HC2, tout fonctionne à merveille, mais je migre sous hc3 et désire faire la même chose. Je voudrais récupérer les boutons presser en mode CentralSceneEvent et l'utiliser pour déclencher une scene. Voici mon QA remote : Au niveau de la scène, voilà ce que j'ai : Mais , lorsque je clique sur un bouton de mon QA, voici la réponse du tracking : Je débute complètement sur HC3, merci d'avance pour votre aide
Lazer Posté(e) le 22 février 2021 Signaler Posté(e) le 22 février 2021 Euh... je voudrais bien t'aider, mais je ne comprends rien à ce que tu as fait J'ai l'impression que tu as mélangé le code de la scène et du Quickapp.... Tu veux faire quoi en fait ? Expliqué simplement. On verra ensuite comment traduire ça en "langage Fibaro", c'est à dire s'il faut utiliser une scène, un QA, ou les deux (et le code LUA qui va avec)
ericl78 Posté(e) le 22 février 2021 Auteur Signaler Posté(e) le 22 février 2021 bonsoir et merci d'avance Voilà ce que j'ai sous ma HC2 : Associé à cela : (pour exemple si je clique sur 18°) Je désire faire la même chose sur ma HC3 J'ai donc créé un QA remote comme ceci Avec le script suivant dans mon QA remote : -- Remote controller type have no actions to handle -- Method for emitting central scene events. Default value for keyAttribute is "Pressed" -- Sample usage: self:emitCentralSceneEvent(1, "Pressed") function QuickApp:emitCentralSceneEvent(keyId, keyAttribute) if keyAttribute == nil then keyAttribute = "Pressed" end local eventData = { type = "centralSceneEvent", source = self.id, data = { keyAttribute = keyAttribute, keyId = keyId } } api.post("/plugins/publishEvent", eventData) end -- To update controls you can use method self:updateView(<component ID>, <component property>, <desired value>). Eg: -- self:updateView("slider", "value", "55") -- self:updateView("button1", "text", "MUTE") -- self:updateView("label", "text", "TURNED ON") -- This is QuickApp inital method. It is called right after your QuickApp starts (after each save or on gateway startup). -- Here you can set some default values, setup http connection or get QuickApp variables. -- To learn more, please visit: -- * https://manuals.fibaro.com/home-center-3/ -- * https://manuals.fibaro.com/home-center-3-quick-apps/ function QuickApp:onInit() self:debug("onInit") -- Setup supported keys and attributes of the device -- Scenes will display possible triggers according to these values self:updateProperty("centralSceneSupport", { { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 1 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 2 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 3 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 4 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 5 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 6 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 7 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 8 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 9 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 10 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 11 }, { keyAttributes = { "Pressed","Released","HeldDown","Pressed2","Pressed3" }, keyId = 12 }, }) end Maintenant la question est : Comment je récupère code touche (keyID) pour dérouler mon script dédié ? Tout faire dans le QA, je pense que cela est possible, mais je n'ai pas trouvé de doc comment faire Je pensais pouvoir déclencher une scéne LUA avec la commande Central SceneEvent qui pourrait récupérer mon KeyID mais cela ne fonctionne pas HC2, je maitrise pas trop mal depuis 4 ans, mais HC3, cela change ! Merci d'avance pour ton aide
jang Posté(e) le 23 février 2021 Signaler Posté(e) le 23 février 2021 Have you set interfaces = { 'zwaveCentralScene' } ?
ericl78 Posté(e) le 23 février 2021 Auteur Signaler Posté(e) le 23 février 2021 No I didn't I tried to add it and the same result Thks
jang Posté(e) le 23 février 2021 Signaler Posté(e) le 23 février 2021 This QA shows up in the block scene editor for me function QuickApp:onInit () self:debug ("Remote") local inf = api.get("/devices/"..self.id).interfaces for _,i in ipairs(inf) do if i=='zwaveCentralScene' then inf=nil; break end end if inf then inf[#inf+1]='zwaveCentralScene' self:addInterfaces(inf) end self:debug(json.encode(inf)) self: updateProperty ( "centralSceneSupport" , { {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 1 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 2 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 3 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 4 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 5 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 6 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 7 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 8 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 9 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 10 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 11 }, {keyAttributes = { "Pressed" , "Released" , "HeldDown" , "Pressed2" , "Pressed3" }, keyId = 12 }, }) end
ericl78 Posté(e) le 23 février 2021 Auteur Signaler Posté(e) le 23 février 2021 Yes right, it appears in the block scene but doesn't work !
Lazer Posté(e) le 23 février 2021 Signaler Posté(e) le 23 février 2021 Mais tu n'as pas besoin de passer par CentralSceneEvent ?!? Ce que tu veux, c'est juste exécuter du code LUA après appui sur un bouton du QuickApp non ? Dans ce cas il suffit d'associer une fonction dans le callback de chaque bouton
jang Posté(e) le 23 février 2021 Signaler Posté(e) le 23 février 2021 (modifié) 16 minutes ago, ericl78 said: Yes right, it appears in the block scene but doesn't work! It works very well for me. Does it show up in the block scene editor? The "Central Scene ID" option? Remote.fqa Modifié le 23 février 2021 par jang
ericl78 Posté(e) le 23 février 2021 Auteur Signaler Posté(e) le 23 février 2021 Il y a 7 heures, Lazer a dit : Mais tu n'as pas besoin de passer par CentralSceneEvent ?!? Ce que tu veux, c'est juste exécuter du code LUA après appui sur un bouton du QuickApp non ? Dans ce cas il suffit d'associer une fonction dans le callback de chaque bouton Merci @lazer and thanks to @jang too for your assistance Tout est ok maintenant. Lazer, sais tu ou je pourrais trouver une doc plus complète sur la HC3 que les qqs pages sur leur site ? Dernière question, pour faciliter ma migration, connaitrais tu la commande API qui me permettrait depuis ma HC2 de commander un QA remote ? du genre, pouvoir valider le bouton "1,2 ou ..." depuis ma HC2 ? Dans tous les cas, sans des personnes comme toi (Lazer) nous pourrions galérer des heures, encore merci à toi et tous les contributeurs de ce forum.
Lazer Posté(e) le 23 février 2021 Signaler Posté(e) le 23 février 2021 C'est vrai que la documentation de Fibaro est succincte.... Mon sujet favori sur le forum officiel, de loin la meilleure source d'info pour comprendre le maximum sur les QuickApps, justement tenu par @jang : HC3 QuickApps coding - tips and tricks Il faut perdre l'habitude d'appeler des boutons. C'est une mauvaise habitude prise sur HC2 car on n'avait pas le choix sur HC2. Mais sur HC3, les boutons ne servent que pour l'IHM (interface avec l'utilisateur, via le Web ou l'application mobile) La bonne pratique c'est d'appeler directement la fonction qui va bien dans le QuickApp (cela peut très bien être la fonction de callback du bouton, mais il est plus propre de nommer différemment la fonction avec un nom parlant.... que le bouton appellera également) Et c'est documenté par Fibaro dans le chapitre "Mapping actions to methods" de la doc sur les Quckapps, il faut appeler la méthode "call" : fibaro.call(44, "myCustomAction", 10, "test") Ou bien via l'API HTTP ce qui revient au même : /api/callAction?deviceID=44&name=myCustomAction&arg1=10&arg2=test On peut ainsi passer autant d'argument que nécessaire à la fonction ainsi implémentée dans le QuickApp : function QuickApp:myCustomAction(arg1, arg2) self:debug("myCustomAction", arg1, arg2) end Et si je prend la suite de mon screenshot précédent, avec le bouton "Get devices" qui appelle la fonction buttonGetDevices_onReleased(), alors celle-ci se contente d'appeler à son tour la fonction myCustomAction() : function QuickApp:buttonGetDevices_onReleased(event) self:myCustomAction() end Et surtout, on n'est pas dépendant d'un numéro de bouton qui changeait constamment sur la HC2, le truc infernal pour maintenir son code !! La seule dépendance reste l'ID du QuickApp, mais celui-ci ne changera jamais tant qu'on ne le supprime pas, donc ça ne devrait pas trop poser de souci. En alternative, on pourrait au choix : - définir le callback du bouton directement sur myCustomAction() sans passer par buttonGetDevices_onReleased() - appeler buttonGetDevices_onReleased() directement via l'API HTTP ou fibaro.call => d'où l'importance de bien nommer ses fonctions, car toute fonction définie dans QuickApp (qui est une table au sens LUA du terme) est automatiquement partagée avec le monde entier (elle est publique quoi), donc accessible depuis un autre QuickApp, une Scène, ou depuis l'extérieur via l'API HTTP. Et cela s'applique aussi bien aux fonctions qu'on définie nous même, ou bien aux fonctions prédéfinies (et oui, par exemple pour le fun on peut injecter un message dans la zone de debug d'un QuickApp en appelant sa fonction debug() depuis n'importe où). Mais on peut aller plus loin encore, par exemple redéfinir les fonctions prédéfinies (attention aux bêtises)... comme l'explique très bien @jang dans son super topic. Bref, les QuickApp, je trouve ça vraiment génial pour développer, quand tu as connu les modules virtuels de la HC2, c'est le jour et la nuit.
ericl78 Posté(e) le 23 février 2021 Auteur Signaler Posté(e) le 23 février 2021 Reçu 5/5 et bien assimilé Merci, je vais mettre en œuvre
Messages recommandés