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.

Scripting
#21
Explain exactly what do you want this script to do.
Reply
#22
(18.01.2025, 11:12)admin Wrote: Explain exactly what do you want this script to do.

so its a littlebit complicated.
I have underfloor heating i want the pwm valves to not close and i want to change the %of the opening valve i want if the actual temperature 
is higher than then setpoint to write to the group address of the heating actuator the setpoint - the offset that my client will set 
but if the actual temperature is lower than the set i want to write to  group address of the heating actuator the actual temperature so it will open more if need it heres is the script that i end up. Thank you in advance! 
Code:
if event.getvalue() then
-- actual temperature of room1
  local actual_temp1 = grp.getvalue('12/0/5')
  -- group address of the heating actuator for temperature
  local fake_temp_addr1 = '3/3/1'
-- virtual group address that i created for mosaic
  local offsetvalue = grp.getvalue('32/1/69')
-- master setpoint for all rooms    
  local value_temp = grp.getvalue('12/1/0')
  --setpoint of room
  local value_temp1 = grp.getvalue('3/1/1')
-- for mosaic because that i made it with rotary dimmer
  local offset = value_temp - offsetvalue * 0.01


if actual_temp1 >= value_temp or  value_temp1
  then
grp.write(fake_temp_addr1,offset)
 
else
  grp.write(fake_temp_addr1,actual_temp1)
Reply
#23
I am not sure that I correctly understand what you need, but here is the code

Code:
  local actual_temp1 = grp.getvalue('12/0/5')

  local fake_temp_addr1 = '3/3/1'

  local offsetvalue = grp.getvalue('32/1/69')

  local value_temp = grp.getvalue('12/1/0')

  local value_temp1 = grp.getvalue('3/1/1')

  local offset = value_temp - (offsetvalue * 0.01)

  if actual_temp1 >= value_temp1 then
    grp.write(fake_temp_addr1, offset)
  else
    grp.write(fake_temp_addr1, actual_temp1)
  end
Reply
#24
(20.01.2025, 10:07)RomansP Wrote: I am not sure that I correctly understand what you need, but here is the code

Code:
  local actual_temp1 = grp.getvalue('12/0/5')

  local fake_temp_addr1 = '3/3/1'

  local offsetvalue = grp.getvalue('32/1/69')

  local value_temp = grp.getvalue('12/1/0')

  local value_temp1 = grp.getvalue('3/1/1')

  local offset = value_temp - (offsetvalue * 0.01)

  if actual_temp1 >= value_temp1 then
    grp.write(fake_temp_addr1, offset)
  else
    grp.write(fake_temp_addr1, actual_temp1)
  end

i want it ether mastersetpoint or the room setpoint are higher to grp.write the actual temperature. do you see anything wrong with my script ?
Reply
#25
If there are two setpoints then you need to know which one is currently used. Does your heating actuator have a setpoint status output?
Reply
#26
(20.01.2025, 12:24)admin Wrote: If there are two setpoints then you need to know which one is currently used. Does your heating actuator have a setpoint status output?
yes and i tryed now but it work only for first one room of the script here is the full script!
Code:
if event.getvalue() then
local actual_temp1 = grp.getvalue('12/0/5')
local fake_temp_addr1 = '3/3/1'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp1 = grp.getvalue('3/1/1')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp1
local setpointstatus1 = grp.getvalue('4/2/1')

  if actual_temp1 >= setpointstatus1
  then
grp.write(fake_temp_addr1,offset)
else
  grp.write(fake_temp_addr1,actual_temp1)

 

local actual_temp2 = grp.getvalue('12/0/3')
local fake_temp_addr2 = '3/3/2'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp2 = grp.getvalue('3/1/2')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp2
local setpointstatus2 = grp.getvalue('4/2/2')
   
if actual_temp2 >= setpointstatus2
  then
grp.write(fake_temp_addr2,offset)
 
else
  grp.write(fake_temp_addr2,actual_temp2)


  local actual_temp3 = grp.getvalue('12/0/4')
