Recherche d'un script simple pour chauffage electrique

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 <\>.
Répondre
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Recherche d'un script simple pour chauffage electrique

Message par Dim33 »

Bonjour,

Petite présentation :
- Nas Synology sur lequel est installé Domoticz.
- 4 pièces (3 chambres + une pièce de vie) équipées pour chacune d'elle d'une sonde de T°/Hygro et d'un module Chacon avec diode (Arrêt/Confort) sur les fils pilotes des radiateurs électriques.
- Tout est fonctionnel.

Reste la programmation de l'ensemble et la j'ai du mal......

Quand je bosse (8-17h par exemple), je souhaite maintenir une T° de 17° (par exemple).
Les heures au domicile (weekend ou les jours de congés), je souhaite une T° de 20°.
La nuit, je souhaite une autre T°.

Je souhaiterai passer d'un mode présence à absence facilement (d'un simple clic) et modifier les T° de consigne facilement (pour chacune des pièces) voire les plages (le top !!!).

Si qq pouvais m'aiguiller pour une pièce, je pourrai le reproduire pour les autres.

Merci d'avance.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
cyberbob
Messages : 511
Inscription : 28 nov. 2016, 19:43
Localisation : Belgique

Re: Recherche d'un script simple pour chauffage electrique

Message par cyberbob »

Slt,

J'ai a peux près la même installation actuellement,
5 zones pour 5 pièces , certain l'on fait en script LUA (en cherchant un peu des exemple existe...), moi je l'ai fait en Blocky, directement dans domoticz. Ce n'est pas trop complexe pour le faire en blocky, mais il a ses limites et dans se cas il faut le faire en LUA.
Pour les 5 zones, elle se résume en 5 "switch selector" virtuel, dans le switch selector il y a "abscense" , "nuit", "confort" pour chaque plage de température (5, 16 et 24°C), par contre ces consigne de t° ne son modifiable que dans le blocky, on peut cependant ajouter un thermostat réglable dans l'onglet "mesure".
Un blocky pour ces 5 zones gère cela, par des ELSE/IF, DO, SET viennent piloter la prise du chauffage suivant la t°
Tu vois le bazar..
Ensuite on fait tout les scénario possible et inimaginable que l'on veut : présence par détection wifi smartphone, plage horaire, etc viennent modifier le switch selector.
En tout cas domoticz avec un syno sont très bien adapter pour faire ce job.
good luck
Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: Recherche d'un script simple pour chauffage electrique

Message par Dim33 »

Merci de ton aide.

Effectivement, j'avais commencé par blocky mais je trouve ça limité et ça devient très vite une usine à gaz pour pas grand chose. C'est la raison pour laquelle je voulais le faire en LUA mais j'ai besoin d'un exemple et j'en ai pas trouvé.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
Diab
Messages : 143
Inscription : 25 sept. 2016, 13:41

Re: Recherche d'un script simple pour chauffage electrique

Message par Diab »

@Dim33,
Tu trouveras ci-dessous un script LUA (script Time) qui fait en partie ce que tu recherches.
C'est une méthode parmi tant d'autres mais cela peut-être un bon point de départ pour toi. Cela fonctionne bien, même si depuis son écriture je n'utilise plus les commandes JSON.
Le script est basé sur un inter virtuel (Présence) que j'active ou pas quand je m'absente longtemps, pour couper l'automatisme.
Les horaires de déclenchement et d'arrêt sont paramétrables dans le script. Tes thermostats ne serviront qu'à t'informer de la température dans les pièces car avec un fil pilote tu gères des seuils (Confort, Eco...) et non des températures. Tu pourras si tu veux asservir ces seuils à des températures par la suite. Si tu veux une température moins élevée dans une pièce, il te suffit de baisser la consigne correspondante sur un de tes radiateurs piloté.
Le script gère un seul sélecteur virtuel (identifiant 72) qui actionne un module Zwave (identifiant 68) qui lui-même commande tous les radiateurs de la maison car tous les fils pilotes sont reliés. Le sélecteur (voir ci-dessous) est configuré en fonction des niveaux acceptables par le dispositif "Fil pilote" (5, 19, 29, 39, 49, 99) et ne coupe pas le chauffage la journée pendant le week end.
Le script pourrait commander directement le module Zwave mais j'ai besoin du sélecteur dans l'interface pour gérer manuellement le chauffage en cas de besoin.
Encore une fois, le script n'est sans doute pas utilisable directement mais cela peut-être une base te permettant de démarrer.


Code : Tout sélectionner

