Logic Machine Forum
Scripting - Printable Version

+- Logic Machine Forum (https://forum.logicmachine.net)
+-- Forum: LogicMachine eco-system (https://forum.logicmachine.net/forumdisplay.php?fid=1)
+--- Forum: Scripting (https://forum.logicmachine.net/forumdisplay.php?fid=8)
+--- Thread: Scripting (/showthread.php?tid=5848)

Pages: 1 2


RE: Scripting - admin - 18.01.2025

Explain exactly what do you want this script to do.


RE: Scripting - mariosp - 20.01.2025

(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)



RE: Scripting - RomansP - 20.01.2025

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



RE: Scripting - mariosp - 20.01.2025

(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 ?


RE: Scripting - admin - 20.01.2025

If there are two setpoints then you need to know which one is currently used. Does your heating actuator have a setpoint status output?


RE: Scripting - mariosp - 20.01.2025

(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
   



RE: Scripting - admin - 20.01.2025

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.


RE: Scripting - Erwin van der Zwart - 20.01.2025

Also >> if event.getvalue() then << is not needed as an event always returns a certain value


RE: Scripting - mariosp - 20.01.2025

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


RE: Scripting - mariosp - 21.01.2025

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



RE: Scripting - admin - 21.01.2025

You are missing quotes around the category name:
Code:
status = event.getvalue()
script.categoryset('zones', status)