Page 3 sur 6

Re: script de chauffage avec détection PIR et retour de conso

Publié : 23 oct. 2015, 23:39
par atlantis007
mon script modifie la valeur de consigne

Code : Tout sélectionner

-- script_device_conschauf.lua ---------------------------------------
-- F PRETO----------------------------------------------------2015----
----------------------------------------------------------------------
-- Pilotage d'un Thermostat setpoint Consigne pour pilotage regul ----
-- en fonction d'une programation journaliere ------------------------
----------------------------------------------------------------------
-- Le programme est basé sur l'action de 2 switchs (virtuels ou non) -
-- Le Switch EcoConfort dispose d'une programation mais peut aussi ---
-- être actionné manuellement. ---------------------------------------
-- Le switch HorsGel est un mode vacance qui stope la programmation --
-- Les temperatures de consignes sont stockées en variable direct ----
-- dans domoticz pour être modifiées par l'interface web. ------------
----------------------------------------------------------------------

----------------------------------------------------------------------
-- VARIABLES UTILISATEUR : mettre les nom des dispositifs ici --------
----------------------------------------------------------------------
local VarConsJour = 'ConsigneJour'       --Variable consigne jour
local VarConsNuit = 'ConsigneNuit'       --Variable consigne nuit
local VarConsVac = 'ConsigneVacance'     --Variable consigne vacances
local VarSomErr = 'SommeErreur'          --Variable Somme des erreurs
local SondeCons = 'ConsigneChauffage'    --Sonde de temperature
local InterEcoConfort = 'EcoConfort'     --Interrupteur programmé Off:eco On:confort
local InterHorsGel = 'HorsGel'           --Interrupteur On:mode hors gel>> plus de programmation, consigne vacance ou manuelle
local domoticz_url = '192.168.0.30:8080'  --Adresse IP:port de Domoticz
local IDXcons = '784'                     --IDx de l'afficheur de consigne
----------------------------------------------------------------------

-- Fonction retourant la differrence de temps en secondes ------------
function timedifference(s)
   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

commandArray = {}
--  Recuperation des variables ---------------------------------------
local ConsJour = uservariables[VarConsJour]
local ConsNuit = uservariables[VarConsNuit]
local ConsVac = uservariables[VarConsVac]
local Consigne = otherdevices_temperature[SondeCons]
local t1 = os.date("%H:%M")

-- Lorsqu'un interrupteur est manipulé on modifie la temperature de consigne.
-- La variable SommeErreur utilisée pour calculer le gain intégral est aussi remise à 0 >> Gain intégral=0
if (((devicechanged[InterEcoConfort] == 'On') and (otherdevices[InterHorsGel] == 'Off')) or ((devicechanged[InterHorsGel] == 'Off') and (otherdevices[InterEcoConfort] == 'On'))) then
   print("-------------- Temperature modifiée vers Confort à "..t1)
   -- Mise a jour de l'afficheur via JSON -----------------------------
   local url = domoticz_url..'/json.htm?type=command&param=udevice&idx='..IDXcons..'&nvalue=0&svalue='..ConsJour
   commandArray[1]={['OpenURL']=url }
   commandArray['Variable:'..VarSomErr]='0'

elseif (((devicechanged[InterEcoConfort] == 'Off') and (otherdevices[InterHorsGel] == 'Off')) or ((devicechanged[InterHorsGel] == 'Off') and (otherdevices[InterEcoConfort]=='Off' ))) then
   print("-------------- Temperature modifiée vers Eco à "..t1)
   -- Mise a jour de l'afficheur via JSON -----------------------------
   local url = domoticz_url..'/json.htm?type=command&param=udevice&idx='..IDXcons..'&nvalue=0&svalue='..ConsNuit
   commandArray[1]={['OpenURL']=url }
   commandArray['Variable:'..VarSomErr]='0'
  
