Aller au contenu

Un Vd Smart Thermostat


Cisco

Messages recommandés

Bonjour a tous,

 

L'hvier approche et je vais redémarrer mes radiateurs. Je souhaiterai essayer d'améliorer mon système qui est basé seulement sur les panneaux de chauffage et un hystérésis.

J'ai vu que pour d'autre box, des gars avaient été plus loin et avaient codé un thermostat plus ou moins PID.

 

Avant de me lancer dans la démarche de coder un tel VD en LUA pour la HC2, je voulais être sur que personne ne l'avait fait avant. J'ai vu que le sujet revenait souvent sur le tapis dans différent topic mais je ne penses pas que quelqu'un l'ai déja fait.

 

Savez-vous si ce merveilleux VD existe déja ?

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

J'avais aussi jeter un Å“il la dessus l'an passé. Mais finalement pas besoin chez moi, j'y  arrive bien avec le panneau de chauffage + tête Danfoss. Mais effectivement, je pense que tu trouveras un paquet de personne intéressée.

Lien vers le commentaire
Partager sur d’autres sites

Intéressant ce thread de TLD.

Moi je suis loin de tout ça pour le moment avec ma seule gestion horaire des ordres ECO et CONFORT...

Je devrait pouvoir très largement améliorer ça mais entre les changements de radiateurs, les thermostats et des modules FP 6 ordres et surtout le bidget que je n'ai pas encore. Je ne sais pas trop vers où aller...

Ce qui est sûr c'est que le confort de mon chauffage actuel n'est pas satisfaisant.

Lien vers le commentaire
Partager sur d’autres sites

Très intéressé également ! 

C'est le manque de plugin thermostat et de gestion des sondes via RFXCOM qui m'a fait hésiter longtemps avant de migrer sur la HC2...

 

J'avais bookmarqué le site d'Antor avec son plugin pour Vera à  l'époque :

http://www.antor.fr/apps/smart-virtual-thermostat/

