Sterowanie ogrzewaniem podłogowym

{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.

Heating Devices

 

 

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