Cardane Posté(e) le 26 novembre 2021 Signaler Posté(e) le 26 novembre 2021 Bonjour à tous, Je suis en train de développer un nouveau QA sur base du type Roller Shutter. Pas défaut, il me génère bien les trois fonctions open, close, stop, et le change. Pour l'instant ces fonctions sont vides, j'en suis juste à quelques lignes de code à exécuter directement au lancement du QA. J'ai donc ceci : function QuickApp:onInit() self:debug("onInit") end http:request(url, { options = { headers = aHeaders, method = "GET", }, success = function(status) print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data) data_retour = json.decode(status.data) print (data_retour.attributes.current_position) end }) --self:updateView("slider", "value", "0") --self:updateProperty("value", 0) Ca fonctionne très bien, mais dès que j'active les deux dernière lignes (ou même simplement une des deux), le QA se plante (ou ne fait rien en fait, je ne vois rien dans la console) et bien entendu, je ne vois pas ce qui cloche :-) une idée ?
Lazer Posté(e) le 26 novembre 2021 Signaler Posté(e) le 26 novembre 2021 Il manque pas mal de trucs là Ta variable http, il faut l'initialiser avant de pouvoir l'utiliser Voir ici : Ensuite, ce code il faut le mettre dans une fonction QuickApp:open(), ou close() qui réagira au clic de la souris, et ne pas le laisser dans la partie globale du code LUA.
Cardane Posté(e) le 26 novembre 2021 Auteur Signaler Posté(e) le 26 novembre 2021 salut @Lazer, oui, je n'ai mis ici que le bout de code qui pose problème, je n'ai pas mis les déclarations de variables et autres, mais comme je disais, ca marche très bien sauf que je supprime les commentaires des deux dernières ligne... j'ai l'impression que le seul:updateProperty pose problème mais je ne vois pas en quoi...
Lazer Posté(e) le 26 novembre 2021 Signaler Posté(e) le 26 novembre 2021 OK... mais du coup je pense qu'il aurait quand même été utile de voir le code, car les 2 fonctions qui te posent problème sont membres de QuickApp... et si ça se trouve self n'est pas défini à l'endroit où tu l'utilises.
Cardane Posté(e) le 26 novembre 2021 Auteur Signaler Posté(e) le 26 novembre 2021 ok, voici le code complet (c'est encore en phase de test donc pas du tout optimisé) __TAG = "QA_VELUX_RUE_" .. plugin.mainDeviceId QuickApp._VERSION = 1.0 local Bearer_Key= "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJkNmI5OWQ2ZjRlYzQ0NjMwYjIyYTk1NTU1OTA0ODg3ZSIsImlhdCI6MTYzNzAxNTQ1MSwiZXhwIjoxOTUyMzc1NDUxfQ.cN4-cnw39zPGHigWUlm9B4hW5TmCEDpEHEk9LuPIygg" local HA_URL_NAS = "192.168.1.17:8123" local HA_Action_Open = "cover/open_cover" local HA_Action_Close = "cover/close_cover" local HA_Action_Stop = "cover/stop_cover" local http = net.HTTPClient() local url = "http://" .. HA_URL_NAS .. "/api/states/cover.store_rue" local url_open = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Open local url_close = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Close local url_stop = "http://" .. HA_URL_NAS .. "/api/services/" .. HA_Action_Stop local aHeaders = { ['Content-Type'] = 'application/json', ['Authorization'] = 'Bearer ' .. Bearer_Key } local HA_DeviceID = "cover.store_rue" local HAdata = '{"entity_id": "' .. HA_DeviceID ..'"}' function QuickApp:onInit() self:debug("onInit") end -- Roller shutter type should handle actions: open, close, stop -- To update roller shutter state, update property "value" with integer 0-99 function QuickApp:open() self:debug("Store Velux Rue Ouvert à 100%") http:request(url_open, { options = { headers = aHeaders, method = "POST", data = HAdata }, success = function(status) print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data) -- self:updateProperty("value", 99) end }) --self:updateProperty("value", 99) end function QuickApp:close() self:debug("Store Velux Rue fermé") http:request(url_close, { options = { headers = aHeaders, method = "POST", data = HAdata }, success = function(status) print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data) -- self:updateProperty("value", 0) end }) --self:updateProperty("value", 0) end function QuickApp:stop() self:debug("roller shutter stopped ") http:request(url_stop, { options = { headers = aHeaders, method = "POST", data = HAdata }, success = function(status) print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data) end }) end -- Value is type of integer (0-99) function QuickApp:setValue(value) self:debug("roller shutter set to: " .. tostring(value)) --self:updateProperty("value", value) 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") end http:request(url, { options = { headers = aHeaders, method = "GET", }, success = function(status) print ("[INFO] Script finished with status :\n" .. "[STATE] " .. status.data) data_retour = json.decode(status.data) print (data_retour.attributes.current_position) end }) --self:updateView("slider", "value", "0") --self:updateProperty("value", 0) Partout ou il y a des appels à self:updateProperty j'ai du les mettre en commentaire sinon ca plante direct...
Lazer Posté(e) le 26 novembre 2021 Signaler Posté(e) le 26 novembre 2021 Hum.... mais tu as du code partout en dehors des fonctions, c'est pas très propre ça.... Normalement tu dois faire des initialisations dans onInit() En plus je vois que tu l'as défini 2 fois cette fonction, tu peux carrément supprimer le 2nd. Pourquoi tu as créé un slider ? Normalement si ton module est bien typé, de type rollerShutter, tu n'as pas à t'en préoccuper, la HC3 le gère pour toi, tu as seulement besoin de mettre à jour la value avec self:updateProperty(). Donc vire ton slider et tes self:updateView() pour commencer, il faut faire simple.
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 salut @Lazer, bon, je suis reparti de zéro, cette fois ci en étant un peu plus concentré sur ce que je faisais :-) tout marche nickel juste une dernière question, est-ce que tu sais comment gérer le bouton "position favorite" ? je ne trouve rien dans la doc de Fibaro concernant cela
Lazer Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 Cool Non désolé je n'ai pas encore testé cette nouvelle fonctionnalité de position favorite, mais d'après ce que je vois, quand tu vas sur la vue d'un volet, tu peux choisir une position (admettons 50%), et tu peux l'ajouter en favori en cliquant sur l'étoile. Sur mon QA d'exemple ça n'a aucun effet, mais ça devrait fonctionner avec un vrai module Z-Wave. Dans l'API je vois qu'il y a une nouvelle méthode setFavoritePosition qu'il va falloir code en LUA dans une fonction dédiée QuickApp:setFavoritePosition()
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 oh oh... on n'a pas du tout la même interface ... moi j'ai ca je n'ai pas ta ligne "level change" et surtout si je clique sur l'étoile il positionne directement le slider à 50%
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 ok, la position préférée est définie dans l'onglet avancé du module... mais ca ne m'explique pas pourquoi je n'ai pas la même interface entre un QA créé avec le type roller shutter et un module wave.. ils font une différence ou ?
Lazer Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 Ah oui c'est curieux, ils gèrent différemment les modules Z-Wave et QuickApps. Je n'ai pas de Roller Shutter Z-Wave à disposition sur ma box de test, tout ce que peux tester c'est sur un QA. Onglet avancé du QA :
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 c'est dingue ca, on n'a même pas le même onglet avancé pour le QA... moi j'ai ca :
Lazer Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 Etrange.... Firmware 5.091.41, on est bien d'accord ? Dans l'API JSON de ton QA, est-ce que tu as bien les interfaces favoritePosition et favoritePositions ? Il me les a ajouté tout seul, c'est un QA qui existe depuis bien longtemps, avant de faire la mise à jour. Mais comme toute interface, on peut les ajouter ou les supprimer.... du coup ton QA n'a peut être pas ces interfaces. Mais dans ce cas pourquoi ma HC3 les aurait ajouté à mon QA, et pas chez toi ?
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 non, la seule interface que j'ai c'est "quickApp", mais je suis encore avec la dernière version stable, pas fait l'upgrade vers la 5.091.41...
Lazer Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 OK voilà, c'est donc ça, c'est bien la dernière beta 5.091 qui apporte cette nouveauté de gestion de positions favorites. Comme tu posais la question, j'ai cru que tu avais fait la mise à jour.
Cardane Posté(e) le 28 novembre 2021 Auteur Signaler Posté(e) le 28 novembre 2021 ah non, c'est sur ma box de prod, donc je suis prudent
triossrf Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 Salut. Question peut être bête, mais quel est l'intérêt de coder en HTML plutôt que en LUA le Quick App?
Lazer Posté(e) le 28 novembre 2021 Signaler Posté(e) le 28 novembre 2021 Je n'ai pas compris ta question ? C'est bien en LUA qu'on code la QuickApp. Par ailleurs HTML n'est pas un langage de programmation, mais juste un langage de description de pages Web.
Messages recommandés