Witam, posiadam bufor i cwu pompa ciepła grzeje mi bufor i z bufora pompka obiegowa grzeje wężownicą cwu
chciałbym, zrobic termostat tak aby sprawdzał temperature cwu i bufora
bufor grzeje zawsze do 45c mierzone 30cm od dołu na górze dochodzi mi nawet do 52c histereza 10c i tak musi zostać ze względu na
to aby nie włączać Pompy ciepła za często bo jest to nie ekonomiczne
cwu bym chciał grzać do 43c i teraz sam termostat to nie problem aby włączał pomkę i ją wyłaczał problem jest kiedy temp na buforze spadnie po niżej 43c a histereza u mnie 10c wtedy nie dogrzeje mi cwu i nie wyłączy mi pompki obiegowej, dlatego potrzebował bym aby jeden czujnik z cwu załaczał termostat a drugi czujnik z bufora nadzorował w momencie kiedy pracuje termostat cwu nie dopuszczał do spadku poniżej 43c
aktualnie używam termostatu do włączania i wyączania PC
local heating_probe = 'Woda_Cwu_Dol' local thermostat_setpoint = 'Termostat' local heating_unit = 'Grzanie' -- Use when a combined sensor (e.g. temperature and humidity) is used -- Replace in "otherdevices[heating_probe]" to "otherdevices[heating_probe]" by "temp_only" (in the 2nd "if" and in the "elseif". -- Remove the -- in the next two lines: --local naartekst = (tostring (otherdevices[heating_probe])) --local temp_only = (string.sub(naartekst,1,4)) -- the digits (1,4) do point out what characters of the string are needed. local hysteresis = 4 commandArray = {} -- loop through all the devices for deviceName,deviceValue in pairs(otherdevices) do if (deviceName== thermostat_setpoint ) then if tonumber(deviceValue) < tonumber(otherdevices[heating_probe]-hysteresis) then if (otherdevices[heating_unit] == "On") then -- commandArray['SendNotification']='Heating is off' commandArray[heating_unit]='Off' print("Heating is Off") end elseif tonumber(deviceValue) > tonumber(otherdevices[heating_probe]+hysteresis) then if (otherdevices[heating_unit] == "Off") then commandArray[heating_unit]='On' -- commandArray['SendNotification']='Heating is on' print("Heating is On") end end end end -- loop through all the variables for variableName,variableValue in pairs(uservariables) do end return commandArray
czy ktoś mógł by mi w tym pomóc?
czujnik z bufora nadzorował w momencie kiedy pracuje termostat cwu nie dopuszczał do spadku poniżej 43c
Czyli co ma zrobić ? Opisz to własnymi słowami ale dokładnie, bo z tego opisu trudno coś wywnioskować , Jak bufor ma 40 st i jest potrzeba zagrzania CWU to co wtedy ?
@isom chodzi mi o to gdy bedzie pracowała pompka obiegowa cwu aby z bufora nie spadało nigdy ponizej 43c wiec skrypt by sprawdzał temp bufora i wrazie wu uruchomiał PC chciałbym po prostu aby bojler był zawsze dogrzany bo obecnie PC sie uruchamia zawsze przy 10C histereza i to są okolice 35C
Czyli co ma zrobić ? Opisz to własnymi słowami ale dokładnie, bo z tego opisu trudno coś wywnioskować , Jak bufor ma 40 st i jest potrzeba zagrzania CWU to co wtedy ?
to wtedy on musi włączyć PC dogrzać ją do 45c i wyłaczyć dobrze by było aby skrypt nadzorował w trakcie grzania CWU jak bedzie znowu spadek to żeby ją włączył ponownie
@nototojazda10 za mało informacji , żeby napisać taki skrypt . O ile wiadomo co uruchamia Pompę ciepła ( skrypt LUA) to już nic nie wiadomo co steruje pompa obiegową CWU i CO . Ten skrypt termostatu też nie może zostać bo wyłączy PC nawet jak ją włączysz a temp bufora będzie wyższa niż 35 st.
@isom Pompą CO steruje zupełnie inny sterownik polaczony z elektrozaworami zaworem czterodrogowym i modułem internetowym, do zarządzania
wiec to nie ma nic wspólnego i tam może temp spadać do 35c bo to sama podlogowka dodatkowo zawór sobie dozuje.
glowny problem to dogrzanie cwu tak jak napisałem wyżej, sterowania pompy cwu obecnie jeszcze nie ma wogole bo to świeży temat wiec można przerobić ten skrypt włączający PC, tak aby priorytetowo zawsze włączał pompkę obiegową cwu i jeśli w momencie pracy pompki cwu temperatura w buforze jest niższa niż zadana dla cwu to żeby włączył PC, i znowu dogrzał bufor do 45c
a kiedy nie jest w trybie dogrzewania cwu
zeby pracował w dogrzewaniu takim jak mam teraz czyli 45c max i histereza 10c
Nie wiem czy ma to sens ale tak ja to widzę😬
wiec to nie ma nic wspólnego i tam może temp spadać do 35c bo to sama podlogowka dodatkowo zawór sobie dozuje.
Dla Ciebie nie ma nic wspólnego , dla mnie ma bo start PC do dogrzania bufora musi się wiązać ze startem tej pompy. Bo niby jak inaczej PC ma dogrzać ten bufor ?
wiec to nie ma nic wspólnego i tam może temp spadać do 35c bo to sama podlogowka dodatkowo zawór sobie dozuje.
Dla Ciebie nie ma nic wspólnego , dla mnie ma bo start PC do dogrzania bufora musi się wiązać ze startem tej pompy. Bo niby jak inaczej PC ma dogrzać ten bufor ?
Aha złe się zrozumieliśmy ok, a wiec tak u mnie pompka do obiegu między PC a buforem jest na przekazniku który załącza i PC i Pompkę obiegową w skrypcie przycisk nazywa się Grzanie
@nototojazda10 widzisz kolego ? a co by było gdybym napisał skrypt na dwa oddzielne przekaźniki z opóźnieniem startu dla pompy obiegowej ? Opisz dokładnie tą przeróbkę klimatyzatora na pompę , co i jak jest sterowane i wtedy spróbuję pomóc. Inaczej to tylko domysły i wyciąganie od Ciebie każdej istotnej informacji z osobna.
A więc tak od początku bo faktycznie namieszane jest:
PC i (pompka obiegowa miedzy PC a buforem) uruchamiana jest przekaznikiem po przez Domoticz Przełącznik nazywa sie (Grzanie)
aktualnie skrypt który podałem wyżej nadzoruje dogrzanie bufora temp dogrzania to 45c histereza 10c wiec włącza sie przy 35c wyłącza przy 45c i tak w kółko, to dla podłogówki działa idealnie zawór czterodrogowy sobie dozuje temp a resztę załatwia sterownik czyli steruje pompką obiegową i elektro zaworami.
został właśnie problem z CWU mam przygotowane: wężownica pompka obiegowa (czujniki temp dół/górai w buforze i w cwu zapięte do domoticza) no i teraz trzeba to jakoś rozwiązać, myślę że przekaznik powinien być dodatkowy właśnie dla pompki obiegowej cwu i zrobic tak jak pisałem wyżej,
wiec można przerobić ten skrypt włączający PC, tak aby priorytetowo zawsze włączał pompkę obiegową cwu i jeśli w momencie pracy pompki cwu temperatura w buforze jest niższa niż zadana dla cwu to żeby włączył PC, i znowu dogrzał bufor do 45c
a kiedy nie jest w trybie dogrzewania cwu
zeby pracował w dogrzewaniu takim jak mam teraz czyli 45c max i histereza 10c
Inaczej nie potrafię tego opisać 🙂
@nototojazda10 dalej nic nie wiadomo , ta woda ma być grzana bez histerezy ? zastanów się , a jak zrozumiesz, że naprawdę chcę Ci pomóc to przemyślisz wszystko jeszcze raz i napiszesz dokładnie jak chcesz żeby to działało.
@nototojazda10 dalej nic nie wiadomo , ta woda ma być grzana bez histerezy ?
tak aby priorytetowo zawsze włączał pompkę obiegową cwu gdzie mamy ustawiony zakres
np: 43c max i histereza 5c spadek jest 38 i wtedy włacza się pompka obiegowa cwu
następnie skrypt sprawdza jaka jest temp na dole w buforze jeśli jest nizsza niz 43c
to włacza PC i dogrzewa ją standardowo do 45c mozna tutaj tez uzyć funkcji histereza
lub dopisywac parametry temp minimum maximum
Skrypt musi pełnić dwie funkcjie priorytet cwu ale tez musi nadzorować ciepło bufora dla
podłogówki więc jeśli temp cwu jest wyzsza niż 38c ale bufor spadł po nizej 35c
bo na nim tez mamy histereze ustawioną to wtedy dogrzewamy bufor do 45c
@nototojazda10 poniżej masz skrypt , który trzeba przetestować , ja nie mam na czym. Nazwy trzeba dobrać do swoich , są dwaa termostaty jeden dla bufora , drugi dla CWU , dwie histerezy oddzielnie działające tylko nie możesz ustawić większej histerezy dla wody niż dla bufora . Woda jest grzana w momencie gdy wystartuje pompa i temp tej wody będzie niższa od temp bufora o histerezę wody w skrypcie 2 st . Po zagrzaniu wody do zadanej termostatu + histereza koniec grzania CWU.
Sprawdz czy taki układ będzie wystarczający i daj znać
return { on = { devices = { 'Grzanie', 'Temp Bufor', 'Temp Woda'}}, logging = { level = domoticz.LOG_DEBUG }, -- zmien na LOG_ERROR jak skrypt bedzie ok execute = function(dz, item) _G.logMarker = _G.moduleLabel local histB = 4 local histW = 2 local relay = dz.devices('Grzanie') local temp = dz.utils.round(dz.devices('Temp Bufor').temperature,1) local setB = dz.utils.round(dz.devices('Termostat bufor').setPoint,1) local temp1 = dz.utils.round(dz.devices('Temp Woda').temperature,1) local setW = dz.utils.round(dz.devices('Termostat woda').setPoint,1) local pompa = dz.devices('Pompa') if setB < ( temp - histB ) then relay.switchOff() dz.log('Pompa ciepła jest Off',dz.LOG_DEBUG) elseif setB > ( temp + histB ) then relay.switchOn() dz.log('Pompa ciepła jest włączona',dz.LOG_DEBUG) end if relay.state == 'On' and (temp1 + histW) < temp then pompa.switchOn() dz.log('Grzanie wody jest włączone',dz.LOG_DEBUG) elseif setW < ( temp1 - histW ) then pompa.switchOff() dz.log('Grzanie wody jest wyłączone',dz.LOG_DEBUG) end end }
dziękuje, dzisiaj to sprawdzę, i dam znać co i jak.
Witam, sprawdziłem to ale nie miałem wyjazd, i trochę mi zeszło z odpisaniem
a wiec tak jak włączam skrypt, to po jakichś 30sec wszystko zawieszone cały domoticz
tylko kill mu pomaga
a wygląda to tak:
@nototojazda10 faktycznie mało czasu temu poświęciłeś , popraw błędy , zaznaczone na niebiesko i sprawdź jeszcze raz .
faktycznie były bugi, ale po zmianie i tak zawiesza mi cały serwis domoticza
tutaj jest tez problem dodaje loog
Jak często odpytujesz te czujniki ? Skrypt działa , ale co sekundę wiec musi zawiesić system
2022-09-24 19:31:43.503 Status: dzVents: Debug: Constructed timed-command: On2022-09-24 19:31:43.503 Status: dzVents: Debug: Pompa ciepła jest włączona2022-09-24 19:31:43.503 Status: dzVents: Debug: Constructed timed-command: On2022-09-24 19:31:43.503 Status: dzVents: Debug: Grzanie wody jest włączone2022-09-24 19:31:43.503 Status: dzVents: Info: ------ Finished PC
To powinno się powtarzać co minutę a nie co sekundę
ustawione na 60 sec w esp i taki wynik
ustawione na 60 sec w esp i taki wynik
Wstaw ten skrypt , jest przerobiony żeby uruchamiał się co minutę
return { on = { timer = { 'every minute'}}, logging = { level = domoticz.LOG_DEBUG }, -- zmien na LOG_ERROR jak skrypt bedzie ok execute = function(dz, item) _G.logMarker = _G.moduleLabel local histB = 4 local histW = 2 local relay = dz.devices('Grzanie') local temp = dz.utils.round(dz.devices('Woda_Bufor_Dol').temperature,1) local setB = dz.utils.round(dz.devices('Termostat_bufora').setPoint,1) local temp1 = dz.utils.round(dz.devices('Woda_CWU_Dol').temperature,1) local setW = dz.utils.round(dz.devices('Termostat_cwu').setPoint,1) local pompa = dz.devices('Pompka_cwu') if setB < ( temp - histB ) then relay.switchOff() dz.log('Pompa ciepła jest Off',dz.LOG_DEBUG) elseif setB > ( temp + histB ) then relay.switchOn() dz.log('Pompa ciepła jest włączona',dz.LOG_DEBUG) end if relay.state == 'On' and (temp1 + histW) < temp then pompa.switchOn() dz.log('Grzanie wody jest włączone',dz.LOG_DEBUG) elseif setW < ( temp1 - histW ) then pompa.switchOff() dz.log('Grzanie wody jest wyłączone',dz.LOG_DEBUG) end end }
Troszkę inna logika działania niż myślałem ale też jest OK, teraz wszystko śmiga aż miło
trzeba wdrążyć, bo to na testowym sprzęcie, i zobaczymy jak się to w praktyce sprawdzi,
na ten moment dziękuje bardzo, na pewno za jakiś czas opisze czy wszystko jest ok.
Pozdrawiam.