henri-allauch Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 Inspiré à l'époque par ce sujet j'utile sur HC2 structure = { D1 = "Donnée 1", D2 = "Donnée 2", D3 = "Donnée 3", D4 = "Donnée 4" , D4 = "Donnée 5", D5 = "Donnée 6", D6 = "Donnée 7" } --Depuis une scene lance une autre scene avec le json en argument local ToScene = 22 fibaro:startScene(ToScene, { {json = json.encode(structure)} } ) --Dans Scene 22 : -- récupérer la structure passée en paramêtres par la scène appelante if (Params) then for k, v in ipairs(Params) do if (v.json) then Param = json.decode(v.json) end end print (Param.D1 ) print (Param.D2 ) ... Comment faire en HC3 ??? --Depuis une scene je souhaite envoyé le json à une fonction dans un QuickApp ToQuickApp = 25 fibaro.call(ToQuickApp, "LaFonctionInQa", json.encode(structure) ) Le QuickApp Signale [DEBUG] [QA_XXXXX_25]: onAction: {"args":[{"D1":"Donnée 1","D2":"Donnée 2","D3":"Donnée 2", .....}],"actionName":"LaFonctionInQa","deviceId":25} [DEBUG] [QA_NOTIFICATIONS_33]: /usr/share/lua/5.3/json/decode.lua:74: bad argument #1 to 'match' (string expected, got table) --IL attend une chaine et pas un tableau Donc Pas OK Une solution existe ? Ou il faudra passer un par un les éléments Ce qui fonctionne correctement mais moins pratique fibaro.call(ToQuickApp, "LaFonctionInQa", stucture.D1, stucture.D2, stucture.D3 , ... )
Lazer Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 C'est bien compliqué tout ça, si tu veux envoyer un tableau à une fonction d'un QuickApp, il suffit de lui envoyer....... un tableau -- Depuis une scene je souhaite envoyer le json à une fonction dans un QuickApp ToQuickApp = 25 fibaro.call(ToQuickApp, "LaFonctionInQa", structure)
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 Merci, j'avais et j'ai réessayé mais je n'arrive pas à récupérer dans le QA Je m'y prend mal certainement Scene: structure = { D1 = "Donnée 1", D2 = "Donnée 2", D3 = "Donnée 3", D4 = "Donnée 4" , D4 = "Donnée 5", D5 = "Donnée 6", D6 = "Donnée 7" } fibaro.call( QA_Notification, "NotifierFromScene2", structure) QA: function QuickApp:NotifierFromScene2(Params) self:warning(Params) self:warning(Params.D1) end [27.02.2021] [17:45:43] [DEBUG] [QA_NOTIFICATIONS_33]: onAction: {"actionName":"NotifierFromScene2","deviceId":33,"args":["table: 0xffff500dcf00"]} [27.02.2021] [17:45:43] [WARNING] [QA_NOTIFICATIONS_33]: table: 0xffff500dcf00 [27.02.2021] [17:45:43] [WARNING] [QA_NOTIFICATIONS_33]: nil -------------------- function QuickApp:NotifierFromScene2(Params) Param = json.decode(Params) self:warning(Param.D1) end Résultat; [27.02.2021] [17:37:15] [DEBUG] [QA_NOTIFICATIONS_33]: onAction: {"args":["table: 0xffff600b3a10"],"actionName":"NotifierFromScene2","deviceId":33} [27.02.2021] [17:37:15] [DEBUG] [QA_NOTIFICATIONS_33]: /usr/share/lua/5.3/json/decode/util.lua:35: 'Hexadecimal' denied by option set 'number.hex' @ character: 8 0:8 [0] line: table: 0 [27.02.2021] [17:37:15] [ERROR] [QUICKAPP33]: QuickApp crashed [27.02.2021] [17:37:15] [ERROR] [QUICKAPP33]: Unknown error occurred: handleJsonRpc
Lazer Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 C'est étrange... après je n'ai jamais fait d'appel depuis une scène (uniquement des appels entre QuickApps), ça se comporte peut être différemment Ton 2nd test avec json.decode est clairement inutile, puisque c'est bien un tableau que tu dois récupèrer, pas une string... d'ailleurs la preuve, ça plante. Tu peux tenter de parcourir le contenu de la table Params avec une boucle for k, v in pairs(Params) pour voir ce qu'elle contient
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 function QuickApp:NotifierFromScene2(Params) for k, v in pairs(Params) do self:warning(k) self:warning(v) end end [27.02.2021] [18:19:52] [DEBUG] [QA_NOTIFICATIONS_33]: onAction: {"actionName":"NotifierFromScene2","args":["table: 0xffff7c0fc050"],"deviceId":33} [27.02.2021] [18:19:52] [DEBUG] [QA_NOTIFICATIONS_33]: ./include/main.lua:189: bad argument #1 to 'for iterator' (table expected, got string) [27.02.2021] [18:19:52] [ERROR] [QUICKAPP33]: QuickApp crashed [27.02.2021] [18:19:52] [ERROR] [QUICKAPP33]: Unknown error occurred: handleJsonRpc
Lazer Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) mais... c'est pas possible... au message précédent tu avais bien une table EDIT mais non en fait, tu avais une string contenant la chaine "table: 0xffff500dcf00", donc une information totalement inexploitable C'est fou ça, on dirait que le passage de paramètres depuis une scène ne fonctionne pas. Tu peux tester depuis un autre QA ? Modifié le 27 février 2021 par Lazer
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 Oui c'est pareil [27.02.2021] [18:34:33] [DEBUG] [QA_TEST_42]: onAction: {"args":["table: 0xffff740b2750"],"deviceId":42,"actionName":"TestParam"} [27.02.2021] [18:34:33] [DEBUG] [QA_TEST_42]: ./include/main.lua:24: bad argument #1 to 'for iterator' (table expected, got string) [27.02.2021] [18:34:33] [ERROR] [QUICKAPP42]: QuickApp crashed [27.02.2021] [18:34:33] [ERROR] [QUICKAPP42]: Unknown error occurred: handleJsonRpc
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 Le meme appel depuis un QA ca marche bien [27.02.2021] [18:45:42] [DEBUG] [QA_NOTIFICATIONS_33]: onAction: {"args":[{"D6":"Donnée 7","D5":"Donnée 6","D3":"Donnée 3","D4":"Donnée 5","D1":"Donnée 1","D2":"Donnée 2"}],"deviceId":33,"actionName":"NotifierFromScene2"} [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D6 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 7 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D5 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 6 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D3 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 3 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D4 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 5 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D1 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 1 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: D2 [27.02.2021] [18:45:42] [WARNING] [QA_NOTIFICATIONS_33]: Donnée 2
Lazer Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 AH ben voilà, ça marche entre QA alors, tu me disais au message précédent que non Je préfère ça Sinon la méthode bourrin qui fonctionne, en passant par l'API HTTP : URL : /api/devices/25/action/NotifierFromScene2 Type de requête : POST Tableau de données : { args = [ { D1 = "Donnée 1" }, { D2 = "Donnée 2" } ] } Soit une fois encodé en JSON : {"args":[{"D1":"Donnée 1"},{"D2":"Donnée 2"}]} Tu n'as plus qu'à coder ça en LUA dans ta scène. Et la fonction du QuickApp qui récupère les données du tableau : function QuickApp:NotifierFromScene2(...) for _, v in ipairs({...}) do if type(v) == "table" then if v.D1 then self:debug(v.D1) elseif v.D2 then self:debug(v.D2) else -- ... end end end end
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 il y a 2 minutes, Lazer a dit : AH ben voilà, ça marche entre QA alors, tu me disais au message précédent que non Je préfère ça J'avais mal lu donc j'ai fait de la scène vers un autre QA et donc erreur aussi Le dernier essai de QA a QA est OK c'est rassurant J'ai trois Solutions la méthode BOURIN comme tu dit Une fonction dans les scenes qui transforme la structure en chaine et le QA récepteur reconstitue la structure Ou remplacer si possible les scenes par des QA pour travailler de QA Peut être aussi qu'il aura une correction par Fibaro J'ai du temps j'explore les difficultés que j'aurais en premier pour me faire une idée En tout cas merci de ton aide La semaine prochaine je vais installer ton Domochart, mais je n'ai pas encore inclus de device ( sauf les QA NetAtmo ) et si je peuxi je vais essayer aussi de remplacer des fake devices qui reçoivent des valeurs KW depuis une appli python qui lit un CurentCost par des QA Pour domochart de la HC2 j'avais intégré des faux ID de devices pour des sondes 1 wire extérieures renseignées avec une appli python qui charge la base avec des données d'un réseau 1-Wire ( hors Hc2 ) je remplacerai ce bazzar par 2 smartImplant pour récupérer les sondes ( seul pb le remplacement s'une sonde c'est la reconfig du device complet ) J'avais customisé ton appli ( Php et Script ) chose que je ne ferais plus pour pouvoir suivre les évolutions de ton produit
Lazer Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 Perso j'en suis arrivé à la conclusion que les scènes ne servent quasiment plus à rien sur HC3 (contrairement à la HC2) Les QuickApps savent faire tout ce que savent faire les scènes, et même bien plus... donc le choix est vite fait. Même GEA est devenu un QA pour le coup !! En tout cas tu as raison de tester, c'est pas évident au début, ça permet de se familiariser, d'explorer les possibilités, découvrir les limites. Les Fake-devices, clairement ça n'a plus aucun intérêt, il suffit de se faire autant de QuickApp qu'on veut, avec le bon type, la bonne unité, etc. Intégration native dans la HC3 Et tous les QA sont pris en compte par DomoCharts, ça simplifie tout.
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) ça me parle ce problème... je fais une rapide recherche... Modifié le 27 février 2021 par jjacques68
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 (modifié) j'avais le même soucis, transmettre une table depuis une scène vers un QA : et je fais un json.encode(MaTable) dans la scène quand j'appelle la méthode du QA. EDIT : et pas de json.en/decode() dans le QA. Modifié le 27 février 2021 par jjacques68
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 et un peu plus d'explications ici :
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 Bravo Cest ça ca marche Merci 1
jjacques68 Posté(e) le 27 février 2021 Signaler Posté(e) le 27 février 2021 mais comme dit @Lazer, les scènes ne servent plus. J'en ai plus que ... 4. En attente d'être converti en QA. Je les utilise pour tester vite fait du code, ou pondre un truc temporairement à l'arrache
henri-allauch Posté(e) le 27 février 2021 Auteur Signaler Posté(e) le 27 février 2021 oui je suis convaincu mais je n'ai pas pu tester un QA déclenché par un device ( j'ai pas de device inclus ) si ca marche alors je n'aurais plus de scène je pense
Lazer Posté(e) le 28 février 2021 Signaler Posté(e) le 28 février 2021 Voilà, le déclenchement par trigger, c'est bien là la seule fonctionnalité exclusive aux scènes. Et encore, avec un QuickApp, on peut utiliser l'API refreshStates et arriver au même résultat (voir exemple d'implémentation dans GEA, tout en bas du fichier main) Mais ça reste plus complexe à mettre en œuvre, donc pour le semi-débutant qui veut juste coder quelques lignes de LUA rapides, il reste plus simple de créer une scène avec un trigger. 1
Messages recommandés