[LUA] Mon script chauffage electrique

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
Stef17
Messages : 96
Inscription : 02 mai 2016, 21:10

[LUA] Mon script chauffage electrique

Message par Stef17 »

Bon voila mon premier script de prod.
Il concerne la gestion de mes radiateurs electriques.

Je remercie tout d'abord tous ceux qui on contribué à cette réalisation me mettant sur la bonne voie pour lever certain point bloquant.
En matos j'ai donc
1 module qui gere on off d'un radiateur par pièce
1 sonde température par pièce

J'ai 1 interrupteur virtuel "manuel" pour définir si on est en période de chauffage général
J'ai 1 interrupteur virtuel "manuel" pour définir si on est en période de chauffage exclusif pour la salle de bain (on ne supporte pas le froid dans cette pièce)
1 consigne de thermostat virtuel par pièce

J'ai fais le choix d'avoir 1 script time par pièce qui s’exécute toutes les 5 minutes et où on retrouve les variables de chaque pièce et un appel d'une fonction qui se trouve dans un fichier où j'aurais toutes mes fonctions utiles "mesfonctions.lua" (1 seule pour l'instant, celle des radiateurs).
J'ai choisis ce mode de fonctionnement car si je change d'avis sur les conditions ou fonctionnement je n'aurais qu'a changer ce fichier pour modifier mes 6 radiateurs.

Script : rien de foncièrement particulier pour le fonctionnement car tout se passe dans le fichier fonction. ici nous renseignement que les valeur local inhérente à la pièce.

Code : Tout sélectionner

commandArray = {}
time = os.date("*t")
if (time.min % 5 == 0) then
	-- Mettre sur true pour afficher les messages lors du debogague
	debug=false
	-- chemin ou se trouve le fichier de mes fonctions que j'appellerais
	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 gestion du chauffage avec arguments necessaire
	local resultat = resultat -- transformation en variable local au cas ou ;-)
	if(debug)then
		print('recection du resultat '..resultat..' pour la sonde '..sonde..' ') -- afficher resultat reçu de la fonctions
	end
end
return commandArray
Fichier où se trouve ma fonction de gestion des radiateurs (mesfonctions.lua)
Il n'y a que la fonctions gest_chauffage pour l'instant.
Il y aurait plusieurs possibilités bien sur pour faire cette fonction et bien plus simple c'est sûr... mais entre évolutivité, sécurité, compréhension pour mon petit cerveau... j'ai choisi ce qui suit ;-)

j'ai choisi dans un premiers temps de mettre les conditions qui corresponds à la période de chauffage en "On"

On commence par une vérification des températures pour voir si pour commencer il n'y a pas une gros incohérence (température vraiment trop basse ou vraiment trop haute) avec envoi de mail.

Puis selon les conditions on obtiens une variable "resultat" qui est en : On Off ou rien
Puis arrive le cas de la période de non chauffage
là on a un "resultat" de toute façon en Off (cela pourrait changer et avoir un choix en" rien"... a voir dans le futur)

... vérification aussi surtout pour voir s'il ne faudrait allumer le chauffage.

Puis enfin on applique le "resultat"
J'ai fait le choix d'une application du resultat à seul endroit de la fonction par simple commodité par rapport à ma façon de réfléchir.

Donc actuellement mes modules reçoivent toutes les 5 minutes un ordre de s'éteindre car nous ne sommes pas en période de chauffage.

Code : Tout sélectionner

