JossAlf Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 Salut, J'ai un problème avec la gestion du trigger dans le main loop d'un module virtuel. Je souhaiterais mettre à jour la valeur de mon label seulement quand je clique sur l'un des boutons de mon module virtuel ou quand la valeur de ma variable globale change. Pour la mide à jour lors du changement de la valeur de la variable je pensais mettre ça : --[[ %% properties 73 value %% globals TempJour TempNuit --]] local Declencheur = fibaro:getSourceTrigger() if Declencheur['type'] == 'global' then -- Check des valeurs des températures fibaro:call(73, "setProperty", "ui.Label40.value", fibaro:getGlobalValue('TempJour').."°C"); fibaro:call(73, "setProperty", "ui.Label109.value", fibaro:getGlobalValue('TempNuit').."°C"); end Mais ça me retourne une erreur : [ERROR] 10:17:52: line 11: attempt to call method 'getSourceTrigger' (a nil value) J'en arrive à me demander si on peut gérer les triggers depuis un module virtuel ?!
Steven Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 Moi j'en arrive à me demander comment tu as pu croire que les main loop utilisaient les triggers Le main loop, c'est pas le truc qui tourne en boucle et qui n'a justement pas besoin d'être "trigger" ... puisque de tout façon il tourne Moi je dis qu'un peu de repos, parfois, cela fait du bien.
JossAlf Posté(e) le 15 avril 2014 Auteur Signaler Posté(e) le 15 avril 2014 Ok Steven... C'est de bonne guerre Shame on me ... Cela dit ça aurait été pas mal de limiter le déclenchement du main loop à certains événements pour soulager la HC2 -> Le top aura été un déclencheur du style "clique sur un bouton" un getSourceTriggerButtonClick J'ai toujours mauvaise conscience à charger le main loop du coup. Bon sujet classé.
Steven Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 La dessus, je te rejoint volontiers Néanmoins, pourquoi tu n'utilises pas une scène pour faire cela ? Il semblerait que quand tu cliques sur ton bouton, cela va modifier la valeur de ta variable global, ceci te permet de trigger ta scène, qui va mettre la bonne valeur dans ton le label de ton module virtuel. Ainsi tu n'utilise pas de main loop ... mais c'est vrai tu dois créer une scène et je pense que c'est exactement ce que tu ne voulais pas faire.
JossAlf Posté(e) le 15 avril 2014 Auteur Signaler Posté(e) le 15 avril 2014 Tu penses bien. J'ai crée une scène où j'ai "trigger" sur le changement de la valeur de ma variable. Mais ça ne me convient pas. J'aurais voulu "trigger" sur un clique ou sur l'ouverture du module ... Mais je pense que c'est pas possible. Pendant que je te tiens ... Est-ce qu'on peut changer la valeur d'un bouton ? Je voudrais que mon bouton s'intutile 'Chauffer à '..TempJour..'°C'
Krikroff Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 J'ai toujours mauvaise conscience à charger le main loop du coup. Ne te prends pas la tête, j'ai une dizaine de périphériques virtuels avec entre 2000 et 3000 lignes de code LUA et jamais un plantage de mon HC2 qui tourne comme une horloge ! Pour changer le Label d'un bouton tu peux faire ça : local deviceToEdit = fibaro:getSelfId(); local ID = "btnOnOffAllScenes"; HC2 = Net.FHttp("192.168.1.100", 80); HC2:setBasicAuthentication("admin", "admin"); --get the device to change response ,status, errorCode = HC2:GET("/api/virtualDevices?id="..deviceToEdit) if (tonumber(status) == 200) then jsonTable = json.decode(response); for key,value in pairs(jsonTable.properties.rows) do name = jsonTable.properties.rows[key].elements[1].name; --fibaro:debug(name); if(name==ID) then n = key; match = true; caption = jsonTable.properties.rows[n].elements[1].caption; fibaro:debug(caption); break; end end -- if (match) then fibaro:debug(name .." found, caption is [".. caption .."]"); jsonTable.properties.rows[n].elements[1].caption = "Unblock scenes execution" -- send back json = json.encode(jsonTable); response2 ,status2, errorCode2 = HC2:PUT("/api/virtualDevices?id="..deviceToEdit, json); if (tonumber(errorCode2)==0) then fibaro:debug("Edit complete text set "..status2) else fibaro:debug("Error update "..errorCode2) end else fibaro:debug(ID .. " not found!") end else fibaro:debug("error"); end bon c'est à nettoyer et optimiser La limite: la mise à jour est effective qu’après rechargement de la page.
JossAlf Posté(e) le 15 avril 2014 Auteur Signaler Posté(e) le 15 avril 2014 Merci Krik. Tu me rassures sur le main loop (je vais me lâcher allègrement !!!) Quant à la limite dont tu parles pour le bouton. Ca va pas aller sur les iPhones ou iPads alors ?!
Steven Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 Ne te prends pas la tête, j'ai une dizaine de périphériques virtuels avec entre 2000 et 3000 lignes de code LUA et jamais un plantage de mon HC2 qui tourne comme une horloge ! Oui, oui, mais nous on a qu'une HC2 ... on en a pas une par module virtuel :-)
Krikroff Posté(e) le 15 avril 2014 Signaler Posté(e) le 15 avril 2014 ... en même temps c'est galère une box par module , Mdr ! Après tout va dépendre du code Sans rire, si le HC2 était pas capable d'encaisser un petit script de 300 ou 400 Kb en mémoire il ne serait pas à la maison . @JossAlf, c'est ok pour les app 1
JossAlf Posté(e) le 15 avril 2014 Auteur Signaler Posté(e) le 15 avril 2014 Ok Krik. Je vais regarder ça alors. Merci à tous les 2 pour votre. PS : Krikroff Joyeux 660 ème message !!!
JossAlf Posté(e) le 15 avril 2014 Auteur Signaler Posté(e) le 15 avril 2014 @Krikroff : Le changement de label fonctionne parfaitement. Mais comme tu dis il faut recharger la page pour voir la modification du Label. Ce n'est donc pas exploitable pour ce que je veux en faire. Mais je garde ça sous le coude pour autre chose
Messages recommandés