DzVents : Vacances scolaires par zone et académie

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]
papoo
Messages : 2025
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

DzVents : Vacances scolaires par zone et académie

Message par papoo »

le script lua de la version 1 interrogeait le site index-education.com pour extraire un fichier xml. Ce fichier n'est désormais plus disponible.

cette nouvelle version DZvents interroge l'API de data.education.gouv.

Plus aucun fichier à télécharger, le format de résultat étant du json directement exploitable dans ce script.
vacances scolaires.png
vacances scolaires.png (24.43 Kio) Vu 1777 fois
Pour une zone et une académie donnée, vous pourrez mettre à jour des devices de type switch avec les informations vacances aujourd’hui et vacances demain

pour ceux qui souhaiteraient mettre le même icone personnalisé que moi , il est disponible sur mon github

le script complet

Code : Tout sélectionner

--[[
/home/pi/domoticz/scripts/dzVents/scripts/vacancesScolaires.lua
author/auteur = papoo
update/mise à jour = 01/01/2020
création = 05/08/2017
https://pon.fr/dzvents-vacances-scolaires-par-zone-et-academie/
https://github.com/papo-o/dz_scripts/blob/master/dzVents/scripts/vacancesScolaires.lua
https://easydomoticz.com/forum/viewtopic.php?f=17&t=9126

V1.xx  : https://github.com/papo-o/domoticz_scripts/blob/master/Lua/script_time_vacances_scolaires.lua

Principe : récupérer via l'API  de data.education.gouv (https://data.education.gouv.fr/explore/dataset/fr-en-calendrier-scolaire/api/?disjunctive.description)
les informations de vacances scolaires pour une date, une zone et une academie

--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------

local zone 				= 'A'                           -- Indiquer ici la zone (A, B ou C)
local location 			= 'Limoges'                    	-- Indiquer ici l'academie (https://fr.wikipedia.org/wiki/Acad%C3%A9mie_(%C3%A9ducation_en_France))
local holidayNow 		= 'Vacances Scolaires' 			-- Indiquer ici le nom du device vacances aujourd'hui de type switch nil si inutilisé 
local holidayTomorrow 	= 'Vacances Scolaires Demain'   -- Indiquer ici le nom du device vacances demain de type switch nil si inutilisé 

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------

local scriptName        = 'Vacances Scolaires'
local scriptVersion     = '2.02'
local response 			= 'dataEducation_response'

return {
    active = true,
    on =        {       timer           =   { 'at 00:11' },
						--timer           =   { "every minute" },
                        httpResponses   =   {  response } },

    logging =   {   level    =   domoticz.LOG_DEBUG,
                    -- level    =   domoticz.LOG_INFO,             -- Seulement un niveau peut être actif; commenter les autres
                    -- level    =   domoticz.LOG_ERROR,            -- Only one level can be active; comment others
                    -- level    =   domoticz.LOG_MODULE_EXEC_INFO,
                    marker  =   scriptName..' v'..scriptVersion },

    execute = function(dz, item)

        local _ , round = dz.utils._, dz.utils.round
		local H0, H1 = 0, 0
        local function logWrite(str,level)
            dz.log(tostring(str),level or dz.LOG_DEBUG)
        end
        
		local function date2timestamp(now)
			a, b, Y, M, D = string.find(now, "(%d+)-(%d+)-(%d+)")
			return os.time{year=Y, month=M, day=D, hour=00, minute=00}
		end
		
		local function schoolYear(dayOfYear)
			if tonumber(dayOfYear) > 182 then
				schoolYear = dz.time.year .. "-" ..(tonumber(dz.time.year) + 1)
			else
				schoolYear = (tonumber(dz.time.year) - 1) .. "-" ..dz.time.year		
			end
			return schoolYear
		end
		
		local Timestamp = dz.time.dDate
		--local Timestamp = date2timestamp("2019-12-20") -- pour test (uniquement sur l'année en cours)		
		local dayOfYear = tonumber(os.date("%j"))
		--logWrite('vacances scolaires '.. schoolYear(dayOfYear))	

		
        if (item.isHTTPResponse and item.trigger == response) then
            if (not item.isJSON) then
                logWrite('Last http response was not what expected. Trigger: '..item.trigger,dz.LOG_ERROR)
            else

                local holidays          = {}
				local start_date 		= {}
				local end_date			= {}
                holidays = item.json.records

                if holidays ~= nil then
                    for i, Result in ipairs( holidays ) do
                        start_date[i] = Result.fields.start_date
                        end_date[i] = Result.fields.end_date
						
						-- vacances aujourd'hui
						if (date2timestamp(start_date[i]) < Timestamp or date2timestamp(start_date[i]) == Timestamp) and (date2timestamp(end_date[i]) > Timestamp or date2timestamp(end_date[i]) == Timestamp) then
							logWrite('date de début des vacances '.. tostring(start_date[i]))
							logWrite('date de fin des vacances '.. tostring(end_date[i]))
							H0 = 1
						end
						--vacances demain
						if (date2timestamp(start_date[i]) < (Timestamp + 24*3600) or date2timestamp(start_date[i]) == (Timestamp + 24*3600)) and (date2timestamp(end_date[i]) > (Timestamp + 24*3600) or date2timestamp(end_date[i]) == (Timestamp + 24*3600)) then
							logWrite('date de début des vacances '.. tostring(start_date[i]))
							logWrite('date de fin des vacances '.. tostring(end_date[i]))
							H1 = 1
						end
                    end
					logWrite('H0 : '..tostring(H0))
					if holidayNow ~= nil then 
						if H0 == 1 then 
							dz.devices(holidayNow).switchOn().checkFirst() 
							logWrite('Device '..holidayNow..' sur ON')
						else
							dz.devices(holidayNow).switchOff().checkFirst()	
							logWrite('Device '..holidayNow..' sur OFF')
						end
					else
						logWrite('pas de device pour les vacances du jour')
					end	
					
					logWrite('H1 : '..tostring(H1))					
					if holidayTomorrow ~= nil then
						if H1 == 1 then 
							dz.devices(holidayTomorrow).switchOn().checkFirst()
							logWrite('Device '..holidayTomorrow..' sur ON')
						else
							dz.devices(holidayTomorrow).switchOff().checkFirst()
							logWrite('Device '..holidayTomorrow..' sur OFF')
						end
					else 
						logWrite('pas de device pour les vacances de demain')
					end	
                end
            end

        else
			local schoolYear = schoolYear(dayOfYear)
			logWrite('vacances scolaires '.. schoolYear)	
			local url = "https://data.education.gouv.fr/api/records/1.0/search/?dataset=fr-en-calendrier-scolaire&facet=start_date&facet=end_date&refine.zones=Zone+".. zone .."&rows=40&refine.annee_scolaire=".. schoolYear .."&refine.location=".. location
            dz.openURL({
                  url = url,
                        method = "GET",
                        callback = response})
        end
    end
}
retrouver la dernière version de ce script sur github
Modifié en dernier par papoo le 01 janv. 2020, 19:17, modifié 2 fois.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

McFlyPartages
Messages : 28
Enregistré le : 28 nov. 2019, 20:50
Localisation : Finistere
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par McFlyPartages »

Salut,

merci pour se script.

pour ma part j'ai un problème dans les logs et rien ne se met a jour

Code : Tout sélectionner

 2019-12-31 14:18:02.110 Status: dzVents: Info: Handling httpResponse-events for: "dataEducation_response
2019-12-31 14:18:02.111 Status: dzVents: Info: Vacances Scolaires v2.01: ------ Start external script: vacancesScolaires.lua: HTTPResponse: "dataEducation_response"
2019-12-31 14:18:02.111 Status: dzVents: Error (2.4.19): Vacances Scolaires v2.01: Last http response was not what expected. Trigger: dataEducation_response
2019-12-31 14:18:02.111 Status: dzVents: Info: Vacances Scolaires v2.01: ------ Finished vacancesScolaires.lua 
Pourtant lorsque je fais la requête vie http cela me donne les bonne infos.

Si tu as déjà eu se problème ?

Je trouve bizarre car il n'y a aucun post a la suite du tiens c'est que cela doit marcher pour tous le monde lol.

Pour information : les icônes ne marche pas car dans le fichier txt les icônes sont nommées holiday alors que les images elle sont nommées vacances.
je te mets le zip corrigé.
Vacances.zip
(17.45 Kio) Téléchargé 48 fois

Edit : Pour les vacances scolaire problème réglé depuis le passage en bêta.

Merci
Domoticz Bêta v4.11670
Xiaomi, Sonoff, Blitzwolf, Harmony, Broadlink, Amazon, Ikea, Yeelight, Roborock, Aqara, Nut, Zigate, RfLink, MySensors, ESPEasy, Etc

Site Web : https://mcflypartages.fr
Chaine YouTube : https://youtube.com/mcflypartages

McFlyPartages
Messages : 28
Enregistré le : 28 nov. 2019, 20:50
Localisation : Finistere
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par McFlyPartages »

Re bonjour,

Vous avez les jours de vacances aujourd'hui ? Car moi il me les mets en pas de vacances aujourd’hui et demain.

Et quand je fais la requête

https://data.education.gouv.fr/api/reco ... ion=Rennes

il ne me trouve pas les vacances de Noël de 2019/2020.
Domoticz Bêta v4.11670
Xiaomi, Sonoff, Blitzwolf, Harmony, Broadlink, Amazon, Ikea, Yeelight, Roborock, Aqara, Nut, Zigate, RfLink, MySensors, ESPEasy, Etc

Site Web : https://mcflypartages.fr
Chaine YouTube : https://youtube.com/mcflypartages

papoo
Messages : 2025
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par papoo »

les vacances de noel actuelles sont les vacances de ... 2019 nous sommes maintenant en 2020 et du coup le script ne trouve plus noel
il va falloir modifier le script pour utiliser le champ annee_scolaire plutot que année
vais regarder ça
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

papoo
Messages : 2025
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par papoo »

nouvelle version 2.02 prenant en compte l'année scolaire en lieu et place de l'année civile
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

McFlyPartages
Messages : 28
Enregistré le : 28 nov. 2019, 20:50
Localisation : Finistere
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par McFlyPartages »

He ba c'est rapide ca merci a toi je test demain.
Domoticz Bêta v4.11670
Xiaomi, Sonoff, Blitzwolf, Harmony, Broadlink, Amazon, Ikea, Yeelight, Roborock, Aqara, Nut, Zigate, RfLink, MySensors, ESPEasy, Etc

Site Web : https://mcflypartages.fr
Chaine YouTube : https://youtube.com/mcflypartages

Mex31
Messages : 5
Enregistré le : 07 janv. 2020, 21:47

Re: DzVents : Vacances scolaires par zone et académie

Message par Mex31 »

Merci Papoo pour ce script, j'avais essayé la version de dreaml avec le json mais ca telechargeait tous les jours et c'est pas ce que que je prefere pour ma SD :roll:
Ta solution a l'avantage de moins demander d'écriture sur le support je pense. par contre j'ai le même souci que mcfly.

Code : Tout sélectionner

 2020-01-11 22:30:00.109 Status: dzVents: Info: Vacances Scolaires v2.02: ------ Start external script: vacancesScolaires.lua:, trigger: at 22:30
2020-01-11 22:30:00.112 Status: dzVents: Info: Vacances Scolaires v2.02: ------ Finished vacancesScolaires.lua
2020-01-11 22:30:00.112 Status: EventSystem: Script event triggered: /home/pi/domoticz/dzVents/runtime/dzVents.lua
2020-01-11 22:30:00.781 Status: dzVents: Info: Handling httpResponse-events for: "dataEducation_response
2020-01-11 22:30:00.781 Status: dzVents: Info: Vacances Scolaires v2.02: ------ Start external script: vacancesScolaires.lua: HTTPResponse: "dataEducation_response"
2020-01-11 22:30:00.781 Status: dzVents: Error (2.4.19): Vacances Scolaires v2.02: Last http response was not what expected. Trigger: dataEducation_response
2020-01-11 22:30:00.781 Status: dzVents: Info: Vacances Scolaires v2.02: ------ Finished vacancesScolaires.lua 
De même j'ai désactivé tous les niveaux de debug parce que ca me créait des erreurs ... faut-il créer des fichiers logs pour que DZ puisse y écrire?

Code : Tout sélectionner

lua: ./vacancesScolaires.lua:37: attempt to index global 'domoticz' (a nil value)
stack traceback:
        ./vacancesScolaires.lua:37: in main chunk
        [C]: ?
Pour ma part, quand je lance l'url de ton script directement (sans les données) j'obtiens :

Code : Tout sélectionner

nhits	0
parameters	
dataset	"fr-en-calendrier-scolaire"
refine	
zones	"Zone \".. zone ..\""
annee_scolaire	"\".. schoolYear ..\""
location	"\".. location"
timezone	"UTC"
rows	40
format	"json"
facet	
0	"start_date"
1	"end_date"
records	[]
Encore une chose : pour utiliser ton png, il semble qu'il faut renommer les fichiers de façon identique à ce qui se trouve dans le fichier icon... c'est bien ça?
Modifié en dernier par Mex31 le 11 janv. 2020, 23:24, modifié 2 fois.
Domoticz 4.10717 - Pi 4 (à quand le boot sur Usb? :roll: )
Clé zwave.me - 5 qubino fil pilote - pont hue
À venir : zigate ou conbee (?Vos avis?) cherche de bons capteurs thermiques pas trop chers DS1820 probablement

McFlyPartages
Messages : 28
Enregistré le : 28 nov. 2019, 20:50
Localisation : Finistere
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par McFlyPartages »

Salut petite question tu es en stable ou en béta pour DZ.?
Domoticz Bêta v4.11670
Xiaomi, Sonoff, Blitzwolf, Harmony, Broadlink, Amazon, Ikea, Yeelight, Roborock, Aqara, Nut, Zigate, RfLink, MySensors, ESPEasy, Etc

Site Web : https://mcflypartages.fr
Chaine YouTube : https://youtube.com/mcflypartages

Mex31
Messages : 5
Enregistré le : 07 janv. 2020, 21:47

Re: DzVents : Vacances scolaires par zone et académie

Message par Mex31 »

Heu Stable... a priori :roll:
Je n'ai pas mis les doigts dans linux depuis des années donc... si tu me souffles la commande je te confirme ça ou dès que je l'ai trouvé. Mais je pense que la 10717 est la stable

Oui c'est bien ca. la v 4.10717 est la dernière version stable
Modifié en dernier par Mex31 le 11 janv. 2020, 23:40, modifié 1 fois.
Domoticz 4.10717 - Pi 4 (à quand le boot sur Usb? :roll: )
Clé zwave.me - 5 qubino fil pilote - pont hue
À venir : zigate ou conbee (?Vos avis?) cherche de bons capteurs thermiques pas trop chers DS1820 probablement

McFlyPartages
Messages : 28
Enregistré le : 28 nov. 2019, 20:50
Localisation : Finistere
Contact :

Re: DzVents : Vacances scolaires par zone et académie

Message par McFlyPartages »

C'est dans configuration paramètres puis dans, mise à jour stable ou béta ?

PS : si ta signature et à jour tu es en stable.

Attend la confirmation de papou mais la version n stable et béta ne doivent pas avoir les même Version de devenus. Le passage en béta la réglé le problème. Peut être que ce n'est pas liée.
Domoticz Bêta v4.11670
Xiaomi, Sonoff, Blitzwolf, Harmony, Broadlink, Amazon, Ikea, Yeelight, Roborock, Aqara, Nut, Zigate, RfLink, MySensors, ESPEasy, Etc

Site Web : https://mcflypartages.fr
Chaine YouTube : https://youtube.com/mcflypartages

Répondre