-- Fonction pour savoir si on mets le radiateur en route
function gest_chauffage(minus,radiateur,periode,sonde,planning)
	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
	if(debug)then
		print("temperature reference de "..sonde.." est de "..consigne)
		print("temperature reelle du radiateur "..radiateur.." est de "..temp)
	end 
	if (otherdevices[periode] == 'On') then -- si c'est une periode de chauffage
		-- Alerte en cas de resultat incoherent en periode de chauffe
		if (temp < 16.5) then -- Aucune piece en dessous cette temperature dans mes parametrages
			commandArray['SendEmail']='Probleme temperature#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop basse#pubstef@francepolska.eu'
		elseif ((temp > 24) and (sonde ~= 'Temp_SDB')) then -- Aucune piece au dessus de cette temperature dans mes parametrages (hors salle de bain)
			commandArray['SendEmail']='Probleme temperature#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop haute#pubstef@francepolska.eu'
		elseif ((temp > 30) and (sonde == 'Temp_SDB')) then -- La salle de bain ne depasse jamais 30 meme quand madmae prend une mega douche
			commandArray['SendEmail']='Probleme temperature SDB#Alerte chauffage sur '..radiateur..' ou sur '..sonde..' car temperature trop haute#pubstef@francepolska.eu'
		end
		-- choix ordre au chauffage selon situation
		if (temp <= (consigne - minus)) then --il faut trop foid
			if (otherdevices[radiateur] == 'Off') then -- si le radiateur est sur Off
				resultat = 'On'
				if(debug)then
					print("Allumage du radiateu "..radiateur)
				end
			elseif (otherdevices[radiateur] == 'On') then -- si il est sur on
				resultat = 'rien' -- allumer le radiateur
				if(debug)then
					print("Chauffage "..radiateur.." deja en action") --rien faire
				end
			end 
		elseif (temp > consigne) then -- si trop chaud
			resultat = 'Off' -- eteindre chauffage
			if(debug)then
				print("Extinction du chauffage "..radiateur)
			end
		else -- autrement
			resultat = 'rien'
			if(debug)then
				print("Attente d'ordre sur "..radiateur) -- ne rien faire
			end
		end 
	else -- autrement
		resultat = 'Off' -- eteidre radiateur
		if(debug)then
			print("Hors periode de chauffage de "..radiateur)
		end
		-- Alerte en cas de resultat incoherent en HORS periode de chauffe car a c'est emperature on commence a chauffer
		if ((temp =< 16) and (sonde ~= 'Temp_SDB')) then -- autre que la salle de bain
			commandArray['SendEmail']='Periode de chauffage#Alerte chauffage la sonde '..sonde..' indique une temperature basse#pubstef@francepolska.eu'
		elseif ((temp =< 17) and (sonde == 'Temp_SDB')) then -- pour la salle de bain
			commandArray['SendEmail']='Periode de chauffage dans SDB#Alerte chauffage la sonde '..sonde..' indique une temperature trop basse pour la SDB#pubstef@francepolska.eu'
		end
	end
	-- execution de l'ordre selon resultat
	if resultat == 'On' then
		commandArray[radiateur]='On'
	elseif resultat == 'Off' then
		commandArray[radiateur]='Off'
	elseif resultat == 'rien' then
		if(debug)then
			print("Aucune manipulation necessaire sur radiateur "..radiateur)
		end
	end
	return resultat -- je renvoie le resultat
end
RaspberryPi2B+SD16GPNYclass10-RFlink firm1.1R41-domoticz 5877-6 sonde temp + une prise domotisé et 4 adaptateurs chaicon pour radiateur
helvete
Messages : 34
Inscription : 03 janv. 2016, 21:51
Localisation : dans les alpes

Re: Mon script chauffage electrique

Message par helvete »

salut,
je suis en train de me faire un script pour le chauffage et ton idée d'un script par piece et un autre pour les fonctions me plait bien.

Petite question : comment fais-tu un thermostat virtuel par pièce dans Domoticz (?), je ne trouve pas le bon interrupteur :(

helvete
newbe sur domoticz
PI2, RFX,
sondes oregon scientifique, chacon
helvete
Messages : 34
Inscription : 03 janv. 2016, 21:51
Localisation : dans les alpes

Re: Mon script chauffage electrique

Message par helvete »

j'ai trouvé : Régleages/Matériel/Créer capteurs virtuels.
Choisir Consigne du thermostat
newbe sur domoticz
PI2, RFX,
sondes oregon scientifique, chacon
Répondre