local fake_temp_addr3 = '3/3/3'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp3 = grp.getvalue('3/1/3')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp3
local setpointstatus3 = grp.getvalue('4/2/3')
     
if actual_temp3 > setpointstatus3
  then
grp.write(fake_temp_addr3,offset)
 
else
  grp.write(fake_temp_addr3,actual_temp3)
 
 
 
local actual_temp4 = grp.getvalue('12/0/4')
local fake_temp_addr4 = '3/3/4'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp4 = grp.getvalue('3/1/4')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp4
local setpointstatus4 = grp.getvalue('4/2/4')

        if actual_temp4 >= setpointstatus4
  then
grp.write(fake_temp_addr4,offset)
 
else
  grp.write(fake_temp_addr4,actual_temp4)
       

       
       
local actual_temp5 = grp.getvalue('12/0/1')
local fake_temp_addr5 = '3/3/5'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp5 = grp.getvalue('3/1/5')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp5
local setpointstatus5 = grp.getvalue('4/2/5')
         
         
if actual_temp5 >= setpointstatus5
  then
grp.write(fake_temp_addr5,offset)
 
else
  grp.write(fake_temp_addr5,actual_temp5)


local actual_temp6 = grp.getvalue('12/0/3')
local fake_temp_addr6 = '3/3/6'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp6 = grp.getvalue('3/1/6')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp6
local setpointstatus6 = grp.getvalue('4/2/6')

if actual_temp5 >= setpointstatus6
  then
grp.write(fake_temp_addr6,offset)
 
else
  grp.write(fake_temp_addr6,actual_temp6)
           
           
local actual_temp7 = grp.getvalue('12/0/2')
local fake_temp_addr7 = '3/3/7'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp7 = grp.getvalue('3/1/7')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp7
local setpointstatus7 = grp.getvalue('4/2/7')

if actual_temp7 >= value_temp or value_temp7
  then
grp.write(fake_temp_addr7,offset)
 
else
  grp.write(fake_temp_addr7,actual_temp7)
   
   
local actual_temp8 = grp.getvalue('12/0/3')
local fake_temp_addr8 = '3/3/8'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp8 = grp.getvalue('3/1/8')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp8
local setpointstatus8 = grp.getvalue('4/2/8')
               
if actual_temp8 >= setpointstatus8
  then
grp.write(fake_temp_addr8,offset)
 
else
  grp.write(fake_temp_addr8,actual_temp8)
               
               
local actual_temp9 = grp.getvalue('12/0/3')
local fake_temp_addr9 = '3/3/9'
local offsetvalue = grp.getvalue('32/1/69')
local value_temp = grp.getvalue('12/1/0')
local value_temp9 = grp.getvalue('3/1/9')
local offset = value_temp - offsetvalue * 0.01
local temp_dif = value_temp - actual_temp9
local setpointstatus9  = grp.getvalue('4/2/9')
                 
if actual_temp9 >= setpointstatus9 then
grp.write(fake_temp_addr9,offset)
 
else
  grp.write(fake_temp_addr9,actual_temp9)
               
  end           
end
end 
   end
     end
       end
      end
    end
  end
end
   
Reply
#27
You should handle each zone in a different script.

Your current script does not work because if/else/end statements are wrong. First end should be at line 16. There should not be multiple end statements at the bottom of the script.
Reply
#28
Also >> if event.getvalue() then << is not needed as an event always returns a certain value
Reply
#29
Thank you guys for you help !!!
Its Working now ! 
How im gonna do it  for half hour to work and do not work for half hour continuously? 
I read for the scheduled script but dont know how to  make it
Reply
#30
Hello guys i tried this script that will enable and disable the scripts from and event and i will make a schedule  on/off of the virtual group address that the event is based. i tried this but it doesnt work anyone can see why ?
Code:
if event.getvalue(1) then
 
  script.categoryenable(zones)
  else
  script.categorydisable(zones)
  end
Reply
#31
You are missing quotes around the category name:
Code:
status = event.getvalue()
script.categoryset('zones', status)
Reply


Forum Jump: