Shad Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Cette fois-ci je pense que sa devrait fonctionner, par contre le problème c'est que tu risques d'avoir énormément de log car à chaque fois la conso va changer de 1watt il va relancer la scène. Donc il faudrait peut-être ajouter une variable global pour bloquer la scène des le départ. --[[ %% properties 66 valueSensor %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); local current_conso = fibaro:getValue(66, "valueSensor"); local light1 = fibaro:getValue(132, "value"); local light2 = fibaro:getValue(133, "value"); if (tonumber(current_conso) > 80) and ( fibaro:getGlobalValue("Jour_Nuit") == "Jour" ) then fibaro:debug("Conso wallplug " ..current_conso); fibaro:debug(os.date() .. " - Télé allumée"); fibaro:debug(os.date() .. " - LEDs allumées"); if ( tonumber(light1) < 1 ) then fibaro:call(132, "turnOn"); end if ( tonumber(light2) < 1 ) then fibaro:call(133, "turnOn"); end elseif (tonumber(current_conso) < 80) then fibaro:debug(os.date() .. " - Télévision éteinte"); fibaro:debug(os.date() .. " - LEDs éteintes"); if ( tonumber(light1) > 1 ) then fibaro:call(132, "turnOff"); end if ( tonumber(light2) > 1 ) then fibaro:call(133, "turnOff"); end end
guchtpi Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Il y a peut-être aussi un autre soucis ... ça n'allumera les lumières que pendant le 'jour' et ne les éteindra que pendant la 'nuit' ... Oui mais ... et si on allume la TV pendant la nuit ? Ou si on l'éteind le jour suivant (au matin par exemple). C'est pas plutôt l'inverse qu'il faut tester dans le premier IF, comme ceci: fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) Et sortir la partie de détection de la basse consommation du test "nuit_jour", comme ça même si la TV est éteinte le jour suivant, les lampes suivront. Pour éviter le changement trop rapide, peut-être rajouter un sleep() de qcq secondes ... C'est juste qcq idées comme ça
lolomail Posté(e) le 13 mars 2014 Auteur Signaler Posté(e) le 13 mars 2014 Bon je tâche de tester cela ce soir et je vous tiens au courant. Pour la variable oui je compte bien la mettre en nuit. Pour le sleep je le passerais sûrement à60 sec. Pour le log, cela se peut qu'une fois le script en marche fonctionnel je mette des -- devant les lignes de log pour les neutraliser. En tout cas merci pour votre aide
i-magin Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 @lolomail, tu le mets quand tu veux ton sleep
Shad Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Il y a peut-être aussi un autre soucis ... ça n'allumera les lumières que pendant le 'jour' et ne les éteindra que pendant la 'nuit' ... Oui mais ... et si on allume la TV pendant la nuit ? Ou si on l'éteind le jour suivant (au matin par exemple). C'est pas plutôt l'inverse qu'il faut tester dans le premier IF, comme ceci: fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) Et sortir la partie de détection de la basse consommation du test "nuit_jour", comme ça même si la TV est éteinte le jour suivant, les lampes suivront. Pour éviter le changement trop rapide, peut-être rajouter un sleep() de qcq secondes ... C'est juste qcq idées comme ça Moi je fais le code par rapport au source, à lui de modifier 1
lolomail Posté(e) le 13 mars 2014 Auteur Signaler Posté(e) le 13 mars 2014 Cool le script fonctionne nickel, il a juste fallut pour éteindre passer à > 0, voila le script qui marche chez moi: --[[ %% properties 66 valueSensor %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); local current_conso = fibaro:getValue(66, "valueSensor"); local light1 = fibaro:getValue(132, "value"); local light2 = fibaro:getValue(133, "value"); if (tonumber(current_conso) > 90) and ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) then fibaro:debug("Conso wallplug " ..current_conso); fibaro:debug(os.date() .. " - Télé allumée"); fibaro:debug(os.date() .. " - LEDs allumées"); if ( tonumber(light1) < 1 ) then fibaro:call(132, "turnOn"); end if ( tonumber(light2) < 1 ) then fibaro:call(133, "turnOn"); end elseif (tonumber(current_conso) < 90) then fibaro:debug(os.date() .. " - Télévision éteinte"); fibaro:debug(os.date() .. " - LEDs éteintes"); if ( tonumber(light1) > 0 ) then fibaro:call(132, "turnOff"); end if ( tonumber(light2) > 0 ) then fibaro:call(133, "turnOff"); end end Un gros merci a Shad pour la prog et à tout les autres pour les coups de main / idée Dernière chose, faut mettre ou le fibaro:sleep car j'ai essayé juste avant le dernier end mais cela ne marche pas
Shad Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 je crois qu'il va falloir en mette deux dans cette scène, dans le if et le elsif.
guchtpi Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 (modifié) Ou un seul en dehors du dernier bloc if... end Modifié le 13 mars 2014 par guchtpi Inutile de citer le message précédent, merci
guchtpi Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Oui, oui, je sais ... c'était pas des critiques, juste de la déformation professionnelle (j'suis informaticien !)
Shad Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Oui aussi Xd, très fatiguer ce soir ^^ C'est quoi ton travail exactement ???
guchtpi Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 @Shad: Pendant qq années j'étais développeur Java (applications Web essentiellement sous Weblogic), ensuite "Project Manager" ... mais trop de papier, j'ai pas aimé ! Maintenant disons que je suis 'Déployeur d'applications' ... en gros: réception des codes des contractant, intégration et installation des applications (toujours Weblogic/Java/Oracle DB) dans notre 'DataCenter' au Lux.
guchtpi Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 @moicphil:Je ne comprends pas bien cette philosophie ... quand plusieurs personnes interviennent dans un fil c'est plus simple et plus clair de citer le passage que l'on veut commenter... tu ne trouves pas ?
i-magin Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 Cool le script fonctionne nickel, il a juste fallut pour éteindre passer à > 0, voila le script qui marche chez moi: Il me semble que c'était le problème que tu as évoqué depuis le début, non ?... et sur lequel je t'avais alerté ? Et pour le test de Wallplug si OFF, c'est == 0 (au lieu de < 1)... mais, le <1 fonctionnera évidemment
Moicphil Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 @moicphil: Je ne comprends pas bien cette philosophie ... quand plusieurs personnes interviennent dans un fil c'est plus simple et plus clair de citer le passage que l'on veut commenter... tu ne trouves pas ? Ce n'est pas une "philosophie" mais du bon sens... Quelle est l’intérêt de citer le message juste au dessus? ( a part surcharger les post qui deviennent du coup plus durs à suivre...) T'imagines le bordel si tout le monde cite le message du dessus? Tu peux néanmoins, si le message précédent est long, citer "un passage". Désolé Lolomail pour le HS.
Shad Posté(e) le 13 mars 2014 Signaler Posté(e) le 13 mars 2014 @Shad: Pendant qq années j'étais développeur Java (applications Web essentiellement sous Weblogic), ensuite "Project Manager" ... mais trop de papier, j'ai pas aimé ! Maintenant disons que je suis 'Déployeur d'applications' ... en gros: réception des codes des contractant, intégration et installation des applications (toujours Weblogic/Java/Oracle DB) dans notre 'DataCenter' au Lux. Ok, quand àmoi j'ai appris le php sur le tas. Quand àmoi je suis de formation électrique, je suis passé par le monde du pétrole avec mon père. Et avec le temps notre société àpris de l'ampleur et j'ai du me mettre àgérer le parc informatique et apprendre linux. Maintenant en parallèle je suis entrain de monter ma société de gestion informatique, domotique, multimédia ^^.
lolomail Posté(e) le 14 mars 2014 Auteur Signaler Posté(e) le 14 mars 2014 Bon petite évolution du script: --[[ %% properties 66 valueSensor %% globals --]] local sourceTrigger = fibaro:getSourceTrigger(); local current_conso = fibaro:getValue(66, "valueSensor"); local light1 = fibaro:getValue(132, "value"); local light2 = fibaro:getValue(133, "value"); if (tonumber(current_conso) > 90) and ( fibaro:getGlobalValue("Jour_Nuit") == "Nuit" ) and ( fibaro:getGlobalValue("LED_Auto") == "1" ) then fibaro:debug("Conso wallplug " ..current_conso); fibaro:debug(os.date() .. " - Télé allumée"); fibaro:debug(os.date() .. " - LEDs allumées"); if ( tonumber(light1) < 1 ) then fibaro:call(132, "turnOn"); end if ( tonumber(light2) < 1 ) then fibaro:call(133, "turnOn"); end elseif (tonumber(current_conso) < 90) then fibaro:debug(os.date() .. " - Télévision éteinte"); fibaro:debug(os.date() .. " - LEDs éteintes"); if ( tonumber(light1) > 0 ) then fibaro:call(132, "turnOff"); end if ( tonumber(light2) > 0 ) then fibaro:call(133, "turnOff"); end end J'ai ajouté une variable LED_Auto pour neutraliser le script et allumer les LED la journée si je veux. L'idée est de changer cette variable via un virtual device dans lequel j'ai mis: - Deux bouton (auto/manu) pour changer la variable suivant les codes: fibaro:setGlobal("LED_Auto", "1"); et fibaro:setGlobal("LED_Auto", "0"); Suivi de boutons pour allumer les LEDs plutot que de naviguer: if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then fibaro:call(132, "turnOn"); end et if ( tonumber(fibaro:getValue(132, "value")) > 0 ) then fibaro:call(132, "turnOff"); end Puis dans la main loop le code suivant pour avoir un report sur 3 labels: -- Controle LED télé if ( tonumber(fibaro:getValue(132, "value")) < 1 ) then fibaro:call(175, "setProperty", "ui.Label1.value", "Eteintes") end if ( tonumber(fibaro:getValue(132, "value")) > 0 ) then fibaro:call(175, "setProperty", "ui.Label1.value", "Allumées") end -- Controle LED buffet if ( tonumber(fibaro:getValue(133, "value")) < 1 ) then fibaro:call(175, "setProperty", "ui.Label2.value", "Eteintes") end if ( tonumber(fibaro:getValue(133, "value")) > 0 ) then fibaro:call(175, "setProperty", "ui.Label2.value", "Allumées") end -- Controle automatisme if ( fibaro:getGlobalValue("LED_Auto") == "1" ) then fibaro:call(175, "setProperty", "ui.Label3.value", "Automatique") end if ( fibaro:getGlobalValue("LED_Auto") == "0" ) then fibaro:call(175, "setProperty", "ui.Label3.value", "Manuel") end Voila si cela peut donner des idées / servir
guchtpi Posté(e) le 14 mars 2014 Signaler Posté(e) le 14 mars 2014 Salut ... Et bein, c'est bien, tu commences à métriser tout ça :-) ! Si je puis me permettre une petite remarque de développeur... essayes d'utiliser des définitions de constantes (même si LUA ne possède pas vraiment ce concept) dans tes scripts, ça facilite la lisibilité et la portabilité du code. Par exemple: à la place de "132", tu déclares au début du code (en dehors des boucles et tests): LED_TV_ID = 132; (Ici, la "naming convention" consiste à mettre les noms des constantes en MAJUSCULES). Tu peux ensuite t'en servir dans les commandes du type: local light1 = fibaro:getValue(LED_TV_ID, "value"); fibaro:call(LED_TV_ID, "turnOn"); Ca n'a l'air de rien, et ça demande un peu plus de rigeur, mais je peux te garantir que ça clarrifie grandement le code... parfois, même pas besoin de mettre de commentaires :-) 1
lolomail Posté(e) le 14 mars 2014 Auteur Signaler Posté(e) le 14 mars 2014 Bonne idée faut que je me force a le faire 1
guchtpi Posté(e) le 14 mars 2014 Signaler Posté(e) le 14 mars 2014 Oui, c'est une habitude à prendre ... mais ça en faut la peine (Grrrr... j'ai des problèmes avec les balises de code !)
i-magin Posté(e) le 14 mars 2014 Signaler Posté(e) le 14 mars 2014 Ta démarche didactique me plait bien @guchtpi 1
BenjyNet Posté(e) le 14 mars 2014 Signaler Posté(e) le 14 mars 2014 Huhu encore un habitué aux #DEFINE ..... Vive le développement !
lolomail Posté(e) le 8 mai 2014 Auteur Signaler Posté(e) le 8 mai 2014 Bon nouvelle évolution du module virtuel pour plus de souplesse. Ajout de deux boutons pour démarrer la scène ou éteindre la scène + une label pour savoir si la scène est active, afin que je puisse le couper quand j'en ai envie. Le bouton ON contient: --[[ %% properties %% globals --]] fibaro:setSceneEnabled(50, true) fibaro:call(175, "setProperty", "ui.Label4.value", "Activée") Le bouton OFF contient: --[[ %% properties %% globals --]] fibaro:setSceneEnabled(50, false) fibaro:call(175, "setProperty", "ui.Label4.value", "Désactivée") Puis comme j'ai installé le scheduler, j'ai mis des lignes de commandes afin de basculer la variable "Auto" et le lancement de la scène au coucher du soleil en appuyant sur le bouton qui va bien du virtual device. Du coup quand je vais regarder la télé le soir, lors du coucher du soleil cela s'allumera. Mais je pourrais toujours l'arreter via le VD.
Messages recommandés