script Jour férié

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
jnoel68
Messages : 7
Enregistré le : 26 avr. 2016, 13:29

Re: script Jour férié

Message par jnoel68 » 22 nov. 2016, 18:07

Oui, même version, j'ai bien créé un "selector", coché/décoché "protection" et passé en "menu de sélection" sans succès ...
En fait le bouton "Ajouter" est grisé quand je suis arrivé au niveau 100 !
Et puis j'ai insisté, saisi une nouvelle valeur et cliqué sur le bouton grisé, et ça a marché, ça m'a pris l'entrée 110.
Et ensuite pour les autre, le bouton n'était plus grisé ... certainement un bug
L'essentiel est que cela marche ;-)
Maintenant que j'ai bien mes jours fériés, je voudrais activer / désactiver des programmations en fonction de ce statut "férié" ou non et si j'ai activé un mode "vacances" manuellement.
Une idée ?
TroisSix a écrit :Salut jnoel68,
Je n'ai pas cette limitation sur ma version de domoticz (v3.5877) pour créer un "selector" avec toutes ces lignes, aurais-tu une version plus ancienne de domoticz? Peut-être que d'autres ont aussi eu cette limitation?
Sinon, as-tu bien coché "menu de sélection", et décoché la case "protection"? redémarré domoticz? aucune idée si ça peut aider ;)

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


TroisSix
Messages : 53
Enregistré le : 11 janv. 2016, 09:33

Re: script Jour férié

Message par TroisSix » 23 nov. 2016, 09:51

Tant mieux que ça fonctionne maintenant pour ton selector 8-)
Pour l'activation/désactivation de tes programmations : j'ai aussi un switch "mode vacances", "mode absent", "presence", etc. que je combine avec le switch "Jour_Ferie" (que tu as du créer si tu as bien suivi). Après, tu as le choix d'utiliser les blockly de domoticz (très facile à utiliser) ou les scripts lua (plus touchy, mais plus complet) ;)
Pi3, Domoticz stable, RFXtrx433E, Aeotec Z-Stick Gen5
- rts: prises dio, sondes oregon, volets somfy, TeleinfoEDF
- zwave: aeotec extender, fibaro fgs212, aeotec smart switch gen5, vision ZG8101
- logitech harmony hub,philips hue,géolocalisation Pilot

Tonio16
Messages : 237
Enregistré le : 13 oct. 2017, 17:00

Re: script Jour férié

Message par Tonio16 » 12 nov. 2017, 10:06

Salut

Une petite erreur dans le descriptif du script:
JourFerieTab[os.date("%m-%d",epochPaques+24*60*60*49)] = true -- Pentecôte = Ascension + 49 jours

Lire Paques et non ascension.

Merci en tout cas, j'ai pu ajouter facilement d'autres jours (Alsace).

Antoine
Domoticz V4.9700 sous raspbian-Stretch
Raspberry Pi B+ avec Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs
Raspberry Pi 3B+ avec RFLink

Tonio16
Messages : 237
Enregistré le : 13 oct. 2017, 17:00

Re: script Jour férié

Message par Tonio16 » 12 nov. 2017, 13:19

TroisSix a écrit :Bien sûr, cf script en pj ;)

N'oubliez pas de créer les devices suivants:
- switch "Calcul_Jour_Ferie_Minuit": avec mise à "On" à minuit tous les jours
- switch "Jour_Ferie": qui se met à on si le jour est férié
- switch selector "Nom_Jour_Ferie" (cf PJ pour savoir comment le créer)
- variable "Dernier_Calcul_Jour_Ferie" qui peut servir à voir le dernier update du jour (à virer si ça ne vous intéresse pas)
Pourrais-tu être plus précis quant aux intérupteurs. Dans le script, je ne trouve pas d'explication.

Antoine
Domoticz V4.9700 sous raspbian-Stretch
Raspberry Pi B+ avec Clé Z-Wave Plus Z-Stick GEN5 - Aeon Labs
Raspberry Pi 3B+ avec RFLink

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


seb88
Messages : 6
Enregistré le : 11 févr. 2017, 18:16

Re: script Jour férié

Message par seb88 » 25 mars 2018, 12:44

Bonjour à tous,

Je débute et viens de tester le script qui fonctionne très bien.
J'aimerais avoir une variable jfdemain qui me dirait si le lendemain est férié.
Quelqu'un peut m'aider pour ajouter ceci au script?
Merci

rimram31
Messages : 628
Enregistré le : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: script Jour férié

Message par rimram31 » 26 mars 2018, 08:22

Je passe par là ... désolé seb88 pas pour réagir sur ton post mais sur le sujet en général.

