Page 1 sur 1
creation de fonctions personnelles ?
Publié : 09 juin 2016, 17:09
par Stef17
Encore bonjour a tous
Après recherches je ne trouve aucune réponse ni négative ni positive...
est il possible d'utiliser des fonctions que l'on aurait deja utilisé dans un autre script ou dans un fichier centralisant toute les fonctions ?
j'ai bien vue que dans lua il existe
pour creer une fonction dans un scripte... mais en fait peut on aller chercher une fonction autre part que dans le script ????
genre
mon script_time_XXX
Code : Tout sélectionner
local longueur = 1
local largeur = 3
local salaire = 1000
commandArray = {}
base = superficie(longueur, largeur) -- appel de la fonction superficie
sommedu = impot(base, salaire) -- appel de la fonction impot
print("vous devez la somme de "..sommedu)
return commandArray
puis dans un autre fichier mesfonctions
Code : Tout sélectionner
superficie = function(longueur, largeur) return longueur*lageur end --fontion superficie
impot = function(base, salaire) returne (base*salaire)/150 end --fonction superficie
bye
Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 17:40
par vil1driver
oui sans problème,
exemple ici dans la plupart de mes script je commence ainsi
Code : Tout sélectionner
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
package.path = package.path..";/home/vil1driver/domoticz/scripts/lua/?.lua"
require "modules"
cela me permet d'utiliser les fonctions du fichier
modules.lua
Code : Tout sélectionner
--[[
local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
package.path = package.path..";/home/vil1driver/domoticz/scripts/lua/?.lua"
require "modules"
--------------------------------------------------------------------------------------------------------
]]--
domoticzIP = "192.168.22.100"
domoticzPORT = "8080"
domoticzURL = "http://"..domoticzIP..":"..domoticzPORT
smsGatewayIP = "192.168.22.171"
smsGatewayPORT = "41047"
smsGatewayURL = "http://"..smsGatewayIP..":"..smsGatewayPORT
-- retourne l'heure actuelle ex: "12:45"
heure = string.sub(os.date("%X"), 1, 5)
-- retourne la date ex: "01:01"
date = os.date("%d:%m")
-- retourne l'heure du lever de soleil ex: "06:41"
leverSoleil = string.sub(os.date("!%X",60*timeofday['SunriseInMinutes']), 1, 5)
-- retourne l'heure du coucher de soleil ex: "22:15"
coucherSoleil = string.sub(os.date("!%X",60*timeofday['SunsetInMinutes']), 1, 5)
-- retourne le jour actuel en français ex: "mardi"
days = {"dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi"}
jour = days[(os.date("%w")+1)]
-- affiche les logs en bleu si debugging est valide
function log(txt,debugging)
if (debugging ~= false) then
print("<font color='#0206a9'>"..txt.."</font>")
end
end
-- encode du texte pour le passer dans une url
function url_encode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w %-%_%.%~])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
-- retourne le temps en seconde depuis la dernière manipulation du péréphérique
function timedifference(device)
s = otherdevices_lastupdate[device] or device
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-- création de variable
function creaVar(name)
commandArray['OpenURL']=domoticzIP..":"..domoticzPORT..'/json.htm?type=command¶m=saveuservariable&vname='..name..'&vtype=2&vvalue=NA'
end
Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 17:57
par Stef17
Donc je resume si j'ai bien compris...
dans
Code : Tout sélectionner
local debugging = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
package.path = package.path..";/home/vil1driver/domoticz/scripts/lua/?.lua"
require "modules"
c'est
qui envoie la demande l'utilisation du fichier modules.lua au chemin par defaut que tu indique avec
Code : Tout sélectionner
package.path = package.path..";/home/vil1driver/domoticz/scripts/lua/?.lua"
donc si j'utilise la variable heure... il utilisera bien le resultat se trouvant dans modules.lua ???
Ce qui veux dire que si je fais un script pour mes "différents" chauffages, apres mes variable local qui change pour chaque script je peux appeler ce genre de chose pour éviter de changer tout mes script du même genre au cas ou je change d'avis.... ????
Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 18:05
par vil1driver
expérimentes

Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 18:40
par Stef17
merci

Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 18:47
par Stef17
je fais cela cette nuit

Re: creation de fonctions personnelles ?
Publié : 09 juin 2016, 20:52
par Stef17
Plus rapide que prevu...
Fonctionnel mais a verifier avec plusieurs sonde et radiateur... je fais cela ce soir avec nouvelle sonde et switch virtuel a la place radiateur....
merci je mettrais mes resultats aprés...
Re: creation de fonctions personnelles ?
Publié : 10 juin 2016, 00:20
par Stef17
tout fonctionne a part le debug ... et on ne rigole pas ....
grace au fichier de fonctions cela me permettra de changer mes futurs 6 script en 1 seule modif si je change de fusil d'epaule pour la gestion des conditions d'envois d'ordre on ou off et ainsi minimiser le nombres des erreurs (de frappe ou coquille)
Et encore merci à vil1driver pour m'avoir mis sur les pistes concernant mes besoins...
alors le script pour la salle de bain script_time_radsdb.lua
Code : Tout sélectionner
commandArray = {}
time = os.date("*t")
if (time.min % 5 == 0) then
--Mode deboggage (affichage des messages)
debug=false
-- path
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
-------- variables fixes a changer selon piéces & modules---------
local minus = 1 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local radiateur = 'Prise_SecheServiette' --Nom du device radiateur à allumer/éteindre
local periode = 'Periode_Chauffe_SDB' --Switch manuel permettant de valider si on est en periode de chauffage de SDB
local sonde = 'Temp_SDB' -- sonde temperature/humidite salle de bain
local planning = 'Consignes_SDB' --themostat avec plannification pour le chauffage de la salle de bain
require "mesfonctions" -- appel du fichier ou sont stockees mes fonctions
gest_chauffage(minus,radiateur,periode,sonde,planning) -- appel de la fontion de gesstion du chauffage avec arguments necessaire
local resultat = resultat
print (resultat.." pour le radiateur "..radiateur)
end
return commandArray
le script de simulation de chambre de bebe script_time_radchambrekosma.lua
Code : Tout sélectionner
commandArray = {}
time = os.date("*t")
if (time.min % 5 == 0) then
--Mode deboggage (affichage des messages)
debug=false
-- path
package.path = package.path..";/home/pi/domoticz/scripts/lua/?.lua"
-------- variables fixes a changer selon piéces & modules---------
local minus = 1 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local radiateur = 'faux_rad_kosma' --Nom du device radiateur à allumer/éteindre
local periode = 'Periode_Chauffage_general' --Switch manuel permettant de valider si on est en periode de chauffage de SDB
local sonde = 'TempChambreKosma' -- sonde temperature/humidite salle de bain
local planning = 'ConsigneKosma' --themostat avec plannification pour le chauffage de la salle de bain
require "mesfonctions" -- appel du fichier ou sont stockees mes fonctions
gest_chauffage(minus,radiateur,periode,sonde,planning) -- appel de la fontion de gesstion du chauffage avec arguments necessaire
local resultat = resultat
print (resultat.." pour le radiateur "..radiateur)
end
return commandArray
et le fichier pour mettre mes fonctions (pour l'instant une seule

) mesfonctions.lua
Code : Tout sélectionner
-- Fonction pour savoir si on mets le radiateur en route
function gest_chauffage(minus,radiateur,periode,sonde,planning)
debug=false
local temp, hum = otherdevices_svalues[sonde]:match("([^;]+);([^;]+)") -- recuperation de la temperature de la sonde
local temp = tonumber(temp) -- mise au format chiffre
local consigne = otherdevices_svalues[planning] -- recuperation de la temperature du hermostat
local consigne = tonumber(consigne) -- mise au format chiffre
-- print("temperature reference de "..sonde.." est de "..consigne)
-- print("temperature reelle du radiateur "..radiateur.." est de "..temp)
if (otherdevices[periode] == 'On') then -- si c'est une periode de chauffage
if (temp <= (consigne - minus)) then --il faut trop foid
if (otherdevices[radiateur] == 'Off') then -- si le radiateur est sur Off
resultat = 'On'
-- print("Allumage du radiateu "..radiateur)
elseif (otherdevices[radiateur] == 'On') then -- si il est sur on
resultat = 'rien' -- allumer le radiateur
-- print("Chauffage "..radiateur.." deja en action") --rien faire
end
elseif (temp > consigne) then -- si trop chaud
resultat = 'Off' -- eteindre chauffage
-- print("Extinction du chauffage "..radiateur)
else -- autrement
resultat = 'rien'
-- print("Attente d'ordre sur "..radiateur) -- ne rien faire
end
else -- autrement
resultat = 'Off' -- eteidre radiateur
-- print("Hors periode de chauffage de "..radiateur)
end
if resultat == 'On' then
commandArray[radiateur]='On'
print("mise en chauffe du radiateur ")
elseif resultat == 'Off' then
commandArray[radiateur]='Off'
print("exctinction du radiateur ")
elseif resultat == 'rien' then
print("Aucune manipulation necessaire sur radiateur ")
end
return resultat
end