Aller au contenu
Steven

Gestion Chauffage Avec Sondes Oregon, Netatmo, Json, Etc...

Recommended Posts

Depuis la version 4.x les sliders ne peuvent recevoir que des chiffres entiers :(

 

Je te propose de remplacer les slider par des labels, le code est le même et tu pourras y stocker les données sans te soucier des virgules ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci STEVEN .....

Je me savais pas un expert en code LUA , mais là  ne pas réussir a recopier un code !!!! je ne comprenais plus rien ..... 

bon we

Partager ce message


Lien à poster
Partager sur d’autres sites

Au passage ça ne sert à  rien de réinventer la roue quand le script ultime existe déjà ... et il parait même que ça fonctionne très bien : http://sourceforge.net/p/fhem/code/HEAD/tree/trunk/fhem/FHEM/98_PID20.pm

Je ne pense pas être assez calé pour adapter ça pour la HC2 mais si on avait un plugin "Regulation_PID", le pied quoi !

 

 

hello,

 

juste pour savoir si quelqu'un avait avancé sur une éventuelle implémentation du PID en LUA pour la HC2 ?

C est largement hors de ma portée pour le moment  :'(

 

@+ XSR

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @Steven,

 

j'ai un soucis avec ce module depuis la V4, l'as tu corrigé? (voir photo).

 
si on modifie la fin avec      .." "        , cela corrige l'affichage...
fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", oldCorr.."°")
 mais comme on fait appel à  la valeur du label ça ne fonctionne plus.
local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")

Partager ce message


Lien à poster
Partager sur d’autres sites

Voici le code que j'ai derrière le bouton [-1] et qui fonctionne. L'idée est de rajouter " " à  la fin et non pas "°" ainsi il est aisé de convertir la valeur en numérique.
 

local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")
if (oldCorr ~= nil) then
  	local undef = "" .. oldCorr 
  	if (undef == "") then
      	   oldCorr = 0
    	   fibaro:debug("nil" .. oldCorr)
        else
		oldCorr = tonumber(oldCorr)
  	end
else
  	oldCorr = 0
end

oldCorr = tonumber(oldCorr) - 1

fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", oldCorr.." ")
fibaro:call(fibaro:getSelfId(), "pressButton", "2")

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

super rapide la réponse  ;)

 c'est mon symbole qui me créé problème ^_^   , j'avais bien rajouté "tonumber" mais forcement il à  fallut que je rajoute un grigri  :7:

merci @Steven , ton VD est super, je peux vraiment régler mon chauffage au oignons, j'en ai 11 pour chaque chauffages, 1 par zones (3) et 1 qui gère les zones.

Partager ce message


Lien à poster
Partager sur d’autres sites

:o  Moi j'ai qu'un poà«le a pellets donc un seul module mais je l'utilise à  fond.  J'y ai même rajouté une estimation des pellets restants basés sur la consommation .. il est fou ce Steven  :P

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Je l'ai beaucoup modifier pour qu'il puisse recevoir l'ordre de plusieurs règle du panneau de chauffage, l'option manuel individuel et même comment réagir en mode alarme.

Mais la base reste et est vraiment exactement ce qu'il me fallait.

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour à  tous,

 

j ai ma hc2 depuis 3 semaines et je cherche deseperement à  afficher la valeur de mes sondes oregon de ma zibase

j ai installe le script zibase qui fonctionne parfaitement, j ai aussi créé les variables OSxxxxxxx_V1 etc, qui se mettent à  jour automatiquement

mais je ne trouve pas le moyen de les afficher dans un module virtuel

 

oui je sais je suis une buse!!

 

mais qd je lis tout ce que vous etes capable faire je me dis que ca doit vous prendre 1mn pour m expliquer comment faire!!

 

mon hc2 est en version 4.056 

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour steven,

 

comment créer ton un scénario qui "appuie sur le bouton rafraichir" pour gérer ton module (je suis complément nul!)

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

bonjour steven,

 

comment créer ton un scénario qui "appuie sur le bouton rafraichir" pour gérer ton module (je suis complément nul!)

merci

Partager ce message


Lien à poster
Partager sur d’autres sites

il faut de servir de GEA

 

avec cette ligne

GEA.add(true, 3*60, "",{{"VirtualDevice", id["GENERAL"], 1},{"Repeat"}}) 

Partager ce message


Lien à poster
Partager sur d’autres sites

tu suis ce tuto

 

http://www.domotique-fibaro.fr/index.php/topic/1082-gea-gestionnaire-d%C3%A9v%C3%A9nements-automatique/

 

est la ligne est 

GEA.add(true, 3*60, "",{{"VirtualDevice", ID de ton VD de chauffage, 1},{"Repeat"}}) 

pour un rafraîchissement toute les 3 min.

 

j'ai pas de temps maintenant mais si tu y arrive pas d'ici vendredi, je t’aiderai.

Partager ce message


Lien à poster
Partager sur d’autres sites

ok merci je vois demain pour mettre en place :17:

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci beaucoup pour cette solution très complète et paramétrable.

 

je voulais optimiser la gestion de mon chauffage et cela m'a permis de réaliser cela très facilement.

 

j'ai opté pour une éxécution a partir de la boucle principale, cela fonctionne très bien. exemple pour une exécution toutes les 5 minutes : 

fibaro:call(fibaro:getSelfId(), "pressButton", "2")
fibaro:sleep (5*60*1000)

 

pour mes optimisation lié a ma chaudière, voici le résultat :  

-- Méthode à  appeler toutes les X secondes (30) par 
-- un scénario afin de rafraichir ce programme
if (not Heating) then


Heating = {}


Heating.hysteresis = 0.3 --- +/- de chauffage
Heating.holidays = 8 -- température souhaitée du mode vacances
Heating.stefa = 5 -- id du panneau de chauffage
Heating.admin = "admin"
   Heating.password = "azerty"
  
local selfId = fibaro:getSelfId(); 


Heating.started = (fibaro:getValue(selfId, "ui.lblRunning.value") == "oui")


-- Return la température de référence
Heating.getActualTemp = function()
return tonumber(fibaro:getValue(58, "value"))
end


-- module(s) a allumer/éteindre --- ou autre
   -- choice= turnOn | turnOff
   Heating.switch1 = function(choice)
fibaro:call(182, choice)
end
Heating.switch2 = function(choice)
fibaro:call(173, choice)
end
Heating.switch3 = function(choice)
fibaro:call(175, choice)
end


  
-- Mise en chauffe
Heating.warmUp = function()
-- allumage du système
     local diff = Heating.getMaxTemp() - Heating.getActualTemp()
if (diff < 1) then
fibaro:debug("Heating slowly...")
Heating.switch1("turnOn")
       Heating.switch2("turnOff")
       Heating.switch3("turnOff")
elseif (diff < 2) then
   fibaro:debug("Heating ...")
Heating.switch1("turnOn")
Heating.switch2("turnOn")
Heating.switch3("turnOff")
else
            fibaro:debug("Heating more ...")
Heating.switch1("turnOn")
Heating.switch2("turnOn")
Heating.switch3("turnOn")
end
fibaro:debug("Warming Up...")
Heating.started = true
     fibaro:call(selfId, "setProperty", "ui.lblRunning.value", "oui")
     fibaro:call(selfId, "setProperty", "currentIcon", 5)
end


-- Garde le chauffage allumé
    -- dans mon cas je ralenti le chauffage
    -- quand il reste plus euq 1 degré a atteindre
Heating.keepOn = function()
fibaro:call(selfId, "setProperty", "currentIcon", 6)
     local diff = Heating.getMaxTemp() - Heating.getActualTemp()
if (diff < 1) then
fibaro:debug("Heating slowly...")
Heating.switch1("turnOn")
       Heating.switch2("turnOff")
       Heating.switch3("turnOff")
elseif (diff < 2) then
   fibaro:debug("Heating ...")
Heating.switch1("turnOn")
Heating.switch2("turnOn")
Heating.switch3("turnOff")
else
fibaro:debug("Heating more ...")
            Heating.switch1("turnOn")
Heating.switch2("turnOn")
Heating.switch3("turnOn")
end
end


-- Eteint le système de chauffage
Heating.stop = function()
Heating.switch1("turnOff")
Heating.switch2("turnOff")
Heating.switch3("turnOff")
fibaro:debug("Sleeping")
Heating.started = false
        fibaro:call(selfId, "setProperty", "ui.lblRunning.value", "no")
        fibaro:call(selfId, "setProperty", "currentIcon", 7)
end


-- Optenir la température minimum requise
Heating.getMinTemp = function()
return Heating.getTempPanel() - Heating.hysteresis
end


-- Optenir la température maximum requise
Heating.getMaxTemp = function()
return Heating.getTempPanel() + Heating.hysteresis
end


-- Démarrage du script
Heating.run = function()
    
     if (fibaro:getGlobal("Chauffage") == "OFF") then
Heating.stop()
return      
        end


     fibaro:debug("Check temperature")
-- It is too cold, turn on the heating system
if (Heating.getActualTemp() < Heating.getMinTemp()) then
       fibaro:debug("Warm it up")
Heating.warmUp()
-- It is warm enough, stop it
elseif  (Heating.getActualTemp() > Heating.getMaxTemp()) then
       fibaro:debug("Stop it")
Heating.stop()
-- Temperature is goo enough, keep it as it
else
if (Heating.started) then 
         fibaro:debug("Keep it")
Heating.keepOn()
else 
-- wait only it is cold enough to activate it
         fibaro:debug("Sleeping...")
     fibaro:call(selfId, "setProperty", "currentIcon", 8)
end
end
end


-- Méthode de test plus rapide d'écriture
    -- pour les vieux fatigué comme moi
Heating.iif = function(condition, iftrue, iffalse)
if (condition) then
return iftrue
end
return iffalse
end


    -- récupère la température de référence indiqué
    -- dans le pannel de chauffage
    Heating.getTempPanel = function()
     if (fibaro:getGlobal("Chauffage") == "VACANCES") then
           return Heating.holidays
        end
local strefa = Heating.stefa
local day = string.lower(os.date("%A"))
local hour = os.date("%H")
local min = os.date("%M")
local now = 0
local temp = 0
local lasttemp = 0
local mode = ""
local lastmode = ""
HC2 = Net.FHttp("127.0.0.1",80)
HC2:setBasicAuthentication(Heating.admin, Heating.password)
     response = HC2:GET("/api/panels/heating?id="..strefa)
local jsontable =json.decode(response)


local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"} 


        for k,v in pairs(week) do
   if (v == day) then now = k * 100000 + hour * 60 + min end
end
for k,v in pairs(week) do
   for l,w in pairs({"morning","day","evening","night"}) do
     if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then
       temp = jsontable.properties[v][w].temperature
if (v == "monday") then x = "lundi" elseif (v == "tuesday") then x = "mardi" elseif (v == "wednesday") then x = "mercredi" elseif (v == "thursday") then x = "jeudi" elseif (v == "friday") then x = "vendredi" elseif (v == "saturday") then x = "samedi" elseif (v == "sunday") then x = "dimanche" end
if (w == "morning") then y = "matin" elseif (w == "day") then y = "jour" elseif (w == "evening") then y = "soir" elseif (w == "night") then y = "nuit" end
       mode = x .. " .. " .. y
       end
     lasttemp = jsontable.properties[v][w].temperature