J'ai une approche très différente sur ce sujet, je m'appuie sur google calendar pour déterminer si nous sommes un jour férié ou si je suis en vacances (entrée d'un rdv nommé "Vacances" dans mon calendrier google).

gcalci installé (https://github.com/insanum/gcalcli), j'ai ensuite un cron qui passe après minuit tous les jours qui interroge le calendrier des jours fériés de google, mon calendrier et positionne deux interrupteurs dz en fonction. Ces deux interrupteurs me servent ensuite a mes programmations chauffage (programmation présent/absent).

Si c'est pertinent pour certains, mon script ressemble a ca:

Code : Tout sélectionner

now=`date -d now +%Y-%m-%d`
to=`date -d 'next day' +%Y-%m-%d`

# Object dz public holiday
dz_pholidays="Jour ferie"
# Public holidays
nevents=`gcalcli --calendar "Jours fériés en France" --tsv --military agenda $now $to | wc -l`
status="off"
[ $nevents -gt 0 ] && status="on"
pymoticz2 $status "$dz_pholidays"

# Object dz holidays
dz_holidays="Vacances"
# Grep pattern to find holidays in calendars
holiday_pattern="Vacances"
# Personnal holidays
nevents=`gcalcli --tsv --military agenda $now $to | grep $holiday_pattern | wc -l`
status="off"
[ $nevents -gt 0 ] && status="on"
pymoticz2 $status "$dz_holidays"
dz_pholidays et dz_holidays sont les noms de mes switchs domoticz qui sont mis a on/off selon donc. pydomoticz2 est une version personnalisée de pydomoticz utilitaire python pour appeler dz (api) a qui j'ai ajouté la gestion via "nom de device" (et non id) => https://github.com/rimram31/pymoticz2
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20

fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

Re: script Jour férié

Message par fredclo » 01 mai 2018, 10:06

Merci pour cette approche qui de mon point de vue et plus souple et plus complète mais dépendante du calendrier Google. L'avantage est de pouvoir gérer aussi les jours de vacances.
Je n'ai pas cherché mais qu'est ce que pymoticz2 ?
Merci

Envoyé de mon SM-G920F en utilisant Tapatalk
Modifié en dernier par fredclo le 01 mai 2018, 17:13, modifié 1 fois.
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

rimram31
Messages : 628
Enregistré le : 04 oct. 2015, 11:22
Localisation : Toulouse

Re: script Jour férié

Message par rimram31 » 01 mai 2018, 11:06

fredclo a écrit :...Je n'ai pas cherché mais qu'est ce que pymoticz2 ?
Une version que j'avais adapté de pymoticz trouvé ici: https://easydomoticz.com/une-libraire-p ... -domoticz/. Cet utilitaire ecrit en python permet a partir d'une ligne de commande (shell) d'appeler l'API domoticz (http). Ici je m'en sert pour allumer/éteindre mes switchs, en fait booleen, virtuels nommés "Jour ferie" et "Vacances".

De mémoire la modification essentielle que j'ai fait sur pymoticz est de pouvoir utiliser le nom du device, l'original ne supportant que l'id (toujours cette galère des ids dz ...).

Il y a peut-être des scripts plus récents aujourd'hui pour faire l'équivalent mais l'idée de base est d'interroger effectivement un calendrier google tous les matins (et/ou doublés/triplés toutes les nuits "'au cas") pour positionner des switchs virtuels de domoticz, etats qui peuvent ensuite utilisés dans les programmations.

Très agréable le matin quand tu es en vacances (en semaine) de te lever avec une température adaptée :D

(J'essaie aussi de limiter la quantité de scripts "time" de dz, jamais satisfait de devoir appeler un script toutes les minutes, soit 1440 fois par jour, pour faire quelque chose une seule fois!)
Raspberry Pi 2 + carte RF pi "maison" + Domoticz
Sonde Oregon + Aliexpress - Prises Chacon (3500W) - 1wire DS18B20

lmet
Messages : 78
Enregistré le : 30 juin 2017, 18:16
Localisation : Val d'Oise
Contact :

Re: script Jour férié

Message par lmet » 21 août 2018, 23:45

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 ---
Modifié en dernier par lmet le 03 sept. 2018, 00:20, modifié 2 fois.
Domoticz : V49700

fredclo
Messages : 81
Enregistré le : 28 févr. 2015, 16:57

Re: script Jour férié

Message par fredclo » 22 août 2018, 07:37

Merci d'avoir amélioré mon script. Ça me fait très plaisir. J'utilise le mien depuis des années sans faille et c cool.

Envoyé de mon SM-G920F en utilisant Tapatalk
RPi sur powerbank, bouton off/reset, domoticz (début avec Fhem sur dockstar), 4 sondes 1wire via rj45, ctrl des volets, tv/fbx, lumière, détecteurs d'ouverture, karotz, multiroom via pifm, ecodevice, ATI RF, et prg du mode arrêt des radiateurs via FP

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre