Romain80 Posté(e) le 9 mars 2014 Signaler Posté(e) le 9 mars 2014 Salut a tous, Je pense que ça a du au moins vous arriver une fois dans votre vie d'allumer par mégarde une lampe extérieure sans vous en rendre compte et la laisser allumée. J' ai donc fait un petit script rapide qui permet de detecter quand une lampe extérieure est allumée en journée et l'éteindre automatiquement après 20 secondes. voici donc le script : --[[ %% properties 29 value 34 value 33 value %% globals sunsetHour --]] local startSource = fibaro:getSourceTrigger(); if (fibaro:getGlobal("sunsetHour") == "0") then if (fibaro:getValue(29, "value") > "0") or (fibaro:getValue(33, "value") > "0") or (fibaro:getValue(34, "value") > "0") then fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction."); fibaro:sleep(20*1000) fibaro:call(29, "turnOff") fibaro:call(33, "turnOff") fibaro:call(34, "turnOff") end end Dans ce script les IDs 29, 33 et 34 sont les IDs de mes lampes extérieures. Il faudra donc les modifier par les votres. Egalement j' ai 3 lampes ext, si vous avez plus ou moins, il faudra adapter le code en enlevant ou ajoutant des lignes. Et j'utilise comme element de verification une variable Globale "sunsetHour" pour savoir si nous sommes en journée ou de nuit. Voila c'est tout bête, mais ça dépanne. 1
Fredric Posté(e) le 9 mars 2014 Signaler Posté(e) le 9 mars 2014 c'est vrai qu'avec la variable "journuit", "sunsethour" pour toi, on peut faire beaucoup de choses.j'ai fait la même choses que toi, mais en bloc. si "jour" et lumière extérieur allumé alors éteindre la lumière. et presque la même chose pour la nuit, car c'est plus souvent la nuit qu'on oublie les lumières allumés chez nous. Pour l'avant de la maison, si "nuit" et lumières allumés alors envoie un message puis un toutes les 15 min. Pour le coté terrasse, si "nuit" et lumières allumés et volets fermés alors envoie un message puis un toutes les 15 min. (car, si on reste dehors sur la terrasse après le couché du soleil, le volet et obligé d'être ouvert donc on peut laisser allumé sans recevoir 15 messages ;-) )
Gregory Posté(e) le 10 mars 2014 Signaler Posté(e) le 10 mars 2014 Pour plus de d'efficacité en cas d'un grand nombre de modules, il vaudrait mieux mettre les Id dans une table et la parcourir dans ton code plutôt que de multiplier les termes de ta condition IF Grégory
Romain80 Posté(e) le 10 mars 2014 Auteur Signaler Posté(e) le 10 mars 2014 Correct. Personnellement je n'ai que 4 lampes Ext (1 n'est pas encore domotisée). Avoir 4 lignes dans un IF ne me semble pas totalement "fou" et je doute que quelqu'un ai plus d' une dizaine de lampe ext. mais évidement je peux me tromper Donc je ne suis pas contre le fait que quelqu'un retouche a mon bout de code pour l' améliorer.
i-magin Posté(e) le 10 mars 2014 Signaler Posté(e) le 10 mars 2014 Un table ?....quelque chose comme çà: ICI
Shad Posté(e) le 10 mars 2014 Signaler Posté(e) le 10 mars 2014 Oui, utiliser une table lorsque l'on a pas mal de modules c'est bien mais pas pour 3 lignes.
Gregory Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 Bonjour à tous, désolé pour mon silence, j'ai un Pb avec mon iphone et je me connecte beaucoup moins souvent. @Romain80 et @I-magin, c'est exactement ça. @Shad : Je ne suis pas d'accord avec toi, autant prendre les bons réflexe de programmation dès le départ, surtout si tu veux partager tes scripts avec d'autres personnes. Ceci pour plusieures raisons: De cette manière tu participes activement à la formation des gens qui vont lire tes scripts Tu simplifies l'adaptation de tes scripts par les autres (J'ai peut-être 27 modules à gérer ) Tu facilites la maintenance de test scripts Voila, c'est mon côté architecte qui reprend le dessus. 2
Romain80 Posté(e) le 12 mars 2014 Auteur Signaler Posté(e) le 12 mars 2014 Bon le coup je suis assez d'accord avec toi. Effectivement autant prendre de bonnes habitudes des le depart. Mais malheureusement je ne gere pas encore parfaitement ce langage. Mais qui sait ... Peut etre qu un jour ...
Shad Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 Oui mais non ^^ C'est difficile de partager des scripts avec une table. Le code peut dépendre du type device et de ce que la personne veut faire. La c'est à l'utilisateur d'optimiser la scène. Même dans le cas de cette éclairage il peut vouloir éteindre une lumière, mettre une autre à 20%, faire clignoter une autre. Et dans d'autre cas tu vas pas mettre dans une table un wall plug, volet et lumière ca la tu pourrais avoir le cas d'un turnOn, setValue 90% et open. Donc aux utilisateur d'adapter. C'est mon avis^^
Gregory Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 @Shad: Pas de problème avec ton avis, le forum est là pour que chacun puisse exprimer le sien. @Romain80: Je ferai un truc comme ça pour modifier ton script (ATTENTION, je suis au bureau et je n'ai pas pu le tester) --[[ %% properties 29 value 34 value 33 value %% globals sunsetHour --]] local startSource = fibaro:getSourceTrigger(); lights = {29, 33, 34}; -- id des lampes local lightOn = 0; if (fibaro:getGlobal("sunsetHour") == "0") then for i = 1, #lights do if (fibaro:getValue(i, "value") > "0") lightOn = 1; end end if ( lightOn > "0") then fibaro:call(4, "sendPush", "Lumière Ext Allumée. Procedure d extinction."); fibaro:sleep(20*1000) for i = 1, #lights do fibaro:call(i, "turnOff") end lightOn = 0; end end
Romain80 Posté(e) le 12 mars 2014 Auteur Signaler Posté(e) le 12 mars 2014 Vous allez penser que j ai pas de personnalité mais pour le coup, la aussi je suis d'accord. Il faudrait pour bien faire, maximiser la portabilité du code sans trop l'encapsuler pour qu'il puisse etre facilement réinterpreté par un autre. Par contre je vois que Shad parle de clignotement ... Comment on arrive a faire ça. Il existe une fonction ou il faut "bidouiller" ?
Gregory Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 Bon le coup je suis assez d'accord avec toi. Effectivement autant prendre de bonnes habitudes des le depart. Mais malheureusement je ne gere pas encore parfaitement ce langage. Mais qui sait ... Peut etre qu un jour ... tu as plein d'Ebooks gratuits sur le sujet (à condition de lire l'anglais ...) http://it-ebooks-search.info/search?q=lua
Romain80 Posté(e) le 12 mars 2014 Auteur Signaler Posté(e) le 12 mars 2014 Merci, Je vais y jeter un oeil Par contre y a des trucs que je ne pige pas dans ton amelioration de mon code. A quoi font ref les #wallplug ..m c'est pas plutot la table #lights qu'il faudrait appeler ??
Romain80 Posté(e) le 12 mars 2014 Auteur Signaler Posté(e) le 12 mars 2014 Ah, ba tu as du l'update les #wallplugs ont disparus pour laisser place au #lights
Gregory Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 c'est ça, j'ai été un peu feignant sur le coup et les grands copier/coller faut les relire avant de poster ....
i-magin Posté(e) le 12 mars 2014 Signaler Posté(e) le 12 mars 2014 tu as plein d'Ebooks gratuits sur le sujet (à condition de lire l'anglais ...) http://it-ebooks-search.info/search?q=lua Et pour "participer activement à la formation des gens" , voici une autre adresse utile, en français : ICI
Romain80 Posté(e) le 12 mars 2014 Auteur Signaler Posté(e) le 12 mars 2014 Merci bien pour toutes les infos en tt cas
razowski Posté(e) le 18 mars 2014 Signaler Posté(e) le 18 mars 2014 Merci pour le partage.... J'ai repris le script et adapté ce dernier à mon besoin. Par-contre, un point qui n'est pas clair pour moi : l'évaluation est réalisée tous les combien de temps ? Ne faudrait-il pas ajouter une notion de fréquence ? (vérifier chaque heure)
Shad Posté(e) le 18 mars 2014 Signaler Posté(e) le 18 mars 2014 Avec le scheduler tu as une option pour répéter la scène toute les X minutes.
Romain80 Posté(e) le 18 mars 2014 Auteur Signaler Posté(e) le 18 mars 2014 Salut Razowski, En fait il n'y a pas de notion de frequence. Il y a un trigger sur le declenchement de la lumiere. Donc des que celle ci est allumée, la scene s'active et procede a l'extinction.
razowski Posté(e) le 18 mars 2014 Signaler Posté(e) le 18 mars 2014 Les deux dernières réponses sont contradictoires : scheduler vs trigger. Selon test en cours, si je start ma lampe maintenant, elle devrait s'éteindre, mais ce n'est pas le cas. Je pense que l'utilisation du scheduler est bien nécessaire, right ?
Romain80 Posté(e) le 18 mars 2014 Auteur Signaler Posté(e) le 18 mars 2014 Non, Chez moi, et pour le coup c'est moi qui l'est mis en place donc je le connais un peu ... Si tu as recup mon script d'originé, il y a un trigger. Des que tu allumes ta lumiere, et que les conditions de la scene sont reunis (etre en journee en gros), la procedure debute pour eteindre la lumiere
razowski Posté(e) le 18 mars 2014 Signaler Posté(e) le 18 mars 2014 Je n'avais pas fait attention que tu étais l'auteur du script ;-) Donc oui je suis reparti du tiens mais j'ai adapté un peu (tableau pour parser les ID et tonumber pour évaluer sur du numérique et pas de la string). Je poste mon script afin d'obtenir un peu d'aide, car quand je start ma lampe, ben elle reste allumée sauf si je lance manuellement ma scène... Donc je fais un truc de faux, mais je ne sais pas où du coup... --[[ %% properties 10 value -- lampe terrasse 14 value -- lampe jardin 28 value -- lampe parking 30 value -- lampe porte d'entrée %% globals Jour_Nuit --]] local startSource = fibaro:getSourceTrigger(); lights = {10, 14, 28, 30}; -- id des lampes local lightOn = 0; if (fibaro:getGlobal("Jour_Nuit") == "Jour") then for i = 1, #lights do if (tonumber(fibaro:getValue(lights[i], "value")) > 0) then lightOn = 1; fibaro:debug("Au moins une lampe était allumée"); end end if ( lightOn > 0) then fibaro:sleep(2*1000) for i = 1, #lights do fibaro:debug(i); fibaro:call(lights[i], "turnOff"); end lightOn = 0; end end
Messages recommandés