jjacques68 Posté(e) le 25 juillet 2020 Signaler Posté(e) le 25 juillet 2020 (modifié) Voici un petit tuto sur la gestion des fichiers dans les QA. petite nouveauté depuis la version 5.040.37 - 23/07/2020 Le code utilisé provient de @jgab sur le fofo officiel : https://forum.fibaro.com/topic/49113-hc3-quickapps-coding-tips-and-tricks/?do=findComment&comment=211496 (lien cité par @Lazer dans le topic dédié à la mise à jour : https://www.domotique-fibaro.fr/topic/14477-hc3-504037-23072020/) Donc le principe de ces fichiers est de partager des fonctions d'un QA à un autre. On pouvait déjà appeler une fonction d'un QA x depuis une scène ou un autre QA avec : fibaro:call(id_QA, "MaFonction") Mais maintenant on peut exploiter le retour de la fonction, ce qui super intéressant. On peut donc se créer une vrai bibliothèque de fonctions Voici un exemple concret : le QA "source" le QA "utilisateur" l'appel d'une fonction la modification du fonction Remarques 1. Le QA "source" : En cliquant sur l'icone "File" tout à gauche, une liste de fichier apparaît. En cliquant sur le bouton "+", on ajoute un nouveau fichier, ici "newFile". La navigation se fait facilement d'un fichier à un autre via des onglets : On a la possibilité de supprimer ou renommer un fichier. Dans mon exemple : voici le contenu du fichier Main : au passage, ce fichier ne peut pas être supprimer donc en fait, il y a rien de particulier pour lui... voici le contenu du fichier "newFile" que j'ai renommé "ToolBox" : on y voit 2 fonctions : StringToTimeStamp() Split() 2. le QA "utilisateur" Dans un nouveau QA, j'ai inséré cette fonction : merci à @jagb du fofo officiel. function QuickApp:copyFile(deviceId,fileName) local copyFile = api.get(string.format("/quickApp/%s/files/%s", deviceId, fileName)) assert(copyFile,"File doesn't exists") local myFile = api.get(string.format("/quickApp/%s/files/%s", self.id, fileName)) if not myFile then --création du fichier local stat,res = api.post(string.format("/quickApp/%s/files", self.id), {name=fileName, type="lua", isMain=false, isOpen=false, content=copyFile.content}) if res == 200 then self:debug("File '",fileName,"' added") else self:error("Error:",res) end elseif myFile.content ~= copyFile.content then --mise à jour si existant local stat,res = api.put(string.format("/quickApp/%s/files/%s", self.id, fileName), {name=fileName, type="lua", isMain=false, isOpen=false, content=copyFile.content}) if res == 200 then self:debug("File '",fileName,"' updated") else self:error("Error:",res) end else --rien à changer self:debug("File '",fileName,"' not changed") end end et dans le code onInit() de ce QA : j'appelle cette fonction avec comme argument l'ID du QA précédent, et comme nom, le fichier créé dans ce QA précédent : function QuickApp:onInit() self:debug("onInit") self:copyFile(494,"ToolBox") end après un petit refresh de la page : on voit que le fichier ToolBox a été ajouté Mais faut faire gaffe, ça saute pas au yeux, mais je suis bien dans le nouveau QA que je viens de créer et non dans le QA précédent ! et on peut accéder à son code en cliquant dessus ! MAIS ATTENTION A NE PAS MODIFIER LE CODE ICI ! sinon la modif ne sera pas répercutée sur le QA "source" ! 3. pour faire appel à une fonction de ce fichier intégré rien de plus simple : print(self:StringToTimeStamp("25/07/2020 16:00:00")) réponse : [25.07.2020] [16:17:37] [DEBUG] [QUICKAPP618]: 1595685600 4. En cas de modification du fichier "source" : encore une fois, rien de plus simple : on modifie le fichier source. on relance le QA qui intègre ce fichier source. (penser à faire des refresh du navigateur sinon on ne voit pas la modification) et le code est mise à jour. 5. Remarques : Il est possible bien-sûr d'intégrer le même fichier dans plusieurs QA, et la modification sera évidemment répercutée sur tous les QA... Visiblement dès qu'on change de fichier dans les onglets, ça relance le QA... Donc attention lors du développement, vu que les QA se relancent automatiquement en cas d'erreurs, ça peut vite tourner en boucle... Le code de la fonction "copyFile" est très clair, mais lors des mises à jour, il affiche toujours dans le debug "not changed". Alors qu'en réalité, il y a bien eu une modification !! Impossible de trouver dans l'API, les infos sur ce "fichier" intégrer au QA. Normalement, on devrait y trouver une propriété "files" avec le code, mais je trouve pas... Modifié le 25 juillet 2020 par jjacques68 5
mprinfo Posté(e) le 25 juillet 2020 Signaler Posté(e) le 25 juillet 2020 Super merci voisin pour ce petit tutoEnvoyé de mon BLA-L29 en utilisant Tapatalk 2
jjacques68 Posté(e) le 25 juillet 2020 Auteur Signaler Posté(e) le 25 juillet 2020 (modifié) alors je me suis rendu compte qu'il faisait une simple copie du code du fichier dans le QA... en affichant le "content" du file. du coup, ça risque d'alourdir la taille des QA... ? voir leur réactivité ?? il va falloir optimiser les "fichier", en créer plusieurs pour regrouper les fonctions (traitement de chaines, opérations sur nombres, etc...) On aura jamais besoin de tout en même temps... Modifié le 25 juillet 2020 par jjacques68
971jmd Posté(e) le 6 octobre 2020 Signaler Posté(e) le 6 octobre 2020 bon là c'est bien la 1ère fois que je ne comprends rien 1
Messages recommandés