Aller au contenu

Messages recommandés

Posté(e)

Testez moi ça, normalement si je ma pas gouré ça doit marcher.

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, getDateFormat(Start_date).." - "..getDateFormat(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
  local date1   = string.match(v, "(%d+)%s");
  local date2   = string.match(v, "-%s(%d+)%s");
  local libelle = string.match(v, "|%s(.+)");
  fibaro:call(fibaro:getSelfId(), "setProperty", "ui.Label"..k..".value", os.date("%d.%m.%Y", date1) .. " - " .. os.date("%d.%m.%Y", date2) .. " | " .. libelle)
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

 

Posté(e)

ça marche pas :-)

 

Erreur ligne 34

  year,month,day = sdate:match("(%d+)-(%d+)-(%d+)")

 

  [ERROR] 21:35:19: line 34: attempt to index local 'sdate' (a number value)

Posté(e)

Oui mais sans utiliser le jour/mois de basculement. Faudrait que cette date se mette à jour et corresponde au jour de la rentrée + 1, qui change tous les ans. J'ai peur qu'en codant une date en dur on ne soit plus considéré en vacances entre le 31/08 et le 03/09 par exemple.

  • Like 1
Posté(e)

Bonjour bonjour,

 

Le fichier renvoie la date de rentree ? pas vu :-(

 

Demande modif @ADN182

En cas e vacances, on peut peut-etre rajouter cela : "En Vacances" si je suis en vacances, ca permet de recuperer l'info des vacances depuis n'importe où, GEA ou autre  ;-)

 if holiday then
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.today.value", "Oui")
     fibaro:call(fibaro:getSelfId(), "setProperty", "ui.status.value", "En Vacances")

 

Posté(e) (modifié)

Hello, 

 

J'ai pas tout compris, il faut créer une scène aussi avec ce VD ? Je ne vois pas de code. 

Est-ce que ça fonctionne sans GEA ? 

 

[EDIT] J'ai une erreur a la ligne 176...

 

Merci,

bug_vacs.png

Modifié par mikael2235
Posté(e)

Je ne sais pas si il y a un bug dans le code ou pas, mais la dernière date de vacances qu'il trouve, ce sont les vacances d'été 2019.

J'ai rajouté des debug pour essayer de comprendre, ça marche sans erreur, mais le code est bizarre

vacs.png

Posté(e)

Parfait !! Tout fonctionne bien maintenant ! Un grand merci pour votre aide. 

J'ai juste changer les noms des labels dans les VD, mais c'est un détail ça :-)

  • Like 1
Posté(e)

Dommage, il va me falloir faire plusieurs scènes. une pour chaque enfants qui ne sont pas dans la même zone. Alors qu'avant il suffisait de faire un deuxième VD en changent le département.

×
×
  • Créer...