Aller au contenu

Messages recommandés

Posté(e) (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é par pepite
Posté(e)
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 :D

 

@domo elles sont disponibles ici.

 

 

Posté(e)

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

Posté(e)

@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é
Posté(e)

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?

Posté(e) (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é par pepite
  • Upvote 1
Posté(e)

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

 

 

Posté(e) (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é par pepite
  • Upvote 1
Posté(e)

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: 

 

 

  • 1 an après...
Posté(e)

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

Posté(e)

Tes variables sont bien remplies ? 

Tes label dans le VD apparaissent ?

 

Ta ligne GEA appui sur le bouton Calcul c'est ca ?

Posté(e)

Non elles ne se remplissent pas ou du moins, elles ne se mettent pas a jour.

 

1277051936_Capturedcran2018-11-0211_56_17.png.34aaeee92e9d921021669150739a8ea4.png

 

j'ai rien dans les vd et quand j'appuis sur calcul, rien ne se passe

 

oui pour la ligne gea

 

713545806_Capturedcran2018-11-0211_54_31.png.96bb69130e5da7e4d57bbffb9145c80b.png

Posté(e)

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

 

Posté(e)

Ah mince, pour une fois que j'avais trouver quelque chose de positif chez toi :huh:.

 

 

 

"Bien évidement, ce n'est qu'une plaisanterie à prendre au 3ème degré."

Posté(e)

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

 

Posté(e)

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.

  • Like 1
×
×
  • Créer...