if (v == "monday") then x = "lundi" elseif (v == "tuesday") then x = "mardi" elseif (v == "wednesday") then x = "mercredi" elseif (v == "thursday") then x = "jeudi" elseif (v == "friday") then x = "vendredi" elseif (v == "saturday") then x = "samedi" elseif (v == "sunday") then x = "dimanche" end
if (w == "morning") then y = "matin" elseif (w == "day") then y = "jour" elseif (w == "evening") then y = "soir" elseif (w == "night") then y = "nuit" end
     lastmode = x .. " .. " .. y
     end
   end
if (temp == 0) then 
   temp = lasttemp
   mode = lastmode
end
     local oldMode = fibaro:getValue(selfId, "ui.lblMode.value")
fibaro:call(selfId, "setProperty", "ui.lblMode.value", mode )      
if (oldMode ~= mode) then
fibaro:call(selfId, "setProperty", "ui.lblCorr.value", 0)
end
return tonumber(temp)+Heating.getCorrection()       
    end
  
    -- Obtient la correction indiqué par l'utilisateur
   Heating.getCorrection = function()
        local oldCorr = fibaro:getValue(selfId, "ui.lblCorr.value")
        if (oldCorr ~= nil) then
            local undef = "" .. oldCorr 
            if (undef == "") then
                oldCorr = 0
            else
                oldCorr= tonumber(oldCorr)
            end
        else
            oldCorr = 0
        end
return oldCorr       
    end


end




Heating.run()
--fibaro:sleep(heating.timer * 1000)


--fibaro:call(selfId, "pressButton", "1")
--fibaro:debug("Current temp : " .. Heating.getActualTemp())
--fibaro:debug("Min temp : " .. Heating.getMinTemp())
--fibaro:debug("Max temp : " .. Heating.getMaxTemp())
--fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped"))


local selfId = fibaro:getSelfId(); 
-- Gestion de l'affichage
local temp = Heating.getActualTemp()
if (fibaro:getGlobal("Chauffage") == "VACANCES") then 
fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" )  
elseif (fibaro:getGlobal("Chauffage") == "OFF") then 
fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" )
else 
    local cor = ""
    if (Heating.getCorrection() > 0) then
     cor = "(+" .. Heating.getCorrection() .. ")"
    elseif (Heating.getCorrection() < 0) then
     cor = "(" .. Heating.getCorrection() .. ")"
    end
fibaro:call(selfId, "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
end
  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

oui, c'est vrai que GEA n'est pas une obligation mais il est tellement pratique et facile à  mettre en place...

j'ai optimisé le code de @Steven pour des chauffages électrique, 11 au total, voici un de mes code pour la Zone 1:

--salle a manger R1

-- Méthode à  appeler toutes les X secondes (30) par 
-- un scénario afin de rafraichir ce programme
ValeurZ1 = ((fibaro:getGlobal('RTC_Z1')))
local id = {
        Mod_Chauf_Zone1 = 794, cde1 = 352, cde2 = 354, Radiateur = 364, ST814_Salon = 394
	}
if (not Heating) then

	Heating = {}

	Heating.hysteresis = 0.7 --- +/- de chauffage
	Heating.holidays = 17 -- température souhaitée du mode vacances
	Heating.manuel = 19 -- température souhaitée du mode Manuel
    Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal
	fibaro:debug(ValeurZ1)
	Heating.admin = "LOGIN"
  	Heating.password = "MDP"
  
  	Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui")

	local selfId = fibaro:getSelfId(); 
	
	-- Return la température de référence
	Heating.getActualTemp = function()
		return tonumber(fibaro:getValue(id["ST814_Salon"], "value"))
	end

	-- module(s) a allumer/éteindre --- ou autre
  	-- choice= turnOn | turnOff
  	Heating.switch = function(choice)
		--fibaro:call(33, choice)
    fibaro:call(id["Radiateur"], "pressButton", choice);
	end

  
	-- Mise en chauffe
	Heating.warmUp = function()
		-- allumage du système
		fibaro:log("Warming Up...")
		Heating.started = true
    	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui")
    	fibaro:call(selfId, "setProperty", "currentIcon", 1083)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078)
	if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 1 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 ))
	or (fibaro:getGlobal("R1") == "HG") or (fibaro:getGlobal("R1") == "ECO") or (fibaro:getGlobal("R1") == "VACANCES")
	  then
		Heating.switch("1")
	  end	
	end
	
	-- Garde le chauffage allumé
    -- dans mon cas je ralenti le chauffage
    -- quand il reste plus euq 1 degré a atteindre
	Heating.keepOn = function()
		fibaro:call(selfId, "setProperty", "currentIcon", 1084)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078)
    	--local diff = Heating.getMaxTemp() - Heating.getActualTemp()
		--if (diff < 1) then
		--	fibaro:log("Heating slowly...")
		--	Heating.switch("turnOn")
      	--	fibaro:sleep(2*1000)
      	--	Heating.switch("turnOff")	--- We stop it for X minute   
		--else
			fibaro:log("Heating...")
		--end
	end
	
	-- Eteint le système de chauffage
	Heating.stop = function()
		fibaro:log("Sleeping")
		Heating.started = false
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "non")
        fibaro:call(selfId, "setProperty", "currentIcon", 1085)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081)
	if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 0 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) 
	or (fibaro:getGlobal("R1") == "HG") or (fibaro:getGlobal("R1") == "ECO") or (fibaro:getGlobal("R1") == "VACANCES")
	  then
		Heating.switch("4")
	 end
	end

	-- Optenir la température minimum requise
	Heating.getMinTemp = function()
		return Heating.getTempPanel() - Heating.hysteresis
	end

	-- Optenir la température maximum requise
	Heating.getMaxTemp = function()
		return Heating.getTempPanel() + Heating.hysteresis
	end

	-- Démarragedu script
	Heating.run = function()
    if (fibaro:getGlobal("Chauffage") == "OFF") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1081)
	 Heating.stop()
	return 
    elseif (fibaro:getGlobal("R1") == "ECO") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1079)
	 return 
	elseif (fibaro:getGlobal("R1") == "HG") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1082)
	 return  
	end
       	if (fibaro:getGlobal("R1") == "OFF") then
			Heating.stop()
			return      
        end
		
    	--fibaro:debug("Check temperature")
		-- It is too cold, turn on the heating system
		if (Heating.getActualTemp() < Heating.getMinTemp()) then
      		--fibaro:debug("Warm it up")
			Heating.warmUp()
		-- It is warm enough, stop it
		elseif  (Heating.getActualTemp() > Heating.getMaxTemp()) then
      		--fibaro:debug("Stop it")
			Heating.stop()
		-- Temperature is goo enough, keep it as it
		else
			if (Heating.started) then 
        		--fibaro:debug("Keep it")
				Heating.keepOn()
			else 
				-- wait only it is cold enough to activate it
        		fibaro:log("Sleeping...")
    			fibaro:call(selfId, "setProperty", "currentIcon", 1086)
				fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081)
			end
		end
	end
	
	-- Méthode de test plus rapide d'écriture
    -- pour les vieux fatigué comme moi
	Heating.iif = function(condition, iftrue, iffalse)
		if (condition) then
			return iftrue
		end
		return iffalse
	end
	  
    -- récupère la température de référence indiqué
    -- dans le pannel de chauffage
    Heating.getTempPanel = function()
    	if (fibaro:getGlobal("R1") == "VACANCES") then
           return Heating.holidays
         end
       if (fibaro:getGlobal("R1") == "MANUEL") then 
	
	       return Heating.manuel
	     end
		local strefa = Heating.stefa
		local day = string.lower(os.date("%A"))
		local hour = os.date("%H")
		local min = os.date("%M")
		local now = 0
		local temp = 0
		local lasttemp = 0
		local mode = ""
		local lastmode = ""
		HC2 = Net.FHttp("127.0.0.1",80)
		HC2:setBasicAuthentication(Heating.admin, Heating.password)
    	response = HC2:GET("/api/panels/heating?id="..strefa)
		local jsontable =json.decode(response)
		
		local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"}	

        for k,v in pairs(week) do
  			if (v == day) then now = k * 100000 + hour * 60 + min end
		end
		for k,v in pairs(week) do
  			for l,w in pairs({"morning","day","evening","night"}) do
    			if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then
      				temp = jsontable.properties[v][w].temperature
      				mode = v .. " .. " ..w
      			end
    			lasttemp = jsontable.properties[v][w].temperature
    			lastmode = v .. " .. " ..w
    		end
  		end
		if (temp == 0) then 
  			temp = lasttemp
  			mode = lastmode
		end
    	local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value")
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode )      
		if (oldMode ~= mode) then
			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0)
            fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblCorr.value", 0); --VD ZONE 1
            fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "currentIcon", 1087)
		end
		return tonumber(temp)+Heating.getCorrection()       
    end
  
    -- Obtient la correction indiqué par l'utilisateur
  	Heating.getCorrection = function()
        local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")
        if (oldCorr ~= nil) then
            local undef = "" .. oldCorr 
            if (undef == "") then
                oldCorr = 0
            else
                oldCorr= tonumber(oldCorr)
            end
        else
            oldCorr = 0
        end
		return oldCorr       
    end
	
end


Heating.run()
--fibaro:sleep(heating.timer * 1000)

--fibaro:call(fibaro:getSelfId(), "pressButton", "1")
--fibaro:debug("Current temp : " .. Heating.getActualTemp())
--fibaro:debug("Min temp : " .. Heating.getMinTemp())
--fibaro:debug("Max temp : " .. Heating.getMaxTemp())
--fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped"))


-- Gestion de l'affichage
local temp = Heating.getActualTemp()
if (fibaro:getGlobal("R1") == "VACANCES") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" ) 
    fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" )	
elseif (fibaro:getGlobal("R1") == "OFF") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" )
elseif (fibaro:getGlobal("R1") == "MANUEL") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" )
elseif (fibaro:getGlobal("R1") == "ECO") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" )
elseif (fibaro:getGlobal("R1") == "HG") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" )

else 
    local cor = ""
    if (Heating.getCorrection() > 0) then
    	cor = "(+" .. Heating.getCorrection() .. ")"
    elseif (Heating.getCorrection() < 0) then
    	cor = "(" .. Heating.getCorrection() .. ")"
   	end
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
end

On notera qu'aux lignes 46 et 77 j'ai rajouté la condition de l'état des Switch car à  car sinon, à  chaque rafraîchissements, le code vient donner l’ordre de mettre ON ou OFF les FGS221 même si il sont déjà  dans le bon état.

Du coup, toutes les 5 minutes, cela appuyé sur "allumer le chauffage" alors qu'il était déjà  sur ON, et 11 modules qui reçoivent la commande de passer sur ON Ou OFF alors qu'il le sont déjà , ça plantait la box en une journée, cela me faisait des crête CPU à  100%.

avec cette modif, cela action les Switch seulement si il ne sont pas dans la bon état.

On peut réduire du coup, pour avoir un rendu plus précis, le rafraîchissement à  1 minutes sans pénaliser la box, les crête CPU ne dépasse plus les 15%.

j'ai également créé une variable pour remplacer l'ID du panneau de chauffage

Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal

En passant par une scène, je fais changer cette variable selon l'état de la maison, "Absent", "Pressent", " En Mode Alarme"...tous est possible.

Il suffit de créer dans le panneau de chauffage un état pour chaque mode et de faire remonter sont ID par la variable.

 

voici ma scène, pas très optimisé mais cela fonctionne très bien:

