Script lua calendrier

Le logiciel Domoticz s'installe sur un Raspberry Pi ou sur une machine linux. Il supporte déjà plusieurs protocoles de domotique. Ces derniers mois, de nombreuses mises à jour ont fait progressé ce logiciel ...

Script lua calendrier

Messagede lmet » 22 AoĂ» 2018, 15:06

Bonjour,

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 reprenant le calcul du jour de Pâques ici.

° 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 ex : "Di-Lu". On peut ainsi gérer les congés différents du couple ex : "Sa-Di-Me"
° 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".

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.

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.

Il faut aussi créer une variable globale pour les congés de type "String" et renseigner le nom choisi dans la variable "varglobale"
Si les congés scolaires et autre congés ne vous intéressent pas alors il n'y a rien d'autre à faire.
Voici le script :
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.7 ]
]]

---------------------------------------- VARIABLES: VALEURS A EDITER ---------------------------------------

local intervirt     = ''                      -- Nom de l'interrupteur virtuel.
local varglobale    = ''                      -- Nom de la variable globale Ă  renseigner.
local calcscol      = false                   -- 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.

-------------------------------------- FIN VARIABLES: VALEURS A EDITER -------------------------------------

commandArray = {}
   
    if (devicechanged [intervirt]) == 'On' then
        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 , 11 do
                if aujourdhui == joursferies[i] then
                    jourferie = true
                    if vendredisaint == false and aujourdhui == vsaint then
                        jourferie = false
                        elseif saintetienne == false and aujourdhui == "26-12" then
                            jourferie = false
                    end
                end
            end
            return jourferie
        end
       
        function JourVacancesScolaires()
            local jour = os.date("%d-%m-%y")       
            vacscol = false
            periodes = {hiver,paques,ete,toussaint,noel}
            for i,v in ipairs(periodes) do
                if jour >= string.sub(v,1, 10) and jour <= string.sub(v,12, 21) then
                    vacscol = true
                    break
                end
            end
            return vacscol
        end
       
        local vacautre = false
        function JourVacancesAutres()
            if jour >= string.sub(autre,1, 10) and jour <= string.sub(autre,12, 21) then
                vacautre = true
                return vacautre
            end
        end   
       
        -- Calcul weekend, Vacances scolaires, Jours fĂ©riĂ©s et Autres congĂ©s
        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
            print ("Log de Conges_0.7 : Ce jour est travaillĂ©")
            commandArray['Variable:' .. varglobale] = "Faux"
        else
            print ("Log de Conges_0.7 : Ce jour est chĂ´mĂ©")
            commandArray['Variable:' .. varglobale] = "Vrai"
        end
       
        commandArray [intervirt] = 'Off'
    end
return commandArray


Je débute un peu moins ;), Si vous souhaitez que je développe un point n'hésitez pas ... (J'utilise essentiellement des modules z-Wave).
@+
lmet
Domotique : RPI 3 raspbian stretch, clef Z-wave Aeon Labs, application Domoticz v4.9700
EverSpring : ST814, AN158-6
Fibaro : FGR-221,FGS-221, FGS-211,FGD-211,FGK-103, FGRM-221, FGRM-222, FGMS-001, FGFS-101
iPad Air 2 : Imperihome
Caméras : FosCam FI9805W
Sécurité : Nest Protect
Energie : AEO_HEM2 d'AEON LABS, onduleur APC Back-UPS ES 700
Autres : Pc Windows 10 Pro 64 bits, IPX 800 v3, Netatmo station météo, NAS Synology DS214, TV Sony KDL-50W755c
Avatar de l’utilisateur
lmet
Dieu de domotique
 
Messages: 1031
Inscription: 14 AoĂ» 2011, 18:54
Localisation: Val d'Oise

Re: Script lua calendrier

Messagede Pitt13 » 22 AoĂ» 2018, 20:09

