mprinfo Posté(e) le 2 mars 2015 Signaler Posté(e) le 2 mars 2015 Boujour a tous Voici une scéme qui va permettre d'envoyer a un ID une Valeur les valeurs autorisé sont : open, close, turnOn, turnOff, 0, 1, 2, 3 etc... jusqu'à 100 je vais utilisé pour cela un tableau exemple : Id = {13, 5, 7, 9, 23} -- Id des volets roulants IdValue = {"turnOff", "open", 99, 0, "close"} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff dans un premier temp l' ID 13 recevra la "value" turnOff puis l'id 5 la "value" open etc.... On pourra donc allumer puis eteindre une lampe ou fermer des volets avec des valeurs différentes. J'ai choisi de déclencher la scéne avec une variable globale Jour_Nuit --[[ %% properties %% globals Jour_Nuit --]] il faudra donc crée cette variable Avec les valeurs suivantes : Jour Nuit Puis 2 scénes en mode bloc une pour changer la variable a JOUR et l'autre pour changer la variable a NUIT Jour : Nuit : Ou une Scénes en LUA --[[ %% autostart %% properties %% globals --]] while true do local Var_Jour = os.date("%H:%M", os.time()-15*60) local Var_Nuit = os.date("%H:%M", os.time()+15*60) local currentDate = os.date("*t"); local Jour = fibaro:getValue(1, "sunriseHour") local Nuit = fibaro:getValue(1, "sunsetHour") fibaro:debug("Jour : " ..Jour) fibaro:debug("Nuit : " ..Nuit) if ( Var_Jour == Jour ) then fibaro:setGlobal("Jour_Nuit", "Jour"); elseif ( Var_Nuit == Nuit ) then fibaro:setGlobal("Jour_Nuit", "Nuit"); end fibaro:sleep(59*1000); -- s'execute toutes les minutes end On peut bien entendu modifier ces paramètres ou en ajouter if J_N == "Nuit" then Id = {5, 7, 9, 23, 27, 25, 29, 17, 19} -- Id des volets roulants IdValue = {0, 0, 0, 0, 0, 0, 85, 0, 0} -- Valeur 0=Fermer - 99 = Ouvert fibaro:debug("Nuit") end if J_N == "Jour" then Id = {13, 5, 7, 9, 23, 27, 25, 29} -- Id des volets roulants IdValue = {"turnOff","open", 99, 99, 99, 99, 99, 99, 99, 99} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff fibaro:debug("Jour") end Ensuite il y a un autre bloc de programme qui ajoute des ID et des "Value" a la table en fonction du jour de la semaine -- Debut Volets Chambres ouverture du lundi au vendredi local jour = os.date("%w"); --0=Dimanche, 1=Lundi, 2=Mardi,3=Mercredi etc... fibaro:debug("Jours de la Semaine = " ..jour) if ((jour == "1" or jour == "2" or jour == "3" or jour == "4" or jour == "5") and (J_N == "Jour")) then local Id1 = {19, 17} -- 19 ch amis 17 ch enfants local IdValue1 = {99, 99} local t_id = #Id local t_id1 = #Id1 for i = 1,#Id1 do t_id = t_id + 1 table.insert(Id, t_id, Id1[i]) table.insert(IdValue, t_id, IdValue1[i]) end end -- Fin Volets chambres Puis un test pour savoir si il y a bien le même autant d' ID que de "Value" -- Test si le nombres d' Id et Egale au nombre de IdValue if #Id == #IdValue then fibaro:debug("total des id = " ..#Id) else fibaro:debug("Total des id = " ..#Id .." - Total des Values = " ..#IdValue) fibaro:debug("fin de la Scéme...") fibaro:abort(); end pour le push je conseil de créer une variable global avec l'ID du téléphone (vu les soucis avec le push cela évite de modifier toutes ces scénes a chaque fois que l'ID du tél change) Pour récupérer l'id du tel local IdTel = fibaro:getGlobalValue("IdI9305") -- Recuperation de id du tel pour le push Dans cette exemple on récupére l'id du tel qui ce trouve dans la variable globale IdI9305 (je sais c'est un samsung s3 LTE ) j'ai mis une pause de 30s entre chaque commande local VTimer = 30*1000 -- Temp de pause entre chaque commande de modules A la fin de l’exécution de la scéne on envoi un PUSH avec le nombres de modules actionnés -- Envoi du Push fibaro:call(IdTel, "sendPush", "Les " ..#Id .." ont été actionnés") Voici la scéne : --[[ %% properties %% globals Jour_Nuit --]] -- Recupération de la valeur de la variable global Jour_Nuit local num = fibaro:countScenes () -- nombres d'instance en cours d'excution de la sceme fibaro:debug("Nombres de Scéme en cours = " ..num) if (num == 1) then local J_N = fibaro:getGlobalValue( "Jour_Nuit" ); fibaro:debug("Jour_Nuit = " ..J_N) local Id = {} local IdValue = {} if J_N == "Nuit" then Id = {5, 7, 9, 23, 27, 25, 29, 17, 19} -- Id des volets roulants IdValue = {0, 0, 0, 0, 0, 0, 85, 0, 0} -- Valeur 0=Fermer - 99 = Ouvert fibaro:debug("Nuit") end if J_N == "Jour" then Id = {13, 5, 7, 9, 23, 27, 25, 29} -- Id des volets roulants IdValue = {"turnOff","open", 99, "turnOn", 99, 75, 99, 45, 99, 99} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff fibaro:debug("Jour") end -- Debut Volets Chambres ouverture du lundi au vendredi local jour = os.date("%w"); fibaro:debug("Jours de la Semaine = " ..jour) if ((jour == "1" or jour == "2" or jour == "3" or jour == "4" or jour == "5") and (J_N == "Jour")) then local Id1 = {19, 17} -- 19 ch amis 17 ch enfants local IdValue1 = {99, 99} local t_id = #Id local t_id1 = #Id1 for i = 1,#Id1 do t_id = t_id + 1 table.insert(Id, t_id, Id1[i]) table.insert(IdValue, t_id, IdValue1[i]) end end -- Fin Volets chambres -- Test si le nombres d' Id et Egale au nombre de IdValue if #Id == #IdValue then fibaro:debug("total des id = " ..#Id) else fibaro:debug("Total des id = " ..#Id .." - Total des Values = " ..#IdValue) fibaro:debug("fin de la Scéme...") fibaro:abort(); end -- Fin du test local IdTel = fibaro:getGlobalValue("IdI9305") -- Recuperation de id du tel pour le push dans la variable globale IdI9305 local VTimer = 30*1000 -- Temp de pause entre chaque commande de modules fibaro:debug("Nombres Modules = " ..#Id) for i = 1,#Id do local TestName = fibaro:getName(Id[i]) local TestValue = fibaro:getValue(Id[i], "value") if IdValue[i] == "open" or IdValue[i] == "close" or IdValue[i] == "turnOn" or IdValue[i] == "turnOff" then fibaro:call(Id[i], IdValue[i]); else fibaro:call(Id[i], "setValue", IdValue[i]); -- Commande Module end fibaro:debug("---------------------") fibaro:debug("Nom = " ..TestName) fibaro:debug("Valeur = " ..TestValue .." - Valeur demander = " ..IdValue[i]) fibaro:sleep(VTimer) end fibaro:sleep(2*1000) -- Envoi du Push fibaro:call(IdTel, "sendPush", "Les " ..#Id .." ont été actionnés") else fibaro:debug("Nombre de Scénes en cours " ..num) end J'utilise cette scéne pour fermer et ouvrir mes volets et j'allume en même temps des lumières que j'éteins ensuite. on peut bien entendu utilisé plusieurs fois le même ID exemple : J'allume ma lampe, je ferme mon volets j' éteins ma lampe. Pour les modules dinnable il faut comme pour les volets mettre une valeur entre 0 et 99 Id = {13, 5, 13} -- Id des volets roulants IdValue = {"turnOn", "close", "turnOff"} -- Valeur : 0=Fermer, 99=Ouvert - open - close - turnOn - turnOff 1 2
cromoto Posté(e) le 3 mars 2015 Signaler Posté(e) le 3 mars 2015 Je ne sais pas pourquoi pas chez moi, les scènes en mode bloc pour la variable jour/nuit ne fonctionne pas. J'ai raté un truc ?
mprinfo Posté(e) le 3 mars 2015 Auteur Signaler Posté(e) le 3 mars 2015 peux tu faire une capture d'écran de ta variable jour nuit
Messages recommandés