[LUA] Script Jour férié

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Neutrino
Messages : 2662
Inscription : 10 juil. 2015, 15:42
Localisation : Les Herbiers(85)

Re: [LUA] Script Jour férié

Message par Neutrino »

Techniquement, la Pentecôte est bien 49 jours après Pâques, c'est le Lundi de pentecôte qui est 50 plus tard 😅
Ma maison à plein d'IP ! :mrgreen:
SAV Bonjour. Vous avez vidé le cache ?
jeje
Messages : 32
Inscription : 13 août 2021, 01:17
Localisation : nord

Re: [LUA] Script Jour férié

Message par jeje »

Bonjour,j'utilise ce script depuis peu et je tient a remercier l'ensemble du forum en même temps j'aurais juste une petite question: sur la période autre vacances j'ai rentré une date comme celle d'aujourd'hui et qui finirai dans 3 jours par exemple ,j'ai une erreur dans les logs du type [string "--[[..."]:106: attempt to compare string with nil :roll:
j'ai rater quelque choses ou il y a quelque chose d'autre a faire d'avance merci.
domoticz sur VM sur freebox delta
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: [LUA] Script Jour férié

Message par denis_brasseur »

Bonjour jeje
la variable jour n'est pas défini dans la fonction JourVacancesAutres()
j'ajouterais

Code : Tout sélectionner

local jour = aujourdhui
afin d'obtenir

Code : 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
end
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
jeje
Messages : 32
Inscription : 13 août 2021, 01:17
Localisation : nord

Re: [LUA] Script Jour férié

Message par jeje »

Bonjour Denis , merci du tuyau j'ai essayer pour l'instant je n'ai plus d'erreur je verrai a 0:15 si c'est bien pris en compte a priori oui par rapport au log . Un grand merci en tout cas c’était si simple que je n'y même pas penser :lol: en même temps je suis novice aussi donc ça s'explique surement.
domoticz sur VM sur freebox delta
TG76
Messages : 49
Inscription : 10 nov. 2017, 12:04

Re: [LUA] Script Jour férié

Message par TG76 »

Bonsoir,

j'ai une erreur à la ligne 115, visiblement je suis le seul et je sais pas comment m'en sortir.

Code : 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]: ?
si quelqu'un peut me venir en aide, j'aimerais pouvoir programmer l'allumage de l'aquarium de mon fils en fonction des vacances et des week-end pour pas qu'il ne se reveille trop tot.

Cordialement

TG76
Domoticz sur raspberry pi4 + station météo WMR86
Porte auto poulailler par détournement moteur porte de garage
suivi nas synology et onduleur
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Re: [LUA] Script Jour férié

Message par Keros »

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à :mrgreen:
Comment bien utiliser le forum : Poser une question, Mettre un script, un fichier, une image ou des logs
Mes petits guides : Débuter en programmation, Le débogage, Le choix de matériel, Les sauvegardes
Ma présentation - Mes Tutos
denis_brasseur
Messages : 898
Inscription : 24 déc. 2018, 17:05
Localisation : (26)

Re: [LUA] Script Jour férié

Message par denis_brasseur »

TG76 a écrit : 07 févr. 2022, 19:12

Code : Tout sélectionner

lua: script_device_Jf.lua:115: attempt to index global 'devicechanged' (a nil value)
Ca ressemble bien à l'utilisation de devicechanged dans un script de type time
Pi3 + DD PiDrive - RFXtrx433 - AEON Labs ZW090
TG76
Messages : 49
Inscription : 10 nov. 2017, 12:04

Re: [LUA] Script Jour férié

Message par TG76 »

Keros 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à :mrgreen:
j'ai repris celui en p4 du present post

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
Domoticz sur raspberry pi4 + station météo WMR86
Porte auto poulailler par détournement moteur porte de garage
suivi nas synology et onduleur
garycooper
Messages : 453
Inscription : 07 août 2017, 23:58

Re: [LUA] Script Jour férié

Message par garycooper »

Bonjour, je pense que tu as mis le n° d'IDX pour la valeur "intervirt" au lieu de mettre le nom de ton interrupteur virtuel.
Répondre