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.

How to script the control logic of air conditioner?
#1
The KNX address returns an outdoor temperature value,If I want to set a scene at 0-10℃, set a scene at 10-25℃, set a scene above 25℃, how do I set it?
Reply
#2
value = event.getvalue()

if value > 0 and value < 10 then
--do something
elseif value > 10 and < 25 then
--do something
elseif value < 25 then
--do something
end

You can also use >= 10 instead of > 10 for example.
In the first example also the value 10 itself is included in the second example only every value higher then 10.
Reply
#3
local temp=knxdatatype.decode(event.datahex,dt.float16)
local heat=knxobject.get('address','1/3/5')
local ac=knxobject.get('address','3/5/37')
local heat_on=toboolean(heat.data)
local ac_on=toboolean(ac.data)
--heating off
if not heat_on then
--制冷
if temp>24 and not ac_on then
alert('BR temp:%f,A/C ON',temp)
ac:write (1)
end
--过度季节制冷
if temp>15 and temp<24 and not ac_on then
alert('BR temp:%f,A/C ON',temp)
ac:write (2)
end
--过度季节制暖
if temp>10 and temp<15 and not ac_on then
alert('BR temp:%f,A/C ON',temp)
ac:write (3)
end



--制暖
if temp<10 and not ac_on then
alert('BR temp:%f,A/C OFF',temp)
ac:write(4)
end
end

Like this, would it work

1 value is refrigeration;2 value is Overmode refrigeration;3 value is Excessive mode heating;4 value is Making the model。
Reply
#4
3/5/37 will only change when current value of 3/5/37 is 0 and 1/3/5 is 0. Is there some external logic that sets 3/5/37 to 0? If not then you need to change your script. Can you write an algorithm of how the system should work? Then we can help you with a script.
Reply
#5
I'm just beginning to learn how to write.3/5/37 will only change to Turn off air conditioning when current value of 3/5/37 is 0.1/3/5 is Temperature detection module.The program written above, is to imitate the example of the official website to rewrite, so I would like to ask, if I achieve this function, where do I need to modify to use?

local temp=knxdatatype.decode(event.datahex,dt.float16)
local heat=knxobject.get('address','1/3/5')
local ac=knxobject.get('address','3/5/37')
local heat_on=toboolean(heat.data)
local ac_on=toboolean(ac.data)
--heating off
if not a_on then
--制冷
temp>24 then
grp.write('3/5/37', 1)

--过度季节制冷
elseif temp>15 and temp<24 then
grp.write('3/5/37', 2)


--过度季节制暖
elseif temp>10 and temp<15 then
grp.write('3/5/37', 3)




--制暖
elseif temp<10 and not ac_on then
grp.write('3/5/37', 4)

end

-- object mapped to this event must have its data type set
temp = event.getvalue('1/3/5')
if not a_on==0 then
--制冷
temp>24 then
grp.write('3/5/37', 1)

--过度季节制冷
elseif temp>15 and temp<24 then
grp.write('3/5/37', 2)


--过度季节制暖
elseif temp>10 and temp<15 then
grp.write('3/5/37', 3)




--制暖
elseif temp<10 and not ac_on then
grp.write('3/5/37', 4)

end

-- object mapped to this event must have its data type set
temp = event.getvalue('1/3/5')
if not a_on==0 then
--制冷
temp>24 then
grp.write('3/5/37', 1)

--过度季节制冷
elseif temp>15 and temp<24 then
grp.write('3/5/37', 2)


--过度季节制暖
elseif temp>10 and temp<15 then
grp.write('3/5/37', 3)




--制暖
elseif temp<10 and not ac_on then
grp.write('3/5/37', 4)

end

Two writes, that works?
Reply
#6
This example will set out_value depending on input temperature. This should be an event script attached to temperature sensor object so it executes each time temperature value changes.
Code:
value = event.getvalue()

if temp >= 24 then
  out_value = 1
elseif temp >= 15 then
  out_value = 2
elseif temp >= 10 then
  out_value = 3
else
  out_value = 4
end

grp.write('3/5/37', out_value)
Reply
#7
temp ,How to read the value 1/3/5?
temp = event.getvalue('1/3/5')?
Reply
#8
event.getvalue() returns the value of an object that triggered the event. If your event script is attached to 1/3/5 then value variable will contain current temperature sensor value.
Reply


Forum Jump: