[LUA] Script Jour férié
Publié : 11 oct. 2015, 18:34
Bonjour,
pour ceux qui n'auraient pas vu mon post sur le forum officiel de domoticz, je le poste ici aussi.
Le but est d'obtenir une variable dans domoticz qui prend la valeur true si jour férié et false si jour normal. C'est plus que pratique pour mes programmes (un bouton virtuel est week-end-jourférié ON ou OFF selon le jour et ainsi tout est facilement automatisable comme les volets le matin dans la chambre, la radio le matin...). Car les volets qui s'ouvrent le matin à 7h00 avec la radio qui hurle quand on est un jour férié c'est pas WAF du tout !!
Le plus dur est de trouver les jours de pâques.
Le mérite revient entièrement à audibert qui met son script jour pâque sur site :
http://gurau-audibert.hd.free.fr/josdbl ... rs-feries/
Dans une console, avec nano créer dans /scripts/lua : script_time_jf.lua
Listing--------------------------------------------------------------------------------------
end listing----------------------------------------------------------------------
Ajouter dans domoticz la variable jf as string, et vous aurez la variable jf true ou false selon qu'à 00h05 c'est un jour férié ou pas (exécution qu'une fois par jour à 00h05)
fredclo
pour ceux qui n'auraient pas vu mon post sur le forum officiel de domoticz, je le poste ici aussi.
Le but est d'obtenir une variable dans domoticz qui prend la valeur true si jour férié et false si jour normal. C'est plus que pratique pour mes programmes (un bouton virtuel est week-end-jourférié ON ou OFF selon le jour et ainsi tout est facilement automatisable comme les volets le matin dans la chambre, la radio le matin...). Car les volets qui s'ouvrent le matin à 7h00 avec la radio qui hurle quand on est un jour férié c'est pas WAF du tout !!
Le plus dur est de trouver les jours de pâques.
Le mérite revient entièrement à audibert qui met son script jour pâque sur site :
http://gurau-audibert.hd.free.fr/josdbl ... rs-feries/
Dans une console, avec nano créer dans /scripts/lua : script_time_jf.lua
Listing--------------------------------------------------------------------------------------
Code : Tout sélectionner
commandArray = {}
-- 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)
-- La fonction n'effectue le calcul que si l'année a changée depuis son dernier appel
GetJourPaquesAnnee=0 -- Variable globale (année du dernier calcul) pour ne pas recalculer le jour de Pâques à chaque appel
GetJourPaquesEpochPaque=0 -- Variable globale (jour de Pâques au format epoch) pour ne pas recalculer le jour de Pâques à chaque appel
time = os.date("*t")
if((time.min == 5) and (time.hour == 0)) then
function GetJourPaques(annee)
if(GetJourPaquesAnnee~=annee or GetJourPaquesEpochPaque==0) then
local a=math.floor(annee/100) -- donne 20 pour 2015
local b=math.fmod(annee,100) -- donne 15 pour 2015
local c=math.floor((3*(a+25))/4) -- donne 33 pour 20
local d=math.fmod((3*(a+25)),4) -- donne 3 pour 20
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
GetJourPaquesAnnee=annee
GetJourPaquesEpochPaque=os.time{year=annee,month=mois,day=jour,hour=12,min=0}
end
return GetJourPaquesEpochPaque
end
-- Retourne true si le jour courant est un jour férié
-- Le calcul des jours férié n'est fait qu'un fois par an (ou si la Vera reboot)
JourFerieAnnee=0 -- Variable globale (année du dernier calcul) pour ne pas recalculer le tableau à chaque appel
JourFerieTab = {} -- Variable globale (tableau des jours fériés) pour ne pas recalculer le tableau à chaque appel
function JourFerie()
local today=os.date("%m-%d")
local annee=tonumber(os.date("%Y"))
if(annee~=JourFerieAnnee) then
JourFerieAnnee=annee
-- Dates fixes
JourFerieTab["01-01"] = true -- 1er janvier
JourFerieTab["05-01"] = true -- Fête du travail
JourFerieTab["05-08"] = true -- Victoire des alliés
JourFerieTab["07-14"] = true -- Fête nationale
JourFerieTab["08-15"] = true -- Assomption
JourFerieTab["11-01"] = true -- Toussaint
JourFerieTab["11-11"] = true -- Armistice
JourFerieTab["12-25"] = true -- Noël
-- Dates variables
local epochPaques=GetJourPaques(annee)
JourFerieTab[os.date("%m-%d",epochPaques)] = true -- Pâques
JourFerieTab[os.date("%m-%d",epochPaques+24*60*60)] = true -- Lundi de Pâques = Pâques + 1 jour
JourFerieTab[os.date("%m-%d",epochPaques+24*60*60*39)] = true -- Ascension = Pâques + 39 jours
JourFerieTab[os.date("%m-%d",epochPaques+24*60*60*49)] = true -- Pentecôte = Ascension + 49 jours
end
return JourFerieTab[today] -- (nldr : Both nil and false make a condition false)
end
-- print(JourFerie())
-- jf=(JourFerie())
-- print (jf)
if JourFerie() == true
then
commandArray['Variable:jf'] = 'true'
else
commandArray['Variable:jf'] = 'false'
end
end
return commandArray
Ajouter dans domoticz la variable jf as string, et vous aurez la variable jf true ou false selon qu'à 00h05 c'est un jour férié ou pas (exécution qu'une fois par jour à 00h05)
fredclo