Aller au contenu
MAM78

Vacances Scolaires De Monsieur Steven Adapté

Recommended Posts

@pepite, malheureusement je n'ai pas le temps :s j'utilise même pas ce VD je sais même pas comment il fonctionne. C'était pour aider dans un premier temps à récupérer le fichier.

  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon finalement voici (c'est bien parce que tu me l'as demandé @pepite :D

 

Création d'une varibale global VacancesScolaire, Créer la scéne ci-dessous, importer le module virtuel ci-joint et modifier dans le premier bouton votre ville et les dates souhaitez. Ensuite faire runner la scène une fois par jour avec GEA par exemple ;)

 

Scene : 

--[[
%% properties
%% events
%% globals
--]]

local id_vd = xxx

local http = net.HTTPClient()
http:request("https://www.data.gouv.fr/fr/datasets/r/000ae493-9fa8-4088-9f53-76d375204036", {  
    success = function(response)
      if response.status == 200 then
        if response.data and response.data ~= "" then
          fibaro:setGlobal("VacancesScolaire", response.data)
          fibaro:call(id_vd, "pressButton", "1")
          fibaro:debug("Success")
        else
          fibaro:debug("Error : empty response data")
        end
      else
        fibaro:debug("Erreur : status=" .. tostring(response.status) .." Message : " .. tostring(response.data))
      end
    end,
    error = function(err)
      fibaro:debug("Erreur : " .. err)
    end,
    options = {
      method = 'GET',
      timeout = 3000,
      headers = {['content-type']='application/json'},
      checkCertificate = false,
    }
})

 

VD Vacances_Scolaire.vfib

 

Modifié par ADN182
Bug Fix
  • Like 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Juste pour rendre le truc encore plus automatique, il faudrait que ta variable "Année" ne soit pas codée en dur mais qu'elle soit reprise par rapport à l'année courante (genre fin Aout elle est mise à jour pour la future année scolaire qui arrive ou un truc du genre).

Partager ce message


Lien à poster
Partager sur d’autres sites

Ahah yeah well done ADN182, merciiiiii
Faut que je te réponde en mp :-).

Envoyé de mon BND-L21 en utilisant Tapatalk

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Pour toi @BenjyNet ;) 

local Ville = "Lille"
local dayofchange = 31 -- Jour du changement d'Année scolaire
local monthofchange = 8 -- Mois du changement d'Année scolaire
local Annee = ""
local data = fibaro:getGlobal("VacancesScolaire")
local i = 1
local now = os.time()
local holiday = false
local holidayd1 = false
local stats = false


-- --------------------------------------------------------------------------------------------------------------
-- Determine l'Année Scolaire par rapport aux paramètres monthofchange & dayofchange
-- --------------------------------------------------------------------------------------------------------------
local dateofchange = os.time({day=dayofchange,month=monthofchange,year=os.date("%Y"),hour=0,min=0,sec=0})
if now > dateofchange then
	Annee = os.date("%Y").."-"..(os.date("%Y") + 1)
else
	Annee = (os.date("%Y") -1).."-"..os.date("%Y")
end

-- --------------------------------------------------------------------------------------------------------------
-- Calcule le nombre de jours entre 2 dates
-- --------------------------------------------------------------------------------------------------------------
function delai(dated, dateparam)
  diff = os.difftime(dated, dateparam)
  return math.floor(diff / (60*60*24))
end

-- --------------------------------------------------------------------------------------------------------------
-- Transforme une date en string en date exploitable
-- --------------------------------------------------------------------------------------------------------------
function getDateFormat(sdate)
  year,month,day = sdate:match("(%d+)-(%d+)-(%d+)")
  return os.time({day=day,month=month,year=year,hour=0,min=0,sec=0})
end


local status, jsonTable = pcall(function() return json.decode(data) end)
for j = 1, #jsonTable do
  if jsonTable[j].fields.location == Ville and jsonTable[j].fields.annee_scolaire == Annee then
    local Description = jsonTable[j].fields.description
    local Annee_Scolaire = jsonTable[j].fields.annee_scolaire
    local Start_date = tostring(jsonTable[j].fields.start_date)
    local End_date = tostring(jsonTable[j].fields.end_date)
    local Zone = jsonTable[j].fields.zones
    local Ville = jsonTable[j].fields.location

    if (now > getDateFormat(Start_date) and now < getDateFormat(End_date)) then
     	holiday = true
      elseif ( getDateFormat(Start_date) > now and not holiday and not state) then
      	nextholiday=getDateFormat(Start_date)
      	state = true
    end
    
    if (now+24*60*60  > getDateFormat(Start_date) and now+24*60*60 < getDateFormat(End_date)) then
       holidayd1 = true 
    end
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..i..".value", " du "..Start_date.." au "..End_date.." "..Description)
    i = i + 1
  end
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.zone.value", Zone)
    fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ville.value", Ville)