elseif (devicechanged[InterHorsGel] == 'On') then
   print("-------------- Temperature modifiée vers HorsGel à "..t1)
   -- Mise a jour de l'afficheur via JSON -----------------------------
   local url = domoticz_url..'/json.htm?type=command&param=udevice&idx='..IDXcons..'&nvalue=0&svalue='..ConsVac
   commandArray[1]={['OpenURL']=url }
   commandArray['Variable:'..VarSomErr]='0'
end
return commandArray

Re: script de chauffage avec détection PIR et retour de conso

Publié : 24 oct. 2015, 10:02
par vil1driver
il y a des choses inutiles dans ton script..

la fonction timedifference n'est pas utilisée.. et peut être supprimée

tu testes à 2 reprises 2 fois la même chose
if (((devicechanged[InterEcoConfort] == 'On') and (otherdevices[InterHorsGel] == 'Off'))
or ((devicechanged[InterHorsGel] == 'Off') and (otherdevices[InterEcoConfort] == 'On')))
ceci suffit amplement

Code : Tout sélectionner

if (devicechanged[InterEcoConfort] == 'On' and otherdevices[InterHorsGel] == 'Off') then
idem pour la condition suivante..

le gain intégral est utilisé ailleurs je présume... sinon pas utile non plus..

dans mon script, tu peux supprimer toute la partie gestion de la consigne si ton script s'en occupe déjà (mais il va perdre de son charme ;) )
tout ceci est de trop

Code : Tout sélectionner

-- consignes
local consigne_conf = tonumber(otherdevices_svalues['th_salon'])  -- Température de confort
local consigne_abs = 10  -- Température lors d'abscence prolongée (hors gêle)
local consigne_1h = 0.5   -- valeur d'abaissement de la consigne après 1 heure d'abscence
local consigne_2h = 1.5   -- valeur d'abaissement de la consigne après 2 heure d'abscence
local consigne_3h = 2.5   -- valeur d'abaissement de la consigne après 3 heure d'abscence
(...)
-- période de chauffage
-- pour une période de 24h, mettre debut = 0 et fin = 24
local debut = 7   
local fin = 23
(...)
time = os.date("*t") 
(...)
-- on regarde depuis combien de temps l'on est abscent
local abscence = timedifference(presence)
(...)
-- gestion de la consigne
   -- si le thermostat général est actif
    if (otherdevices[mode] == 'On') then
      -- si il y a absence de moins d'une heure, la journée ou jusqu'au landemain matin si boost actif
        if (abscence <= 3600 and ((time.hour >= debut and time.hour < fin) or otherdevices[boost] == 'On')) then
         consigne = consigne_conf
      -- si absence de 1 à 2 heures la journée, abaissement de la consigne de 1°C
      elseif (abscence > 3600 and abscence <= 7200 and time.hour >= debut and time.hour < fin) then
         consigne = consigne_conf - consigne_1h
      -- si absence de 2 à 3 heures la journée, abaissement de la consigne de 2°C   
      elseif (abscence > 7200 and abscence <= 10800 and time.hour >= debut and time.hour < fin) then
         consigne = consigne_conf - consigne_2h
      -- sinon, passage en consigne éco (3°C en dessous de la consigne confort)
      else
         consigne = consigne_conf - consigne_3h
         commandArray[boost] = 'Off'
      end
   else
         consigne = consigne_abs
   end   
en gros ne garder que la partie classique de gestion de chauffage (sous consigne = chauffage, égal ou sup = pas de chauffage)
mais comme il est mention de gain intégral, je présume que tu utilises une autre méthode pour gérer ton chauffage (PID ?)
du coups la seule chose qui pourrait t'être utile dans mon script serait la partie remontée de conso..
donc pour ajouter la partie conso à un autre script_time

avant le commandArray{}

Code : Tout sélectionner

-- radiateur
local radiateur = 'radiateur salon' -- Nom de l'interrupteur de chauffage
local puissance = 2700	-- puissance du chauffage en watt
local conso = 'conso chauffage'	-- nom du capteur virtuel de consommation électrique (type= instant + counter)
local conso_id = 107	-- idx du capteur virtuel de consommation électrique
dans la partie chauffage On

Code : Tout sélectionner

