{jcomments off}
Piec steruje ogrzewaniem parteru budynku. Jest tam jedna pompa do podłogowego i oddzielna do grzejników. Na grzejnikach standardowe termostaty bez elektroniki co jest wystarczające. Poddasze natomaist ma tylko ogrzewanie podłogowe podzielone na 2 sekcje z 2 niezależnymi pompami. Tutaj z racji ograniczeń sterownika pieca ogrzewaniem steruje domoticz poprzez sterboxy.
Idea jest prosta. Na każdą sekcję składa sie 3 czujniki temperatury, jedna pompa, jedno wyjście ze przekaźnikowe ze sterboxa i jeden moduł w domoticzu z zadaną temperaturą.
Temperatura z 3 czujek jest uśredniana po czym średnia jest porównywana z zadaną i jeśli niższa następuje uruchomenie pompy. Dodatkowo jest jeden switch którym można wyłączyć całe sterowanie.
Zarządzanie odbywa się w skrypcie czasowym a samo załączanie pomp i uśrednianie temperatur wykonywane jest co 5 minut. Dodatkowo są jeszcze 2 czujniki temperatury LM35 podłączone do wejść analogowych sterboxa które mierzą temperaturę wody w mieszalniku podłogówki. Pomogło to ustalić brak zaworów zwrotnych przy mieszalnikach, który powodował pibieranie do ogrzewania jednej sekcji zimną wodę z drugiej sekcji a nie z pieca. Panowie hydraulicy się nie popisali.
A tak wygląda kod sterujący w LUA.
Na początku skryptu trzeba dodać funkcję zaokrąglającą rezultaty przeliczeń.
function roundNum(num, idp)
return tonumber(string.format("%." .. (idp or 0) .. "f", num))
end
A tutaj cała logika rozwiązania.
if((time.min % 5)==0)then
sSalonTemp, sSalonHumidity = otherdevices_svalues['ESP4 DHT22']:match("([^;]+);([^;]+)")
sSalonTemp = roundNum(sSalonTemp,1)
sSalonHumidity = roundNum(sSalonHumidity,1)
tmp1 = tonumber(otherdevices_svalues['Temp Salon']);
tmp2 = tonumber(otherdevices_svalues['Temp Kuchnia']);
tmp3 = sSalonTemp
tmp4 = tonumber(otherdevices_svalues['Temp Lazienka']);
tmp5 = tonumber(otherdevices_svalues['Temp Sypialnia']);
tmp6 = tonumber(otherdevices_svalues['Temp Hol']);
local tempaverage = ((tmp1 + tmp2 + tmp3) / 3)
local tempaverage2 = ((tmp4 + tmp5 + tmp6) / 3)
tempaverage = roundNum(tempaverage,2)
tempaverage2 = roundNum(tempaverage2,2)
commandArray[command]={['UpdateDevice'] = '241|0|'..tempaverage}
command = command +1
commandArray[command]={['UpdateDevice'] = '243|0|'..tempaverage2}
command = command +1
ths = tonumber(otherdevices_svalues['Thermostat Sal']);
thl = tonumber(otherdevices_svalues['Thermostat Laz']);
if (otherdevices['Heating'] == 'On' and ths > tempaverage) then
heath = "Sal Heat On"
if (otherdevices['Pompa CO Sal'] == 'Off') then
commandArray['Pompa CO Sal'] = 'On'
end
else
heath = "Sal Heat Off"
if (otherdevices['Pompa CO Sal'] == 'On') then
commandArray['Pompa CO Sal'] = 'Off'
end
end
--print(heath)
if (otherdevices['Heating'] == 'On' and thl > tempaverage2) then
heath = "Laz Heat On"
if (otherdevices['Pompa CO Laz'] == 'Off') then
commandArray['Pompa CO Laz'] = 'On'
end
else
heath = "Laz Heat Off"
if (otherdevices['Pompa CO Laz'] == 'On') then
commandArray['Pompa CO Laz'] = 'Off'
end
end
end