end


if holiday then
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.today.value", "Oui")
  else
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.today.value", "Non")
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.status.value", "Dans ".. delai(nextholiday, now) .. " Jours")
end

if holidayd1 then
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.tomorrow.value", "Oui")
  else
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.tomorrow.value", "Non")
end

Il faut désormais renseigner la ville et le jour et mois souhaitais pour le changement d'année scolaire. (par défaut 31 Aout)

Modifié par ADN182
Add code and update first post witth good vd
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah bah voilà :) Tu peux juste copier coller le code qui va bien, ça m'évite d'importer un nouveau module.

Partager ce message


Lien à poster
Partager sur d’autres sites

Hey les gars, vous arrivez à créer des variables globales par l'API ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Oui c'est possible mais je ne me souviens plus comment on fait la solution est sur le forum

Envoyé de mon BLA-L29 en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonsoir

Je viens de déployer le VD avec le code corrigé et la scene

Cela fonctionne, je viens aussi d'ajouter la ligne dans GEA pour lancer la scene toutes les nuits.

 

Toutefois j'ai une question:

    Pourquoi la zone ne se remplie pas ?

    Ville ==> Toulouse

 

D'autre part, je ne comprends pas trop à quoi correspond le champ "Statut"

 

Merci d'avance

Modifié par kioneoranga

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 19 heures, BenjyNet a dit :

Hey les gars, vous arrivez à créer des variables globales par l'API ?

Selon le firmware ;-)

<4.55

api.post("/globalVariables", {name="Benjynet", isEnum=0})

>4.55

api.post("/globalVariables", {name="BEnjyNet4.55", isEnum=false})

 

A tester bien sur ;-)

 

@kioneoranga

J'avais le souci aussi mais j'ai modifié sans prevenir comme ceci (pardon, j'aurais du..) Je n'ai pas compris Ville s'affichait mais pas Zone..alors que le fonctionnement est identique. Bizarre

 

local Ville = jsonTable[j].fields.location
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.zone.value", Zone)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ville.value", Ville)

@ADN182

Je pense que le calcul de la fonction delai n'est pas correcte. ;-)

Ca me met 210 jours aujourd'hui ;-) avant les Vacances de LA toussaint en Octobre

 

Petit Detail : peut-etre trier les Labels des vacances les plus proches aux plus éloignées ;-) Qu'en penses tu ?

 

Merci pour le boulot
   

Partager ce message


Lien à poster
Partager sur d’autres sites

OUais moi aussi la zone ne s'affiche pas et le status indique 301 jours avant les prochaines vacances. Je sens que je vais être épuisé :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Venez habité sur Lille ;) ça fonctionne plus sérieusement faut que je regarde, j'ai dû bien tombé avec Lille, faut rajouter le stockage des date et vérifier la plus proche quelques choses du genre.

Envoyé de mon Nexus 5X en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite

Bonjour, je ne comprends pas bien en quoi consiste la correction que tu as faite pour correctement prendre en compte la "Zone"

Désolé je ne dois pas avoir les yeux en face des trous ce matin.... hihihihihi

 

Ensuite c'est clair le calcul du nombre de jour avant les prochains congés est un peu long, je ne vais pas tenir moi non plus jusque là

Et pour finir, je ne sais pas par quel biais, mais si dans la liste des congés  affichée via les labels, cela pouvait être dans l'ordre chrono cela serait parfait.  :-)

 

Merci encore pour ce nouveau mécanisme

 

Partager ce message


Lien à poster
Partager sur d’autres sites

pour info 

le VD qui allait chercher telechargement.index-education.com

refonctionne très bien chez moi

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Chez moi ça marche pas, il me trouve toujours en vacances :)

Ce qu'il faudrait faire pour améliorer le script ci-dessus, c'est de stocker les données de vacances dans une table provisoire et de la trier sur les dates de début puis ensuite de les afficher dans l'ordre.

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est normal si tu as indiqué ton métier

Envoyé de mon BLA-L29 en utilisant Tapatalk

  • Haha 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Hello,

 