(Je ne sais pas s'il est toujours d'actualité c'est bloqué par le proxy du boulot)

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Bon j'ai un peu avancé

 

pas autant que j'aurais voulus car j'ai pas mal galéré sur plusieurs trucs mais bon passons

 

Je me suis basé sur le thermostat de l'eedomus (http://www.domo-blog.fr/maj-gestion-dun-chauffage-centrale-via-leedomus/) qui n'ait pas un vrai PID (car ils ont simplifiés la dérivé) mais qui en est très proche.

 

Le module attaché fonctionne en v4 mais il est encore en phase beta. Il permet d'utiliser les infos du panneau de chauffage ainsi que la temperature vacances qui est ici associé à  hors gel. Il prend en parametre une sonde, un radiateur, un panneau de chauffage et une variable Globale "ThermostatMode".

J'utilise les labels pour les modifications du mode Forcé

 

Pour l'utiliser il faut :

   Il faut créer un panneau de chauffage puis récupérer son id afin de le renseinger dans la main loop

   Il faut créer une variable Globale "ThermostatMode" qui peut prendre 4 valeurs : Auto, HorsGel, Forced, OFF

   Il faut renseigner dans la boucle principale les champs suivants : IntTempSensorID, RadDeviceID, HeatingPanelID

 

Les pb connus :

   Pb d'affichage des températures

   Dut à  l'utilisation de la boucle principale, il n'y a pas détection lors du changement de la varaible globale du mode du chauffage et il faut attendre la fin du cycle en cours pour que la modif soit prise en compte

 

post-656-0-02612400-1444404472_thumb.png

 

Voici le code de la boucle principale :

 
--[[
%% autostart
%% properties
ThermostatMode
%% globals
ThermostatMode
--]]

	
local DureeCycle = 60		-- Durée d'un cycle de chauffe en minutes
local DureeCycleMini = 6	-- Durée minimum de chauffe durant un cycle en minutes
local DureeForcedDefault = 60		-- Durée par défaut d'un cylé forcé en minutes
local TempForcedDefault = 22		-- Température par défaut en mode forcé 

local ExtTempSensorID = 0	-- Renseigner les ids de vos sondes exterieures, Si vous laissez à  0 alor son utilise la température récupéré par le HC2
local IntTempSensorID = 41	-- Renseigner les ids de vos sondes interieures
local RadDeviceID = 177		-- Renseigner les ids de vos radiateurs
local HeatingPanelID = 163	-- Renseigner l'id de votre panneau de chauffage

local CoeffProp = 0.6			-- Coefficient propositionnel
local CoeffDepThermique = 0.01  -- Coefficient de déperdition thermique
local InfluenceExt = 0.3		-- Coefficient d'influence de la température exterieure

local RadOn = "turnOff"		-- Commande de mise sous tension du radiateur
local RadOff = "turnOn"		-- Commande de mise hors tension du radiateur

-------------------------------------
--   Ne rien modifier ci-dessous   --
-------------------------------------

local TempHorsGel = 0		-- Température par défaut de temp Hors-Gel
local TempConsigne = 0		-- Température par défaut de temp Consigne 
local MobileId = fibaro:getGlobalValue("MobileIdCortex");   -- Renseigner l'id du portable

local InfluenceInt = 1 - InfluenceExt
local RadMode = fibaro:getGlobalValue("ThermostatMode");   

function getHC2TempExt()
	HC2 = Net.FHttp("127.0.0.1",11111);
	local response, status, errorCode = HC2:GET("/api/weather");
 
	if (tonumber(errorCode) == 0) then 
		jsonTable = json.decode(response);
	end
 
	local HC2TempExt = (jsonTable.Temperature);
	return HC2TempExt
end


function getHC2TempPanel()

	local currentDay = string.lower(os.date("%A"));
	local currentTime = tonumber(os.date("%H%M"));

	local HC2 = Net.FHttp("127.0.0.1",11111)
	response, status, errorCode = HC2:GET("/api/panels/heating?id="..HeatingPanelID)
	
	if tonumber(status) == 200 then
		local jsonTable = json.decode(response)	-- On parse le tableau

		-- On définit nos variables en fonction du jour de la semaine
		if (currentDay == 'monday') then
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.monday.morning.hour,jsonTable.properties.monday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.monday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.monday.day.hour,jsonTable.properties.monday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.monday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.monday.evening.hour,jsonTable.properties.monday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.monday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.monday.night.hour,jsonTable.properties.monday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.monday.night.temperature)
		
		elseif (currentDay == 'tuesday') then
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.tuesday.morning.hour,jsonTable.properties.tuesday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.tuesday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.tuesday.day.hour,jsonTable.properties.tuesday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.tuesday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.tuesday.evening.hour,jsonTable.properties.tuesday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.tuesday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.tuesday.night.hour,jsonTable.properties.tuesday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.tuesday.night.temperature)
		
		elseif (currentDay == 'wednesday') then
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.wednesday.morning.hour,jsonTable.properties.wednesday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.wednesday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.wednesday.day.hour,jsonTable.properties.wednesday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.wednesday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.wednesday.evening.hour,jsonTable.properties.wednesday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.wednesday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.wednesday.night.hour,jsonTable.properties.wednesday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.wednesday.night.temperature)		

		elseif (currentDay == 'thursday') then
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.thursday.morning.hour,jsonTable.properties.thursday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.thursday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.thursday.day.hour,jsonTable.properties.thursday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.thursday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.thursday.evening.hour,jsonTable.properties.thursday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.thursday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.thursday.night.hour,jsonTable.properties.thursday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.thursday.night.temperature)
		
		elseif (currentDay == 'friday') then		
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.friday.morning.hour,jsonTable.properties.friday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.friday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.friday.day.hour,jsonTable.properties.friday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.friday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.friday.evening.hour,jsonTable.properties.friday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.friday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.friday.night.hour,jsonTable.properties.friday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.friday.night.temperature)
			
		elseif (currentDay == 'saturday') then
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.saturday.morning.hour,jsonTable.properties.saturday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.saturday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.saturday.day.hour,jsonTable.properties.saturday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.saturday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.saturday.evening.hour,jsonTable.properties.saturday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.saturday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.saturday.night.hour,jsonTable.properties.saturday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.saturday.night.temperature)	
			
		elseif (currentDay == 'sunday') then		
			 jourMorningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.sunday.morning.hour,jsonTable.properties.sunday.morning.minute))
			 jourMorningTemperature =  tonumber(jsonTable.properties.sunday.morning.temperature)
			 jourDayTime =  tonumber(string.format("%02d%02d",jsonTable.properties.sunday.day.hour,jsonTable.properties.sunday.morning.minute))
			 jourDayTemperature =  tonumber(jsonTable.properties.sunday.day.temperature)
			 jourEveningTime =  tonumber(string.format("%02d%02d",jsonTable.properties.sunday.evening.hour,jsonTable.properties.sunday.evening.minute))
			 jourEveningTemperature =  tonumber(jsonTable.properties.sunday.evening.temperature)
			 jourNightTime =  tonumber(string.format("%02d%02d",jsonTable.properties.sunday.night.hour,jsonTable.properties.sunday.night.minute))
			 jourNightTemperature =  tonumber(jsonTable.properties.sunday.night.temperature)
		end
	
		if (currentTime >= jourMorningTime and currentTime < jourDayTime) then 
			 jourPeriode =  "Morning"
			 jourPeriodeTime =  jourMorningTime
			 jourPeriodeTemperature =  jourMorningTemperature

		elseif (currentTime >= jourDayTime and currentTime < jourEveningTime) then 
			 jourPeriode =  "Day"
			 jourPeriodeTime =  jourDayTime
			 jourPeriodeTemperature =  jourDayTemperature

		elseif (currentTime >= jourEveningTime and currentTime < jourNightTime) then 
			 jourPeriode =  "Evening"
			 jourPeriodeTime =  jourEveningTime
			 jourPeriodeTemperature =  jourEveningTemperature

		elseif (currentTime >= jourNightTime and currentTime < jourMorningTime) then 
			 jourPeriode =  "Night"	
			 jourPeriodeTime =  jourNightTime
			 jourPeriodeTemperature =  jourNightTemperature
		end
						
		fibaro:debug("Day = "..currentDay.." | Période = "..jourPeriode.." | Temp Consigne = "..jourPeriodeTemperature)	
		return jourPeriode, jourPeriodeTemperature
		
	else
		fibaro:log("--- ERROR ---")
		fibaro:debug('status='..status..', errorCode='..errorCode..', response='..response)
	end
