Re: [LUA] Script Jour férié
Publié : 24 mai 2021, 11:53
Techniquement, la Pentecôte est bien 49 jours après Pâques, c'est le Lundi de pentecôte qui est 50 plus tard 
Reprenez le contrôle de votre domotique
https://easydomoticz.com/forum/
Code : Tout sélectionner
local jour = aujourdhuiCode : Tout sélectionner
function JourVacancesAutres()
local jour = aujourdhui
local vacautre = false
if jour >= string.sub(autre,1, 10) and jour <= string.sub(autre,12, 21) then
vacautre = true
return vacautre
end
endCode : Tout sélectionner
lua: script_device_Jf.lua:115: attempt to index global 'devicechanged' (a nil value)
stack traceback:
script_device_Jf.lua:115: in main chunk
[C]: ?Ca ressemble bien à l'utilisation de devicechanged dans un script de type timeTG76 a écrit : 07 févr. 2022, 19:12Code : Tout sélectionner
lua: script_device_Jf.lua:115: attempt to index global 'devicechanged' (a nil value)
j'ai repris celui en p4 du present postKeros a écrit : 07 févr. 2022, 20:33 Tu peux nous remettre ton script stp ? J'ai regardé celui du premier sujet et il n'a que 75 lignes donc ça ne doit pas être celui-là![]()
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 = '551' -- Nom de l'interrupteur virtuel.
local varglobale = 'jf' -- 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 = "12-02-2022 28-02-2022" -- Vacances d'hiver.
local paques = "16-04-2022 02-05-2022" -- Vacances de Pâques.
local ete = "07-07-2022 01-09-2022" -- Vacances d'été.
local toussaint = "23-10-2021 08-11-2021" -- Vacances de la toussaint.
local noel = "18-12-2021 03-01-2022" -- 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 = true -- 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