Voici le code avec les modifs demandées (j'ai mis à jour mon post avec le VD) : 

local Ville = "Lille"
local dayofchange = 31 -- Jour du changement d'Année scolaire
local monthofchange = 8 -- Mois du changement d'Année scolaire
local Annee = ""
local data = fibaro:getGlobal("VacancesScolaire")
local i = 1
local now = os.time()
local holiday = false
local holidayd1 = false
local vacance = {}

-- --------------------------------------------------------------------------------------------------------------
-- Determine l'Année Scolaire par rapport aux paramètres monthofchange & dayofchange
-- --------------------------------------------------------------------------------------------------------------
local dateofchange = os.time({day=dayofchange,month=monthofchange,year=os.date("%Y"),hour=0,min=0,sec=0})
if now > dateofchange then
	Annee = os.date("%Y").."-"..(os.date("%Y") + 1)
else
	Annee = (os.date("%Y") -1).."-"..os.date("%Y")
end

-- --------------------------------------------------------------------------------------------------------------
-- Calcule le nombre de jours entre 2 dates
-- --------------------------------------------------------------------------------------------------------------
function delai(dated, dateparam)
  diff = os.difftime(dated, dateparam)
  return math.floor(diff / (60*60*24))
end

-- --------------------------------------------------------------------------------------------------------------
-- Transforme une date en string en date exploitable
-- --------------------------------------------------------------------------------------------------------------
function getDateFormat(sdate)
  year,month,day = sdate:match("(%d+)-(%d+)-(%d+)")
  return os.time({day=day,month=month,year=year,hour=0,min=0,sec=0})
end


local status, jsonTable = pcall(function() return json.decode(data) end)
for j = 1, #jsonTable do
  if jsonTable[j].fields.location == Ville and jsonTable[j].fields.annee_scolaire == Annee then
    local Description = jsonTable[j].fields.description
    local Annee_Scolaire = jsonTable[j].fields.annee_scolaire
    local Start_date = tostring(jsonTable[j].fields.start_date)
    local End_date = tostring(jsonTable[j].fields.end_date)
    Zone = jsonTable[j].fields.zones
    --local Ville = jsonTable[j].fields.location

    if (now > getDateFormat(Start_date) and now < getDateFormat(End_date)) then
     	holiday = true
    elseif ( getDateFormat(Start_date) > now and not holiday) then
		if nextholiday  ~= nil then
			if getDateFormat(Start_date) < nextholiday then nextholiday = getDateFormat(Start_date) end 
		else
			nextholiday = getDateFormat(Start_date)
        end
    end
    
    if (now+24*60*60  > getDateFormat(Start_date) and now+24*60*60 < getDateFormat(End_date)) then
       holidayd1 = true 
    end
	table.insert(vacance, " du "..Start_date.." au "..End_date.." "..Description)
  end
end

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.ville.value", Ville)
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.zone.value", Zone)

table.sort(vacance)
for k, v in pairs(vacance) do
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..k..".value", v)
end 

if holiday then
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.today.value", "Oui")
  else
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.today.value", "Non")
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.status.value", "Dans ".. delai(nextholiday, now) .. " Jours")
end

if holidayd1 then
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.tomorrow.value", "Oui")
  else
   fibaro:call(fibaro:getSelfId(), "setProperty", "ui.tomorrow.value", "Non")
end

 

Modifié par ADN182

Partager ce message


Lien à poster
Partager sur d’autres sites

Je viens de tester, j'ai une erreur ligne 41, nil value.

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 07/09/2019 à 09:02, Sakkhho a dit :

pour info 

le VD qui allait chercher telechargement.index-education.com

refonctionne très bien chez moi 

 

Bonjour @sakkhho

 

Ah bon ? il y a une erreur pourtant non ? sur le difftime, le xml ne doit pas renvoyer une date de vacances non ?

Si ca tourne chez toi, peux tu partager le code stp ? merci

Partager ce message


Lien à poster
Partager sur d’autres sites
Le 09/09/2019 à 00:20, BenjyNet a dit :

Je viens de tester, j'ai une erreur ligne 41, nil value.

Tu sais me donner tes paramètres @BenjyNet ?

Partager ce message


Lien à poster
Partager sur d’autres sites

J'avais un soucis dans le json. Donc ça ne marchait pas. Là c'est good.

Donc impeccable, merci l'ami.

 

Ah non, j'ai dit une connerie, la zone ne se met pas à jour.

Modifié par BenjyNet
Oups

Partager ce message


Lien à poster
Partager sur d’autres sites

Faut enlever le local dans la boucle "for", j'ai corrigé le post avec le code.

Partager ce message


Lien à poster
Partager sur d’autres sites

Yep j'avais trouvé. Je vais me permettre de modifier un peu ton code pour le côté esthétique des dates. Si y'a besoin je partagerai, rien de transcendant.

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites
Il y a 2 heures, BenjyNet a dit :

Yep j'avais trouvé. Je vais me permettre de modifier un peu ton code pour le côté esthétique des dates. Si y'a besoin je partagerai, rien de transcendant.

Partage, partage   :-)

Vive cette communauté

Partager ce message


Lien à poster
Partager sur d’autres sites

×