domo Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 Salut pepite c'est bon ça fonctionne maintenant il me manques plus que les icônes et c'est parfait
pepite Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 (modifié) Super, Après pour le VD Jour Chômé, inutile de faire les calculs toutes les minutes, en heure voire 1 fois par jour ca suffit. J'ai fait tres simple; modification de diff.min en diff.hour, à toi de modifier "instance.every" :-) J'ai rajouté les icones A toi de jouer local selfId = fibaro:getSelfId() -- 1ère fois que le main loop s'exécute, on crée une variable nommée "instance" car elle n'existe pas. Elle existera au 2ème passage donc ne sera pas recrée. if (not instance) then -- on indique la fréquence d'execution souhaitée (en heures) instance = { lastrun = 0, every = 5 } fibaro:debug("first run") end -- on vérifie la différence entre cette exéction et la dernière (stocké dans instance.lastrun) diff = os.date("*t", os.difftime(os.time(), instance.lastrun)) -- si la différence en minutes et supérieure ou égale à la fréquence souhaitée (instance.every) if (diff.hour >= instance.every) then fibaro:call(selfId, "pressButton", "3") if ( fibaro:getGlobalValue("JourChomeJ1") == ("OUI") ) then fibaro:call(selfId ,"setProperty","currentIcon",171) else fibaro:call(selfId ,"setProperty","currentIcon",170) end -- on stock l'heure de la nouvelle exécution instance.lastrun = os.time() fibaro:debug("executed") end Modifié le 10 février 2017 par pepite
MAM78 Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 Il y a 7 heures, domo a dit : Salut pepite c'est bon ça fonctionne maintenant il me manques plus que les icônes et c'est parfait @domo elles sont disponibles ici.
domo Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 MAM78 c'est pas les icônes qui me manques je sais où les trouver, mais c'est le script pour les faire apparaître
MAM78 Posté(e) le 10 février 2017 Signaler Posté(e) le 10 février 2017 @domo Moi j'ai ajouté ça à mon code du bouton juste après : doCalculate(os.time(), "Label1", "JourChome") if ( fibaro:getGlobalValue("JourChomeJ") == ("OUI") ) then fibaro:call(127 ,"setProperty","currentIcon",1020) --fibaro:call(283, "pressButton", "5"); else fibaro:call(127 ,"setProperty","currentIcon",1018) --fibaro:call(283, "pressButton", "4"); end Ca marche nickel, il suffit de modifier : les id des icônes en fonction de ta bibliothèque. ton id de module Jour Chaumé
speedoxx007 Posté(e) le 17 février 2017 Signaler Posté(e) le 17 février 2017 Hello, Moi j'ai une erreur sur: local f=math.fmod((5*a+,19); Error: [ERROR] 11:57:34: line 26: unexpected symbol near ',' -- Retourne le jour de Pâques au format epoch -- annee : année (Integer) dont on désire connaître le jour de Pâques (ex : 2014) function josdGetJourPaques(annee) local a=math.floor(annee/100); local b=math.fmod(annee,100); local c=math.floor((3*(a+25))/4); local d=math.fmod((3*(a+25)),4); local e=math.floor((8*(a+11))/25); local f=math.fmod((5*a+,19); local g=math.fmod((19*f+c-e),30); local h=math.floor((f+11*g)/319); local j=math.floor((60*(5-d)+b)/4); local k=math.fmod((60*(5-d)+,4); local m=math.fmod((2*j-k-g+h),7); local n=math.floor((g-h+m+114)/31); local p=math.fmod((g-h+m+114),31); local jour=p+1; local mois=n; josdGetJourPaquesAnnee=annee; josdGetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}; return josdGetJourPaquesEpochPaque; end Ou est l'erreur?
pepite Posté(e) le 17 février 2017 Signaler Posté(e) le 17 février 2017 (modifié) Bonjour@speedoxx007 Il te manque une lettre c'est a+b ;-) Voila la fonction complète, à tester function josdGetJourPaques(annee) local a=math.floor(annee/100); local b=math.fmod(annee,100); local c=math.floor((3*(a+25))/4); local d=math.fmod((3*(a+25)),4); local e=math.floor((8*(a+11))/25); local f=math.fmod((5*a+b),19); local g=math.fmod((19*f+c-e),30); local h=math.floor((f+11*g)/319); local j=math.floor((60*(5-d)+b)/4); local k=math.fmod((60*(5-d)+b),4); local m=math.fmod((2*j-k-g+h),7); local n=math.floor((g-h+m+114)/31); local p=math.fmod((g-h+m+114),31); local jour=p+1; local mois=n; josdGetJourPaquesAnnee=annee; josdGetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}; return josdGetJourPaquesEpochPaque; end Modifié le 17 février 2017 par pepite 1
speedoxx007 Posté(e) le 17 février 2017 Signaler Posté(e) le 17 février 2017 hello @pepite C'est bon. C'est Parfait.
speedoxx007 Posté(e) le 20 février 2017 Signaler Posté(e) le 20 février 2017 Hello J'ai quand même un souci. Aujourd'hui et demain chez c'est jours chomé...:-( Eh ben non ou est le souci? Voici mon Code: -- Retourne OUI si le jour courant et J+1 est un jour chômé (WE ou férié) -- Adapté de http://gurau-audibert.hd.free.fr/josdblog/2014/01/lua-vacances-jours-chomes-et-jours-feries/ -- Pour la HC2 par Hansolo -- V1 26/06/2014 Initié par HANSOLO -- V2 27/06/2014 Amélioré par STEVEN, gestion des JS SUISSE et calcul J et J+1 local france = false local suisse = true local geneve = false -- Retourne le jour de la semaine en clair function josdGetJourSemaine(jour) --fibaro:debug ("jour: ") josdGetJourSemaineTab={[0]="dimanche",[1]="lundi",[2]="mardi",[3]="mercredi",[4]="jeudi",[5]="vendredi",[6]="samedi"} return josdGetJourSemaineTab[tonumber(jour)] end -- Retourne le jour de Pâques au format epoch -- annee : année (Integer) dont on désire connaître le jour de Pâques (ex : 2014) function josdGetJourPaques(annee) local a=math.floor(annee/100); local b=math.fmod(annee,100); local c=math.floor((3*(a+25))/4); local d=math.fmod((3*(a+25)),4); local e=math.floor((8*(a+11))/25); local f=math.fmod((5*a+b),19); local g=math.fmod((19*f+c-e),30); local h=math.floor((f+11*g)/319); local j=math.floor((60*(5-d)+b)/4); local k=math.fmod((60*(5-d)+b),4); local m=math.fmod((2*j-k-g+h),7); local n=math.floor((g-h+m+114)/31); local p=math.fmod((g-h+m+114),31); local jour=p+1; local mois=n; josdGetJourPaquesAnnee=annee; josdGetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}; return josdGetJourPaquesEpochPaque; end -- Retourne true si le jour courant est un jour férié function josdJourFerie(time) local today=os.date("%m-%d", time); local annee=tonumber(os.date("%Y", time)); -- Dates fixes josdJourFerieTab = {} local epochPaques=josdGetJourPaques(annee); if (france) then josdJourFerieTab["01-01"] = true; -- 1er janvier josdJourFerieTab["05-01"] = true; -- Fête du travail josdJourFerieTab["05-08"] = true; -- Victoire des alliés josdJourFerieTab["07-14"] = true; -- Fête nationale josdJourFerieTab["08-15"] = true; -- Assomption josdJourFerieTab["11-01"] = true; -- Toussaint josdJourFerieTab["11-11"] = true; -- Armistice josdJourFerieTab["12-25"] = true; -- Noà«l -- Dates variables josdJourFerieTab[os.date("%m-%d",epochPaques)] = true; -- Pâques josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60)] = true; -- Lundi de Pâques = Pâques + 1 jour josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60*39)] = true; -- Ascension = Pâques + 39 jours josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60*50)] = true; -- Pentecôte = Ascension + 50 jours end if (suisse) then josdJourFerieTab["01-01"] = true; -- 1er janvier josdJourFerieTab["08-01"] = true; -- Fête national josdJourFerieTab["12-25"] = true; -- Noà«l -- Dates variables if (geneve) then josdJourFerieTab[jeuneGenevois(time)] = true; -- jeunes genevois else josdJourFerieTab[jeuneFederal(time)] = true; -- jeunes genevois end josdJourFerieTab[os.date("%m-%d", epochPaques)] = true; -- Pâques josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60)] = true; -- Lundi de Pâques = Pâques + 1 jour josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60*39)] = true; -- Ascension = Pâques + 39 jours josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60*50)] = true; -- Pentecôte = Ascension + 50 jours josdJourFerieTab[os.date("%m-%d", epochPaques-48*60*60)] = true; -- Vendredi-saint = Pâques - 2 jour end return josdJourFerieTab[today]; -- (nldr : Both nil and false make a condition false) end -- Calcul le jeudi qui suit le 1er dimanche de septembre function jeuneGenevois(time) local jour = 1 local annee = tonumber(os.date("%Y", time)) while (os.date("%A", os.time{year=annee, month=9, day=jour}) ~= "Sunday") do jour = jour + 1 end return os.date("%m-%d", os.time{year=annee, month=9, day=(jour+4)}) end -- Calcul le lundi qui suit le 3ème dimanche de septembre function jeuneFederal(time) local jour = 1 local annee = tonumber(os.date("%Y", time)) while (os.date("%A", os.time{year=annee, month=9, day=jour}) ~= "Sunday") do jour = jour + 1 end return os.date("%m-%d", os.time{year=annee, month=9, day=(jour+15)}) end -- JOURS DE VACANCES ET SCOLAIRE function josdJourVacances() local today=os.date("%Y-%m-%d") local vacances=false -- 2016 if ("2016-07-09"<=today and today<"2016-08-24") then vacances=true -- Vacances d'été -- 2016-2017 elseif ("2016-10-18"<=today and today<"2016-11-03") then vacances=true -- Toussaint Zones elseif ("2016-12-20"<=today and today<"2017-01-05") then vacances=true -- Noël elseif ("2017-02-25"<=today and today<"2017-03-05") then vacances=true -- Hiver Zone C elseif ("2017-04-08"<=today and today<"2017-04-23") then vacances=true -- Printemps Zone C elseif ("2015-07-08"<=today and today<"2017-08-23") then vacances=true -- Vacances d'été -- 2017-2018 elseif ("2017-10-14"<=today and today<"2015-10-29") then vacances=true -- Toussaint elseif ("2017-12-23"<=today and today<"2018-01-07") then vacances=true -- Noël elseif ("2018-02-10"<=today and today<"2018-02-18") then vacances=true -- Hiver Zone C elseif ("2018-03-30"<=today and today<"2018-04-15") then vacances=true -- Printemps Zone C elseif ("2018-07-07"<=today and today<"2018-08-22") then vacances=true -- Vacances d'été -- 2018-2019 elseif ("2018-10-13"<=today and today<"2018-10-28") then vacances=true -- Toussaint elseif ("2018-12-22"<=today and today<"2019-01-06") then vacances=true -- Noël elseif ("2019-03-02"<=today and today<"2019-03-10") then vacances=true -- Hiver Zone C elseif ("2019-04-13"<=today and today<"2019-04-28") then vacances=true -- Printemps Zone C elseif ("2019-07-06"<=today and today<"2019-08-28") then vacances=true -- Vacances d'été end return vacances end -- Affiche le résultat function display(jour, result, label, variable, time) selfId = fibaro:getSelfId() fibaro:debug ("Jour chomé: " .. result) -- Mise à jour de la variable globale if (variable) then fibaro:setGlobal(variable, result) end -- Mise à jour du label du module virtuel fibaro:call(selfId,"setProperty","ui."..label..".value", jour .. " " .. os.date("%d.%m.%Y ",time).." Jour chomé: ".. result) end -- Lancement du calcul function doCalculate(time, label, variable) local jour = josdGetJourSemaine(os.date("%w", time)) josdJourChomeReturn = (jour=="samedi" or jour=="dimanche" or josdJourFerie(time) or josdJourVacances()) if josdJourChomeReturn then display(jour, "OUI", label, variable, time) else display(jour, "NON", label, variable, time) end end doCalculate(os.time(), "Label1", "JourChome") doCalculate(os.time()+24*60*60, "Label2", "JourChomeJ1") Je ne voit pas ou est le problème ? Merci pour l'aide :-)
pepite Posté(e) le 20 février 2017 Signaler Posté(e) le 20 février 2017 (modifié) Ce ne serait pas dû aux vacances scolaires ? @speedoxx007 Attends, au fait, tu travailles ou non aujourd'hui ? Jour CHOME = NON, est exact si tu travailles auj, ce n'est pas un jour chome "Lundi" DONC TU bosses ;-) Jour CHOMEJ1 = NON : idem pour Mardi Et d'après tes dates de vacances tu es dans la ZONE C ;-) tout est OK à mon avis Modifié le 20 février 2017 par pepite 1
speedoxx007 Posté(e) le 20 février 2017 Signaler Posté(e) le 20 février 2017 Hello @pepite Oui je travaille aujourdhui... Oups, j'ai trouvé: elseif ("2015-07-08"<=today and today<"2017-08-23") then vacances=true -- Vacances d'été -> Ce serai des longues vacances d'eté....
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Petit soucis en 4.500, si je clique sur le bouton, ca ne fait strictement rien. normal ? les variables sont bien mise dans le panneau globale et j'ai bien mis la ligne dans GEA GEA.add(true, 30, "", {{"VirtualDevice", 509, 3},{"Time", "11:01", "11:02"}}) Jour_Chômé.vfib.json
pepite Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Tes variables sont bien remplies ? Tes label dans le VD apparaissent ? Ta ligne GEA appui sur le bouton Calcul c'est ca ?
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Non elles ne se remplissent pas ou du moins, elles ne se mettent pas a jour. j'ai rien dans les vd et quand j'appuis sur calcul, rien ne se passe oui pour la ligne gea
Steven Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Si tu es en France, c'est normal ... c'est TOUJOURS férié 1 2
pepite Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 M'en parle pas suis au boulot ;-) Code du bouton calcul qui fonctionne chez moi. -- Retourne OUI si le jour courant et J+1 est un jour chômé (WE ou férié) -- Adapté de http://gurau-audibert.hd.free.fr/josdblog/2014/01/lua-vacances-jours-chomes-et-jours-feries/ -- Pour la HC2 par Hansolo -- V1 26/06/2014 Initié par HANSOLO -- V2 27/06/2014 Amélioré par STEVEN, gestion des JS SUISSE et calcul J et J+1 local france = true local suisse = false local geneve = false -- Retourne le jour de la semaine en clair function josdGetJourSemaine(jour) --fibaro:debug ("jour: ") josdGetJourSemaineTab={[0]="dimanche",[1]="lundi",[2]="mardi",[3]="mercredi",[4]="jeudi",[5]="vendredi",[6]="samedi"} return josdGetJourSemaineTab[tonumber(jour)] end -- Retourne le jour de Pâques au format epoch -- annee : année (Integer) dont on désire connaître le jour de Pâques (ex : 2014) function josdGetJourPaques(annee) local a=math.floor(annee/100); local b=math.fmod(annee,100); local c=math.floor((3*(a+25))/4); local d=math.fmod((3*(a+25)),4); local e=math.floor((8*(a+11))/25); local f=math.fmod((5*a+b),19); local g=math.fmod((19*f+c-e),30); local h=math.floor((f+11*g)/319); local j=math.floor((60*(5-d)+b)/4); local k=math.fmod((60*(5-d)+b),4); local m=math.fmod((2*j-k-g+h),7); local n=math.floor((g-h+m+114)/31); local p=math.fmod((g-h+m+114),31); local jour=p+1; local mois=n; josdGetJourPaquesAnnee=annee; josdGetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}; return josdGetJourPaquesEpochPaque; end -- Retourne true si le jour courant est un jour férié function josdJourFerie(time) local today=os.date("%m-%d", time); local annee=tonumber(os.date("%Y", time)); -- Dates fixes josdJourFerieTab = {} local epochPaques=josdGetJourPaques(annee); if (france) then josdJourFerieTab["01-01"] = true; -- 1er janvier josdJourFerieTab["05-01"] = true; -- Fête du travail josdJourFerieTab["05-08"] = true; -- Victoire des alliés josdJourFerieTab["07-14"] = true; -- Fête nationale josdJourFerieTab["08-15"] = true; -- Assomption josdJourFerieTab["11-01"] = true; -- Toussaint josdJourFerieTab["11-11"] = true; -- Armistice josdJourFerieTab["12-25"] = true; -- Noël -- Dates variables josdJourFerieTab[os.date("%m-%d",epochPaques)] = true; -- Pâques josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60)] = true; -- Lundi de Pâques = Pâques + 1 jour josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60*39)] = true; -- Ascension = Pâques + 39 jours josdJourFerieTab[os.date("%m-%d",epochPaques+24*60*60*50)] = true; -- Pentecôte = Ascension + 50 jours end if (suisse) then josdJourFerieTab["01-01"] = true; -- 1er janvier josdJourFerieTab["08-01"] = true; -- Fête national josdJourFerieTab["12-25"] = true; -- Noël -- Dates variables if (geneve) then josdJourFerieTab[jeuneGenevois(time)] = true; -- jeunes genevois else josdJourFerieTab[jeuneFederal(time)] = true; -- jeunes genevois end josdJourFerieTab[os.date("%m-%d", epochPaques)] = true; -- Pâques josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60)] = true; -- Lundi de Pâques = Pâques + 1 jour josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60*39)] = true; -- Ascension = Pâques + 39 jours josdJourFerieTab[os.date("%m-%d", epochPaques+24*60*60*50)] = true; -- Pentecôte = Ascension + 50 jours josdJourFerieTab[os.date("%m-%d", epochPaques-48*60*60)] = true; -- Vendredi-saint = Pâques - 2 jour end return josdJourFerieTab[today]; -- (nldr : Both nil and false make a condition false) end -- Calcul le jeudi qui suit le 1er dimanche de septembre function jeuneGenevois(time) local jour = 1 local annee = tonumber(os.date("%Y", time)) while (os.date("%A", os.time{year=annee, month=9, day=jour}) ~= "Sunday") do jour = jour + 1 end return os.date("%m-%d", os.time{year=annee, month=9, day=(jour+4)}) end -- Calcul le lundi qui suit le 3ème dimanche de septembre function jeuneFederal(time) local jour = 1 local annee = tonumber(os.date("%Y", time)) while (os.date("%A", os.time{year=annee, month=9, day=jour}) ~= "Sunday") do jour = jour + 1 end return os.date("%m-%d", os.time{year=annee, month=9, day=(jour+15)}) end -- Affiche le résultat function display(jour, result, label, variable, time) selfId = fibaro:getSelfId() fibaro:debug ("Jour chomé: " .. result) -- Mise à jour de la variable globale if (variable) then fibaro:setGlobal(variable, result) end -- Mise à jour du label du module virtuel fibaro:call(selfId,"setProperty","ui."..label..".value", jour .. " " .. os.date("%d.%m.%Y ",time).." Jour chomé: ".. result) end -- Lancement du calcul function doCalculate(time, label, variable) local jour = josdGetJourSemaine(os.date("%w", time)) josdJourChomeReturn = (jour=="samedi" or jour=="dimanche" or josdJourFerie(time)) if josdJourChomeReturn then display(jour, "OUI", label, variable, time) else display(jour, "NON", label, variable, time) end end doCalculate(os.time(), "Label1", "JourChome") doCalculate(os.time()+24*60*60, "Label2", "JourChomeJ1") local selfId = fibaro:getSelfId() if ( fibaro:getGlobalValue("JourChome") == ("OUI") ) then fibaro:call(selfId,"setProperty","currentIcon",1011) else fibaro:call(selfId,"setProperty","currentIcon",1012) end
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 celui la fonctionne effectivement ! Merci
Steven Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Définitivement @schwinny devient le roi du "copier/coller" 1 1
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 faut croire que non... car j'avais copié collé celui de la page 1 et ca passait pas
Steven Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Ah mince, pour une fois que j'avais trouver quelque chose de positif chez toi . "Bien évidement, ce n'est qu'une plaisanterie à prendre au 3ème degré."
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Et non, je suis définitivement foutu !!!
schwinny Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 en fait, je viens de percuter que dans la page 1, il manque ceci dans le code: local selfId = fibaro:getSelfId() if ( fibaro:getGlobalValue("JourChome") == ("OUI") ) then fibaro:call(selfId,"setProperty","currentIcon",1011) else fibaro:call(selfId,"setProperty","currentIcon",1012) end
Steven Posté(e) le 2 novembre 2018 Signaler Posté(e) le 2 novembre 2018 Cela ne sert qu'à changer l'icone du VD cela n'a aucun impact sur le code qui change l'état de la VG ni les labels. 1
Messages recommandés