{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