end

function getHC2TempVacation()

	local currentDay = string.lower(os.date("%A"));
	local currentTime = tonumber(os.date("%H%M"));

	local HC2 = Net.FHttp("127.0.0.1",11111)
	response, status, errorCode = HC2:GET("/api/panels/heating?id="..HeatingPanelID)
	
	if tonumber(status) == 200 then
		local jsonTable = json.decode(response)	-- On parse le tableau

		TempVacation = tonumber(jsonTable.properties.vacationTemperature)
		return TempVacation
	else
		fibaro:log("--- ERROR ---")
		fibaro:debug('status='..status..', errorCode='..errorCode..', response='..response)
	end
end


while true do
	RadMode = fibaro:getGlobalValue("ThermostatMode");   
	IntLastTemp = fibaro:getValue(IntTempSensorID,"value");
	fibaro:debug("La Température intérieure relevé est de : " .. IntLastTemp);    -- affichage de la Température Intérieure relevé par la sonde

	if (ExtTempSensorID == 0) then
		ExtLastTemp = getHC2TempExt()
		fibaro:debug("La Température Exterieure relevé est de : " .. ExtLastTemp);   -- affichage de la Température Extérieure récupéré par la HC2
	else 
		ExtLastTemp = fibaro:getValue(ExtTempSensorID,"value")
		fibaro:debug("La Température Exterieure relevé est de : " .. ExtLastTemp);   -- affichage de la Température Exterieure relevé par la sonde
	end
		
	if (RadMode == "Auto") then 
		PeriodeTempConsigne, TempConsigne = getHC2TempPanel()

		local IntImpact  = (CoeffProp * (TempConsigne - IntLastTemp))
		local ExtImpact  = (CoeffDepThermique * (TempConsigne - ExtLastTemp))
		
		RadHotPercent  = (100 * ((InfluenceExt * ExtImpact) + (InfluenceInt * IntImpact)))
		RadHotTime = math.ceil(DureeCycle * ((InfluenceExt * ExtImpact) + (InfluenceInt * IntImpact)))
	
		if (math.abs(RadHotTime)) >= DureeCycle then
			RadHotTime = DureeCycle
		elseif	(math.abs(RadHotTime)) <= DureeCycleMini then	
			RadHotTime = DureeCycleMini
		else
			RadHotTime = math.abs(RadHotTime)
		end
		
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblModeChauffage.value", RadMode );		-- On mets à  jour l'étiquette Mode du chauffage
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpInterieure.value", IntLastTemp );	-- On mets à  jour l'étiquette Temp Interieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpExterieure.value", ExtLastTemp );	-- On mets à  jour l'étiquette Temp Exterieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempConsigne.value", TempConsigne );	-- On mets à  jour l'étiquette Temp de la consigne
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempHorsGel.value", "Not Used" );		-- On mets à  jour l'étiquette Temp Hors-gel
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblDureeForce.value", "Not Used" );		-- On mets à  jour l'étiquette Duree du mode Force
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempForce.value", "Not Used" );		-- On mets à  jour l'étiquette Temp du mode Force

		fibaro:debug("La Température de consigne est de : " .. TempConsigne);     -- affichage de la Temp Consigne
		fibaro:debug("Le radiateur chauffera pendant : " .. RadHotPercent .. " % de la durée du cycle ("..DureeCycle..") soit environ : ".. RadHotTime .. " minutes");   

	elseif (RadMode == "HorsGel") then 
		TempHorsGel = getHC2TempVacation()
				
		local IntImpact  = (CoeffProp * (TempHorsGel - IntLastTemp))
		local ExtImpact  = (CoeffDepThermique * (TempHorsGel - ExtLastTemp))
		
		RadHotPercent  = (100 * ((InfluenceExt * ExtImpact) + (InfluenceInt * IntImpact)))
		RadHotTime = math.ceil(DureeCycle * ((InfluenceExt * ExtImpact) + (InfluenceInt * IntImpact)))
	
		if (TempHorsGel > tonumber(IntLastTemp)) then
			if (math.abs(RadHotTime)) >= DureeCycle then
				RadHotTime = DureeCycle
			elseif	(math.abs(RadHotTime)) <= DureeCycleMini then	
				RadHotTime = 0
			else
				RadHotTime = math.abs(RadHotTime)
			end
		else
			RadHotTime = 0
		end
			
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblModeChauffage.value", RadMode );		-- On mets à  jour l'étiquette Mode du chauffage
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpInterieure.value", IntLastTemp );	-- On mets à  jour l'étiquette Temp Interieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpExterieure.value", ExtLastTemp );	-- On mets à  jour l'étiquette Temp Exterieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempConsigne.value", "Not Used" );	-- On mets à  jour l'étiquette Temp de la consigne
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempHorsGel.value", TempHorsGel );	-- On mets à  jour l'étiquette Temp Hors-gel
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblDureeForce.value", "Not Used" );		-- On mets à  jour l'étiquette Duree du mode Force
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempForce.value", "Not Used" );		-- On mets à  jour l'étiquette Temp du mode Force
	
		fibaro:debug("La Température Hors-Gel est de : " .. TempHorsGel);     -- affichage de la Temp Hors-Gel
		fibaro:debug("Le radiateur chauffera pendant : " .. RadHotPercent .. " % de la durée du cycle ("..DureeCycle..") soit environ : ".. RadHotTime .. " minutes");   
	
		
	elseif (RadMode == "Forced") then 
		TempForced = fibaro:getValue(fibaro:getSelfId(), "ui.lblTempForce.value")	
		DureeForced = fibaro:getValue(fibaro:getSelfId(), "ui.lblDureeForce.value")	
		
		if (TempForced == "Not Used") then 
			TempForced = TempForcedDefault
		else 
			TempForced = TempForced
		end
		
		if (DureeForced == "Not Used") then 
			DureeForced = DureeForcedDefault
		else 
			DureeForced = tonumber(DureeForced)
		end
				
		if (TempForced >= IntLastTemp) then
			RadHotTime = DureeForced		
		else 
			RadHotTime = 0
		end

		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblModeChauffage.value", RadMode );		-- On mets à  jour l'étiquette Mode du chauffage
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpInterieure.value", IntLastTemp );	-- On mets à  jour l'étiquette Temp Interieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpExterieure.value", ExtLastTemp );	-- On mets à  jour l'étiquette Temp Exterieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempConsigne.value", "Not Used" );	-- On mets à  jour l'étiquette Temp de la consigne
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempHorsGel.value", "Not Used" );		-- On mets à  jour l'étiquette Temp Hors-gel
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblDureeForce.value", DureeForced );		-- On mets à  jour l'étiquette Duree du mode Force
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempForce.value", TempForced );		-- On mets à  jour l'étiquette Temp du mode Force
		
		fibaro:debug("La Température Forcé est de : " .. TempForced .." et la durée du cycle Forcé est de : " ..DureeForced.." minutes");     -- affichage de la Temp Forcé et de sa durée

		
	elseif (RadMode == "OFF") then 

		RadHotTime = 0
				
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblModeChauffage.value", RadMode );		-- On mets à  jour l'étiquette Mode du chauffage
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpInterieure.value", IntLastTemp );	-- On mets à  jour l'étiquette Temp Interieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpExterieure.value", ExtLastTemp );	-- On mets à  jour l'étiquette Temp Exterieure
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempConsigne.value", "Not Used" );	-- On mets à  jour l'étiquette Temp de la consigne
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempHorsGel.value", "Not Used" );		-- On mets à  jour l'étiquette Temp Hors-gel
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblDureeForce.value", "Not Used" );		-- On mets à  jour l'étiquette Duree du mode Force
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTempForce.value", "Not Used" );		-- On mets à  jour l'étiquette Temp du mode Force
		
	end

	if (RadHotTime > 0) then
		fibaro:call(RadDeviceID, RadOn);	-- Mise sous tension du radiateur
			fibaro:debug("Le radiateur "..RadDeviceID.." de la chambre01 a été allumé en mode "..RadMode);   
			fibaro:call(MobileId, "sendPush", "Le radiateur "..RadDeviceID.." de la chambre01 a été allumé en mode "..RadMode)	-- On envoie une notif sur le portable id MobileIdCortex
		fibaro:sleep(RadHotTime*60*1000);	-- durée de chauffe durant un cycle 
			fibaro:debug("Le radiateur "..RadDeviceID.." de la chambre01 a finis son temps de chauffe de "..RadHotTime.. " minutes en mode "..RadMode);   
			fibaro:call(MobileId, "sendPush", "Le radiateur "..RadDeviceID.." de la chambre01 a finis son temps de chauffe de "..RadHotTime.. " minutes en mode "..RadMode)  -- On envoie une notif sur le portable id MobileIdCortex
		fibaro:call(RadDeviceID, RadOff);	-- Mise hors tension du radiateur
			fibaro:debug("Le radiateur "..RadDeviceID.." de la chambre01 a été éteint en mode "..RadMode);   
			fibaro:call(MobileId, "sendPush", "Le radiateur "..RadDeviceID.." de la chambre01 a été éteint en mode "..RadMode)	-- On envoie une notif sur le portable id MobileIdCortex
	else
		fibaro:call(RadDeviceID, RadOff);	-- Mise hors tension du radiateur
			fibaro:call(MobileIdCortex, "sendPush", "Le radiateur "..RadDeviceID.." de la chambre01 a été éteint  en mode "..RadMode)	-- On envoie une notif sur le portable id MobileIdCortex
	end
	
	fibaro:sleep((DureeCycle-RadHotTime)*60*1000);	-- durée restante avant le prochain cycle de chauffe

end


Voici le module :

 

ThermostatRoom01_v0.01.vfib

 

Bon weekend à  tous

  • Upvote 2
Lien vers le commentaire
Partager sur d’autres sites

merci  pour ce VD je vais regarder si utilisable chez moi.

 

ma très faible contribution sur l'affichage des temps; de mémoire faut rajouter un  .. " " à  la fin

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTmpInterieure.value", IntLastTemp  .. " ");
Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...
×
×
  • Créer...