i-magin Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Je ne vois pas de problème de syntaxe, ni de compatibilité V3 / V4 Par contre, ton imbrication commence à devenir bigrement complexe : une scène qui fait appel à un bouton (1) du module virtuel 361, qui lui-même fait appel à des boutons (3 ou 4) de modules virtuels (23 ou 289) selon un variable globale (mise à jour quand ?), qui font je ne sais quoi ensuite...? Je m'interroge sur les conséquences de ton choix pour que cela marche lors du démarrage de ta box ?
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 --[[ %% properties %% globals --]] Essai cela dans l’entête ça devrai être bon @ steven tu ne dors jamais lol, je croyais que c'etait obligatoire cette entête ? @ Jojo utilise le fibaro:debug dans le bouton pour voir si ton code est exécuté. Lorsque je teste du code je mets toujours des lignes de debug une fois que ca fonctionne je laisse les plus importantes comme l'affichage des variables cela me permet de voir le bon fonctionnement de mes scripts
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 merci à tous les 3 pour vos idées. @Steven, avec ou sans " pour le bouton 1, ça ne fonctionne pas @i-magin : ça a l'air compliqué comme ça, mais les codes sont simples, et le but est de faire le moins de maintenance possible si on veut changer d'icône, rajouter une variable, ... je vais expliquer en détail la solution quand elle sera au point @mprinfo : j'ai un fibaro:debug dans la scène, et je croyais qu'elle démarrait, car il y avait une ligne dans le débug, mais en fait c'était son démarrage automatique lorsqu'on sauve la scène. Lorsque la box redémarre, la scène ne démarre pas. => est-ce que le --[[%% autostart --]] est également activé lors d'un RESTART de la box ? Il semblerait que non, mais qu'il serait bien activé uniquement lors d'une sauvegarde de la scène
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 [[%% autostart --]] est bien déclenché lors de restart de la box ... sinon GEA ne fonctionnerait pas souvent
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 logique ... Si je mets [[%% autostart --]] dans ma scène, j'ai une erreur. C'est plutôt --[[%% autostart --]]. Mais soit, c'est ce que j'ai mis dedans. Et pour être sà»r qu'il n'y avait pas un caractère bizarre, j'ai fait un copier/coller de ton entête du GEA. Et ça ne fonctionne toujours pas... Ou je dois être plus patient attendre 10 min ?
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 L entete que je t ai donné foonctionne. Ce soir je vais faire un test avec un VD et une scène je te tiens au courant Envoyé de mon SM-G900F en utilisant Tapatalk
i-magin Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 @jojo Du coup, je ne sais pas si ta scène démarre bien au démarrage de la box ou non ? Comme le suggère @mprinfo, intègre des lignes "debug" : - Une avant ton "call" , par exemple : "fibaro:debug("Redémarrage box : "..os.date()) - Et une autre après ton call Ceci devrait nous fixer sur le démarrage ou non de la scène et son exécution jusqu'à la fin Encore une suggestion peut-être idiote, mais je la propose tout de même : après le "call" et avant la dernière ligne "debug" insère : fibaro:sleep(10*1000); J'avais été obligé d'insérer un temps d'attente dans une scène entre un "startScene" et un "call" de module virtuel, sinon la scène secondaire ne se lançait pas Je me sauve, car je dois partir en WE 1
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 oui merci, j'avais déjàmis un fibaro:debug suite àla suggestion de mprinfo, mais je vais encore en rajouter d'autres, comme tu proposes ainsi que des sleeps Bon WE
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 voici donc le code de ma scène --[[ %% autostart %% properties %% globals --]] fibaro:debug("Redémarrage box : "..os.date()) fibaro:call(361, "pressButton", "1") fibaro:sleep (10*1000) fibaro:debug("Fin exécution scène : "..os.date()) lorsque je la sauve, elle s'éxécute, et voici le debug [DEBUG] 14:39:29: Redémarrage box : Fri Mar 20 14:39:29 2015 [DEBUG] 14:39:39: Fin exécution scène : Fri Mar 20 14:39:39 2015 puis, je fais un restart de la box, et ... mes icônes ne sont pas mises à jour et le log de la scène montre qu'elle s'est exécutée sans soucis. [DEBUG] 14:44:20: Redémarrage box : Fri Mar 20 14:44:20 2015 [DEBUG] 14:44:30: Fin exécution scène : Fri Mar 20 14:44:30 2015 Les mystères de l'informatique Mais je confirme que si je démarre la SCENE manuellement, elle s'éxécute correctement (comme quand je la sauve)
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 et avec le json de VD, qui "prouve" qu'il ne s'agit pas de problème de cache, vu que la currentIcon = 1 { id: 289, name: "Var_Auth_TV", roomID: 15, type: "virtual_device", properties: { deviceIcon: 1, ip: "", port: 0, currentIcon: "1", mainLoop: "", saveLogs: "1", ui.Statut.value: "Interdit",
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Je te propose d'essayer de mettre le sleep en première ligne afin de laisser le temps àla box de tout charger avant d'exécuter ton code. 1
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 j'ai mis un sleep de 1 minutes, et cela semble ok Je fais encore d'autres tests pour confirmer
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 et avec un sleep de 10s c'est bon également. Je peux me perettre d'attendre 10s pour avoir les bonnes icônes après un restart MERCI P.S. je mets à jour le code dans le "tuto"
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Tu peux aussi mettre un test [type] en fonction du déclenchement de ta scène Envoyé de mon SM-G900F en utilisant Tapatalk
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 si tu veux savoir comment la scène a été déclenché. --[[ %% autostart %% properties %% globals --]] local OrigineDeclenchement = fibaro:getSourceTrigger(); if (OrigineDeclenchement["type"] == "autostart") then fibaro:debug("Declenchement par AUTOSTART") elseif OrigineDeclenchement["type"] == "other" fibaro:debug("La scène a été lancée manuellement") end 1
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 http://www.fibarouk.co.uk/support/lua/library/ 1
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 @steven pourrais tu me confirmé si la ligne 4 et 5 sont obligatoires ? Merci
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 la même chose en français domotique-home.fr/category/docs-fibaro-fr/
jojo Posté(e) le 20 mars 2015 Auteur Signaler Posté(e) le 20 mars 2015 merci. 1/ ton lien ne fonctionne pas, il pointe vers mon tuto 2/ je te confirme qu'elles ne sont pas obligatoires, elles sont nécessaires pour définir les déclencheurs, maintenant j'en connais 3 sortes --[[ %% autostart => au démarrage de la box ou à la sauvegarde de la scène %% properties => en fct de la valeur d'un device %% globals => en fct de la valeur de variable globales --]]
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Non, l'entête n'est pas obligatoire, il l'est uniquement si l'on souhaite utilisé les déclencheurs automatiques tel que %% autostart -- démarrage automatique au redémarrage %% properties -- sur changement d'une propriété d'un module %% globals -- sur changement d'une variable globale Exemple : --[[ %% properties 63 power 37 value --]] Dès que la consommation de mon module ID 63 change OU que la valeur de mon module ID 37 change, la scène sera executée. --[[ %% globals Chauffage --]] Dès que la variable global "Chauffage" changera de valeur (attention, changer sa valeur depuis le panneau des variables ne fonctionne pas) Si plusieurs déclencheurs arrivent en même temps, il y a aura plusieurs scènes lancées en parallèle. Beaucoup de personne n'aime pas cela est commence le code de leur scène par if (fibaro:countScenes() > 1) then fibaro:abort() end Pour s'assurer de n'avoir qu'une instance de scène en même temps. Après, comme tu l'as déjà dis, il est possible de savoir "qui" a déclenché la scène : local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'property') then -- Déclenché par le changement de valeur d'un module fibaro:debug('Source device = ' .. trigger['deviceID']) elseif (trigger['type'] == 'global') then -- Déclenché par le changement d'une variable globale fibaro:debug('Global variable source = ' .. trigger['name']) elseif (trigger['type'] == 'autostart') then -- Déclencher au démarrage de la box fibaro:debug('Autostart') elseif (trigger['type'] == 'other') then -- Déclencher manuellement ou par une autre scène ou un appel API. fibaro:debug('Other source.') end Voili, voilà . 2
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Merci Steven je début en LUA et je croyais qu'il les faillait même si on ne les utilisait pas. j'utilise très souvent fibaro:countScenes() dans mes scénes Merci pour ces explications très claires par contre j'utilise dans le main loop ce code tu fais un peu différemment peu tu me dire si c'est correct a la long ? pour une mise a jour toutes les heures j'utilise cela while true do local Var_Heure = os.date("%M") fibaro:debug("heure OS : " ..Var_Heure) if Var_Heure == "01" then fibaro:call(fibaro:getSelfId(), "pressButton", "1") end fibaro:sleep(60*1000) end ca fonctionne mais j'ai l'impression qu'au bout d'un certain temp ca plante
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 j'ai pourtant mis le bon lien : http://domotique-home.fr/category/docs-fibaro-fr/ il y a même un apk pour android
mprinfo Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 @steven je peux te prendre ton explication sur les déclenchement pour faire un Tuto c'est plus simple a trouver pour un débutant je dirai bien sur que cela vient de toi ,
Steven Posté(e) le 20 mars 2015 Signaler Posté(e) le 20 mars 2015 Perso, j'uilise cela mais ton code doit fonctionner. local nbHeure = 1 local i = 0 while true do if (i >= (nbHeure*2) or i == 0) then i = 0 fibaro:call(fibaro:getSelfId(), "pressButton", "1") end fibaro:sleep(30*60*1000) i = i + 1 end Le main loop plante s'il dort "sleep" plus de 40mn, donc je le relance toutes les 30mn et comme 2x30mn = 1 heure, je le lance que 2 fois. Par contre, contrairement àtoi, je ne choisi par la minute. 1
Messages recommandés