-- calcul de la conso
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		if(otherdevices[radiateur] == 'On') then
			power = tonumber(npower)
		else
			power = tonumber(npower + puissance)
		end	
		energy = tonumber(energy + (puissance / 60))
		
dans la partie chauffage Off

Code : Tout sélectionner

-- calcul de la conso
		npower, energy = string.match(otherdevices_svalues[conso], "(%d+%.*%d*);(%d+%.*%d*)")
		if(otherdevices[radiateur] == 'On') then
			power = tonumber(npower - puissance)
			if(power < 0) then power = 0 end
		else
			power = tonumber(npower)
		end	
		energy = tonumber(energy)
		
juste avant le return commandArray

Code : Tout sélectionner

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

Re: script de chauffage avec détection PIR et retour de conso

Publié : 24 oct. 2015, 21:17
par atlantis007
t es vraiment une star du script :D

Re: script de chauffage avec détection PIR et retour de conso

Publié : 24 oct. 2015, 21:43
par vil1driver
Pas vraiment non mais je me suis bien cassé la tête pour le faire alors je le connais bien et puis les commentaires inclus aident en cas de trous de mémoire ;)

Re: script de chauffage avec détection PIR et retour de conso

Publié : 26 oct. 2015, 13:08
par leraver
Question
Est ce que les creation des materiel virtuel et autres devices sont les meme (hors nommage bien sur) que la: viewtopic.php?f=17&t=582

Re: script de chauffage avec détection PIR et retour de conso

Publié : 26 oct. 2015, 13:40
par vil1driver
Je ne comprends pas bien ta question..

Tu peux vérifier toi même si telle ou telle variable est présente dans les 2 scripts, non ?

Et si ce n'est pas identique, c'est gênant ?

Quel est ton problème/besoin ?

Re: script de chauffage avec détection PIR et retour de conso

Publié : 26 oct. 2015, 15:08
par leraver
La question est sur un tuto pour faire des interrupteurs virtuel et autres
Pour ton script ( en l'etat) il faut:
interrupteur virtuel général
interrupteur virtuel pour déroger au couvre feu
capteur virtuel d'énergie

Comme j’apprends a utiliser domoticz ( je me pause des questions...) et je ne connait rien au code .

Re: script de chauffage avec détection PIR et retour de conso

Publié : 26 oct. 2015, 15:26
par vil1driver
tu veux savoir comment créer des interrupteur virtuel c'est ça ?

dans ce script il faut tout ce qui est listé.. matériels virtuels et non virtuels
l'inter général peut très bien être un inter au mur
boost également, c'est d'ailleurs le cas chez moi, pas envie de sortir mon tel pour dire à domoticz, on fait une soirée, on se couche plus tard, je veux chauffer plus longtemps :p

chaque script est différent, et à chaque script son besoin en devices..

Re: script de chauffage avec détection PIR et retour de conso

Publié : 30 oct. 2015, 12:36
par leraver
vil1driver a écrit :tu veux savoir comment créer des interrupteur virtuel c'est ça ?
En faite oui , je ne comptend pas que inter vitueel tu utilise pour:

Code : Tout sélectionner

local consigne_conf = 'th_salon'     -- nom de thermostat virtuel de gestion de la température de confort
ScreenShot002.jpg
ScreenShot002.jpg (110.7 Kio) Consulté 11384 fois
[Edit]
Ca avance je pense avoir trouvé la direction
ScreenShot005.jpg
ScreenShot005.jpg (70.67 Kio) Consulté 11382 fois
ce qui donne:
ScreenShot003.jpg
ScreenShot003.jpg (69.8 Kio) Consulté 11382 fois
Je ne comprend toujours pas comment tu arrive a faire un capteur ou tu choisis ta temperature conne sur ton image 1
la: Image

Re: script de chauffage avec détection PIR et retour de conso

Publié : 30 oct. 2015, 13:32
par vil1driver
Clic sur l' icone au lieu du bouton éditer...
C'est d'ailleurs mentionné dans le 2ème message de ce sujet.
Ya pas de secret, il faut lire.. Être curieux..