[LUA] Thermostat d'ambiance programmable

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.
DamienCL
Messages : 16
Inscription : 08 oct. 2017, 11:38

[LUA] Thermostat d'ambiance programmable

Message par DamienCL »

Bonjour à tous,

Voici mon script concernant un thermostat d'ambiance programmable qui tient compte de la température extérieure :
- les horaires de programmation sont des variables domoticz nommées lundi,mardi ... dimanche. c'est une chaîne de caractère gérant 3 horaires de chauffe : 06:00-08:00 | 11h00-13h00 | 17:00-22:00 . les délimiteurs sont les ":" pour trouver chaque horaires de fonctionnement.
Pendant les heures, le thermostat tient compte de sa consigne de base mais aussi de la température extérieur
Lorsque nous sommes en dehors des heures, le chauffage est réglé a une température de 18°C (variable domoticz aussi)
Un bouton présence permet d'activé la consigne si l'on souhaite chauffé en dehors des heures programmées. (bouton repasse automatiquement à OFF en fin de journée pour ne pas "polluer" la journée suivante)

- la température extérieure apparaît donc dans le calcul de la consigne de chauffe : consigne = arrondir((consignebase + (tonumber(otherdevices_svalues[ext])/-15) +1),1) = la température est divisé par -15 et on rajoute 1, cela signifie que pour une température de 0°C on ajoute (0/-15 + 1) = 1°C a la consigne de base et pour une température extérieure au delà de 15°C la consigne commence à diminuer.
Ce réglage ne concerne que mon ressentit personnel et chacun est libre de l'adapter à son habitat.

- il y'a également un compteur de temps de chauffe afin de voir combien de temps fonctionne ma chaudière et si cela peut être optimisé par la suite.

PS : ceci est mon premier script ...

Code : Tout sélectionner

-------------------------------- Variable à parametrer------------------------------------------------
local consignebase = tonumber(otherdevices_svalues['consigne thermostat'])	        --Température de consigne 
local consignenuit = tonumber(uservariables['Temperature nuit/absence'])		    --Température de consigne nuit/absence
local hysteresis = uservariables['Hysterisis']				                        --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local sonde,ext = 'Salon','Exterieur' 						                        --Nom des sonde de température
local thermostat = 'Thermostat' 						                            --Nom de l'interrupteur virtuel du thermostat
local radiateur = 'Chauffage' 							                            --Nom du radiateur à allumer/éteindre
local tempschauffage = tonumber(uservariables['Compteur chauffe'])	                --Temps d'activitée du chauffage
local delai = 50                                                                     --Temps d'actualisation du thermostat  
local t17 = '22:00'                                                                 --Heure reset bouton présence
--------------------------------

commandArray = {}
----------------------------Temps entre 2 actualisation-------------------------------------------
 heure_actuelle=os.time()
 heure_precedente2=uservariables['heure_precedente2'] +delai

if (heure_actuelle > heure_precedente2) then
   commandArray['Variable:heure_precedente2']=tostring(heure_actuelle)

    ------------- Lecture numéro du jour de la semaine et heure actuelle----------------------------
    t0 = tonumber(os.date("%u"))
    t1 = os.date("%H:%M")


    ------------- horaires du jours actuel------------------------------------------------------------
    if t0 == 1 then 
        t10 = uservariables['Lundi']

    elseif t0 == 2 then
        t10 = uservariables['Mardi']

    elseif t0 == 3 then
        t10 = uservariables['Mercredi']

    elseif t0 == 4 then
        t10 = uservariables['Jeudi']
    
    elseif t0 == 5 then
        t10 = uservariables['Vendredi']

    elseif t0 == 6 then
        t10 = uservariables['Samedi']

    elseif t0 == 7 then
        t10 = uservariables['Dimanche']
    end

    l1 = string.len(t10)

    -------------- On recherche les horaires saisies ------------------------------------------------
    t11 = string.sub (t10, string.find(t10, ":")-2,string.find(t10, ":")+2)
    t12 = string.sub (t10, string.find(t10, ":",5)-2,string.find(t10, ":",5)+2)
    if l1 > 15 then
        t13 = string.sub (t10, string.find(t10, ":",14)-2,string.find(t10, ":",14)+2)
        t14 = string.sub (t10, string.find(t10, ":",21)-2,string.find(t10, ":",21)+2)
    else
        t13 = '23:00'
        t14 = '23:00'
    end
    if l1 > 30 then
        t15 = string.sub (t10, string.find(t10, ":",28)-2,string.find(t10, ":",28)+2)
        t16 = string.sub (t10, string.find(t10, ":",33)-2,string.find(t10, ":",33)+2)
    else
        t15 = '23:00'
        t16 = '23:00'
    end
     
    ------------- Reset présence dans appartement en fin de journée (du lundi au vendredi) ------------
    if (t0 >= 1 and t0 <= 5) and  (t1 > t17) then
        commandArray['Presence']='Off'
    end

    ------------- Fonction arrondir --------------------------------------------------------------------
    function arrondir(num, dec)
	    if num==0 then
		    return 0
	    else
		    local mult = 10^(dec or 0)
		    return math.floor(num * mult + 0.5)/mult
	    end
    end

    ------------- Calcul de la consigne en fonction des horaires et température extérieure -------------
    local temperature = tonumber(string.sub(otherdevices_svalues[sonde], 0, string.find(otherdevices_svalues[sonde], ";")-1))

    if (otherdevices[thermostat]=='On') then
	    if ((t11 <= t1 and t1 <= t12) or (t13 <= t1 and t1 <= t14) or (t15 <= t1 and t1 <= t16) or (otherdevices['Presence']=='On'))then
		    consigne = arrondir((consignebase + (tonumber(otherdevices_svalues[ext])/-15) +1),1)
	    else
		    consigne = consignenuit
	    end
        commandArray['Variable:Consigne']= tostring(consigne)
    
    ----------------------------- Compteur temps de chauffe--------------------------------------------	
	    if (otherdevices[radiateur]=='On') then 
	        tempschauffage = tempschauffage +1
	    else
	        tempschauffage=0
	    end
        commandArray['Variable:Compteur chauffe']= tostring(tempschauffage)
	
    --------------Régulation de la température avec mémorisation de l'état en variable texte------------------------	

	    if (temperature < (consigne - hysteresis)) and (otherdevices[radiateur]=='Off') then          
            commandArray[radiateur]='On'
		    commandArray['UpdateDevice']= 21 ..'|0|'.. ('Chauffage allumé : consigne de '..consigne..' pour une température de '..temperature..'°C')
	    elseif (temperature > (consigne + hysteresis) and (otherdevices[radiateur]=='On')) then	    
            commandArray[radiateur]='Off'
		    commandArray['UpdateDevice']= 21 ..'|0|'.. ('Chauffage éteint : consigne de '..consigne..'°C pour une température de '..temperature..'°C')
	    end	
	
    else
    commandArray[radiateur]='Off'
    end
end
return commandArray
Wospi
Messages : 110
Inscription : 21 avr. 2017, 08:54

Re: Thermostat d'ambiance programmable

Message par Wospi »

Merci pour ton partage !
Je pense que je vais te piquer l'idée du temps de chauffe et transformer ça de manière à voir apparaître une consommation en kWh
Répondre