[HC3] lua scene 작성 방식 변경

HC2를 사용해보지 않았기 때문에, 기존의 lua scene이 어떻게 작성되었는지 몰랐다. 우선 HC3에서 scene을 적용시켜보려고 구글링으로 걸리는 몇 가지를 적용시켜보려고 했다.
하지만 정상적으로 동작하지 않았고, 이유를 찾아보았다. (문서를 세심히 살폈다면 바로 해결됐을텐데..)

scene에는 condition/trigger가 있고, 그에 따라 동작시킬 action이 있다.

HC2용 lua scene에는 trigger이 따로 없었으며, trigger되는 항목을 선언하면 action에서 원하는 컨디션인지 체크하고 action이 동작될 수 있도록 했던 것 같다.
Trigger를 선언하는 것은 scene의 헤더부에 작성하도록 되어있다. scene 코드를 보면 아래처럼 되어있는데

--[[
%% properties
10 value
%% events
%% globals
--]]

-- the action is descripted below.

lua의 주석구문을 활용하여 scene 코드 상단에 기술하도록 변칙적으로 작성하였다.
위의 properties, event, globals는 속성, 이벤트, 글로벌 변수 변경에 대해 트리거링 되는 것이다. 그리고 10번 디바이스의 value property가 변경될 때 트리거링 된다.

HC3에는 저런 변칙적인 것을 빼버렸다.
scene 에디터에서 condition/trigger 와 action을 작성하는 에디터가 나뉘어져있다.
전체 properties, event, globals에 대한 트리거링은 없어진 것 같다. 트리거링 조건도 같이 지정할 수 있고, trigger인지, condition인지도 지정이 가능하다.
Trigger이면 변경이 되고, 조건이 만족해야만 action이 실행되고, condition이면 다른 trigger에 의해 동작을 할 때 조건이 만족해야 action이 실행된다.

WebCore에서의 switch "changed to" on/off (trigger) 와 switch "is" on/off (condition)의 차이겠다.

value 변경에 대해서 기존엔 모든 변경에 반응했지만 지금은 비교조건이 반드시 필요한 것으로 확인된다.

{
    type = "device",
    id = 24,
    property = "value",
    operator = ">=",
    value = 1,
    isTrigger = true
}

property, operator, value 가 존재하고 조건이 만족해야지만 action이 실행되는 것으로 확인된다. 값에 따라 0보다 크거나 같다고 하면, 모든 변경에 대해 반응될 수 있기 때문에 이런식으로 사용할 수 있을 것 같다.

조건이 정의에 포함되면서 서술하는 양이 많아졌고 action은 간단하게 서술할 수 있게 되었다. 다만 경우에따라 예전처럼 모든 변경에 대헤 정의할 필요가 있다면 condition을 정의하기 애매해질 수도 있다.

action에 대해서도, 2에서는 lua가 동작할 수 있는 곳이 scene이기 때문에 모든 작업이 여기서 가능했었다. 하지만 3에서 QuickApp이 추가되면서 scene에서는 할 수 없는 것이 생긴 것 같다.
HC3의 scene에서는 net.HTTPClient가 사라졌다. QuickApp에서는 사용할 수 있으니 scene에서도 QuickApp을 통해서 작업해야할 부분이 생긴 것 같다. (모든 것이 QuickApp에서 가능할 수도 있으나, 아직 타 device의 변경에 대한 트리거 되는지 모르겠다.)

Show Comments