Aller au contenu

Jour Chômé


HANSOLO

Recommended Posts

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é par pepite
Lien vers le commentaire
Partager sur d’autres sites

@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é
Lien vers le commentaire
Partager sur d’autres sites

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?

Lien vers le commentaire
Partager sur d’autres sites

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é par pepite
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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 :-)

 

 

Lien vers le commentaire
Partager sur d’autres sites

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é par pepite
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

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é....:2: 

 

 

Lien vers le commentaire
Partager sur d’autres sites

  • 1 year later...

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

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

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

 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...