Bonsoir,
-------------------------------
[Edit-1] Script en version 0.8 corrections des fonctions
JoursFeries() et
JourVacancesScolaires(). Ajout d'une variable
log.
Si vous avez déjà installé ce script pensez à récupérer vos variables (
intervirt et
varglobale).
Merci à
ChrisS
--------------------------------
J'utilisais l'API Domogeek de guiguiabloc. A deux reprises celle-ci a cessé de fonctionner. J'ai donc réalisé un script lua en essayant de tenir compte des commentaires et souhaits évoqués dans ce fil.
° Sans calendrier Google.
° Le script renvoie les jours fériés mais aussi (ou pas) les vacances scolaires.
° Le congé hebdomadaire n'est pas forcément un samedi ET un dimanche. La variable "congehebdo" est fixée à "Sa-Di" mais peut être modifiée par exemple: "Di-Lu". On peut ainsi gérer les congés différents du couple exemple : "Sa-Di-Me" (Bien respecter la casse et la syntaxe).
° Le script est de type "Device", il ne s'exécute donc qu'une fois par jour à l'heure fixée.
Une variable globale valant "Vrai" : en congé ou "Faux" : travaillé est renseignée.
° Si vous le souhaitez le "vendredi Saint" et "Saint Etienne" sont gérés (mettre la variable voulue à "true").
° Une période de congés peut être ajoutée en renseignant la variable "autre" (Bien respecter la casse et la syntaxe).
Seule contrainte pour ceux qui souhaitent exploiter les jours de congés scolaires : Il faut renseigner tous les ans à la main les cinq périodes de vacances (hiver, Pâques, été, Toussaint et Noël) en fonction de sa zone académique. Le script est pré-rempli avec les dates de vacances scolaires de la zone "C" pour 2018.
Ne reste plus qu'à utiliser dans votre code :
Code : Tout sélectionner
if (uservariables[<VOTRE_VARIABLE>] == 'Vrai') then
-- C'est un jour de congés ...
Pour utiliser ce script il faut :
° Créer un "Dummy" de type On/Off et renseigner son nom dans la variable "intervirt". Il faut créer un timer passant le virtuel à "On" juste après minuit chaque jour.
°Créer une variable globale pour les congés de type "String" et renseigner le nom choisi dans la variable "varglobale"
NB : Si les congés scolaires, autre congés (calcscol = false et autre = "00 ...") ne vous intéressent pas et que vos congés hebdomadaires sont fixes alors il n'y a plus rien à faire (calendrier perpétuel).
Voici le script v 0.8 :
Code : Tout sélectionner
--[[
Script de type "Device" : Renseigne une variable globale si le jour est travaillé ou chômé.
Vrai --> le jour est chômé, Faux --> le jour est travaillé.
Prérequis: Une variable de type String valeur : "Faux"
Un "Dummy" de type On/Off
lmet [v :0.8] : correction function JoursFeries() et JourVacancesScolaires()
lmet [v :0.7] : version initiale
]]
---------------------------------------- VARIABLES: VALEURS A EDITER ---------------------------------------
local intervirt = '' -- Nom de l'interrupteur virtuel.
local varglobale = '' -- Nom de la variable globale à renseigner.
local calcscol = true -- false ne recherche pas les jours fériés scolaires.
local congehebdo = "Sa-Di" -- Jours de congés en général les samedis et dimanches.
local hiver = "01-02-2018 04-03-2018" -- Vacances d'hiver.
local paques = "15-04-2018 29-04-2018" -- Vacances de Pâques.
local ete = "10-08-2018 02-09-2018" -- Vacances d'été.
local toussaint = "22-10-2018 04-11-2018" -- Vacances de la toussaint.
local noel = "24-12-2018 06-01-2019" -- Vacances de Noël.
local autre = "00-00-0000 00-00-0000" -- Autre période de congés.
local vendredisaint = false -- Jour férié Alsace/Moselle.
local saintetienne = false -- Jour férié Alsace/Moselle.
local log = false -- Si true --> Affiche quelques infos dans les log
--------------------------------------- FIN VARIABLES: VALEURS A EDITER -------------------------------------
function we()
weekend = false
local jsem = "Di-Lu-Ma-Me-Je-Ve-Sa"
congehebdo = string.gsub(congehebdo, "-", "")
local nbjour = tonumber(string.len(congehebdo) /2)
for i = 0,nbjour-1 do
rech = string.sub(congehebdo,i*2+1,i*2+2)
rech = string.find (jsem,rech)
rech = (rech -1)/3
if tonumber(os.date("%w")) == tonumber(rech) then
weekend = true
break
end
end
return weekend
end
function GetJourPaques()
local annee = os.date("%Y")
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 i=math.floor((60*(5-d)+b)/4)
local j=math.fmod((60*(5-d)+b),4)
local k=math.fmod((2*i-j-g+h),7)
local l=math.floor((g-h+k+114)/31)
local m=math.fmod((g-h+k+114),31)
local jour=m+1
local mois=l
GetJourPaquesEpoch = os.time{year=annee,month=mois,day=jour,hour=12,min=0}
return GetJourPaquesEpoch
end
function JoursFeries()
local epochPaques=GetJourPaques(os.date("%Y"))
local aujourdhui = os.date("%d-%m")
local vsaint = os.date("%d-%m",epochPaques-172800)
local paques = os.date("%d-%m",epochPaques+86400)
local ascension = os.date("%d-%m",epochPaques+3369600)
local pentecote = os.date("%d-%m",epochPaques+4233600)
local joursferies = {"01-01",vsaint,paques,"01-05","08-05",ascension,pentecote,"14-07","15-08","01-11","11-11","25-12","26-12"}
jourferie = false
for i = 1 , 13 do
if aujourdhui == joursferies[i] then
if (vendredisaint == false and aujourdhui == vsaint) or (saintetienne == false and aujourdhui == "26-12") then
break
else
jourferie = true
break
end
end
end
return jourferie
end
function JourVacancesScolaires()
local jour = aujourdhui
vacscol = false
periodes = {hiver,paques,ete,toussaint,noel}
for i,v in ipairs(periodes) do
if dateEN(jour) >= dateEN(string.sub(v,1, 10)) and dateEN(jour)<= dateEN(string.sub(v,12, 21)) then
vacscol = true
break
end
end
return vacscol
end
function JourVacancesAutres()
local vacautre = false
if jour >= string.sub(autre,1, 10) and jour <= string.sub(autre,12, 21) then
vacautre = true
return vacautre
end
end
function dateEN(date)
local eng = string.sub(date,7,10) .. "-" .. string.sub(date,4,5) .. "-" .. string.sub(date,1,2)
return eng
end
commandArray = {}
if (devicechanged [intervirt]) == 'On' then
aujourdhui = os.date("%d-%m-%y")
weekend = we()
if calcscol == true then
vacscol = JourVacancesScolaires()
else
vacscol = false
end
jourferie = JoursFeries()
if string.sub(autre,1, 2) ~= "00" then
vacautre = JourVacancesAutres()
else
vacautre = false
end
if weekend == false and jourferie == false and vacscol == false and vacautre == false then
if log == true then print ("Log de Conges_0.8 : Nous sommes le " .. aujourdhui .. " jour travaillé") end
print ( tostring(weekend) .. tostring(jourferie) .. tostring(vacscol) .. tostring(vacautre))
commandArray['Variable:' .. varglobale] = "Faux"
else
if log == true then print ("Log de Conges_0.8 : Nous sommes le " .. aujourdhui .. " jour chômé") end
print ( tostring(weekend) .. tostring(jourferie) .. tostring(vacscol) .. tostring(vacautre))
commandArray['Variable:' .. varglobale] = "Vrai"
end
commandArray [intervirt] = 'Off'
end
return commandArray
Merci pour vos remarques et/ou suggestions. C'est sûr que ce script peut être amélioré en partant du principe que rien n'a été modifié après : --- FIN VARIABLES: VALEURS A EDITER ---