Uniwersalny Termost...
 
Powiadomienia
Wyczyść wszystko

Uniwersalny Termostat z Histereza na bazie Domoticza

69 Wpisów
14 Użytkownicy
9 Likes
10.8 K Wyświetleń
kniazio
(@kniazio)
Wpisów: 137
Ekspert Donator 2K21
 

Panowie pomocy.

Usiluje przerobic skrypt pod sterowanie klima.

local heating_probe = 'Salon' 
local thermostat_setpoint = 'Termostat_Klima'
local heating_unit1 = 'Grzanie_20'
local heating_unit2 = 'Grzanie_22'
-- 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 = 0.1
commandArray = {}
-- loop through all the devices
for deviceName,deviceValue in pairs(otherdevices) do
if (deviceName== thermostat_setpoint ) then
if tonumber(deviceValue) < tonumber(temp_only - hysteresis) then
if (otherdevices[heating_unit2] == "On") then
-- commandArray['SendNotification']='Heating is off'
commandArray[heating_unit1]='On'
print("Heating is Off")
end
elseif tonumber(deviceValue) > tonumber(temp_only + hysteresis) then
if (otherdevices[heating_unit1] == "On") then
commandArray[heating_unit2]='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

Chcialbym aby gdy temperatura przekroczy zadana w termostacie wartosc skrypt uruchamial device Grzanie_20 czyli heating_unit1 a jesli temperatura spadnie ponizej zadanej to ma uruchomic device Grzanie_22czyli heating_unit2.

Probuje dluzszy czas i ciagle mam blad :

Error: dzVents: Error: (3.0.2) ...cz/scripts/dzVents/generated_scripts/Termostat_Klima.lua:8: attempt to index a nil value (global 'otherdevices')

Da sie cos z tym zrobic?

Zapomnialem dodac ze moje urzadzenia Grzanie_20 i Grzanie_22 to urzadzenia typu Push On Button

obraz
 
Dodane : 10/09/2022 8:53 pm
isom
 isom
(@isom)
Wpisów: 4356
Szefu Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Autor tematu
 

@kniazio zacznij przerabiać jakiś skrypt dzVents , albo ten co próbujesz nie wstawiaj jako dzVents bo to jest skrypt LUA a nie dzVents 

 
Dodane : 10/09/2022 9:32 pm
kniazio
(@kniazio)
Wpisów: 137
Ekspert Donator 2K21
 

Z LUA tez mi nie wychodzi. Ciagle jakies bledy

 
Dodane : 10/09/2022 10:01 pm
Przemo
(@przemo)
Wpisów: 17
Profesjonalista
 

@isom

Możesz podesłać linka do wtyczki co ma możliwość uczenia się charakterystyki cieplnej budynku ? Wtyczka o której wspominasz pod koniec drugiego postu.

 
Dodane : 11/09/2022 10:35 pm
isom
 isom
(@isom)
Wpisów: 4356
Szefu Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Autor tematu
 

@przemo jest na wiki 

https://www.domoticz.com/wiki/Plugins/Smart_Virtual_Thermostat.html

 
Dodane : 12/09/2022 10:26 pm
Stanisław Przystalski
(@stanislawprzystalski)
Wpisów: 19
Profesjonalista
 
Dodane przez: @isom

@stanislawprzystalski Skrypt musisz dodać w zdarzeniach jako dzVents(ALL) , po wykasowaniu całej zawartości przykładów, które tam zobaczysz wklejasz to co poniżej i wystarczy dopasować nazwy Przekaźnika , Termostatu, czujnikaTemp i czujnika kontaktronu.

 

