-
Compteur de contenus
4 434 -
Inscription
-
Dernière visite
-
Jours gagnés
201
Tout ce qui a été posté par Steven
-
En effet, pas pratique, mais pas vraiment le choix. Chaque fois que tu cliques sur un bouton d'un VD, il faudrait que tu stockes dans un Variable Global le numéro du VD et du currentIcon ... lourd tout cela mais réalisable. -- On récupère la liste des VD/Icones stocké dans la variable globale "Icones" -- et on le transforme en tableau exploitable local icones = json.decode(fibaro:getGlobalValue("Icones")) -- On ajoute/modifie la valeur du couple VD/Icone icones[fibaro:getSelfId()] = fibaro:getValue(id, "currentIcon") -- On remet cela en json dans la variable globale "Icones" fibaro:setGlobal("Icones", json.encode(icones)) . . Puis la scène pour les remettre --[[ %% autostart --]] -- On récupère la liste des VD/Icones stocké dans la variable globale "Icones" -- et on le transforme en tableau exploitable local icones = json.decode(fibaro:getGlobalValue("Icones")) -- On parcours toutes les entrées et on met l'icone àjour for k,v in ipaires(icones) do fibaro:call(k, "setProperty", "currentIcon", v) end Bien évidement, je n'ai rien testé et cela n'est qu'une suggestion.
-
Ah, ok, laisse tomber, c'est pas possible Vive les scripts
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
P@#*@ ... chercher l'erreur : fibaro:setGlobal("Pushingbox") fibaro:call(290, "pressButton", 1) Dodo pépé ... dodo.
-
A ben oui, les icônes derrière les boutons ne sont affiché QUE si tu cliques sur le bouton, ce qui est normal et voulu. Tu dois mettre une icône sur le module virtuel lui-même pour qu'il s'affiche après un reboot.
-
Tu n'utilises pas les paramèters du module pour ce genre de traitement ? Donc mon cas, mes FGD utilisent le paramètres 30 qui les fait allumer/éteindre cycliquement en cas d'alarme. Pas besoin de script c'est automatique pour autant que tu utilises le panneau d'alarme de Fibaro.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je vais même te faire rigoler : Ma configuration de GEA ne tourne plus depuis 2 jours et je n'arrive pas trouver quel est la ligne en erreur. Je pense que je fatigue
-
Ben moi pas comprendre la question Chez moi, si je fais une mise à jour, tout mes icônes de VD sont affichés correctement sans que je fasse quoi que ce soit.
-
Ma faute, j'ai pas testé J'ai corrigé dans mon post, j'ai pas pensé que cela allait être repris tel quel.
-
http://bugzilla.fibaro.com/view.php?id=3097 Résumé 0003097: Scene started by sceneActivation start twice Description Scene started by sceneActivation start twice (in my system tested with DSA22 and SceneActivation) Étapes pour reproduire create a simple scene with sceneactivation like : --[[ %% properties 382 sceneActivation %% globals --]] fibaro:debug("TEST") See in log windows that TEST is reported twice
-
Ben toi .. tu sais déjà plus que tu viens d'écrire T'inquête pas, j'ai entendu à la radio ce matin, qu'on devient "vieux" à 74 ans maintenant ... tu vois, t'es pas encore fichu
-
Il y a 3 phases difficiles : Comprendre un langage (LUA - fibaro) Etre capable d'écrire un script en respectant les bonnes pratiques Etre capable de TOUJOURS appliquer les bonnes pratiques. Moi, j'ai une excuse, je suis trop vieux et j'oublie donc les bonnes pratiques mais c'est la faute à ma mémoire
-
Allez, soyons fou : Il y a trois type d'optimisation .. la mémoire, le temps processeur .. le temps du développeur. Une bonne application prend en compte ces 3 critères en essayant de faire un bon compromis entre les 3. Voici donc une petite analyse sur votre code ... attention, je suis volontairement très très critique juste pour essayer d'aider. Perso, la plus part de mon code n'est pas optimiser ainsi, voir pas du tout . . Optimisation mémoire Chaque variable déclarée pend une infime place en mémoire (son adresse) donc si on a pas besoin de la réutiliser ou de la maintenir ... on en fait pas Une variable utilisée qu'une seule fois ne sert donc à rien : exemple local message = string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R")) EnvoiPush(message) On fait directement : EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R"))) . . Optimisation temps processeur la démarche a déja été faite .. bravo. En effet, certaine opération prenne du temps a être éxécutée, il faut donc éviter de demander 2 fois le même calcul pour rien. Exemple : if ( os.date("%H:%M", os.time())== lever ) or ( os.date("%H:%M", os.time()) == coucher ) then On voit bien qu'on demande au processeur de calculer 2 fois l'heure actuelle alors que ce qui a été fait local osHeure = os.date("%H:%M", os.time()) if ( osHeure == lever ) or ( osHeure == coucher ) then est bien moins coà»teux puisque nous divisons simplement pas 2 le temps processeur. Bon ok, on passe de 0.00002 sec à 0.00001 sec Mais c'est un exemple. Optimisation développeur Moins il y a de code a maintenir mieux c'est. Donc vu que ceci if (heure >= lever) and (heure < coucher) then valeur = "Jour" end revient au même que ceci (dans ce contexte) if ( OsHeure == Lever ) then Valeur = "Jour" else Valeur = "Nuit" end On extrait tout cela et on en fait une méthode (function) : function traitement(lever, coucher, heure) local valeur = "Nuit" -- test si on est le jour ou la nuit if (heure >= lever) and (heure < coucher) then valeur = "Jour" end ... end . . Optimisation bonus ... optimisation pour l'utilisateur On remonte tout en début du code, les variables, traitements que l'utilisateurs doit modifier afin que ce dernier n'aie pas a chercher dans le code la ligne X ou Y. Donc on met ce ci tout en haut : local NomVG = "Jour_Nuit" local IdTel = 181 On obtient donc ceci : --[[ %% autostart --]] local NomVG = "Jour_Nuit" local IdTel = 181 ---------------------------------------------------------------------- -- Envoi d'un Push pour avertir que le box à démarrer ou redémarrer -- ---------------------------------------------------------------------- function EnvoiPush(Message) fibaro:debug(Message) fibaro:call(IdTel, "sendPush", Message) end --------------------------------------------------- -- Mise a jour d'une variable global -- --------------------------------------------------- function UpdateVG(Valeur) if (fibaro:getGlobalValue(NomVG) == nil) then fibaro:debug("il faut cree la variable "..NomVG) EnvoiPush(string.format("La variable Globale %s n'existe pas ou a ete supprimer", NomVG)) fibaro:abort() -- fin du programme else fibaro:debug("VariableGlobale = "..NomVG.." - Valeur = "..Valeur) fibaro:setGlobal(NomVG, Valeur); end end --------------------------------------------------- -- Vérification de l'heure et mise à jour -- -- de la variable si necessaire -- --------------------------------------------------- function traitement(lever, coucher, heure) local valeur = "Nuit" -- test si on est le jour ou la nuit if (heure >= lever) and (heure < coucher) then valeur = "Jour" end UpdateVG(nuit) -- mise a jour de la VG Jour_Nuit end -- ======================================= -- Début du code -- ======================================= ---------------------------------------------------------------------- -- Controle si 1 Scéne et déjà en cours -- ---------------------------------------------------------------------- local NbreScene = fibaro:countScenes() fibaro:debug("Nombre de scéne : "..NbreScene) if (NbreScene ~= 1) then; fibaro:abort(); end ---------------------------------------------------------------------- -- Mise a jour de la variable VG Jour_Nuit au Démarrage de la Box -- -- Ou lors de la sauvegarde de la scéne -- ---------------------------------------------------------------------- EnvoiPush(string.format("La box a démarré le %s a %s", os.date("%d/%m/%Y"), os.date("%R"))) traitement(fibaro:getValue(1, "sunriseHour"), fibaro:getValue(1, "sunsetHour"), os.date("%H:%M")) ---------------------------------------------------------------------- -- Test toute les minutes pour savoir si c'est jour ou nuit -- -- ---------------------------------------------------------------------- while true do local osHeure = os.date("%H:%M", os.time()) local lever = fibaro:getValue(1, "sunriseHour") local coucher = fibaro:getValue(1, "sunsetHour") if ( osHeure == lever ) or ( osHeure == coucher ) then traitement(lever, coucher, osHeure) end fibaro:debug(string.format("Lever Soleil : %s - Coucher Soleil : %s", lever, coucher)) fibaro:sleep(60*1000); end Maintenant, vous pouvez oublier tout ces bons préceptes car quand on regarde le code des professionnels, on voit bien que la théorie fait bien souvent place à la fatigue cérébrale et que 90% du code ne respecte pas le moindre petit de ces préceptes. Encore une fois, je ne suis pas là pour critiquer .. bien au contraire .. je trouve votre idée géniale. De plus, pas vraiment besoin d'optimiser avec cette boxe vu ce qu'elle est capable d'encaisser Bravo à vous
-
Il me semble avoir vu quelque chose àce sujet sur le bugzilla de Fibaro. Cela serait donc un nouveau bug connu.
-
Non non non, il n'y a qu'une ligne àoptimiser. Stocker las date dans une variable puis l'utiliser au 2e endroit.
-
Mon avis personnel sur la question. Stopper une scène avec le abort() ou la laisser ce terminer sans rien faire .. revient 100% au même. Ce qu'il faudrait pouvoir empêcher est le déclencheur. Dans votre cas, cette scène ne peux se lancer QUE au démarrage de la box/sauvegarde de la scène ET si vous l'avez lancée volontairement. Donc si on sait ce qu'on fait, on devrait même pas avoir besoin de tester cela ... mais mieux vaut s'assurer et mettre un de vos tests (au choix). Perso j'ai une préférence pour le abort() au début comme cela on a plus besoin d'y prêter attention par la suite. En revanche ... je ne supporte pas de voir 2x "os.date("%H:%M", os.time()) das le même code, faut optimiser les gars , allez, au boulot. Encore une question est ce que quelq'un a essayé ? --[[ %% propeties 1 sunsetHour --]] Perso, je n'ai jamais fait le test mais la question me semble intéressante Allez bravo les gars pour ces échanges qui permettent de faire avancer tous cela.
-
Aucune idée
-
Value 55 sur un radiateur .. hummm ... c'est un Danfoss ? Si oui, le value ne fonctionne pas, il faut le setTargetLevel mais GEA ne le prend pas en considération.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Félicitations ... c'est du bon boulot.
-
Moi je tenterais d'abord sur un wall plug
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
@atalata, pepite En fait, la raison est historique, a l'époque, GEA n'était capable que de gérer le mode on/off d'un seul module et d'envoyer un message push, nous avions donc une syntaxe très simple GEA.add ( <id>, <durée>, <message> ) Par la suite, des options on été demandée (ouverture automatique, fermeture automatique, ...) : GEA.add ( <id>, <durée>, <message>, <option> ) Puis l'heure, le jours, la date, ... plein d'options supplémentaires. A ce moment, il ne s'agissait que d'options supplémentaires. GEA.add ( <id>, <durée>, <message>, {<option>[,...]} ) Ensuite, une nouvelle option, le "IF" a fait sont apparition, proposant donc de vérifier non pas l'état d'un seul module mais de plusieurs modules. Cela a donc cassé la notion simple d'ID <-> Options mais cela restait fonctionnel sans pour autant être simple à mettre en place. Aujourd'hui, la syntaxe a légèrement différé pour devenir (et abolir le IF) GEA.add ( {<condition>[,...]}, <durée>, <message>, {<option>[,...]} ) Il est donc vrai que "Time", "Days", "Date", "DST", ... sont des conditions mais ils n'ont pas évolué avec le script. De plus, je suis du genre à toujours garantir une compatibilité descendante afin de ne pas perturber l'utilisateur. Le code et les habitudes de l'utilisateur sont respectés et maintenu depuis la version 2.x de GEA. Maintenant, je suis sur une réecriture quasi complète du code mais cela prend beaucoup de temps. De plus, les performances de notre HC2 dégringole avec les mises à jours du firmware, ce qui n'aide pas la réecriture et qui me force à trouver d'autres astuces. Je pense que la stabilisation des performances iront de paire avec une nouvelle version de GEA Voilà ... j'ai fini mon roman
- 12 330 réponses
-
- 2
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je confirme .. le topic sur les déclencheurs n'est pas de moi, j'y ai juste contribué. L'auteur est @mprinfo et le mérite lui revient .. moi, j'ai juste pondu une note dans un coin et mprinfo a eu l'idée d'en faire un tuto pour tout le monde (merci à lui). Moi .. je mords
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Le mot clé #value# n'est exploitable que dans : un label, une variable globale, un email, un message push ... dommage, tu souhaites l'utilisé dans une "Value" GEA ne prennant donc pas en compte ton souhait, le seul moyen reste l'intégration de code LUA. GEA.add({"Global", <variable>, <value>}, -1, "", {{"Function", function() fibaro:call(<ID>, "setValue", fibaro:getGlobalValue(<variable>)) end}})
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Parfois, je passe voir ce topic ... juste pour rigoler un peu
- 12 330 réponses
-
- 1
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
local id_lampe = 274 local id_detect = 303 -- Extinction automatique de la lampe après 10mn. local autoOff = GEA.add(id_lampe, 1*60, "", {{"turnOff"}}) -- Extinction de la lampe sur fermeture (inverse) de la porte GEA.add(id_detect, -1, "", {{"Inverse"}, {"turnOff", id_lampe}}) -- Allumage de la lampe sur ouverture de la porte local detecteur = GEA.add(id_detect, -1, "", {{"turnOn", id_lampe}, {"RestartTask", autoOff}}) -- Appuie sur l'interrupteur de la lampe, on stoppe l'extinction automatique. GEA.add(id_lampe, -1, "", {{"StopTask", autoOff}, {"StopTask", detecteur}}) GEA.add(id_lampe, -1, "", {{"Inverse"}, {"RestartTask", detecteur}})
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
Je m'auto-cite en mettant un détail en rouge Poste ton code si tu veux que je regarde pour stopper ton détecteur.
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :