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 <\>.
mulot35
Messages : 200
Inscription : 20 déc. 2014, 00:27

Re: Tempo de thermostat

Message par mulot35 »

Dans ton script tu envoie la conso a un capteur virtuel:

Code : Tout sélectionner

 -- envoie de la conso dans le capteur virtuel d'énergie
   commandArray['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy


du coup je peut l'envoyer a deux capteur virtuel via:

Code : Tout sélectionner

 -- envoie de la conso dans le capteur virtuel d'énergie local
   commandArray['UpdateDevice'] = conso_id .. '|0|' .. power .. ';' .. energy
 -- envoie de la conso dans le capteur virtuel d'énergie global
   commandArray['UpdateDevice'] = conso_id2 .. '|0|' .. power .. ';' .. energy


ca devrai marché,non?
Raspi B+ avec Domoticz ,6 Chacon 2300W , 6 Sondes Oregon, 1 Sonde DIY Oregon ds18b20, Téléinfo sur photovoltaique, script backup ftp & anti offline.
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

quel intérêt d'envoyer la même info dans 2 capteurs différents ?

je pensais avoir compris que tu voulais un seul capteur enregistrant la conso de plusieurs radiateurs ??

sinon non, ton code ne fonctionne pas, tout comme une lampe, tu ne peux envoyer 2 commandes identique à suivre de cette façon.
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
vil1driver
Messages : 5661
Inscription : 30 janv. 2015, 11:07
Localisation : Rennes (35)

Re: Tempo de thermostat

Message par vil1driver »

svp, peux tu continuer sur l'autre sujet ?
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
oula85
Messages : 161
Inscription : 29 avr. 2015, 18:09
Localisation : Challans

Re: Tempo de thermostat

Message par oula85 »

mulot35 a écrit :
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?
Fonctionne au top aussi pour connaitre la conso de son chauffe eau .
créer interrupteur virtuel avec les heures creuses --> puis compteur virtuel --> puis script_time lua --> ( conditions : CM180 , si CM180 > supérieur à la conso du Chauffe eau et interrupteur virtuel heures creuses alors incrémentation du compteur )

Cela fonctionne chez moi car j'ai temporisé la mise en marche du chauffe eau à 1h du matin ce qui me permet de faire tourner mes machines avant ce qui n'induit que le fonctionnement du chauffe eau pour mon calcul entre 1h et 4h du matin

à valider aussi cet hiver ou des radiateurs pourront se déclencher aussi pendant le laps de temps mais l'été je suis serein il ne mesurera que le Chauffe eau
balajol
Messages : 864
Inscription : 13 nov. 2015, 18:54
Localisation : 62

Re: Tempo de thermostat

Message par balajol »

Bonsoir à tous,
J'essaye d'adapter le scipt de Vil1driver pour mon usage (chaudière gaz)
J'arrive à peu près à mes fins hormis le choix entre 2 sondes de mesure de T°à partir de l'état d'un interrupteur nommé "Sonde_T_Off_Salon_On_Cuisine_Domo"

Voila la porsion de code:

Code : Tout sélectionner

commandArray = {}
   
   local today = os.date("%A")
   if (otherdevices[Sonde_T_Off_Salon_On_Cuisine_Domo] == 'On') then
   local temperature = tonumber(string.sub(otherdevices_svalues[sonde_cuisine],1,4)) -- Température relevée sonde cuisine
   else
   local temperature = tonumber(string.sub(otherdevices_svalues[sonde_Salon],1,4)) -- Température relevée sonde salon
   end
   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
   
      --Chaudiere en Marche (Chauffe)  si Sortie à off (Contact thermostat sur carte chaudiere fermé)
      
    commandArray['Coupure-Thermostat-Chaudiere(On:Arret)'] = 'Off'
      
      print('Marche Chaudiere -. Marche .-')
    
   
J'ai un message d'erreur dans les LOGS:
Erreur-thermostat.JPG
Erreur-thermostat.JPG (124.23 Kio) Consulté 5685 fois
Si j'utilise chaque sonde indépendamment de l'autre , le script fonctionne.
La ligne 63 est:

Code : Tout sélectionner

  if (temperature < consigne) then
Je sèche depuis plusieurs Heures, Merci de votre aide éventuelle en retour .
Cordialement
Bertrand
2024.6 PC Windows10 ; 2ème DEBIAN 10;DANFOSS LC13, Topp; Senseurs univ FIBARO FGBS001, Flood Sensor, ZMNHBD1 Flush 2 Relays ; FIBARO FGS222-FGS212;RFXCOM-RFXtrx433 USB 433.92MHz , Prises Phénix, Prises et Eclairage DI-O, SOMFY RTS,Sonoff ..
Répondre