--[[
%% autostart
%% properties
%% globals
Aujourdhui
AlarmeGenerale
INV
--]]
 ValeurZ1 = ((fibaro:getGlobal('RTC_Z1')))
 ValeurZ2 = ((fibaro:getGlobal('RTC_Z2')))
 ValeurZ3 = ((fibaro:getGlobal('RTC_Z3')))
 ValeurSB = ((fibaro:getGlobal('RTC_SB')))
 Valeur_Cellier = ((fibaro:getGlobal('RTC_Cellier')))
  
 if (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --travail
    fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail
	fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" )  then --CP
    fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail	
	fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail	
	fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --Weekend
    fibaro:setGlobal("RTC_Z1", "3"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z2", "876"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Z3", "3"); --ID Chauffage travail	
	fibaro:setGlobal("RTC_SB", "8"); --ID Chauffage travail
	fibaro:setGlobal("RTC_Cellier", "7"); --ID Chauffage travail
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Active" ) then --ferie
    fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS
    fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS
    fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS
	fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS
	fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --travail
	fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --CP
	fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "non" ) then --Weekend
	fibaro:setGlobal("RTC_Z1", "6"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z2", "871"); -- id du panneau de chauffage Present
	fibaro:setGlobal("RTC_Z3", "6"); -- id du panneau de chauffage Present
    fibaro:setGlobal("RTC_SB", "879"); -- id du panneau de chauffage Present	
	fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Present
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 3 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) then --ferie
	fibaro:setGlobal("RTC_Z1", "874"); -- id du panneau de chauffage Alarme generale ABS
    fibaro:setGlobal("RTC_Z2", "874"); -- id du panneau de chauffage Alarme generale ABS
    fibaro:setGlobal("RTC_Z3", "874"); -- id du panneau de chauffage Alarme generale ABS
	fibaro:setGlobal("RTC_SB", "874"); -- id du panneau de chauffage Alarme generale ABS
	fibaro:setGlobal("RTC_Cellier", "874"); -- id du panneau de chauffage Alarme generale ABS
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 0 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" )  then --travail
	fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités
	fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités
    fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités	
    fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités
    fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités	
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 1 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --CP
	fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités
	fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités
    fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités	
    fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités
    fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités	
	elseif (tonumber(fibaro:getGlobalValue("Aujourdhui")) == 2 ) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) and ((fibaro:getGlobalValue("INV")) == "oui" ) then --Weekend
	fibaro:setGlobal("RTC_Z1", "875"); -- id du panneau de chauffage Ivités
	fibaro:setGlobal("RTC_Z2", "875"); -- id du panneau de chauffage Ivités
    fibaro:setGlobal("RTC_Z3", "875"); -- id du panneau de chauffage Ivités	
	fibaro:setGlobal("RTC_SB", "875"); -- id du panneau de chauffage Ivités
	fibaro:setGlobal("RTC_Cellier", "7"); -- id du panneau de chauffage Ivités	
	
	end
fibaro:debug(ValeurZ1)
fibaro:debug(ValeurZ2)
fibaro:debug(ValeurZ3)
fibaro:debug(ValeurSB)
fibaro:debug(Valeur_Cellier)

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour,

 

Merci pour le VD.

 

J'ai un thermostat heatit pour gérer le chauffage de mon salon et j'aurais besoin d'un cou de main svp.

 

Pourriez-vous me donner le dernier VD qui va en 4.070 de la HC2

 

J'ai créée une variable prédéfinies Chauffage avec Off On et Vacances

J'ai aussi crée le panneau de chauffage mais je trouve pas le ID du panneau de chauffage.

 

Pour le thermostat j'ai 3 icônes, quelles paramètres je dois changer sur le VD ?

 

Merci pour votre aide

Partager ce message


Lien à poster
Partager sur d’autres sites

pour l'id des panneaux de chauffage

http://<ip box>/api/panels/heating

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci,

 

Quand je fais un rafraichir j'ai rien qui se mets à  jour, il y a combien de chiffre à  mettre à  jour dans le code ?

 

Merci

-- Méthode à  appeler toutes les X secondes (30) par 
-- un scénario afin de rafraichir ce programme
if (not Heating) then

	Heating = {}

	Heating.hysteresis = 0.7 --- +/- de chauffage
	Heating.holidays = 8 -- température souhaitée du mode vacances
	Heating.stefa = 9 -- id du panneau de chauffage
	Heating.admin = "admin"
  	Heating.password = "11111"
  
  	Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui")

	local selfId = fibaro:getSelfId(); 
	
	-- Return la température de référence
	Heating.getActualTemp = function()
		return tonumber(fibaro:getValue(9, "ui.tempSalon.value"))/10
	end

	-- module(s) a allumer/éteindre --- ou autre
  	-- choice= turnOn | turnOff
  	Heating.switch = function(choice)
		fibaro:call(95, choice)
	end

  
	-- Mise en chauffe
	Heating.warmUp = function()
		-- allumage du système
		Heating.switch("turnOn")
		fibaro:log("Warming Up...")
		Heating.started = true
    	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui")
    	fibaro:call(selfId, "setProperty", "currentIcon", 1057)
	end
	
	-- Garde le chauffage allumé
    -- dans mon cas je ralenti le chauffage
    -- quand il reste plus euq 1 degré a atteindre
	Heating.keepOn = function()
		fibaro:call(selfId, "setProperty", "currentIcon", 1058)
    	--local diff = Heating.getMaxTemp() - Heating.getActualTemp()
		--if (diff < 1) then
		--	fibaro:log("Heating slowly...")
		--	Heating.switch("turnOn")
      	--	fibaro:sleep(2*1000)
      	--	Heating.switch("turnOff")	--- We stop it for X minute
		--else
			fibaro:log("Heating...")
		--end
	end
	
	-- Eteint le système de chauffage
	Heating.stop = function()
		Heating.switch("turnOff")
		fibaro:log("Sleeping")
		Heating.started = false
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "no")
        fibaro:call(selfId, "setProperty", "currentIcon", 1059)
	end

	-- Optenir la température minimum requise
	Heating.getMinTemp = function()
		return Heating.getTempPanel() - Heating.hysteresis
	end

	-- Optenir la température maximum requise
	Heating.getMaxTemp = function()
		return Heating.getTempPanel() + Heating.hysteresis
	end

	-- Démarragedu script
	Heating.run = function()
    
    	if (fibaro:getGlobal("Chauffage") == "OFF") then
			Heating.stop()
			return      
        end
		
    	--fibaro:debug("Check temperature")
		-- It is too cold, turn on the heating system
		if (Heating.getActualTemp() < Heating.getMinTemp()) then
      		--fibaro:debug("Warm it up")
			Heating.warmUp()
		-- It is warm enough, stop it
		elseif  (Heating.getActualTemp() > Heating.getMaxTemp()) then
      		--fibaro:debug("Stop it")
			Heating.stop()
		-- Temperature is goo enough, keep it as it
		else
			if (Heating.started) then 
        		--fibaro:debug("Keep it")
				Heating.keepOn()
			else 
				-- wait only it is cold enough to activate it
        		fibaro:log("Sleeping...")
    			fibaro:call(selfId, "setProperty", "currentIcon", 1060)
			end
		end
	end
	
	-- Méthode de test plus rapide d'écriture
    -- pour les vieux fatigué comme moi
	Heating.iif = function(condition, iftrue, iffalse)
		if (condition) then
			return iftrue
		end
		return iffalse
	end
	  
    -- récupère la température de référence indiqué
    -- dans le pannel de chauffage
    Heating.getTempPanel = function()
    	if (fibaro:getGlobal("Chauffage") == "VACANCES") then
           return Heating.holidays
        end
		local strefa = Heating.stefa
		local day = string.lower(os.date("%A"))
		local hour = os.date("%H")
		local min = os.date("%M")
		local now = 0
		local temp = 0
		local lasttemp = 0
		local mode = ""
		local lastmode = ""
		HC2 = Net.FHttp("127.0.0.1",80)
		HC2:setBasicAuthentication(Heating.admin, Heating.password)
    	response = HC2:GET("/api/panels/heating?id="..strefa)
		local jsontable =json.decode(response)
		
		local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"}	

        for k,v in pairs(week) do
  			if (v == day) then now = k * 100000 + hour * 60 + min end
		end
		for k,v in pairs(week) do
  			for l,w in pairs({"morning","day","evening","night"}) do
    			if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then
      				temp = jsontable.properties[v][w].temperature
      				mode = v .. " .. " ..w
      			end
    			lasttemp = jsontable.properties[v][w].temperature
    			lastmode = v .. " .. " ..w
    		end
  		end
		if (temp == 0) then 
  			temp = lasttemp
  			mode = lastmode
		end
    	local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value")
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode )      
		if (oldMode ~= mode) then
			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0)
		end
		return tonumber(temp)+Heating.getCorrection()       
    end
  
    -- Obtient la correction indiqué par l'utilisateur
  	Heating.getCorrection = function()
        local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")
        if (oldCorr ~= nil) then
            local undef = "" .. oldCorr 
            if (undef == "") then
                oldCorr = 0
            else
                oldCorr= tonumber(oldCorr)
            end
        else
            oldCorr = 0
        end
		return oldCorr       
    end
	
end


Heating.run()
--fibaro:sleep(heating.timer * 1000)

--fibaro:call(fibaro:getSelfId(), "pressButton", "1")
--fibaro:debug("Current temp : " .. Heating.getActualTemp())
--fibaro:debug("Min temp : " .. Heating.getMinTemp())
--fibaro:debug("Max temp : " .. Heating.getMaxTemp())
--fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped"))


-- Gestion de l'affichage
local temp = Heating.getActualTemp()
if (fibaro:getGlobal("Chauffage") == "VACANCES") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" )  
elseif (fibaro:getGlobal("Chauffage") == "OFF") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" )
else 
    local cor = ""
    if (Heating.getCorrection() > 0) then
    	cor = "(+" .. Heating.getCorrection() .. ")"
    elseif (Heating.getCorrection() < 0) then
    	cor = "(" .. Heating.getCorrection() .. ")"
   	end
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
end

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut Steven (et aux autres aussi bien sà»r...)

 

J'utilise ton VD pour gérer mon chauffage à  la maison depuis que j'ai réussi à  domotiser ma chaudière de 10 ans avec des FGS. Tout fonctionne nickel, j'ai fait mes réglages Tout est OK. 

 

Une question toutefois : j'ai plusieurs panneau de chuaffage (1 pour notre chambre, un pour le couloir, un pour les pièces de vis et le dernier pour les chmabres des enfants). POur ce qui est la gestion du chauffage, je base sur une moyenne des mes capteurs de températures en bas dans le couloir et dans mes pièces de vie pour réguler. Sinon quand il fait 22 ° en haut j'ai 17 dans le couloir et quand c'est l'hiver c'est pire. Bref. Pour ça c'est OK. Par contre, quand je clique sur le bouton vacances ou Off, j'aimerais que mes 4 panneaux passent en mode vacances ou off et que la température de consigne vacances soit prise en compte par toute mes LC13. Ceci afin d'éviter qu'elles continuent à  se réguler en fonction du panneau de chauffage et qu'elles ne bouffent des piles pour rien .

 

Comment je peux faire cette chose ? 

Merci pour ton aide (ou celle des autres bien sà»r)

A plus*

Partager ce message


Lien à poster
Partager sur d’autres sites

Normalement, tu as du faire ceci :
 

4) Variable globale :
Il faut créer un variable globale "Chauffage" qui peux prendre les valeurs : ON, OFF et VACANCES

 

Cette variable étant la même sur les 4 VD, si tu cliques sur le bouton [Vacances] d'un des 4 VD, cela affecter aussi les 3 autres VD (suffit d'attendre le rafraîchissement ou cliquer sur le bouton [Rafraîchir] pour s'en assurer).

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok mais en fait je n'ai fait qu'un VD qui prend comme température de consigne le séjour. Donc je ne pense pas que cela puisse influer sur les autres si ?

 

Et question subsidiaire : est ce que la valeur de température Vacances se retrouve dans le panneau de chauffage ou non ? 

 

Est ce que cela envoi la coinsigne sur toutes mes têtes DANFOSS ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors on c'est mal compris, mais très mal compris  :)

 

Mon VD ne modifie jamais les panneaux de chauffages, il les lit et par rapport à  l'heure, il active ou désactive un module selon une température.

Si tu clique sur le bouton vacances, le module ne va plus lire les panneaux de chauffage mais va prendre comme température de référence celle indiquée dans le code (8°). Il n'ira donc pas affecter tes LC13.

 

En ce que je comprend, tu a lié un panneau de chauffage à  chaq'un de tes LC13 ce qui est bien mais n'a rien à  voir avec mon VD qui est fait, justement, pour les module qu'on ne peux pas lié à  ces panneaux.

 

Je te conseil de jeter un oeil ici : http://www.domotique-fibaro.fr/index.php/topic/916-gestion-simplifi%C3%A9e-du-chauffage-srt321-ssr303/

 

Courage

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut @Steven,

j'ai un petit soucis depuis le passage en V4.100 ou V4.110, je m'en rend que maintenant.

j'ai cette erreur aléatoirement et je ne comprends pas pourquoi, je pense qu'il ne reconnait pas la valeur dans la variable mais je ne comprends pas pourquoi, aurais tu 5 minutes pour jeter un œil?

 

[DEBUG] 16:33:12: ID Zone : 3
[DEBUG] 16:33:12: Température : 17.80
[DEBUG] 16:36:12: ID Zone : 3
[DEBUG] 16:36:12: Température : 17.80
[ERROR] 16:37:12: line 166: Expected value but found T_END at character 1
[DEBUG] 16:39:12: ID Zone : 3
[DEBUG] 16:39:13: Température : 17.80
[DEBUG] 16:42:13: ID Zone : 3
[DEBUG] 16:42:13: Température : 17.80

le code dans le bouton rafraîchir:

--Salon R2
-- Méthode à appeler toutes les X secondes (30) par 
-- un scénario afin de rafraichir ce programme
local id = {
        Mod_Chauf_Zone1 = 794, cde1 = 355, cde2 = 357, Radiateur = 365, ST814_Salon = 394
	}
local ValeurZ1 = ((fibaro:getGlobal('RTC_Z1')))
if (not Heating) then

	Heating = {}

	Heating.hysteresis = 0.7 --- +/- de chauffage
	Heating.holidays = 17 -- température souhaitée du mode vacances
	Heating.manuel = 19 -- température souhaitée du mode Manuel
	Heating.stefa = ValeurZ1 -- id du panneau de chauffage normal
	fibaro:debug("ID Zone : "..ValeurZ1)
	Heating.admin = "xxxxxx"
  	Heating.password = "xxxxxxx"
  
  	Heating.started = (fibaro:getValue(fibaro:getSelfId(), "ui.lblRunning.value") == "oui")

	local selfId = fibaro:getSelfId(); 
	
	-- Return la température de référence
	Heating.getActualTemp = function()
		--return tonumber(fibaro:getValue(242, "ui.sIntTemp.value"))
        return tonumber(fibaro:getValue(id["ST814_Salon"], "value"))
	end

	-- module(s) a allumer/éteindre --- ou autre
  	-- choice= turnOn | turnOff
  	Heating.switch = function(choice)
		--fibaro:call(33, choice)
    fibaro:call(id["Radiateur"], "pressButton", choice);
	end

  
	-- Mise en chauffe
	Heating.warmUp = function()
		-- allumage du système
		fibaro:log("Warming Up...")
		Heating.started = true
    	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "oui")
    	fibaro:call(selfId, "setProperty", "currentIcon", 1083)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078)
	if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 1 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R2") == "HG") or (fibaro:getGlobal("R2") == "ECO") or (fibaro:getGlobal("R2") == "VACANCES")
	  then
		Heating.switch("1")
	 end
	end

	-- Garde le chauffage allumé
    -- dans mon cas je ralenti le chauffage
    -- quand il reste plus euq 1 degré a atteindre
	Heating.keepOn = function()
		fibaro:call(selfId, "setProperty", "currentIcon", 1084)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1078)
    	--local diff = Heating.getMaxTemp() - Heating.getActualTemp()
		--if (diff < 1) then
		--	fibaro:log("Heating slowly...")
		--	Heating.switch("turnOn")
      	--	fibaro:sleep(2*1000)
      	--	Heating.switch("turnOff")	--- We stop it for X minute   
		--else
			fibaro:log("Heating...")
		--end
	end
	
	-- Eteint le système de chauffage
	Heating.stop = function()
		fibaro:log("Sleeping")
		Heating.started = false
        fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblRunning.value", "non")
        fibaro:call(selfId, "setProperty", "currentIcon", 1085)
		fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081)
	if (( tonumber(fibaro:getValue(id["cde1"], "value")) == 0 ) and ( tonumber(fibaro:getValue(id["cde2"], "value")) == 0 )) or (fibaro:getGlobal("R2") == "HG")
	or (fibaro:getGlobal("R2") == "ECO") or (fibaro:getGlobal("R2") == "VACANCES")
	  then
		Heating.switch("4")
	 end
	end

	-- Optenir la température minimum requise
	Heating.getMinTemp = function()
		return Heating.getTempPanel() - Heating.hysteresis
	end

	-- Optenir la température maximum requise
	Heating.getMaxTemp = function()
		return Heating.getTempPanel() + Heating.hysteresis
	end

	-- Démarragedu script
	Heating.run = function()
	if (fibaro:getGlobal("Chauffage") == "OFF") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1081)
	 Heating.stop()
	return 
	elseif (fibaro:getGlobal("R2") == "ECO") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1079)
	 return 
	elseif (fibaro:getGlobal("R2") == "HG") then
	 fibaro:call(fibaro:getSelfId(), "setProperty", "currentIcon", 1082)
	 return
	end
	      
    	if (fibaro:getGlobal("R2") == "OFF") then
			Heating.stop()
			return      
        end
		
    	--fibaro:debug("Check temperature")
		-- It is too cold, turn on the heating system
		if (Heating.getActualTemp() < Heating.getMinTemp()) then
      		--fibaro:debug("Warm it up")
			Heating.warmUp()
		-- It is warm enough, stop it
		elseif  (Heating.getActualTemp() > Heating.getMaxTemp()) then
      		--fibaro:debug("Stop it")
			Heating.stop()
		-- Temperature is goo enough, keep it as it
		else
			if (Heating.started) then 
        		--fibaro:debug("Keep it")
				Heating.keepOn()
			else 
				-- wait only it is cold enough to activate it
        		fibaro:log("Sleeping...")
    			fibaro:call(selfId, "setProperty", "currentIcon", 1086)
				--fibaro:call(id["Radiateur"], "setProperty", "currentIcon", 1081)
			end
		end
	end
	
	-- Méthode de test plus rapide d'écriture
    -- pour les vieux fatigué comme moi
	Heating.iif = function(condition, iftrue, iffalse)
		if (condition) then
			return iftrue
		end
		return iffalse
	end
	  
    -- récupère la température de référence indiqué
    -- dans le pannel de chauffage
    Heating.getTempPanel = function()
    	if (fibaro:getGlobal("R2") == "VACANCES") then
           return Heating.holidays
          end
		if (fibaro:getGlobal("R2") == "MANUEL") then 
	
	       return Heating.manuel
	      end
		local strefa = Heating.stefa
		local day = string.lower(os.date("%A"))
		local hour = os.date("%H")
		local min = os.date("%M")
		local now = 0
		local temp = 0
		local lasttemp = 0
		local mode = ""
		local lastmode = ""
		HC2 = Net.FHttp("127.0.0.1",80)
		HC2:setBasicAuthentication(Heating.admin, Heating.password)
    	response = HC2:GET("/api/panels/heating?id="..strefa)
		local jsontable =json.decode(response)
		
		local week = {"monday","tuesday","wednesday","thursday","friday", "saturday", "sunday"}	

        for k,v in pairs(week) do
  			if (v == day) then now = k * 100000 + hour * 60 + min end
		end
		for k,v in pairs(week) do
  			for l,w in pairs({"morning","day","evening","night"}) do
    			if (now > k*100000+jsontable.properties[v][w].hour*60+jsontable.properties[v][w].minute) then
      				temp = jsontable.properties[v][w].temperature
      				mode = v .. " .. " ..w
      			end
    			lasttemp = jsontable.properties[v][w].temperature
    			lastmode = v .. " .. " ..w
    		end
  		end
		if (temp == 0) then 
  			temp = lasttemp
  			mode = lastmode
		end
    	local oldMode = fibaro:getValue(fibaro:getSelfId(), "ui.lblMode.value")
		fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblMode.value", mode )      
		if (oldMode ~= mode) and ((fibaro:getGlobalValue("AlarmeGenerale")) == "Inactive" ) then
			fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblCorr.value", 0)
		    fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblCorr.value", 0); --VD ZONE 1
            fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "currentIcon", 1087)
         end
		return tonumber(temp)+Heating.getCorrection()       
    end
  
    -- Obtient la correction indiqué par l'utilisateur
  	Heating.getCorrection = function()
        local oldCorr = fibaro:getValue(fibaro:getSelfId(), "ui.lblCorr.value")
        if (oldCorr ~= nil) then
            local undef = "" .. oldCorr 
            if (undef == "") then
                oldCorr = 0
            else
                oldCorr= tonumber(oldCorr)
            end
        else
            oldCorr = 0
        end
		return oldCorr       
    end
	
end


Heating.run()
--fibaro:sleep(heating.timer * 1000)

--fibaro:call(fibaro:getSelfId(), "pressButton", "1")
--fibaro:debug("Current temp : " .. Heating.getActualTemp())
--fibaro:debug("Min temp : " .. Heating.getMinTemp())
--fibaro:debug("Max temp : " .. Heating.getMaxTemp())
--fibaro:debug("Started : " .. Heating.iif(Heating.started, "started", "stopped"))


-- Gestion de l'affichage
local temp = Heating.getActualTemp()
    temp = string.format("%.2f",temp)
    fibaro:debug("Température : "..temp)
    fibaro:setGlobal("Temp_DEGRES", temp)
if (fibaro:getGlobal("R2") == "VACANCES") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / VAC" )  
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / VAC" )
elseif (fibaro:getGlobal("R2") == "OFF") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / OFF" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / OFF" )
elseif (fibaro:getGlobal("R2") == "MANUEL") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / MANUEL" )	
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / MANUEL" )
elseif (fibaro:getGlobal("R2") == "ECO") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / ECO" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / ECO" )
elseif (fibaro:getGlobal("R2") == "HG") then 
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / Hors Gel" )
	fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / Hors Gel" )
else 
    local cor = ""
    if (Heating.getCorrection() > 0) then
    	cor = "(+" .. Heating.getCorrection() .. ")"
    elseif (Heating.getCorrection() < 0) then
    	cor = "(" .. Heating.getCorrection() .. ")"
   	end
	fibaro:call(fibaro:getSelfId(), "setProperty", "ui.lblTemps.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
	--charge variable pour message arrivé maison
    fibaro:setGlobal("Temp_Msg_Cfg", Heating.getTempPanel())
    fibaro:call(id["Mod_Chauf_Zone1"], "setProperty", "ui.lblSalon.value", temp .. "°C / " .. Heating.getTempPanel() .. "°C [+-"..Heating.hysteresis.."] ".. cor)
  end

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

×