Te zmiany musisz zrobić w dwóch miejscach jedno to zaraz w devices = {.........
I potem w local ......

po 2 latach stabilnej pracy wyskoczyły błędy 

dzVents: Error: (3.1.7) Ogrzewanie On 

w sumie nic nie zmieniałem aktualizowałem jak pamiętam Domoticza system działa stabilnie przekaźniki działają tylko w logach czerwono 

 
Dodane : 15/09/2022 7:46 pm
isom
 isom
(@isom)
Wpisów: 4356
Szefu Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Autor tematu
 

@stanislawprzystalski i co mamy zgadywać jakie te błędy w logach ?

Dodane przez: @stanislawprzystalski

dzVents: Error: (3.1.7) Ogrzewanie On 

To nic nie mówi i nie jest cały log 

 
Dodane : 15/09/2022 8:43 pm
Stanisław Przystalski
(@stanislawprzystalski)
Wpisów: 19
Profesjonalista
 
2022-09-15 19:45:16.391 Error: dzVents: Error: (3.1.7) Ogrzewanie Off

 

tylko tyle wyświetla wszystko działa jak trzeba ale zastanawiam się jaki jest powód tego błędu 

skrypt działał od dawna i nie sypał błędami 

 

return
{
on = { timer = { 'every 5 minutes' },
devices = { 'D1 Termostat Łazienka Parter', 'D1 Temperatura Łazienka Parter','D1 Okno Łazienka Parter'}}, 

logging = { level = domoticz.LOG_ERROR }, 
execute = function(dz, item)
_G.logMarker = _G.moduleLabel

local hysteresis = 0.2 -- ustaw od 0,1 do 10
local boiler = dz.devices('D1 Ogrzewanie Łazienka Parter') -- Nazwa przekaznika do grzania
local temperature = dz.utils.round(dz.devices('D1 Temperatura Łazienka Parter').temperature,1) -- Nazwa Czujnik temp
local setpoint = dz.utils.round(dz.devices('D1 Termostat Łazienka Parter').setPoint,1) -- Nazwa termostatu
local sensor = dz.devices('D1 Okno Łazienka Parter') -- Nazwa czujnika okno



if setpoint < ( temperature - hysteresis ) and boiler.state == 'On' then
boiler.switchOff()
dz.log('Ogrzewanie Off',dz.LOG_ERROR)
elseif setpoint > ( temperature + hysteresis ) and boiler.state == 'Off'and sensor.state =='Closed' then
boiler.switchOn()
dz.log('Ogrzewanie On',dz.LOG_ERROR)
elseif setpoint > ( temperature + hysteresis ) and boiler.state == 'On'and sensor.state =='Open' then
boiler.switchOff()
dz.log('Ogrzewanie Stop okno otwarte',dz.LOG_ERROR)

end
end
}

 

 
Dodane : 15/09/2022 10:33 pm
isom
 isom
(@isom)
Wpisów: 4356
Szefu Moderator Zasłużony dla Forum, Donator 2K19, Donator 2K20
Autor tematu
 
Dodane przez: @stanislawprzystalski

skrypt działał od dawna i nie sypał błędami 

 

W takiej postaci jak wstawiłeś , zawsze musiał walić błędami . Wstaw ten co poniżej i będzie spokój 

return
{
on = { timer = { 'every 5 minutes' },
devices = { 'D1 Termostat Łazienka Parter', 'D1 Temperatura Łazienka Parter','D1 Okno Łazienka Parter'}}, 

logging = { level = domoticz.LOG_ERROR }, 
execute = function(dz, item)
_G.logMarker = _G.moduleLabel

local hysteresis = 0.2 -- ustaw od 0,1 do 10
local boiler = dz.devices('D1 Ogrzewanie Łazienka Parter') -- Nazwa przekaznika do grzania
local temperature = dz.utils.round(dz.devices('D1 Temperatura Łazienka Parter').temperature,1) -- Nazwa Czujnik temp
local setpoint = dz.utils.round(dz.devices('D1 Termostat Łazienka Parter').setPoint,1) -- Nazwa termostatu
local sensor = dz.devices('D1 Okno Łazienka Parter') -- Nazwa czujnika okno

if setpoint < ( temperature - hysteresis ) and boiler.state == 'On' then
boiler.switchOff()
dz.log('Ogrzewanie Off',dz.LOG_INFO)
elseif setpoint > ( temperature + hysteresis ) and boiler.state == 'Off'and sensor.state =='Closed' then
boiler.switchOn()
dz.log('Ogrzewanie On',dz.LOG_INFO)
elseif setpoint > ( temperature + hysteresis ) and boiler.state == 'On'and sensor.state =='Open' then
boiler.switchOff()
dz.log('Ogrzewanie Stop okno otwarte',dz.LOG_INFO)

end
end
}
 
Dodane : 16/09/2022 4:59 pm
Strona 4 / 4
Udostępnij: