"Gris, souffle, cool ...", ou la logique du contrôle climatique dans une maison intelligente

Maison intelligente

Récemment, le sujet de la maison intelligente gagne en popularité, il y a de plus en plus d'articles, de critiques, de discussions et presque toutes les questions auxquelles vous pouvez immédiatement trouver quelques opinions et réponses. Mais partout dans ce monde de l'information, il y a encore une zone blanche, à savoir la logique du travail. Nous n'avons pas eu peur et avons décidé de soumettre nos préparatifs sur cette question au public.

Pour commencer, quelques mots sur l'objet à équiper de systèmes d'automatisation. Il s'agit d'un petit immeuble d'appartements, dont chaque appartement est équipé de systèmes de climatisation, de ventilation, de chauffage et de chauffage au sol indépendants.

Comme principale exigence, le client a noté: une interface unique pour gérer tous les systèmes de maison intelligente, un budget limité et un minimum de câblage supplémentaire. Après quelques recherches sur le marché des systèmes d'automatisation, nous avons opté pour une solution de Fibaro, car les principaux avantages de cette solution sont presque parfaitement la répétition de nos conditions.

Dans cet article, nous décrivons le processus de création d'un semblant de système HVAC pour un appartement basé sur le protocole Z-Wave. Nous espérons obtenir un tas de commentaires de la communauté pour amener notre décision à un état comestible. Si le résultat escompté est atteint, nous serons heureux de poursuivre ce cycle avec d'autres publications dans lesquelles nous partagerons notre expérience avec les appareils Z-Wave.

Nous décrirons donc les données initiales et les conditions de fonctionnement de notre système.

Tout d'abord, nous nous sommes demandé ce qui gérerait tous les systèmes. En tant qu'unité principale, nous nous sommes installés sur le contrôleur Home Center 2. Initialement, il était prévu de créer un réseau de cinq contrôleurs et d'organiser le système de sorte qu'un contrôleur contrôle tous les appartements sur un étage du bâtiment. Mais il est vite devenu clair que le système ne pouvait pas être construit de cette manière, car HC2 a une limite sur le nombre d'appareils z-wave connectés, et la combinaison des contrôleurs en un seul réseau étend uniquement la zone de couverture du réseau z-wave, mais n'augmente pas le nombre maximum autorisé d'appareils connectés . En même temps, pas plus de 230 appareils peuvent être connectés à un contrôleur. En conséquence, seuls 230 appareils peuvent encore être connectés à cinq contrôleurs intégrés dans un même réseau.Par conséquent, nous avons dû doubler le nombre de contrôleurs dans le projet et refuser de les intégrer dans un seul réseau. Désormais, un HC2 fonctionnera pour 4 à 5 appartements, ce qui nous donne la possibilité d'utiliser de 46 à 57 appareils z-wave dans chaque appartement.

Après avoir décidé du responsable du traitement, la question s'est posée de savoir quelles données devaient être collectées et comment procéder. Pour gérer le climat, vous devez connaître l'état actuel des choses dans l'appartement, à savoir: la température à l'intérieur et à l'extérieur de la pièce, l'humidité, le niveau de CO2, la position des fenêtres et des portes, la présence des résidents de la maison. Le budget du projet étant limité, nous avons refusé de surveiller les niveaux d'humidité et de CO2.

Pour surveiller la température intérieure, de nombreux appareils à ondes z contiennent des capteurs de température intégrés qui complètent les fonctionnalités de base de l'appareil. Et, bien sûr, il existe des capteurs de température dans une version distincte. Selon notre projet, dans chaque appartement, il y aura environ 35 appareils qui afficheront en quelque sorte la valeur de la température. Il s'agit de trois capteurs de fuite FIB_FGFS-101, de trois émetteurs IR REM_ZXT120, d'un thermostat RS 014G0160, de capteurs de mouvement et de trois capteurs de température DS 18B20 pour chaque circuit de plancher chauffant et système de chauffage. La surveillance de la température du circuit de chauffage par le sol est nécessaire en premier lieu pour éviter la surchauffe du parquet, comme la température maximale autorisée du parquet ne dépasse pas 27 degrés.

Contrôle de la température pour protéger le sol contre la surchauffe


Contrôle de la température pour protéger le parquet de la surchauffe

Étant donné que toutes ces valeurs de température peuvent différer très sérieusement les unes des autres, selon l'endroit où l'appareil est installé - pour déterminer la température dans la pièce, nous calculerons la valeur moyenne pour tous les indicateurs de cette pièce.

