Mój HomeMatic

Blog opisujący moją przygodę z HomeMatic

Zapotrzebowanie CO (centralnego ogrzewania) na energię

W jednym z moich wpisów dotyczących sterowaniem ogrzewaniem odniosłem się do procentowego otworzenia głowic. W skrócie wpis Inny sposób sterowania kotłem CO  dotyczy załączania kotła CO w zależności od otworzenia głowic w całym układzie grzewczym.

Mając procent otworzenia głowicy można przyjąć, że jest to procent nominalnej mocy grzejnika CO. Mnożąc moc nominalną przez procent otworzenia głowicy wyliczymy zapotrzebowanie grzejnika na moc. Sumując wszystkie zapotrzebowania uzyskamy to co na rysunku poniżej w czerwonej ramce.

Panel informacyjny kotła CO

Panel informacyjny kotła CO

 

By to powyliczać potrzebna jest moc nominalna grzejnika. Jeśli chodzi o grzejniki panelowe (najbardziej popularne) to musimy wiedzieć, że moc grzejnika będzie zależna od:

  • wymiaru grzejnika (wysokość / szerokość)
  • ilości płyt grzewczych
  • ilości radiatorów (najczęściej radiatorem jest pofalowana blacha umieszczona na płycie grzewczej)
  • temperatury wody w obiegu

Na przykład oznaczenie V22 oznacza:

V – zasilanie boczne

2 – dwie płyty grzewcze

2 – dwa radiatory

Oczywiście sposób zasilania nie ma wpływu na moc grzejnika ale pozostałe elementy już tak. Ilość płyt oraz ilość radiatorów łatwo sprawdzić zaglądając do grzejnika „od góry”.

Do ustalenia mocy grzejnika potrzebna jest jeszcze temperatura wody w obiegu. Ja mam zintegrowany kocioł gazowy z HomeMatic (o tym przy innej okazji) i znam taką temperaturę na bieżąco. Mimo tego w wyliczeniach wykorzystuję stałą temperaturę. Przyjąłem taką jaka jest u mnie zaprogramowana jaka „maksymalna temperatura wody w obiegu” i u mnie wynosi ona 55 °C. Jest to jedna z typowych temperatur dla, których robi się obliczenia instalacji grzewczej podczas jej projektowania.

Tak więc mamy wszystko. Wystarczy przejść się po domu, spisać wielkości i typy grzejników i już. Przykładowo grzejnik o oznaczeniach V22 900×1200 i temperaturze zasilania 55 °C ma moc grzewczą 1447W. Oczywiście różni producenci podają różne moce swoich grzejników ale różnice nie są aż tak ogromne by się nimi przejmować.

Mając informację o mocach grzejników należ je zapisać do CCU2. Do tego celu wykorzystamy zmienne systemowe. Wchodzimy do menu -> „System” -> „System Variable” i dopisujemy nową zmienną.

HomeMatic_WebUI_-_2018-01-08_14.38.25

Najpierw wybrałem głowicę, do której przypnę zmienną (ramka w kolorze czerwonym) gdyż podczas wyboru głowicy spisuję jej numer seryjny, który wpisuję do nazwy systemowej (ramka niebieska) wraz z numerek kanału (:4). Taka konstrukcja nazwy zmiennej będzie później potrzebna w skrypcie. W konsekwencji po poprawnym zadeklarowaniu zmiennej, w sekcji podglądu stanu urządzenia (menu -> „Status and control” -> „Devices”) powinniśmy zobaczyć taki oto stan rzeczy.

HomeMatic_WebUI_-_2018-01-08_14.46.13

Kolorem czerwonym zaznaczyłem interesującą nas informację. Ja już mam wypełnioną tę wartość ale oczywiście zaraz po zdefiniowaniu zmiennej będzie tam wartość „0”. Co ważne – zdecydowałem się na zapis mocy w kilowatach a nie w watach.

Należy zwrócić szczególną uwagę na tworzenie nazwy zmiennej gdyż gdy popełnimy błąd, późniejszy skrypt nie będzie umiał odszukać naszej zmiennej. Nazwa składa się z takich elementów:

  • wyraz „Moc”
  • spacja
  • numer seryjny urządzenia
  • dwukropek
  • numer kanału (zawsze 4)

Jeszcze pozostało jedno. Jak uzupełnić wartość zmiennej? Tu posłużyłem się narzędziem do testowania skryptów. należy wejść do menu->”Programs and connections”->”Programming & CCU connections” i na dole znajdziemy przycisk „Test script”. Wciskamy go a w powstałe okienko wpisujemy:

dom.GetObject("Moc MEQ0797101:4").State(1.29);

a następnie wciskamy „Execute”.

Zapis wartości zmiennej "Moc" do CCU2.

Zapis wartości zmiennej „Moc” do CCU2.

 

należy zwrócić uwagę na dwa elementy:

  • wartość w funkcji GetObject (tam musi być wpisana poprawna nazwa naszej zmiennej)
  • State (tam musi być wpisana moc grzejnika. Używamy notacji angielskiej czyli jako separator części ułamkowej kropka a nie przecinek).

Jeśli wszystko wykonaliśmy poprawnie powinniśmy wpisaną wartość do funkcji „State()” zobaczyć w menu -> „Status and control” -> „Devices” tak jak dwa rysunki wyżej.