Salut lmet,
Bravo pour le script, penses tu qu'il est utilisable sur la Vera aussi ?
Dernière édition par Pitt13 le 23 Aoû 2018, 15:08, édité 1 fois.
Vera3 + VeraPlus
Fibaro FDG221 - Fibaro FDG212 - Fibaro FGR221 - Fibaro Wall Plug - Fibaro FGMS-001 - Fibaro FGRGB-101 - Fibaro Smoke Sensor FGSD-002 - FIBARO - DĂ©tecteur d'ouverture FGK-101-ZW5 - FIBARO - DĂ©tecteur Universel FGBS-001
AeonLabs Multicapteur 4in1
Nodon software remonte - Nodon prise intelligente
Qubino commutateur relais ZMNHAD1
Kira128 - Karotz - S.A.R.A.H sur Intel Compute Stick
Tablette Galaxy Tab 3 10.1"
Testé Raspberry + Razberry + OpenRemote + MyVera + Jeedom
Pitt13
Dieu de domotique
 
Messages: 683
Inscription: 21 Oct 2013, 12:27

Re: Script lua calendrier

Messagede lmet » 23 AoĂ» 2018, 14:35

 
@Pitt Merci :D. Le script de Laurent Audibert (Voir lien dans mon message précédent) est conçu pour la Vera. Ce script est assez complet (Jour fériés, vacances scolaires, week-end). Mon script reprend uniquement sa fonction "Calcul du jour de Pâques" que j'aurai été bien incapable de trouver tout seul. Il offre, à mon avis, un peu plus de souplesse dans le paramétrage, le choix des jours pour le week-end, congés Alsace/Moselle et autres congés.

Moyennant quelques modifs mineures on doit pouvoir mixer les deux afin qu'il fonctionne sur la Vera. Si cela t'intéresses tu peux faire un portage en cas de besoin n'hésites pas à me contacter en MP.
lmet
Domotique : RPI 3 raspbian stretch, clef Z-wave Aeon Labs, application Domoticz v4.9700
EverSpring : ST814, AN158-6
Fibaro : FGR-221,FGS-221, FGS-211,FGD-211,FGK-103, FGRM-221, FGRM-222, FGMS-001, FGFS-101
iPad Air 2 : Imperihome
Caméras : FosCam FI9805W
Sécurité : Nest Protect
Energie : AEO_HEM2 d'AEON LABS, onduleur APC Back-UPS ES 700
Autres : Pc Windows 10 Pro 64 bits, IPX 800 v3, Netatmo station météo, NAS Synology DS214, TV Sony KDL-50W755c
Avatar de l’utilisateur
lmet
Dieu de domotique
 
Messages: 1031
Inscription: 14 AoĂ» 2011, 18:54
Localisation: Val d'Oise

Re: Script lua calendrier

Messagede Pitt13 » 23 AoĂ» 2018, 15:08

Salut merci lmet
Je vais tester dans quelques temps :wink:
Vera3 + VeraPlus
Fibaro FDG221 - Fibaro FDG212 - Fibaro FGR221 - Fibaro Wall Plug - Fibaro FGMS-001 - Fibaro FGRGB-101 - Fibaro Smoke Sensor FGSD-002 - FIBARO - DĂ©tecteur d'ouverture FGK-101-ZW5 - FIBARO - DĂ©tecteur Universel FGBS-001
AeonLabs Multicapteur 4in1
Nodon software remonte - Nodon prise intelligente
Qubino commutateur relais ZMNHAD1
Kira128 - Karotz - S.A.R.A.H sur Intel Compute Stick
Tablette Galaxy Tab 3 10.1"
Testé Raspberry + Razberry + OpenRemote + MyVera + Jeedom
Pitt13
Dieu de domotique
 
Messages: 683
Inscription: 21 Oct 2013, 12:27


Retourner vers Logiciel - Domoticz

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

Copyright © 2011 - Touteladomotique.com - Tous droits rĂ©servĂ©s
Les blogs partenaires : Abavala, Domo-Blog, Domotique34, Maison et Domotique