Il existe deux options pour déterminer la température extérieure. Dans HC2, il existe une fonction d'obtention d'une prévision météo pour une ville, qui est définie lors de la configuration initiale du contrôleur. Cependant, cette méthode de détermination de la température ne diffère pas par une précision acceptable, par conséquent, à ces fins, nous utiliserons plusieurs capteurs DS 18B20 installés sur la façade extérieure du bâtiment. Il convient de garder à l'esprit que les capteurs ne doivent pas être placés directement sur la façade et éviter la lumière directe du soleil.

Dans toute maison intelligente, l'un des principaux objectifs de sa création est de réduire les coûts de chauffage et de climatisation des pièces, il devient donc très important de comprendre la position actuelle des fenêtres et des portes. Afin de désactiver le chauffage et la climatisation, si une fenêtre ou une porte est ouverte, nous utiliserons des capteurs de contact magnétiques conventionnels et pour leur intégration dans le réseau z-wave, ils seront connectés à des capteurs binaires universels FIB_FGBS-001.

Connexion des capteurs de température DS18B20

Connexion des capteurs de température DS18B20

Pour déterminer la présence de résidents, nous avons créé un appareil virtuel, qui est un bouton. En cliquant sur ce bouton, l'utilisateur informe le système qu'il n'y a personne à la maison.

Périphérique virtuel - boutons d'activation du mode domicile / travail


Périphérique virtuel - boutons d'activation du mode domicile / travail

Lorsqu'un signal est reçu indiquant que le système est vide, le contrôleur éteint tous les systèmes HVAC et passe en mode d'économie d'énergie jusqu'à ce que l'utilisateur soit prêt à rentrer chez lui. En mode économie d'énergie, le système continue de contrôler la température et ne permet pas le refroidissement de la pièce et la température descend en dessous de la barre des 18 degrés.

Un autre élément important du contrôle climatique dans un salon est le réglage de la température. Dans notre solution, les utilisateurs peuvent la modifier de deux manières. À l'aide d'un thermostat mural ou à l'aide d'un appareil virtuel spécialement créé à l'aide d'un smartphone ou d'une tablette.

Après avoir traité de la surveillance de l'état actuel du microclimat dans l'appartement, nous avons procédé à l'étude directe des appareils que nous devions contrôler.

Chaque appartement sera équipé de 3 climatiseurs fabriqués par Mitsubishi Electric. Il est prévu de les contrôler à l'aide des convertisseurs IR REM_ZXT120. Ces appareils ont des paramètres prédéfinis pour contrôler les modèles de climatiseurs les plus courants des principaux fabricants, ainsi que la possibilité d'apprendre les commandes IR de la télécommande.

En plus des climatiseurs, chaque appartement sera équipé d'un système indépendant de ventilation d'alimentation et d'évacuation, et le contrôle sera organisé à l'aide de relais à deux canaux FIB_FGS-222.

De plus, tous les appartements auront sept étages de chauffage et un circuit de chauffage central. Chaque circuit est équipé d'une vanne à trois positions avec un servomoteur. Il est contrôlé par le module RGBW FIB_FGRGB-101.

Après avoir sélectionné et étudié tous les équipements nécessaires, notre tâche suivante consistait à développer l'algorithme de climatisation le plus efficace et le plus autonome.

Cliquable:

Schéma fonctionnel avec l'algorithme de climatisation dans l'appartement

L'organigramme montre un algorithme qui représente la logique de base de l'ensemble du système de contrôle HVAC.

L'algorithme résultant est implémenté sous la forme d'un script principal et de plusieurs scripts auxiliaires. Dans HC2, ces scripts sont appelés scènes et sont écrits en lua.
Afin de ne pas trop charger le contrôleur, les scènes ne sont déclenchées que lorsque les soi-disant déclencheurs sont déclenchés.

