ADN182 Posté(e) le 4 septembre 2019 Signaler Posté(e) le 4 septembre 2019 @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. 2
ADN182 Posté(e) le 4 septembre 2019 Signaler Posté(e) le 4 septembre 2019 (modifié) Bon finalement voici (c'est bien parce que tu me l'as demandé @pepite ) : 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é le 8 septembre 2019 par ADN182 Bug Fix 2
BenjyNet Posté(e) le 4 septembre 2019 Signaler Posté(e) le 4 septembre 2019 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).
pepite Posté(e) le 4 septembre 2019 Signaler Posté(e) le 4 septembre 2019 Ahah yeah well done ADN182, merciiiiii Faut que je te réponde en mp :-).Envoyé de mon BND-L21 en utilisant Tapatalk 1
ADN182 Posté(e) le 5 septembre 2019 Signaler Posté(e) le 5 septembre 2019 (modifié) 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é le 5 septembre 2019 par ADN182 Add code and update first post witth good vd 1
BenjyNet Posté(e) le 5 septembre 2019 Signaler Posté(e) le 5 septembre 2019 Ah bah voilà Tu peux juste copier coller le code qui va bien, ça m'évite d'importer un nouveau module.
BenjyNet Posté(e) le 5 septembre 2019 Signaler Posté(e) le 5 septembre 2019 Hey les gars, vous arrivez à créer des variables globales par l'API ?
mprinfo Posté(e) le 5 septembre 2019 Signaler Posté(e) le 5 septembre 2019 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
kioneoranga Posté(e) le 5 septembre 2019 Signaler Posté(e) le 5 septembre 2019 (modifié) 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é le 5 septembre 2019 par kioneoranga
pepite Posté(e) le 6 septembre 2019 Signaler Posté(e) le 6 septembre 2019 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
BenjyNet Posté(e) le 6 septembre 2019 Signaler Posté(e) le 6 septembre 2019 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é
ADN182 Posté(e) le 6 septembre 2019 Signaler Posté(e) le 6 septembre 2019 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
kioneoranga Posté(e) le 7 septembre 2019 Signaler Posté(e) le 7 septembre 2019 @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
Sakkhho Posté(e) le 7 septembre 2019 Signaler Posté(e) le 7 septembre 2019 pour info le VD qui allait chercher telechargement.index-education.com refonctionne très bien chez moi
BenjyNet Posté(e) le 7 septembre 2019 Signaler Posté(e) le 7 septembre 2019 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.
mprinfo Posté(e) le 7 septembre 2019 Signaler Posté(e) le 7 septembre 2019 C'est normal si tu as indiqué ton métier Envoyé de mon BLA-L29 en utilisant Tapatalk 2
ADN182 Posté(e) le 8 septembre 2019 Signaler Posté(e) le 8 septembre 2019 (modifié) 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é le 11 septembre 2019 par ADN182
BenjyNet Posté(e) le 8 septembre 2019 Signaler Posté(e) le 8 septembre 2019 Je viens de tester, j'ai une erreur ligne 41, nil value.
pepite Posté(e) le 9 septembre 2019 Signaler Posté(e) le 9 septembre 2019 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
ADN182 Posté(e) le 11 septembre 2019 Signaler Posté(e) le 11 septembre 2019 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 ?
BenjyNet Posté(e) le 11 septembre 2019 Signaler Posté(e) le 11 septembre 2019 (modifié) 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é le 11 septembre 2019 par BenjyNet Oups
ADN182 Posté(e) le 11 septembre 2019 Signaler Posté(e) le 11 septembre 2019 Faut enlever le local dans la boucle "for", j'ai corrigé le post avec le code.
BenjyNet Posté(e) le 11 septembre 2019 Signaler Posté(e) le 11 septembre 2019 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. 2
kioneoranga Posté(e) le 11 septembre 2019 Signaler Posté(e) le 11 septembre 2019 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é
Messages recommandés