creation de fonctions personnelles ?

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

creation de fonctions personnelles ?

Message 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

Code : Tout sélectionner

function_name = function( arguments ) corps end 
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
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: creation de fonctions personnelles ?

Message 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&param=saveuservariable&vname='..name..'&vtype=2&vvalue=NA'
end

MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

Re: creation de fonctions personnelles ?

Message 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

Code : Tout sélectionner

require "modules"
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.... ????
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: creation de fonctions personnelles ?

Message par vil1driver »

expérimentes ;)
MAJ = VIDER LE CACHE(<-Clicable)
/!\Les mises à jour de Domoticz sont souvent sources de difficultés, ne sautez pas dessus
modules.lua

Un ex domoticzien
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

Re: creation de fonctions personnelles ?

Message par Stef17 »

merci ;)
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

Re: creation de fonctions personnelles ?

Message par Stef17 »

je fais cela cette nuit ;-)
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

Re: creation de fonctions personnelles ?

Message 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...
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

Re: creation de fonctions personnelles ?

Message par Stef17 »

tout fonctionne a part le debug ... et on ne rigole pas .... :lol:

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
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
Répondre