Pour la scène principale, les événements suivants agissent comme des déclencheurs:

  • l'un des indicateurs de température changera de plus d'un degré
  • l'utilisateur a modifié le point de consigne de température
  • l'utilisateur a activé / désactivé le mode au travail
  • la fenêtre ou la porte (vers la loggia ou l'entrée) était ouverte / fermée

Code de script principal
--[[
%% properties
3 Temperature   --  
85 value		--  1
86 value		--  2
87 value		--  3

%% events

%% globals
tempSet
--]]

local temp1 = tonumber(fibaro:getValue(85, "value")) --   1
local temp2 = tonumber(fibaro:getValue(86, "value"))--   2
local temp3 = tonumber(fibaro:getValue(87, "value"))--   3
local tempOUT = tonumber(fibaro:getValue(3, "Temperature"))--    
local IDCooler = 99   -- 
local IDCond = 100 -- 
local IDCondHeat = 102 --   ( )
local IDFloor = 23 --  
local IDHeat = 24 -- 

local tempset = fibaro:getGlobalValue("tempSet")
local workmode = fibaro:getGlobalValue("Workmode")


local tempInside = (temp1 + temp2 + temp3) / 3
local date = os.date("!*t", now)
local currtime = date.hour*60 + date.min --   
local d = tempset - tempInside
local w = tempset - tempOUT


--globals:  
--	Workmode
--	TempSet
-- 	WinStatus
--	Isventnow
--	CHeating

local cHeating = "on"
local winStatus = "closed"

print("Starting Climate Control")
print("t   = "..tempInside..",  t  = "..tempset)
print("Workmode: "..workmode..",  Windows: "..winStatus,",  Central Heating: "..cHeating)

--   
if (fibaro:getGlobalValue("Workmode1") == "At work") 
then 
    -- 
	if (tempInside < 18) 
    then -- 
    	if (cHeating == "on")
    	then --  
    		print(" ")
      		fibaro:call(IDHeat, "turnOn")
      		if(Isventnow == "no")
        	then
      			fibaro:call(IDCooler, "turnOff")
      		end
            fibaro:call(IDCondHeat, "turnOff")
      		fibaro:call(IDCond, "turnOff")
      		fibaro:call(IDFloor, "turnOff")
      	elseif (windows == "closed")
      	then --   
     		print("  ")
      		fibaro:call(IDCondHeat, "turnOn")
      		fibaro:call(IDCond, "turnOn")
      		fibaro:call(IDFloor, "turnOff")
     		if(Isventnow == "no")
        	then
      			fibaro:call(IDCooler, "turnOff")
      		end      
      		fibaro:call(IDHeat, "turnOff")
      	end
    --    
    elseif (tempInside > 21)
    then -- 
		if(fibaro:getValue(IDHeat, value) >0)
		then
    		print(" ")
    		fibaro:call(IDHeat, "turnOff")
		else
        	fibaro:call(IDCondHeat, "turnOn")
      		fibaro:call(IDCond, "turnOn")
      		fibaro:call(IDFloor, "turnOff")
            if(Isventnow == "no")
        	then
      			fibaro:call(IDCooler, "turnOff")
      		end
		end
    end 
--    
elseif d < 1 and d > -1
then
  	print(" ")
    -- 
	fibaro:call(IDCondHeat, "turnOff")
    fibaro:call(IDCond, "turnOff")
	-- 
    if(Isventnow == "no")
    then
		fibaro:call(IDCooler, "turnOff")
    end
	-- 
	fibaro:call(IDHeat, "turnOff")
	--  
	fibaro:call(IDFloor, "turnOff")
--    
elseif (cHeating == "on")
then --  
    if (d >= 1)
    then  --
        if (d <= 3)
        then 
    		print("  ")
            --  
            fibaro:call(IDFloor, "turnOn")		
            fibaro:call(IDCondHeat, "turnOff")
            fibaro:call(IDCond, "turnOff")
            fibaro:call(IDHeat, "turnOff")
            fibaro:call(IDCooler, "turnOff")
        elseif (d > 3)
        then
    		print("    ")
			--  
    		fibaro:call(IDFloor, "turnOn")
            -- 
    		fibaro:call(IDHeat, "turnOn")
			fibaro:call(IDCondHeat, "turnOff")
      		fibaro:call(IDCond, "turnOff")
      	    if(Isventnow == "no")
    		then
				fibaro:call(IDCooler, "turnOff")
    		end
        end
    elseif (d <= -1)
    then --
  		print(" ")
        --  
  		if(Isventnow == "no")
   	 	then
			fibaro:call(IDCooler, "turnOn")
    	end
        lastCondition = currTime
    end
--   
elseif (cHeating == "off")
then --
    if (d >= 1)
    then
        if (w <= 0)
        then
    		print(" ")
            --  
    		if(Isventnow == "no")
      		then
				fibaro:call(IDCooler, "turnOn")
    		end
    		fibaro:call(IDCondHeat, "turnOff")    
			lastCondition = currTime
        elseif (d < 4)
        then 
    		print(" ")
			--  
    		fibaro:call(IDCondHeat, "turnOff")
      		if(Isventnow == "no")
    		then
				fibaro:call(IDCooler, "turnOn")
    		end
        	lastCondition = currTime
        elseif (winStatus == "closed")
        then
    		print("   ")
			--    
    		fibaro:call(IDCondHeat, "turnOn")
      		fibaro:call(IDCond, "turnOn")    
      		if(Isventnow == "no")
    		then
				fibaro:call(IDCooler, "turnOff")
    		end
        end
    elseif (d <= -1)
    then --
		if(w >= 0)
		then
	    	if(d > -4)
	    	then
     			print(" ")
	        	--  
                if(Isventnow == "no")
                then
                    fibaro:call(IDCooler, "turnOn")
                end
    			fibaro:call(IDCondHeat, "turnOff")
      			fibaro:call(IDCond, "turnOff")
	    	elseif (winStatus == "closed")
        	then
      			print(" ")
	        	--  
      			fibaro:call(IDCond, "turnOn")
      			fibaro:call(IDCondHeat, "turnOff")
                if(Isventnow == "no")
                then
                    fibaro:call(IDCooler, "turnOff")
                end
	    	end
		elseif (winStatus == "closed")
      	then
    		print(" ")
	    	--  
   			fibaro:call(IDCond, "turnOn")
      		fibaro:call(IDCondHeat, "turnOff")    
            if(Isventnow == "no")
            then
                fibaro:call(IDCooler, "turnOff")
            end
		end
    end
end     


Comme vous pouvez le voir dans le code de la scène principale, dans son travail, elle utilise des variables globales:

  • Workmode {«at work», «at home»} //
  • TempSet //
  • WinStatus {'opened", «closed»} // ( )
  • CHeating {«on»,«off»} //

La surveillance de la position actuelle des fenêtres et des portes de l'appartement sera effectuée par une scène auxiliaire. Le résultat de son travail est stocké dans la variable globale WinStatus. De plus, une scène distincte contrôle le changement de température des capteurs près des pompes de chauffage central dans le sous-sol du bâtiment et détermine si le chauffage central est en marche. Le résultat de son travail est stocké dans la variable globale CHeating.

Puisqu'il est très important pour le confort que l'air dans l'appartement soit frais, nous avons décidé qu'il serait correct de faire un système de ventilation forcée des pièces grâce à la ventilation d'alimentation et d'évacuation. Si au cours des trois dernières heures, la ventilation n'a pas fonctionné, un scénario d'aération de la pièce d'une durée de 15 minutes démarre automatiquement. La ventilation forcée n'est pas effectuée si le mode "au travail".

Script de ventilation forcée
function vent_forced()
  
local workmode = fibaro:getGlobal('Workmode')
local isventnow = fibaro:getGlobal('Isventnow')
local lastModified = fibaro:getGlobalModificationTime('Isventnow')
  if ((os.time() - lastModified) < 10800) then
    	print ("       "..(os.time() - lastModified))
    	print ("     3- ")
  end 
	if ( workmode == 'At home' and isventnow == 'no' and (os.time() - lastModified) > 10800 ) then
	 	print ("       "..(os.time() - lastModified))
    		fibaro:call(99, "turnOn")
		fibaro:setGlobal('Isventnow', 'yes')
 		print ("     3 ")
		print ("   ")
    		fibaro:sleep(900000)
		fibaro:call(99, "turnOff")
    		fibaro:setGlobal('Isventnow', 'no')
		print ("   ")
	end 
end

 local sourceTrigger = fibaro:getSourceTrigger()
	if (sourceTrigger["type"] == "autostart") then
   		while true do
       		fibaro:debug('  ')
        		local currentDate = os.date("*t")
			if (currentDate.min >= 0 and currentDate.min <= 60) then
          		vent_forced()
          		end
		fibaro:debug(' ,    1 ')
  		fibaro:sleep(3600*1000)
        end
end


Voilà comment nous prévoyons de résoudre le problème. Il y a encore de nombreuses questions à l'ordre du jour, de nombreux problèmes à résoudre et de nombreuses difficultés à surmonter. Ceci est notre test du stylo, nous vous demandons de traiter avec gentillesse et compréhension.

Source: https://habr.com/ru/post/fr398391/


All Articles