Edouard Posté(e) le 4 août 2014 Signaler Posté(e) le 4 août 2014 Bonjour, Je souhaite piloter mon cumulus sur lequel j'ai branché un wallplug. Il fonctionne aujourd'hui en heures creuses suivant une scène chaque jour. J'ai mis un bouton de forçage pour les jours où nous sommes plus nombreux à la maison. Ca, ça marche ! Quand je pars plusieurs jours, je souhaite éteindre mon cumulus pour qu'il redémarre juste avant mon retour. Pour ça, j'ai besoin d'afficher la date et heure du jour (maintenant) et la date et heure de mon retour (je reviens). +/-1 jours et +/- 1 heure s'ajoutent à la date du jour pour faire la date de retour. "envoyer" valide l'arrêt. j’espère que cela vous donnera des idées ! Votre aide sera la bienvenue !! Edouard
Steven Posté(e) le 4 août 2014 Signaler Posté(e) le 4 août 2014 Imaginons que ton label "Maintenant" s'appelle Label1 et que "Je reviens" s'appelle Label2 Pour afficher la date et heure dans Label1 : fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date("%d.%m.%y - %H:%M")) +1 jours dans Label2 local unJourDePlus = os.time()+24*60*60; fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(unJourDePlus, "%d.%m.%y - %H:%M")) +1 heure dans Label2 local uneHeureDePlus = os.time()+60*60; fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(uneHeureDePlus, "%d.%m.%y - %H:%M")) Allez, on commence sérieusement : Va dans le panneau des variables et ajoute 2 variable "RETOUR_TEMP" et "RETOUR". RETOUR_TEMP sera utilisé pour faire les calculs et RETOUR pour stocker la vrai date de retour souhaitée. Dans le main loop de ton module virtuel, met : -- on affiche la date et l'heure dans Label1 fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label1.value", os.date("%d.%m.%y - %H:%M")) . Derrière le bouton +1 Jour -- On va chercher le contenu de la variable global utilisée pour les calculs local retour_temp = fibaro:getGlobalValue("RETOUR_TEMP"); -- si la variable est nul, on met 0 if (retour_temp == nil) then retour_temp = 0; end -- On ajout 1 jours (24 heures * 60 minutes * 60 secondes) local decalage = retour_temp + 24*60*60; -- La nouvelle date est donc "maintenant" + le décalage calculé local nouvelleDate = os.time() + decalage; -- On affiche la date de retour dans Label2 fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(nouvelleDate, "%d.%m.%y - %H:%M")) -- On stocke le décalage calculer dans la variable de calcul fibaro:setGlobal("RETOUR_TEMP", decalage); . Derrière le bouton -1 jour (idem que précédemment mais avec un -) local retour_temp = fibaro:getGlobalValue("RETOUR_TEMP"); if (retour_temp == nil) then retour_temp = 0; end local decalage = retour_temp - 24*60*60; local nouvelleDate = os.time() + decalage; fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(nouvelleDate, "%d.%m.%y - %H:%M")) fibaro:setGlobal("RETOUR_TEMP", decalage); . Derrière le bouton +1 heure (idem que précédemment mais avec 24 en moins) local retour_temp = fibaro:getGlobalValue("RETOUR_TEMP"); if (retour_temp == nil) then retour_temp = 0; end local decalage = retour_temp + 60*60; local nouvelleDate = os.time() + decalage; fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(nouvelleDate, "%d.%m.%y - %H:%M")) fibaro:setGlobal("RETOUR_TEMP", decalage); . Derrière le bouton - 1 heure local retour_temp = fibaro:getGlobalValue("RETOUR_TEMP"); if (retour_temp == nil) then retour_temp = 0; end local decalage = retour_temp - 60*60; local nouvelleDate = os.time() + decalage; fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label2.value", os.date(nouvelleDate, "%d.%m.%y - %H:%M")) fibaro:setGlobal("RETOUR_TEMP", decalage); . Et derrière le bouton "Enregistrer" local retour_temp = fibaro:getGlobalValue("RETOUR_TEMP"); if (retour_temp == nil) then retour_temp = 0; end local nouvelleDate = os.time() + retour_temp; fibaro:setGlobal("RETOUR", nouvelleDate); Voilà ... oucchhh, ce fut long. C'est surtout absolument pas tester, il faut donc le voir comme un code "qui devrait fonctionner" et non pas comme une garantie. Donc dans le principe, à la fin de tout cela, tu devrais avoir dans la variable global "RETOUR" la nouvelle date et heure de retour. Allez courage Je parie que tu t'attendais à un truc plus simple. 1
Edouard Posté(e) le 5 août 2014 Auteur Signaler Posté(e) le 5 août 2014 Bonjour Steven, Je vois que l'on rentre dans la vrais programmation et c'est ça que j'aime. Tes explications me semblent très claires. Merci bien ! Je vais l'essayer et je t'en dirai des nouvelles. Bonne journée à toi ! Edouard
Edouard Posté(e) le 24 août 2014 Auteur Signaler Posté(e) le 24 août 2014 Bonjour Steven, J'ai essayer ton programme il me semble qu'à l'endroit de l'addition ça coince J'ai essayer de trouver la solution en faisant un programme plus simple que avec le Main Loop. Ce programme donne la valeur de la date dans label 1"maintenant" (ça,ça marche) et normalement donne la valeur de la date + 1 heure dans label 2 "je reviens" (et cela ne marche pas ) --[[ %% properties %% globals --]] -- on affiche la date et l'heure dans Label1 local label1 =fibaro:getGlobalValue("LABEL1"); local label1 = os.date("%d.%m.%y - %H:%M") fibaro:setGlobal("LABEL1",label1) fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label1.value",label1) fibaro:debug(label1.." voila"); local label2=fibaro:getGlobalValue("LABEL2"); local decalage=fibaro:getGlobalValue("DECALAGE"); local decalage=os.time()+60*60 local label2=label1 + decalage; fibaro:setGlobal("DECALAGE",decalage); fibaro:setGlobal("LABEL2",label2); fibaro:call(fibaro:getSelfId(),"setProperty","ui.Label2.value",label2) fibaro:debug(label2.." voici"); fibaro:debug(decalage.." cela");
Messages recommandés