Po wpisaniu wszystkich wartości dla wszystkich głowic należy jeszcze utworzyć zmienne odpowiedzialne za wyliczenie mocy bieżącej. O ile nie jest to nam potrzebne można tę część pominąć (minimalnie modyfikując poniższy skrypt) ale ja uznałem, że czasem warto jest znać bieżący stan grzejnika więc tym razem do termostatów dodałem zmienne o nazwie „Moc B „+nr seryjny+kanał tak jak na rysunku poniżej.

W efekcie przy termostatach pokojowych widzę jak na rysunku poniżej

HomeMatic_WebUI_-_2018-01-08_15.36.55

Jak widać „Moc B” jest nieco mniejsza od „Moc” a to dlatego, że głowica była otworzona na 99% a nie na 100%.

Czego nam brakuje?
Brakuje zmiennej systemowej, którą ja zdefiniowałem jako „Moc wymagana” i przypiąłem ją do urządzenia, które załącza mój kocioł opisanego jako przekaźnik kotła CO dla HomeMatic. Definicja tej zmiennej wygląda u mnie tak:

HomeMatic_WebUI_-_2018-01-08_15.43.53

Zdefiniowałem ją z maksymalną wartością „15” gdyż u mnie taka maksymalna wartość może być zapisana. Każdy jednak może dostosować to ograniczenie do własnych uwarunkowań (czyli do sumy mocy grzejników).

Na koniec wisienka na torcie – skrypt, który wylicza i aktualizuje dane.

U siebie dopisałem kilka linijek do opisanego wcześniej skryptu zliczającego procent otworzenia głowic przedstawionego we wpisie Inny sposób sterowania kotłem CO.

Obecnie skrypt ma taką postać:

boolean debug = false; ! if set only output what is done, dont do it

! ------ Execution

string deviceid;
boolean turnonheating = false;
string thermostat;
real allvalvestate = 0.0;
integer allvalvecount = 0;
real allvalveAcount = 0.0;
<strong>real allmocB = 0.0;
real MocGrzewcza=0.0;</strong>

foreach(deviceid, dom.GetObject(ID_DEVICES).EnumUsedIDs())
	{
	var device = dom.GetObject(deviceid);
	if( (turnonheating==false) && ("HM-CC-RT-DN" == device.HssType()))
		{
		string channelid;
		foreach(channelid,device.Channels().EnumUsedIDs())
			{
			var channel = dom.GetObject(channelid);

			if( (!turnonheating) &amp;&amp; (channel.HSSID()=="CLIMATECONTROL_RT_TRANSCEIVER") )
				{
				var interface = dom.GetObject(channel.Interface());
				var address = channel.Address();
				var name = channel.Name();
				var datapoint = interface#"."#address;
				real valvestate = 0.0+dom.GetObject(datapoint#".VALVE_STATE").Value();
				<strong>real moc = 0.0+dom.GetObject("Moc "#address).Value();
				MocGrzewcza = MocGrzewcza + moc;
				real mocB = 0.0+(moc*valvestate/100);
				var oMocGB=dom.GetObject("Moc B "#address);
				real mocBG=0.0+oMocGB.Value();</strong>

				allvalvecount=allvalvecount+1;
				allvalvestate=allvalvestate+valvestate;
				<strong>allmocB=allmocB+mocB;
				if(mocBG.ToFloat()<>mocB.ToFloat()){
					oMocGB.State(mocB);
					dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("Moc "#name#";"#mocB);
				}</strong>
				if(valvestate>0){
					allvalveAcount=allvalveAcount+1;
				}

			}
		}
	}
}
var KumZeit= dom.GetObject("Stan glowic CO");
var KumZeitx= dom.GetObject("Ilosc glowic CO");
var KumZeitxA= dom.GetObject("Ilosc aktywnych glowic CO");
<strong>var oMocB= dom.GetObject("Moc wymagana");
dom.GetObject("Moc grzewcza").State(MocGrzewcza);</strong>
KumZeit.State(allvalvestate);
KumZeitx.State(allvalvecount);
KumZeitxA.State(allvalveAcount);

W skrypcie grubszą czcionką zaznaczyłem zmiany w stosunku do poprzedniej wersji.

Na koniec pokażę jak te dane wyglądają na wykresie, na którym uwidoczniono „zapotrzebowanie na moc” oraz „moc z jaką grzeje kocioł”. Mimo, że te dwie dane nie mają bezpośredniego wpływu na siebie (piec nie widzi „zapotrzebowania” ) to mimo tego widać, że w niektórych porach (np. w godzinach 6:30-9:00) moc pieca rosła i opadała zgodnie z zapotrzebowaniem wyliczony, z głowic. Niestety kocioł może grzać z minimalną mocą 4,4kW stąd nigdy nie zszedł poniżej tej granicy ale o analizie takich wykresów i innych pomysłach napiszę przy innej okazji.

Dodatkowo na wykresie pokazałem kiedy kocioł uzyskał pozwolenie na grzanie (pomarańczowa linia).
CUxD-Highcharts_-_2018-01-08_12.10.43

Smacznego 😉

 

Updated: 27 października 2018 — 22:05

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Mój HomeMatic © 2016 Frontier Theme