Page 2 sur 3

Re: Tempo de thermostat

Publié : 02 févr. 2015, 12:33
par vil1driver
le script d'alexandredubois est hyper simple à comprendre je trouve.

tu devrais plutôt demander si tu ne comprends pas quelque chose car sinon je ne vois absolument pas ce qui te manque.

au début il met

Code : Tout sélectionner

local consigne = 20  --Température de consigne
j'ai bien vu que tu utilisais les températuresetpoint, et bien tu vire le 20 et tu met ta commande à la place ....

Code : Tout sélectionner

local consigne = tonumber(otherdevices_svalues['Temperature Consigne Confort'])  --Température de consigne
et voila c'est à ton gout...

tout est comme ça, tu enlèves, ajoute remplace... au moins si ça ne fonctione plus tu sais que c'est ta dernière modif qui coince, c'est à ça que ça sert de partir d'une base saine...

du moment que tu comprends l'usage des variables, à quoi sert if, else, and, or, otherdevice, deviceChanged etc.... tu peux adapter comme bon te semble.

dans ton premier message tu viens avec une erreur de comparaison entre un nombre et une chaine de caractère (ex: 19 < "20")

Code : Tout sélectionner

script_device_chauffage.lua:8: attempt to compare number with string
je résou cette erreur dans mon script, as tu cherché à voir comment j'obtenais la température pour ne pas avoir cette erreur ?
il faut transformer la chaine en nombre, avec la fonction tonumber(), il existe aussi l'opposé tostring().

Code : Tout sélectionner

local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée
j'ai commenté tout le code pour qu'il soit simple à comprendre.


il utilise l'hystérésis sur la baisse ou la hausse, mais rien ne t'empêche de modifier ceci

Code : Tout sélectionner

if (temperature < (consigne - hysteresis) ) then
en ceci

Code : Tout sélectionner

if (temperature < consigne ) then
ça te semble simple ou pas ?


si tout mon système d'automatisation de consigne ne te convient pas, effaces simplement cette partie du code....

tu as absolument tout sous la main pour faire ce que tu veux faire, mais si tu bloque sur quelque chose, dis le..

ceci par exemple est clair pour toi ?

Code : Tout sélectionner

local today = os.date("%A")
if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On') then
      consigne_conf = consigne_conf_weekend
   else
      consigne_conf = consigne_conf_semaine
   end

Re: Tempo de thermostat

Publié : 02 févr. 2015, 13:21
par Smat
Eh bien en voila une réponse constructive!!!!! Ça je dis OUI!!!!!!!
J'y regarde ce soir, je te tiens au courant.

Merci

Re: Tempo de thermostat

Publié : 03 févr. 2015, 16:26
par Smat
Donc, après quelques recherches et commentaires, cela donne ca :

Code : Tout sélectionner

commandArray = {}
if (devicechanged['Sonde Temp Int']) then
local temperature = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
    if (otherdevices['Chauffage Mode Confort']=='On') then
        print('-- Mode Confort ON --')
    	if (temperature < (consigneconfort - hysteresis) ) then
            print('Allumage du chauffage')
            commandArray['Chaudiere']='On'
	    elseif (temperature > (consigneconfort + hysteresis)) then
	        print('Extinction du chauffage')
            commandArray['Chaudiere']='Off'
	   	end
	elseif (otherdevices['Chauffage Mode Confort']=='Off')then
	        print('-- Mode Eco ON --') 
	    if (temperature < (consigneeco - hysteresis) ) then
            print('Allumage du chauffage')
            commandArray['Chaudiere']='On'
	    elseif (temperature > (consigneeco) then
	        print('Extinction du chauffage')
            commandArray['Chaudiere']='Off'
        end
    end
end
return commandArray

Est-ce que cela est mieux??

Re: Tempo de thermostat

Publié : 03 févr. 2015, 19:52
par vil1driver
alors OUI nettement mieux :p c'est prèsque sans faute....

une parenthèse de trop avant le dernier consigneeco, pas bien méchant mais bloquant =)

et tu as oublié de déclarer tes variables consigneconfort, consigneeco et hysteresis.

donc après correction ça donnerait ceci :

Code : Tout sélectionner

local consigneconfort = tonumber(otherdevices_svalues['Temperature Consigne Confort'])  
local consigneeco = tonumber(otherdevices_svalues['Temperature Consigne Eco'])  
local hysteresis = 0.5

commandArray = {}
if (devicechanged['Sonde Temp Int']) then
local temperature = tonumber(string.sub(otherdevices_svalues['Sonde Temp Int'],1,4))
    if (otherdevices['Chauffage Mode Confort']=='On') then
        print('-- Mode Confort ON --')
       if (temperature < (consigneconfort - hysteresis) ) then
            print('Allumage du chauffage')
            commandArray['Chaudiere']='On'
       elseif (temperature > (consigneconfort + hysteresis)) then
           print('Extinction du chauffage')
            commandArray['Chaudiere']='Off'
         end
   elseif (otherdevices['Chauffage Mode Confort']=='Off')then
           print('-- Mode Eco ON --') 
       if (temperature < (consigneeco - hysteresis) ) then
            print('Allumage du chauffage')
            commandArray['Chaudiere']='On'
       elseif (temperature > consigneeco) then
           print('Extinction du chauffage')
            commandArray['Chaudiere']='Off'
        end
    end
end
return commandArray

voila qui devrait être fonctionnel.

Re: Tempo de thermostat

Publié : 03 févr. 2015, 21:34
par Smat
En tout cas, merci,

Les variables, je ne les ai pas copié mais elles sont bien la, et effectivement, la parenthèse est de trop, je l'ai corrigé!!!

C'est un bon début, il faut que j'ajoute a cela deux électrovannes, un capteur extérieur, ... Pour automatiser le fonctionnement pompe a chaleur, relève chaudière gaz au-dessus ou en dessous d'une température suivant le COS.

Tu vois qu'au final, on se comprends!!!!!! C'est le principal

Re: Tempo de thermostat

Publié : 07 févr. 2015, 10:46
par Smat
Résolu

Re: Tempo de thermostat

Publié : 09 mars 2015, 23:04
par mulot35
vil1driver a écrit :salut,

il y a de nombreuses erreurs dans ton script...

voici le mien, il fonctionne impec, fait toi plaisir =)

Code : Tout sélectionner

-- Ce script permet de maintenir la température
 
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_conf_semaine = 19  -- Température de consigne confort en semaine
local consigne_conf_weekend = 20  -- Température de consigne confort le weekend
local consigne_eco = 17  -- Température de consigne économique
local consigne_abs = 15  -- Température de consigne lors d'abscence prolongée

local sonde = 'salon' -- Nom de la sonde de température
local mode = 'ampli' -- Nom de l'interrupteur virtuel de sélection de mode Off=eco On=confort
local thermostat = 'thermostat' -- Nom de l'interrupteur virtuel de thermostat (Off=abscence prolongée)
local boost = 'boost'	-- Nom de l'interrupteur virtuel de de forçage de la consigne en mode weekend

local radiateur = 'radiateur cuisine' -- Nom de l'interrupteur de chauffage
local puissance = 2700	-- puissance du chauffage en watt
local conso = 'conso salon'	-- nom du capteur virtuel de consommation électrique
local conso_id = 107	-- idx du capteur virtuel de consommation électrique

--------------------------------
-- Fin des variables à éditer --
--------------------------------
 
time = os.date("*t")  

-- on regarde depuis combien de temps l'inter de mode à changé d'état
t1 = os.time()
s = otherdevices_lastupdate[mode]
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)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = (os.difftime (t1, t2))

commandArray = {}
	
	local today = os.date("%A")
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde],1,4)) -- Température relevée
	
	if (today == "Saturday" or today == "Sunday" or otherdevices[boost] == 'On') then
		consigne_conf = consigne_conf_weekend
	else
		consigne_conf = consigne_conf_semaine
	end
	
	-- si le thermostat général est actif
    if (otherdevices[thermostat] == 'On') then
		-- si il y a présence ou abscence depuis moins d'une heure, la journée
        if (otherdevices[mode] == 'On' or (otherdevices[mode] == 'Off' and difference < 3600 and time.hour >= 7 and time.hour < 23)) then 
			consigne = consigne_conf
			else
			consigne = consigne_eco
		end
	else
			consigne = consigne_abs
	end	
	
	if (temperature < consigne) then
   
		--commandArray[radiateur]='On'
		commandArray[1]={['radiateur salon']='On'}	
		commandArray[2]={['radiateur cuisine']='On'}
		print('Chauffage salon -. ON .-')
		
						
		-- envoie de la conso dans le capteur virtuel d'énergie
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		energy = tonumber(energy) + (puissance / 60) 	
		commandArray['UpdateDevice'] = conso_id .. '|0|' .. puissance .. ';' .. energy	
		
		        
    else
		
		--commandArray[radiateur]='Off'
		commandArray[1]={['radiateur salon']='Off'}	
		commandArray[2]={['radiateur cuisine']='Off'}
		print('Chauffage salon -. OFF .-')
		
			
		-- envoie de la conso dans le capteur virtuel d'énergie
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		energy = tonumber(energy)
		commandArray['UpdateDevice'] = conso_id .. '|0|' .. 0 .. ';' .. energy	
		
	end

	print('il fait '..temperature..'°C pour '..consigne..'°C souhaité')
		
return commandArray
ah oui j'oubliait, mon script se nome scrip_time_chauffage.lua

time est important, ce script est du coups exécuté toutes les minutes

ps : pas de 'devicechanged' dans un script time
Merci pour ton excellent script.
Mérite vraiment un tuto pour les débutants.(je peut m'en occupé si tu est d'accord).
Et une petite question:
Est il possible d'avoir un capteur de conso virtual qui totalise toute les consos des radiateurs?

Re: Tempo de thermostat

Publié : 10 mars 2015, 03:33
par vil1driver
Salut,

Pas de problème pour le tuto, mais il y a tellement de possibilté de script... D'ailleurs mon script à évolué et toute la gestion de consigne est différente aujourd'hui.
Je peux poster la nouvelle version si tu veux, basée sur des capteurs PIR et setpoint thermostat.

Pour regrouper les consos, oui biensure.

Re: Tempo de thermostat

Publié : 10 mars 2015, 09:41
par mulot35
-oui je l'ai passé aussi avec les setpoint thermostat. (Que tu a mentionné un peut plus tot).
-Et sinon a tu une idée pour le capteur de conso virtual qui totalise toute les consos des radiateurs ?
-Je vais donc faire un petit tuto dans le mois.

Re: Tempo de thermostat

Publié : 10 mars 2015, 12:56
par vil1driver
résumé ici