Aller au contenu

SNIPPET lua sous forme de function pour HC3


Messages recommandés

Posté(e)

Bout de code lua sous forme de function pour HC3

 

J'ouvre ce topic pour le partage de bout de code ( Snippet )

 

Definition https://fr.wikipedia.org/wiki/Snippet

 

Il n'y aura aucun support on partage juste un Snippet qui fonctionne

1 seul smippet par post

il faudra que le code soit commenté au maximum et on privilégie le français

la présentation du snippet doit etre identique a la présentation que je vais faire poste 2

 

si vous avez des idées sur la présentation je suis preneur

 

C'est idée avait déjà était évoquer pour la HC2 elle vient donc de notre ami @steven

 

@steven il y aura probablement beaucoup de code qui seront adapté de tes scripts car tu m'as appris beaucoup je ne peux donc de citer a chaque fois

 

 

  • Like 3
Posté(e)
Création Variable Globale 

 

-- -------------------------------------------------------------------
-- Création Variable Globale si non presente  
-- -------------------------------------------------------------------
function ajouter(nom, valeur, enumValeur, lecture)
    if (fibaro.getGlobalVariable(nom) == "") then -- Test si la variable existe
       fibaro.getGlobalVariable("")
       local data = {
                name = nom,
                value = valeur,
                readOnly = false,
                isEnum = false
             }
       --------------------------------------------------------------
       -- si lecture = oui alors la variable sera en lecture seule
       --------------------------------------------------------------
       if lecture == "read" then
          data.readOnly = true
       end
       --------------------------------------------------------------
       -- si la variable est une variable enumeree
       --------------------------------------------------------------
	   if (type(enumValeur) ~= "nil") then
           data.value = enumValeur[1]
		   data.isEnum = true
           data.enumValues = enumValeur
	   end    
       --------------------------------------------------------------
       -- creation de la variable a partir de la table "data"
       -------------------------------------------------------------
       print(json.encode(data))
       api.post("/globalVariables/", data)
    
    else
       print("la variable : ", nom, "existe")
    end
end

 

Utilisation :

 

  • création d'une variable standard
ajouter("nom", "valeur")
  • création d'une variable enumeree
ajouter("nom", "", {"oui", "nom"})
  • création d'une variable standard en lecture seule
ajouter("nom", "valeur", "read")
  • création d'une variable enumeree en lecture seule
ajouter("nom", "", {"oui", "nom"}, "read")
  • Sous forme de table avec un ajout de plusieurs variable automatique
local variables = {
      {nom = "JoursSemaine", valeur = "0"}, 
      {nom = "Heure_Saison", enumValeur = {"Ete", "Hivers", "Printemps"}, lecture = "read"},
      {nom = "toto", valeur = "68"}
}  

-----------------------------------------------
-- execution de la fonction a partir des tables
-----------------------------------------------
for _,v in ipairs(variables) do
	ajouter(v.nom, v.valeur, v.enumValeur, v.lecture)
end

 

  • Like 4
Posté(e)

Convertir une date-heure, au format, "jj/mm/aaaa hh:mm:ss" en un TimeStamp

 

--[[-------------------------------------------------------------------
	Convertion d'une Date/Heure en TimeStamp
---------------------------------------------------------------------]]
function StringToTimeStamp(value)
	--extrait chaque valeur de la chaine dans des variales spécifiques
	day,month,year,hour,min,sec = string.match(value, "(%d+)/(%d+)/(%d+) (%d+):(%d+):(%d+)")

	--renvoie la valeur sous forme de chaine de caratères
	return tostring(os.time({day=day,month=month,year=year,hour=hour,min=min,sec=sec})))
end

 

utilisation :

 

print(StringToTimestamp("09/05/2020 20:37:15"))

Résultat :

 

1589056635

 

 

 

  • Like 3
  • Thanks 1
Posté(e)

Split une chaîne de caractères

 

--[[---------------------------------------------------------
	Split une chaine de caractères
-----------------------------------------------------------]]

function Split(s,sep)
	local t = {}	--tableau recevant toutes les occurences de la chaine "s"
  
	--extrait toutes les occurences séprarées par le séparateur "sep"
	--et les ajoute dans le tableau
	for v in string.gmatch(s, "[^"..sep.."]+") do table.insert(t, v) end
  
	--renvoie le tableau t sous forme de chaine de caractères JSON
	return json.encode(t)
end

 

Utilisation

 

MonResultat = Split("ma_chaine_à_spliter","_")
print("Résultat brut : ", MonResultat)

print("affichage de tout le contenu :")
for k,v in pairs(json.decode(MonResultat)) do print(v) end

--ou encore :
print("affichage de la deuxième occurence : ", MonResultat[2])

 

Résultat

 

Résultat brut : {"ma", "chaine", "à", "spliter"}

affichage de tous les éléments :
ma
chaine
à
spliter

affichage de la deuxième occurence : chaine

 

  • Like 3
  • Thanks 1
Posté(e)

le nombre de jours dans un mois 

 

----------------------------------------------------------------------
-- 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

Utilisation

 

local mois = 2
local annee = 2020
local Jmois = JourDansMois(mois, annee) 
print ("Nombre de jours dans le mois",Jmois)

Résultat

[DEBUG] [SCENE22]: Nombre de jours dans le mois 29

 

  • Like 2
×
×
  • Créer...