-- Gestion du chauffage en fonction du jour, de l'heure et de la présence
-- Auteur: EA
--------------------
-- heures de déclenchement ou d'arret du chauffage.
local Confort_Matin="06:30:00"
local Arret_Matin="07:15:00"
local Arret_Midi="11:00:00"
local Confort_AM="16:30:00"
local Confort_Soir="17:45:00"
local Arret_Soir="19:00:00"
local Today = os.date("%A")
local Heure_Actuelle=os.date("%X")

-- Boucle de scrutation des objets
for deviceName,deviceValue in pairs(otherdevices) do
commandArray = {}
if (otherdevices['Présent'] == 'On') then
    if Heure_Actuelle==Confort_Matin then
-- Commande du selecteur IDX72 sur 20 (niveau 60 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=60'
    end   
    if (Heure_Actuelle==Arret_Matin and (Today ~= 'Saturday' and Today ~= 'Sunday')) then
-- Commande du selecteur IDX72 sur 19 (niveau 50 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=50'
    end    
    if (Heure_Actuelle==Arret_Midi and (Today ~= 'Saturday' and Today ~= 'Sunday')) then
-- Commande du selecteur IDX72 sur 18 (niveau 40 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=40'
    end    
    if (Heure_Actuelle==Confort_AM and (Today ~= 'Saturday' and Today ~= 'Sunday')) then
-- Commande du selecteur ID72 sur 19 (niveau 50 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=50'
    end   
    if Heure_Actuelle==Confort_Soir then
-- Commande du selecteur IDX72 sur 20 (niveau 60 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=60'
    end   
    if Heure_Actuelle==Arret_Soir then
-- Commande du selecteur IDX72 sur 19 (niveau 50 du switch) qui actionne le Dimmer par JSON
        commandArray['OpenURL'] = 'http://192.168.0.2:8080/json.htm?type=command&param=switchlight&idx=72&switchcmd=Set%20Level&level=50'
    end
end
return commandArray
end
Pièces jointes
Dimmer.png
Dimmer.png (153.17 Kio) Consulté 13152 fois
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: Recherche d'un script simple pour chauffage electrique

Message par Dim33 »

Merci Diab, ce script peut effectivement m'aider même si dans mon cas, le fil pilote ne me sert qu'a faire du on/off (thermostat du radiateur a fond).
Les T° de chaque pièce sont asservis via une sonde présente dans chaque pièce.

Personne n'a ce type de script dans sa besace ? :D
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
thier
Messages : 807
Inscription : 26 sept. 2015, 10:32
Localisation : charente

Re: Recherche d'un script simple pour chauffage electrique

Message par thier »

Pour commencer mettre à fond tes thermostats avec des modules chacon en 433mhz sans retour d'état est peut être risqué si l'ordre d'extinction n'est pas reçu. Je les mettrais plutôt un peu plus haut que nécessaire.
Je te met mon script qui n'est pas forcément simple car il gère des défauts de discordance, les pertes de signal des sondes de température, des alertes mail ou push, etc... Ce script est fait pour un pilotage on/off de radiateur piloté en zwave avec des modules qubino. je te laisse trier et prendre les morceaux qui t’intéresse. Si tu t'en sorts je pourrais te proposer un script qui gère pour chaque pièce la consigne de thermostat en mode auto/off/vacances/férié/absent.

Code : Tout sélectionner

--[[
- script_time_chauffage.lua---
- script qui gere le chauffage sdb, cuisine, salon et 3 chambres selon les plannings des thermostats. Cuisine et sdb sont ensembles pilotés par le thermostat salon.
- Gestion du chauffage sdb en mode forcé est dans le srcipt "device marche forcée sdb" on et off affectés au bouton de sélection de marche forcée qui est temporisé au délais d'extinction.  L'impossibilité de sélectionner la marche forcée de la salle de bains quand la maison est en mode absent est gérée dans le srcipt device marche forcée sdb.
- Si le chauffage est en mode absent, les plannings des thermostats automatiques sont schuntés et la marche forcée salle de bain n'est pas possible
- Si le chauffage est arrêté, les plannings des thermostats automatiques sont schuntés mais la marche forcée salle de bain reste possible.
- Controle de la communication des sondes de températures. Utilisation de variables utilisateurs sondetempXXXX. Si variable = 0, la sonde est Ok. Si variable = 1, la communication avec la sonde est HS. Si la communication avec une sonde est perdue, le radiateur concerné est forcé éteint. Ces variables sont géré dans script_time_securite_sonde.lua
- Le contrôle des températures maxi est dans ce script car le défaut de température trop haute ne doit pas apparaitre quand les thermostats passent de confort à éco (pas possible de hierarchiser l'exécution des scripts).
- Utilisation des compteurs instantannés de consommation pour savoir si un radiateur est allumé. ça évite d'incrémenter le chrono si domoticz allume le radiateur alors qu'il est éteint pour aérer par exemple. Utlisation d'un seuil de 100w au dessus duquel le radiateur est considéré allumé car si aération de la chambre avec radiateur éteint au bouton alors que le radiateur est piloté allumé la consommation mesurée est de 5w (conso qubino).
- Correction par rapport à v10 du script, enlevé "and otherdevices[mode_chauffage]~='absent'" dans toutes les conditions des gestions de mode de marche du chauffage + renumérotation de tous les commandArray[1]={


--]]
----------------------------------------------------------------------------------------------------------------------------------------------------
--edition des variables qui gérent les modes de chauffage
----------------------------------------------------------------------------------------------------------------------------------------------------
local mode_chauffage = 'chauffage'--nom du bp qui gére le mode de fonctionnement du chauffage maison complete. Les modes sont Off, automatique, vacances  et absent.
local marche_forcee_sdb = 'marche forcee chauffage sdb' --nom du bp qui gere la marche forcée
local thermostat_absent = tonumber(otherdevices_svalues['thermostat maison mode absent'])  -- nom du thermostats en mode absent
local thermostat_sdb = tonumber(otherdevices_svalues['consigne sdb'])  -- nom du thermostat salle de bain
local thermostat_salon = tonumber(otherdevices_svalues['consigne salon'])  -- nom du thermostat salon
local thermostat_parents = tonumber(otherdevices_svalues['consigne parents'])  -- nom du thermostat chambre parents
local thermostat_simon = tonumber(otherdevices_svalues['consigne simon'])  -- nom du thermostat chambre simon
local thermostat_luc = tonumber(otherdevices_svalues['consigne luc'])  -- nom du thermostat chambre luc
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- édition des variables qui gérent la régulation du chauffage de la sdb.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--local temperature_sdb_forcee est dans le script qui gére le bouton de marche forcée
local hysteresissup2 = 0 --Valeur seuil au dessus de la consigne haute du thermostat
local hysteresisinf2 = 0.2 --Valeur seuil en dessous de la consigne basse du thermostat
local temp_sdb = 'temperature sdb' --Nom de la sonde de température
local tempsdb = otherdevices_temperature[temp_sdb]
local radiateur_sdb = 'radiateur sdb' --Nom du radiateur à allumer/éteindre
----------------------------------------------------------------------------------------------------------------------------------------------------
--edition des variables qui gérent la régulation du chauffage salon / cuisine.
----------------------------------------------------------------------------------------------------------------------------------------------------
local hysteresissup1 = 0.2 --Valeur seuil au dessus de la consigne haute du thermostat
local hysteresisinf1 = 0.2 --Valeur seuil en dessous de la consigne basse du thermostat
local temp_cuisine = 'cuisine' --Nom de la sonde de température
local tempcuisine = otherdevices_temperature[temp_cuisine]
local temp_salon = 'temperature salon' --Nom de la sonde de température
local tempsalon = otherdevices_temperature[temp_salon]
local radiateur_cuisine = 'radiateur cuisine' --Nom du radiateur à allumer/éteindre
local radiateur_salon = 'radiateur salon' --Nom du radiateur à allumer/éteindre
----------------------------------------------------------------------------------------------------------------------------------------------------
--edition des variables qui gérent la régulation du chauffage des chambres.
----------------------------------------------------------------------------------------------------------------------------------------------------
local hysteresissup3 = 0 --Valeur seuil au dessus de la consigne du thermostat
local hysteresisinf3 = 0.2 --Valeur seuil en dessous de la consigne du thermostat
local temp_parents = 'chambre parents' --Nom de la sonde de température
local tempparents = otherdevices_temperature[temp_parents]
local temp_simon = 'chambre simon' --Nom de la sonde de température
local tempsimon = otherdevices_temperature[temp_simon]
local temp_luc = 'chambre luc' --Nom de la sonde de température
local templuc = otherdevices_temperature[temp_luc]
local radiateur_parents = 'radiateur parents' --Nom du radiateur à allumer/éteindre
local radiateur_luc = 'radiateur luc' --Nom du radiateur à allumer/éteindre
local radiateur_simon = 'radiateur simon' --Nom du radiateur à allumer/éteindre
----------------------------------------------------------------------------------------------------------------------------------------------------
--edition des variables qui gérent les défauts de températures trop haute
----------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du seuil de température maxi en fonction de la valeur du thermostat de la pièce
local maxitempsdb = 4	--température en plus de la valeur réglée dans le thermostat qui donne le seuil maxi de température de la pièce salle de bain. 18+4 = 22 / marche forcée = 20
local maxitemp = 0.5	--température en plus de la valeur réglée dans le thermostat qui donne le seuil maxi de température de la pièce cuisine, salon, 3 chambres.
----------------------------------------------------------------------------------------------------------------------------------------------------
--utilisation des compteurs électriques de consommations instantanées pour savoir quand les radiateurs sont allumés
----------------------------------------------------------------------------------------------------------------------------------------------------
local usageradiateursdb = tonumber(otherdevices_svalues['usage radiateur sdb'])
local usageradiateurcuisine = tonumber(otherdevices_svalues['usage radiateur cuisine'])
local usageradiateursalon = tonumber(otherdevices_svalues['usage radiateur salon'])
local usageradiateurparents = tonumber(otherdevices_svalues['usage radiateur parents'])
local usageradiateursimon = tonumber(otherdevices_svalues['usage radiateur simon'])
local usageradiateurluc = tonumber(otherdevices_svalues['usage radiateur luc'])

commandArray = {}
--------------------------------------------------------------------------------------------------------------------------------------------
--On ne met a jour que si le chauffage général est en marche sauf pour la marche forcée sdb (elle doit être possible avec le reste du chauffage arrêté)
---------------------------------------------------------------------------------------------------------------------------------------------
if (otherdevices[mode_chauffage] ~= 'Off' or otherdevices[marche_forcee_sdb] == 'On')  then

function timedifference(d)
   s = otherdevices_lastupdate[d]
   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
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage sdb en mode forcée
--la marche forcée est gérée dans le script qui gére le bouton de marche forcée		
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--calcul des températures maxi de chaque pièce
local maxi_sdb = thermostat_sdb + maxitempsdb
local maxi_salon = thermostat_salon + maxitemp
local maxi_cuisine = thermostat_salon + maxitemp
local maxi_parents = thermostat_parents + maxitemp
local maxi_simon = thermostat_simon + maxitemp
local maxi_luc = thermostat_luc + maxitemp
--print('temp_maxi_sdb = '..maxi_sdb)
--print('temp_maxi_cuisine = '..maxi_cuisine)
--print('temp_maxi_salon = '..maxi_salon)
--print('temp_maxi_parents = '..maxi_parents)
--print('temp_maxi_simon = '..maxi_simon)
--print('temp_maxi_luc = '..maxi_luc)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du mode absent, automatique ou vacances du chauffage sdb  - la marche forcée est gérée dans le script qui gére le bouton de marche forcée0.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--on agit que si le chauffage de la sdb n'est pas en securité par perte du signal sonde, ni en défaut température maxi, n'est pas en mode absent, ou en marche forcée
		--print('test70')
		if (uservariables["sondetempsdb"] == 0 and uservariables["deftempmaxisdb"] == 0 and (otherdevices[mode_chauffage]~='Off' or otherdevices[marche_forcee_sdb] == 'On')) then
			--print('thermostat_sdb: '..thermostat_sdb)				
			if (tempsdb < (thermostat_sdb - hysteresisinf2) ) then
			--print('test72')
				if (uservariables["etatradiateursdb"] == 0) then
				commandArray[#commandArray + 1]={[radiateur_sdb]='On'; ['Variable:etatradiateursdb']='1'}
				print('Allumage du chauffage sdb')
				end			
			elseif (tempsdb > (thermostat_sdb + hysteresissup2)) then
			--print('test73')
				if (uservariables["etatradiateursdb"] == 1) then
				commandArray[#commandArray + 1]={[radiateur_sdb]='Off'; ['Variable:etatradiateursdb']='0'}
				print('Extinction du chauffage sdb')
      			end
			end
		end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage cuisine
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--On agit que si le chauffage cuisine n'est pas en securité par perte du signal sonde, ni en défaut température maxi					
		if  (uservariables["sondetempsalon"] == 0 and uservariables["deftempmaxicuisine"] == 0 ) then	--sondetempsalon car cuisine pilotée par le salon				
			if (tempsalon < (thermostat_salon - hysteresisinf1) ) then  --salon car cuisine pilotée par le salon				
				--print('thermostat_salon: '..thermostat_salon)				
           		if (uservariables["etatradiateurcuisine"] == 0) then
				--print('test41')
				commandArray[#commandArray + 1]={[radiateur_cuisine]='On'; ['Variable:etatradiateurcuisine']='1'}
				print('Allumage du chauffage dans la cuisine')
				end

	    	elseif (tempsalon > (thermostat_salon + hysteresissup1)) then
	       		--print('test42')    
				if (uservariables["etatradiateurcuisine"] == 1) then
				--print('test43')
				commandArray[#commandArray + 1]={[radiateur_cuisine]='Off'; ['Variable:etatradiateurcuisine']='0'}
				print('Extinction du chauffage dans la cuisine')		
				end 
	    	end
		end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage salon
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--On agit que si le chauffage salon n'est pas en securité par perte du signal sonde, ni en défaut température maxi					
		if  (uservariables["sondetempsalon"] == 0 and uservariables["deftempmaxisalon"] == 0 ) then					
			if (tempsalon < (thermostat_salon - hysteresisinf1) ) then
				--print('thermostat_salon: '..thermostat_salon)				
           		if (uservariables["etatradiateursalon"] == 0) then
				--print('test41')
				commandArray[#commandArray + 1]={[radiateur_salon]='On' ; ['Variable:etatradiateursalon']='1' } 
				print('Allumage du chauffage dans le salon')
				end

	    	elseif (tempsalon > (thermostat_salon + hysteresissup1)) then
	       		--print('test42')    
				if (uservariables["etatradiateursalon"] == 1) then
				--print('test43')
				commandArray[#commandArray + 1]={[radiateur_salon]='Off' ; ['Variable:etatradiateursalon']='0' }
				print('Extinction du chauffage dans le salon')
				end 
	    	end
		end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage chambre parents
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--On agit que si le chauffage salon n'est pas en securité par perte du signal sonde, ni en défaut température maxi					
		if  (uservariables["sondetempparents"] == 0 and uservariables["deftempmaxiparents"] == 0 ) then					
			if (tempparents < (thermostat_parents - hysteresisinf3) ) then
				--print('thermostat_parents: '..thermostat_parents)				
           		if (uservariables["etatradiateurparents"] == 0) then
				--print('test41')
				commandArray[#commandArray + 1]={[radiateur_parents]='On'; ['Variable:etatradiateurparents']='1'}
				print('Allumage du chauffage chambre parents')
				end

	    	elseif (tempparents > (thermostat_parents + hysteresissup3)) then
	       		--print('test42')    
				if (uservariables["etatradiateurparents"] == 1) then
				--print('test43')
				commandArray[#commandArray + 1]={[radiateur_parents]='Off' ; ['Variable:etatradiateurparents']='0'} 
				print('Extinction du chauffage chambre parents')
				end 
	    	end
		end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage chambre simon
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--On agit que si le chauffage salon n'est pas en securité par perte du signal sonde, ni en défaut température maxi					
		if  (uservariables["sondetempsimon"] == 0 and uservariables["deftempmaxisimon"] == 0 ) then					
			if (tempsimon < (thermostat_simon - hysteresisinf3) ) then
				--print('thermostat_simon: '..thermostat_simon)				
           		if (uservariables["etatradiateursimon"] == 0) then
				--print('test41')
				commandArray[#commandArray + 1]={[radiateur_simon]='On'; ['Variable:etatradiateursimon']='1'}
				print('Allumage du chauffage chambre simon')
				end

	    	elseif (tempsimon > (thermostat_simon + hysteresissup3)) then
	       		--print('test42')    
				if (uservariables["etatradiateursimon"] == 1) then
				--print('test43')
				commandArray[#commandArray + 1]={[radiateur_simon]='Off' ; ['Variable:etatradiateursimon']='0'}
				print('Extinction du chauffage chambre simon ')
				end 
	    	end
		end
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--gestion du chauffage chambre luc
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
		--On agit que si le chauffage salon n'est pas en securité par perte du signal sonde, ni en défaut température maxi				
		if  (uservariables["sondetempluc"] == 0 and uservariables["deftempmaxiluc"] == 0 ) then					
			if (templuc < (thermostat_luc - hysteresisinf3) ) then
				--print('thermostat_luc: '..thermostat_luc)				
           		if (uservariables["etatradiateurluc"] == 0) then
				--print('test41')
				commandArray[#commandArray + 1]={[radiateur_luc]='On' ; ['Variable:etatradiateurluc']='1'}
				print('Allumage du chauffage chambre luc')
				end

	    	elseif (templuc > (thermostat_luc + hysteresissup3)) then
	       		--print('test42')    
				if (uservariables["etatradiateurluc"] == 1) then
				--print('test43')
				commandArray[#commandArray + 1]={[radiateur_luc]='Off' ; ['Variable:etatradiateurluc']='0'}
				print('Extinction du chauffage chambre luc')
				end 
	    	end
		end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[[
Gestion des températures trop hautes + envoi email + notification pushbullet + alerte sonore tablette.
timedifference > 70 -> évite "défaut température maxi" quand thermostat passe automatiquement ou manuellement de confort à éco. Si changement manuel, timedifference = 60s au maximum (60s = durée entre deux script_time).
Utlisation d'un seuil de 100w au dessus duquel le radiateur est considéré allumé car si aération de la chambre avec radiateur éteint au bouton alors que le radiateur est piloté allumé la consommation mesurée est de 5w (conso qubino).
--]]
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (usageradiateursdb > 100 and tempsdb > maxi_sdb and timedifference('consigne sdb') > 70 and timedifference('chauffage') > 70 ) then 
	commandArray[#commandArray + 1]={[radiateur_sdb]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisdb']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température salle de bain#température salle de bain trop haute '..tempsdb..' °C pour '..maxi_sdb..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température salle de bain trop haute '..tempsdb..' °C pour '..maxi_sdb..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette	
	commandArray ['Variable:texte_alerte_sonore']='5' 	
end
--if (usageradiateurcuisine > 100 and tempcuisine > maxi_cuisine and timedifference('consigne salon') > 70 and timedifference('chauffage') > 70 ) then
	--commandArray[34]={[radiateur_cuisine]='Off'}--éteint le radiateur
	--commandArray[35]={['Variable:deftempmaxicuisine']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	--commandArray[36]={['SendEmail']= 'domoticz: Alerte température cuisine#température cuisine trop haute '..tempcuisine..' °C pour '..maxi_cuisine..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	--commandArray ['Variable:pushbullet']='température cuisine trop haute '..tempcuisine..' °C pour '..maxi_cuisine..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette	
	--commandArray ['Variable:texte_alerte_sonore']='6'
--end
if (usageradiateursalon > 100 and tempsalon > maxi_salon and timedifference('consigne salon') > 70 and timedifference('chauffage') > 70 ) then  
	commandArray[#commandArray + 1]={[radiateur_salon]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisalon']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température salon#température salon trop haute '..tempsalon..' °C pour '..maxi_salon..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température salon trop haute '..tempsalon..' °C pour '..maxi_salon..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='7'	
end
if (usageradiateurparents > 100 and tempparents > maxi_parents and timedifference('consigne parents') > 70 and timedifference('chauffage') > 70 ) then
	commandArray[#commandArray + 1]={[radiateur_parents]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxiparents']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre parents#température chambre parents trop haute '..tempparents..' °C pour '..maxi_parents..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre parents trop haute '..tempparents..' °C pour '..maxi_parents..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='8'	
end
if (usageradiateursimon > 100 and tempsimon > maxi_simon and timedifference('consigne simon') > 70 and timedifference('chauffage') > 70 ) then
	commandArray[#commandArray + 1]={[radiateur_simon]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisimon']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre simon#température chambre Simon trop haute '..tempsimon..' °C pour '..maxi_simon..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre Simon trop haute '..tempsimon..' °C pour '..maxi_simon..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='9'	
end
if (usageradiateurluc > 100 and templuc > maxi_luc and timedifference('consigne luc') > 70 and timedifference('chauffage') > 70 ) then
	commandArray[#commandArray + 1]={[radiateur_luc]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxiluc']='1'} --assigner la valeur 1 à la variable de défaut température maxi de la pièce
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre luc#température chambre Luc trop haute '..templuc..' °C pour '..maxi_luc..' °C maximum - plus de chauffage possible pour cette pièce tant que la température ne passe pas en dessous de la température maximale autorisée#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre Luc trop haute '..templuc..' °C pour '..maxi_luc..' °C maximum - chauffage impossible tant que la température < température maximale autorisée'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='10'	
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- gestion des températures trop hautes--remise à zéro des défauts + envoi email + notification pushbullet
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (tempsdb < maxi_sdb and uservariables["deftempmaxisdb"] == 1 ) then
	commandArray[#commandArray + 1]={[radiateur_sdb]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisdb']='0'} --assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température salle de bain#température salle de bain '..tempsdb..' °C repassée sous le maximum autorisé '..maxi_sdb..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température salle de bain '..tempsdb..' °C repassée sous le maximum autorisé '..maxi_sdb..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette	
	commandArray ['Variable:texte_alerte_sonore']='11'
end
if (tempcuisine < maxi_cuisine and uservariables["deftempmaxicuisine"] == 1) then
	commandArray[#commandArray + 1]={[radiateur_cuisine]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxicuisine']='0'}--assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température cuisine#température cuisine '..tempcuisine..' °C repassée sous le maximum autorisé '..maxi_cuisine..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température cuisine '..tempcuisine..' °C repassée sous le maximum autorisé '..maxi_cuisine..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='12'	
end
if (tempsalon < maxi_salon and uservariables["deftempmaxisalon"] == 1) then
	commandArray[#commandArray + 1]={[radiateur_salon]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisalon']='0'} --assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température salon#température salon '..tempsalon..' °C repassée sous le maximum autorisé '..maxi_salon..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température salon '..tempsalon..' °C repassée sous le maximum autorisé '..maxi_salon..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='13'	
end
if (tempparents < maxi_parents and uservariables["deftempmaxiparents"] == 1) then
	commandArray[#commandArray + 1]={[radiateur_parents]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxiparents']='0'} --assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre parents#température chambre parents '..tempparents..' °C repassée sous le maximum autorisé '..maxi_parents..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre parents '..tempparents..' °C repassée sous le maximum autorisé '..maxi_parents..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette	
	commandArray ['Variable:texte_alerte_sonore']='14'
end
if (tempsimon < maxi_simon and uservariables["deftempmaxisimon"] == 1) then
	commandArray[#commandArray + 1]={[radiateur_simon]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxisimon']='0'} --assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre simon#température chambre Simon '..tempsimon..' °C repassée sous le maximum autorisé '..maxi_simon..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre Simon '..tempsimon..' °C repassée sous le maximum autorisé '..maxi_simon..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette	
	commandArray ['Variable:texte_alerte_sonore']='15'
end
if (templuc < maxi_luc and uservariables["deftempmaxiluc"] == 1) then
	commandArray[#commandArray + 1]={[radiateur_luc]='Off'}--éteint le radiateur
	commandArray[#commandArray + 1]={['Variable:deftempmaxiluc']='0'} --assigner la valeur 0 à la variable utilisateur empéchant la remise en route du radiateur
	commandArray[#commandArray + 1]={['SendEmail']= 'domoticz: Alerte température chambre luc#température chambre Luc '..templuc..' °C repassée sous le maximum autorisé '..maxi_luc..' °C - chauffage de nouveau possible pour cette pièce#TONADRESSEMAIL@gmail.com'}
	commandArray ['Variable:pushbullet']='température chambre Luc '..templuc..' °C repassée sous le maximum autorisé '..maxi_luc..' °C - chauffage de nouveau possible pour cette pièce'
	--alerte sur tablette
	commandArray ['Variable:texte_alerte_sonore']='16'	
end
--print('tempsalon '..tempsalon)
--print('thermostat salon '..thermostat_salon)
--print('maxitemp '..maxitemp)
--print('maxisalon '..maxi_salon)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- gestion de la discordance entre un radiateur allumé et sa variable d'état qui est à 0.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (uservariables["etatradiateursdb"] == 0 and otherdevices[radiateur_sdb] == 'On') then
	commandArray[radiateur_sdb]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur salle de bain# radiateur en marche alors que la variable étatradiateursdb est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurcuisine"] == 0 and otherdevices[radiateur_cuisine] == 'On') then 
	commandArray[radiateur_cuisine]='Off'--éteint le radiateur
	commandArray[radiateur_salon]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur cuisine# radiateur en marche alors que la variable étatradiateurcuisine est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateursalon"] == 0 and otherdevices[radiateur_salon] == 'On') then
	commandArray[radiateur_salon]='Off'--éteint le radiateur
	commandArray[radiateur_cuisine]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur salon# radiateur en marche alors que la variable étatradiateursalon est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurparents"] == 0 and otherdevices[radiateur_parents] == 'On') then
	commandArray[radiateur_parents]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur parents# radiateur en marche alors que la variable étatradiateurparents est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateursimon"] == 0 and otherdevices[radiateur_simon] == 'On') then
	commandArray[radiateur_simon]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur simon# radiateur en marche alors que la variable étatradiateursimon est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurluc"] == 0 and otherdevices[radiateur_luc] == 'On') then
	commandArray[radiateur_luc]='Off'--éteint le radiateur
	commandArray['SendEmail']= 'domoticz: discordance radiateur luc# radiateur en marche alors que la variable étatradiateurluc est à 0. Extinction du radiateur pour cette pièce#TONADRESSEMAIL@gmail.com'
end
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- gestion de la discordance entre un radiateur éteint et sa variable d'état qui est à 1.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
if (uservariables["etatradiateursdb"] == 1 and otherdevices[radiateur_sdb] == 'Off') then
	commandArray ['Variable:etatradiateursdb']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur sdb# radiateur arrêté alors que la variable étatradiateursdb est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurcuisine"] == 1 and otherdevices[radiateur_cuisine] == 'Off') then
	commandArray ['Variable:etatradiateurcuisine']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur cuisine# radiateur arrêté alors que la variable étatradiateurcuisine est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateursalon"] == 1 and otherdevices[radiateur_salon] == 'Off') then 
	commandArray ['Variable:etatradiateursalon']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur salon# radiateur arrêté alors que la variable étatradiateursallon est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurparents"] == 1 and otherdevices[radiateur_parents] == 'Off') then
	commandArray ['Variable:etatradiateurparents']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur parents# radiateur arrêté alors que la variable étatradiateurparents est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateursimon"] == 1 and otherdevices[radiateur_simon] == 'Off') then
	commandArray ['Variable:etatradiateursimon']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur simon# radiateur arrêté alors que la variable étatradiateursimon est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end
if (uservariables["etatradiateurluc"] == 1 and otherdevices[radiateur_luc] == 'Off') then
	commandArray ['Variable:etatradiateurluc']='0' --variable pour eviter la repetition des ordres d'allumage/extinction
	commandArray['SendEmail']= 'domoticz: discordance radiateur luc# radiateur arrêté alors que la variable étatradiateurluc est à 1. Mise à zéro de la variable étatradiateur#TONADRESSEMAIL@gmail.com'
end

end
return commandArray
PI3+, Buster, Domoticz V2020.2, rflink, zwave, chauffage piloté par qubino, sondes oregon et Vil1d, boite aux lettres détection passage facteur, volets roulants qubino fibaro.
walloux1981
Messages : 13
Inscription : 03 janv. 2017, 19:49

Re: Recherche d'un script simple pour chauffage electrique

Message par walloux1981 »

hello,

Moi perso aprè avoir essayer plusieurs méthode je me suis orienté vers celui la

https://easydomoticz.com/forum/viewtopi ... =17&t=2608

créé par Nissa il est un peu long a mettre en place mais il fait parfaitement le boulot
- parametre de temperature de tel a tel heure par zone
- reglage de temperature desiré
- possibilité de passer en mode manuel

Honnetement c'est le mieux que j'ai trouvé

Je te joint une image de mon monitor geré sur une tablette das le salon

Cordialement
Pièces jointes
monitor.PNG
monitor.PNG (256.04 Kio) Consulté 12871 fois
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: Recherche d'un script simple pour chauffage electrique

Message par Dim33 »

Bonjour,

Merci pour l'ensemble de vos réponses. Entre le 10 juillet et aujourd'hui, j'ai pas mal arpenté le forum et épluché les différents scripts pour finir par créer le mien. Ce script est composé de morceaux piochés dans différents scripts et notamment celui que tu me conseilles.

Pour faire simple, mon script permet :

* De gérer 4 modes (4 thermostats avec un planning différent) :
- Normal (boulot en semaine)
- Vacances (présent à la maison, planning identique au weekend mais tous les jours)
- Eco (absent mais pas trop longtemps 1 jour ou 2)
- Absent (absence prolongée)
Le choix du mode passe par un Switch Selector.

* Si une sonde ne répond pas (envoi d'un SMS et d'un mail), 3 possibilités : bascule sur la sonde de la chambre d'a coté, arrêt du chauffage ou maintien sur On. Pour l'instant, mon script tourne avec la bascule sur une autre sonde.

* De Mesurer la conso de la pièce.

Sur l'aspect esthétique, j'ai modifié l'ensemble des icônes de Domoticz que je trouve vieillottes (icônes piochées sur différents forums), changé de thème (as_grey)..... etc

J'ai également rajouté un script pour les jours fériés pour que ça bascule automatiquement en mode vacances (si mode Normal activé). J'ai pu le tester aujourd'hui :D

Je posterai mon script dans un post dédié pour la communauté. Je le peaufine encore un peu mais il est parfaitement fonctionnel pour une pièce, reste à le décliner pour 2 autres chambres et le salon. J'aurai besoin certainement de pros du lua pour me proposer des optimisations.

Par contre, je n'ai pas encore abordé Monitor, une des prochaines étapes.
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
cyberbob
Messages : 511
Inscription : 28 nov. 2016, 19:43
Localisation : Belgique

Re: Recherche d'un script simple pour chauffage electrique

Message par cyberbob »

Slt,
C'est vrais que cela arrive qu'une sonde de t° Oregon reste muette quelques heures (pas plus) et reviens a la normale sans raison, avec de bonne pile et portée correcte. C'est donc intéressant d'en tenir compte dans le script.
Dim33 a écrit :... Je posterai mon script dans un post dédié pour la communauté. Je le peaufine encore un peu mais il est parfaitement fonctionnel pour une pièce, reste à le décliner pour 2 autres chambres et le salon. J'aurai besoin certainement de pros du lua pour me proposer des optimisations.
Merci de partager aussi sur le forum ton script lorsqu'il seras fonctionnel, tu recevras surement de l'aide pour l'optimiser en temps voulu.
Je vais me lancer aussi dans un script LUA pour l'hivers prochain et vais beaucoup m'inspirer de vos réalisations.
Cordialement.
Domoticz Stable V4.9700 sur Synology DSM 6.2 / 2 x RFlink V48.4 - 433.92MHz(Dio/Chacon) & 433.42MHz(RTS) / Script en LUA & Blocky
Dim33
Messages : 209
Inscription : 29 janv. 2017, 23:19

Re: Recherche d'un script simple pour chauffage electrique

Message par Dim33 »

NUC sous Ubuntu Server / RFXCom / Domoticz Version: 2020.2
Répondre