This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm that you accept these cookies being set.

Script working as "resident" but not "scheduled"
#3
(23.01.2025, 11:28)admin Wrote: PID script needs to run in a loop to store the current state so scheduled script cannot be used.
Use a resident script with an extra os.sleep() at the end to make the total sleep interval longer.

Amazing. Thanks.

(23.01.2025, 11:28)admin Wrote: PID script needs to run in a loop to store the current state so scheduled script cannot be used.
Use a resident script with an extra os.sleep() at the end to make the total sleep interval longer.

One more question.
Should I still have it as resident with 60 seconds? will there not be a conflict if i do like this?

Quote:-- Resident: Golvvärme styrvärde regulator pid nedan:

-- Ange avrundningssteget här (t.ex. 0.1, 0.2, 0.25, 0.5, etc.)
local round_step = 0.20  -- Du kan ändra detta till det steg du vill ha.

-- Funktion för att avrunda till närmaste "step"
local function round_to_nearest(value, step)
  return math.floor(value / step + 0.5) * step
end

-- Variabel för att slå på eller av temperaturskillnadskontrollen
local temperature_diff_enabled = false  -- Sätt till 'true' för att kontrollera temperaturskillnaden, 'false' för att inaktivera

-- Hämta nuvarande och börvärde från sensorer och avrunda med angivet steg
local current_value = round_to_nearest(grp.getvalue('5/5/1'), round_step) -- Framledning ärvärde
local setpoint_value = round_to_nearest(grp.getvalue('5/5/0'), round_step) -- Framledning börvärde

-- Kontrollera temperaturskillnad efter avrundning
local temperature_diff = math.abs(setpoint_value - current_value)
local limit = 0.20 -- Gränsen för temperaturskillnad

-- Initiera PID om det behövs
if not p then
  require('user.pid')
  p = PID:init({
    current = '5/5/1', -- Framledning ärvärde
    setpoint = '5/5/0', -- Framledning börvärde
    output = '5/5/15',  -- GV styrvärde
    round_step = round_step -- Här skickas round_step till PID
  })
end

-- Kontrollera om temperaturskillnaden ska användas för att köra PID
if temperature_diff_enabled then
  if temperature_diff > limit then
    local previous_output = p.output
    p:run()

    if p.output ~= previous_output then
      log(string.format("Styrvärde skickat till 5/5/15: %.2f (Ärvärde: %.2f, Börvärde: %.2f, Skillnad: %.2f°C)",
                        p.output, current_value, setpoint_value, temperature_diff))
    end
  else
    log("Ingen signifikant avvikelse (" .. string.format("%.2f", temperature_diff) .. "°C), limit " .. string.format("%.2f", limit) .. "°C, PID ej körd. (Börvärde: " .. string.format("%.2f", setpoint_value) .. "°C, Ärvärde: " .. string.format("%.2f", current_value) .. "°C)")
  end
else
  local previous_output = p.output
  p:run()

  if p.output ~= previous_output then
    log(string.format("Styrvärde skickat till 5/5/15: %.2f (Ärvärde: %.2f, Börvärde: %.2f, Skillnad: %.2f°C)",
                      p.output, current_value, setpoint_value, temperature_diff))
  end
end

-- Lägg till en paus på 120000 millisekunder (2 minuter)
os.sleep(120000)
Reply


Messages In This Thread
RE: Script working as "resident" but not "scheduled" - by jerryhenke - 23.01.2025, 11:40

Forum Jump: