ADN182 Posté(e) le 4 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 4 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 4 septembre 2019 Signaler Partager 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). Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 4 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 5 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 5 septembre 2019 Signaler Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 5 septembre 2019 Signaler Partager Posté(e) le 5 septembre 2019 Hey les gars, vous arrivez à créer des variables globales par l'API ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
mprinfo Posté(e) le 5 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 5 septembre 2019 Signaler Partager Posté(e) le 5 septembre 2019 Alors j'ai pas trouvé ! Lien vers le commentaire Partager sur d’autres sites More sharing options...
kioneoranga Posté(e) le 5 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 6 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 6 septembre 2019 Signaler Partager 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é Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 6 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
kioneoranga Posté(e) le 7 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sakkhho Posté(e) le 7 septembre 2019 Signaler Partager Posté(e) le 7 septembre 2019 pour info le VD qui allait chercher telechargement.index-education.com refonctionne très bien chez moi Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 7 septembre 2019 Signaler Partager 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mprinfo Posté(e) le 7 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 8 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 8 septembre 2019 Signaler Partager Posté(e) le 8 septembre 2019 Je viens de tester, j'ai une erreur ligne 41, nil value. Lien vers le commentaire Partager sur d’autres sites More sharing options...
pepite Posté(e) le 9 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 11 septembre 2019 Signaler Partager 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 ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 11 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
ADN182 Posté(e) le 11 septembre 2019 Signaler Partager Posté(e) le 11 septembre 2019 Faut enlever le local dans la boucle "for", j'ai corrigé le post avec le code. Lien vers le commentaire Partager sur d’autres sites More sharing options...
BenjyNet Posté(e) le 11 septembre 2019 Signaler Partager 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 Lien vers le commentaire Partager sur d’autres sites More sharing options...
kioneoranga Posté(e) le 11 septembre 2019 Signaler Partager 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é Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés