Tempo de thermostat

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 <\>.
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Tempo de thermostat

Message par Smat »

Bonjour,

Je me suis inspiré de pas mal de truc sur le web concernant les thermostats virtuels, ...

Bref, voici mon script :

commandArray = {}
local tempo = 0.5

if (devicechanged['Chauffage Mode Confort'] == 'On') then goto modeconforton
elseif (devicechanged['Chauffage Mode Confort'] == 'Off') then goto modeconfortoff
end
::modeconforton::
if (otherdevices['Chauffage Mode Confort'] == 'On' and otherdevices_svalues['Sonde Temp Int'] + tempo <= otherdevices_svalues['Temperature Consigne Confort']) then
print('-- Chauffage mode confort On --')
commandArray['Chaudiere']='On'
elseif (otherdevices['Chauffage Mode Confort'] == 'On' and otherdevices_svalues['Sonde Temp Int'] > otherdevices_svalues['Temperature Consigne Confort']) then
print('-- Chauffage mode confort Off --')
commandArray['Chaudiere']='Off'
end
::modeconfortoff::
if (otherdevices['Chauffage Mode Eco'] == 'On' and otherdevices_svalues['Sonde Temp Int'] <= otherdevices_svalues['Temperature Consigne Eco']) then
print('-- Chauffage mode Eco On --')
commandArray['Chaudiere']='On'
elseif (otherdevices['Chauffage Mode Eco'] == 'On' and otherdevices_svalues['Sonde Temp Int'] > otherdevices_svalues['Temperature Consigne Eco']) then
print('-- Chauffage mode Eco Off --')
commandArray['Chaudiere']='Off'
end
return commandArray

et j'ai comme retour : script_device_chauffage.lua:8: attempt to compare number with string

Pouvez-vous m'aider?? Merci d'avance
Dernière modification par Smat le 23 févr. 2015, 14:38, modifié 1 fois.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

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
Dernière modification par vil1driver le 30 janv. 2015, 14:02, modifié 1 fois.
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
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: Tempo de thermostat

Message par deennoo »

Sympa vos scripts de thermostat !

La regulation de température, c'est mon métier, et franchement cela ma fait c.... D'avoir une domotic qui ne gère pas le PID !

Le PID ccest ce qui permet réellement de faire des économies de chauffage, et apporte du confort !

J'ai un exemple pour arduino et un autre pour la verabox, celui qui les veux c est avec plaisir si il nous fait un méga super script !
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

Aucun intéret pour un particulier... Mais alors vraiment aucun.

De plus sans hyteresis, ce script, avec mes chauffages à inertie me donne un delta de température de 0.3°C ce qui est plus que correct pour un particulier.

Certe en PID (je peux te passer mon script) je parvenais à obtenir un delta de 0°C sur plusieurs heures.. Mais dès qu'il y avait perturbation extérieur c'était la merde.... Et je te parle pas du fait que nos chauffage ne sont pas réversibles, alors dès que la consigne passait en éco, le temps de laisser la température descendre, l'intégrale s'affolait, bref, bien trop d'emmerdes pour ne faire aucune économie au final (mesures à l'appui).

Au final la domotique me donne tout de même une température plus stable et des changements de consignes sans intervention de ma pare, c'est tout ce qui compte :)
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Tempo de thermostat

Message par Smat »

Merci,

Mais c'est une usine à gaz "pour moi" ton script. Je souhaiterais tout de même garder le mien, et pouvoir ajouter la tempo, mais comment??

Cependant, tu dis qu'il y a plein d'erreur? C'est à dire?? Peux-tu m'en dire plus?

Aujourd'hui il est à l'état virtuel, et je trouve que cela fonctionne pas trop mal. J'ai pas d'erreur, du moins je ne les constate pas.

De plus, ceci est une base, vu qu'il faut encore que j'ajoute des choses :

J'ai une pompe a chaleur, plus une chaudière gaz, je voudrais automatiser le tout par la suite. (électrovanne, et power ON et/ou OFF, suivant la température extérieur)

Merci de vos réponses
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

je ne sais même pas quoi te répondre ^^

le code est pas bon et la logique d’automatisme non plus, on ne comprends même pas ce qu'est ton TEMPO...
est-ce une adaptation d'hystérésis ?

as tu vraiment besoin de passer en confort à l'instant T ?

essai de comprendre mon script qui est tout simple, c'est un cas d'école. on à rien sans rien :p

ps : oublie les GOTO tu les utilises mal
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Tempo de thermostat

Message par Smat »

Oui la tempo est l'hystérésys.

Oui j'ai besoin de switcher facilement de l'état confort à l'état eco. Le but du jeu est également que cela soit le plus simple a exploiter (par des non informaticiens)

Tu me redis, ton code n'est pas bon, OK, je ne suis pas un codeur né, mais pourquoi???? Tu ne donnes pas de correction possible a partir de ce code.

Le GOTO me permet de ne pas imbriquer plusieurs conditions (si, elesif, elesif, ...)
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Tempo de thermostat

Message par Smat »

vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

je me suis basé sur cet article également, j'ai du mal à voir que tu t'en es inspiré :o

j'ai juste rempli le début comme c'est marqué et ça a fonctionné, pourquoi n'as tu pas fait de même ?

j'ai ensuite agrémenter son script pour avoir 4 consignes suivant le moment de la journée
et viré cet hysteresis qui ne sert à rien à pare faire des montagne russes avec la température (cause d'inconfort) et sur-consommer
et j'ai ajouté la remontée de conso sur un capteur virtuel (le pied)

t'as juste à créer les switchs virtuels (un seul suffi, son état On=confort et Off=éco) et à renseigner leurs noms et les températures voulues au début du script, rien d'autre à faire pour que cela fonctionne (pas besoin d'être un codeur né) tu bloques là dessus ?

pour revenir à ton script,

ceci n'est valide que lorsque 'Chauffage Mode Confort' change d'état, le reste du temps on passe par dessus...
et lorsque ça renvoi vers modeconforton tu ne clos pas le script et modeconfortoff est exécuté à suivre...
tout ceci est inutlie dans ton script

Code : Tout sélectionner

if (devicechanged['Chauffage Mode Confort'] == 'On') then goto modeconforton
elseif (devicechanged['Chauffage Mode Confort'] == 'Off') then goto modeconfortoff
end
ton tempo, tu ne l'utilises qu'une fois et même pas sur la consigne, faudra m'expliquer ta logique...

lorsqu’on nous livre sur un plateau quelque chose de simple, je ne comprends pas pourquoi vouloir faire différemment surtout si l'on est pas à l'aise avec cet exercice.
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
Smat
Messages : 40
Inscription : 29 janv. 2015, 14:53

Re: Tempo de thermostat

Message par Smat »

Je vois que tout de même tu commences un peu a comprendre ma démarche, le but d'un forum est d'aider, pas de critiquer le choix qui en est fait.

Je prends note effectivement que si je suis en ON confort (cela découle OFF eco) et vice-versa.

Tu pourras prendre note par contre que je n'ai aucune valeur fixe (hormis la tempo ou hystérésys) ce ne sont que des variables (températuresetpoint, ...)

Ensuite, la tempo n'est utilisé que pour la hausse de température (maximum 20.5°) donc, je chauffe jusqu'à cette température, et recommence à 19.9°.

Pourquoi ne pas utiliser le tien, parce que tout simplement, si je veux le modifier ou l'adapter, je ne saurais pas comment faire. Sachant que ce n'est que le début de ce script (amélioration a prévoir, électrovanne, ...)

Mon script est basé sur le planning des interrupteurs virtuels :

Je planifie mes plages de chauffe, mais je souhaite pouvoir passer outre (présence imprévu, ...)

C'est pour cela que j'insiste bien sur le fait d'améliorer mon script

MERCI
Répondre