Rechercher dans la communauté
Affichage des résultats pour les étiquettes 'os.date'.
2 résultats trouvés
-
Tuto HC2 Scene Lua - Trigger Horaire Sans Boucle While ... Do
mprinfo a posté un sujet dans Tutoriels
Objectif : Crée des déclencheurs (trigger) toutes les 30mn sans avoir besoin de faire une boucle "while true do" afin de mettre a jours 2 variables globale qui nous servirons a déclencher des scènes. Méthode : Utiliser la variable Globale que l'on mets a jour pour lancer la scèneVariable Globale a créée : Heure DemiHeure Ce script va mettre a jour : La variable DemiHeure sera mis a jour à chaque fois que les minutes seront égales a 0 ou 30 La variable Heure sera mis a jour si les minutes sont égale à 0 Nous aurons donc 1 déclenchement par heure pour la VG: Heure et 2 déclenchements par heure pour la VG DemiHeure Voici le script (a copier dans une scène) : --[[ %% autostart %% globals DemiHeure --]] local Minutes = tonumber(os.date("%M", os.time())) local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'autostart') then fibaro:setGlobal("DemiHeure", "0"..Minutes) fibaro:debug("Demarrage via autostart") fibaro:abort() end fibaro:debug("Demarrage en cours...") local NbreScene = fibaro:countScenes() fibaro:debug("Nombres de Scéne en cours : "..NbreScene) fibaro:sleep(60*1000) local Pause = 0 if Minutes > 30 then Pause = 60 - Minutes else Pause = 30 - Minutes end fibaro:debug("Mise a jour Variable : "..Pause.."mn") fibaro:sleep(Pause*60*1000) Minutes = tonumber(os.date("%M", os.time())) fibaro:debug("mise a jour VG DemiHeure"..Minutes) fibaro:setGlobal("DemiHeure", Minutes) if Minutes == 0 then local Heure = tonumber(os.date("%H", os.time())) fibaro:setGlobal("Heure", Heure) fibaro:debug("mise a jour VG Heure"..Minutes) end Exemple d'utilisation : Je veux que ma scène se lance à 17h --[[ %% globals Heure --]] local heure = fibaro:getGlobalValue("Heure") if heure ~= 17 then; fibaro:abort(); end fibaro:debug("le script peut être exécuté ") Un peut plus compliquer --[[ %% globals DemiHeure --]] local trigger = fibaro:getSourceTrigger() if (trigger['type'] == 'global') then nomTrigger = trigger['name'] valeurTrigger = tonumber(fibaro:getGlobalValue(nomTrigger)) print("Nom du déclencheur = ", nomTrigger, " - Minutes : ", valeurTrigger) if valeurTrigger ~= 17 then; fibaro:abort(); end else fibaro:debug("La scéne ne peut être lancer que par une Variable Globale") fibaro:abort(); end if nomTrigger="Heure" and valeurTrigger ~= 17 then fibaro:abort() end -
Tuto HC2 Lua - Classer Les Jours Du Mois Par Nom (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche)
mprinfo a posté un sujet dans Tutoriels
Classer les jours du Mois par nom (Lundi, Mardi, Mercredi, Jeudi, Vendredi, Samedi, Dimanche) Ce script permet de classer les jours du mois par le nom du jour. le but de ce script est de permettre de retrouver le x jour d'un mois ou tous les jours qui ont le même nom Exemple : je veux le 3 mardi du mois je veux tous les jeudi du mois Si vous sauvegardez la table Jours dans une variable globale il faudra exécuter ce script tous les 01 de chaque mois vers 00h01 ---------------------------------------------------------------------- -- Calcul du nombre de jours dans le mois ---------------------------------------------------------------------- -- Si année bissextile local function bissextile(Annee) return Annee % 4 == 0 and (Annee % 100 ~= 0 or Annee % 400 == 0) end -- Nombre de jours dans le mois function JourDansMois(Mois, Annee) return Mois == 2 and bissextile(Annee) and 29 or ("\31\28\31\30\31\30\31\31\30\31\30\31"):byte(Mois) end ---------------------------------------------------------------------- -- Initialisation des variables et creation des tables ---------------------------------------------------------------------- local MoisAnnee = os.date("*t") local mois = MoisAnnee.month -- recuperation du mois en cours local annee = MoisAnnee.year -- recuperation de l'annee en cours local Jmois = JourDansMois(mois, annee) -- calcul le nombre de jour dans le mois en cours local Jours = {["Lundi"]={}, ["Mardi"]={}, ["Mercredi"]={}, ["Jeudi"]={}, ["Vendredi"]={}, ["Samedi"]={}, ["Dimanche"]={}} local JourNom = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"} ---------------------------------------------------------------------------------- for jour = 1,Jmois do local tmpdate = (os.time{year = annee, month = mois, day = jour}) local tmpJourMois = os.date("%d", tmpdate) -- recupere le jour du mois local tmpJourSemaine = tonumber(os.date("%u", tmpdate)) -- Numero du jour de la de semaine local tmpJourNom = JourNom[tmpJourSemaine] -- recupere le nom du jour en francais table.insert(Jours[tmpJourNom], tmpJourMois) --fibaro:debug("Jour = "..tmpJourMois.." "..tmpJourNom) end ----------------------------------------------------------------------- -- Affichage ----------------------------------------------------------------------- print(os.date("Aujourd'hui, nous sommes un %A")) fibaro:debug("Nombre de Jours dans le mois "..Jmois) for i = 1,7 do local jour = JourNom[i] fibaro:debug(jour) for j = 1,#Jours[jour] do fibaro:debug(Jours[jour][j]) end end -- Exemple d'utilisation -- Ici on affiche le 2 lundi du mois local toto = "Lundi" fibaro:debug(Jours[toto][2]) -- ici on affiche le 3 lundi du mois fibaro:debug(Jours.Mardi[3]) On peut sauvegarder la table Jours dans une variable globale afin de l'utiliser dans d'autres scripts (il faudra créer la variable globale) -- Sauvegarde des jours de la semaine dans la variable globale JoursSemaine fibaro:setGlobal('JoursSemaine',json.encode(Jours)) On peut récuperer cette table dans un autre script -- Récupération des jours de la semaine de la variable globale JoursSemaine Jours=json.decode((fibaro:getGlobal('JoursSemaine'))); Utilisation dans un Script ------------------------------------- -- Exemple d'utilisation -- ------------------------------------- -- Ici on affiche le 2 lundi du mois local toto = "Lundi" --Affichage fibaro:debug(Jours[toto][2]) ---------------------------------------------------------------------------------------------- -- ici on affiche le 3 Vendredi du mois local Vendredi3 = Jours.Vendredi[3] --Affichage fibaro:debug(Vendredi3) ---------------------------------------------------------------------------------------------- -- Ici on récupere tous les mardi du mois sous forme de table local Mardi = Jours.Mardi --Affichage for i = 1,#Mardi do fibaro:debug(Mardi[i]) end ---------------------------------------------------------------------------------------------- -- Connaitre le nombre de Samedi dans le mois local NombreSamedi = #Jours.Samedi --Affichage fibaro:debug("Nombre de mardi = "..NombreSamedi) ---------------------------------------------------------------------------------------------- --Recuperer le 3 et 4 jeudi du mois local Jeudi = {Jours.Jeudi[3], Jours.Jeudi[4]} --Affichage for i = 1,#Jeudi do fibaro:debug("Jeudi "..Jeudi[i]) end Voici une version Virtual Device : Fichiers virtual device : Jours_Semaine.vfib