레이블이 엠비언시인 게시물을 표시합니다. 모든 게시물 표시
레이블이 엠비언시인 게시물을 표시합니다. 모든 게시물 표시

2015. 2. 16.

[Advanced features] Ambiency Language : 엠블랑(AMBLANG) 이란?

 [Advanced features] Ambiency Language : 엠블랑(AMBLANG) 이란? 

자동화 룰을 만들면서 조금 더 세세한 제어를 원하신 적이 계신가요?

자동화 룰을 조금 더 나에게 맞게 사용하고 싶은 분이 있다면,
엠블랑(AMBLANG)을 배워보세요!
조금 어렵지만 꽤 강력합니다.



'센서 필터(sensor filters)', '액츄에이터 인풋(actuator inputs)' 설정시 엠블랑을 사용하면 더 정확하게 룰을 만들 수 있습니다. 센서필터 화면 왼쪽 아래에 "Advanced" 버튼을 누르시면 엠블랑으로 필터 설정을 할 수 있고, 액츄에이터 화면에서는 바로 엠블랑을 활용하여 각 인풋 필드에 값을 설정 할 수 있습니다.


(Sensor app 필터(filters) 화면)

(Actuator app 인풋(inputs) 화면)



AMBLANG



1. Overview


  • 엠블랑(AMBLANG)은 엠비언시 앱의 ‘필터’와 액츄에이터의 인자값을 명시하기 위한 조그만 프로그래밍 언어입니다.


The grammer

엠블랑의 문법(the context-free grammar)은 아래와 같습니다.

  ````
  expr          ::= "{{" (expr | sym) [conv] "}}"
                    | "{{" [expr] conv "}}"
  sym           ::= identifier
                    | literal
  identifier    ::= \w [(\w | \d)+]
  conv          ::= "!" func
  func          ::= identifier "(" args ")"
  args          ::= arg [args]
                    | expr
                    | sym
                    | e
  literal       ::= number
                    | ('"' | "'") .* ('"' | "'")
  number        ::= ["-"] \d+ ["." \d+]
  ````
위의 문법을 사용한 표현식은 어느 텍스트에도 포함될 수 있습니다. 텍스트에 포함된 표현식이 도출될 때 그 결과는 객체의 어떤 타입으로도 도출될 수 있고 문자열이 될수도 있습니다.

Evaluation

하나의 표현식은 아래의 타입들 중 하나로 도출됩니다.
  • symbol
  • number
  • bool
  • object (객체)

symbol은 중괄호({{ }})로 둘러쌓여 있지 않으면 도출되지 않습니다. symbol value는 일치하는 항목의 센서데이터를 포함하는 symbol table 에서 얻을 수 있습니다. 표현식 내에서의 문자는 따옴표 혹은 쌍따옴표로 둘러 쌓여져 있어야 도출이 되고, 숫자는 정수 혹은 실수만 사용할 수 있습니다.

결과값이 객체라면, 표현식에서 도출이 완료될 때까지 변환되어 재가공되어져야 합니다. 재가공이 실패하게되면, 원래의 표현이 그대로 남게 됩니다.


2. Examples


엠블랑은 센서 필터(Sensor filters)와 액츄에이터 인풋(Actuator inputs)에 사용됩니다. 센서필터에서는 엠블랑은 bool-type 결과로 도출됩니다. 액츄에이터 인풋에서 사용되기 위해 엠블랑은 액츄에이터에서 요구되는 값으로 작성되어야 하며, 그렇지 않을 경우 액츄에이터가 제대로 실행이 되지 않을 수 있습니다.

Sensor Filters(센서 필터)

센서 데이터를 센서 필터에 구체적으로 쓰기 위해서 사용자는 엠블랑의 문법에 맞게 사용해야 합니다. 모든 센서 데이터 필드들은 한 가지 표현으로 사용되어야 하고, 한 개 이상의 표현식을 사용은 할 수 있지만, 한 가지의 boolean으로 사용되어야 합니다.

예로, 이메일 센서에서 사용되는 필터 표현식은 아래와 같습니다.

  ````
      {{ sender!endswith("thenaran.com") }}
  ````
처음 메일 송신자의 도메인이 “thenaran.com”인지를 체크하고, boolean value가 ‘true’인지 ‘false’인지를 도출하게 됩니다.

  ````
      {{ {{ receivers!len }}!gt(1) }}
  ````
위 표현식은 수신자의 숫자가 1보다 커야지만 ‘true’ 값으로 도출하고, 이메일이 다수의 수신자에게 보내졌다는 것을 의미합니다.

1 depth 이상에서 여러 표현식들을 구체화하는 것 또한 가능합니다.

  ````
      {{ {{ {{ receivers!len }}!gt(1) }}!and({{ sender!endswith("thenaran.com") }}) }}
  ````
위 표현식은 “thenaran.com” 도메인으로부터 오고, 여러 수신자에게 보내질 때만 ‘true’ 값으로 도출됩니다.

Actuator Inputs(액츄에이터 인풋)

액츄에이터는 센서 데이터를 사용합니다. 센서 데이터가 다른 타입을 가지고 있어서 바로 적용하지 못하는 포맷인 경우가 있습니다. 엠블랑은 센서 데이터의 타입을 재가공하여 사용할 수 있게 해주며, 액츄에이터 인풋에서 요구하는 타입으로 맞춰서 값을 줄 수 있습니다.

한 예로 메일 앱이 액츄에이터로 사용될 때 첨부파일이 있는 경우 혹은 없는 경우로 메일을 보내는 경우가 있습니다.
메일의 ‘메일 송신 액츄에이터’는 아래의 인풋 데이터 필드를 지원합니다.
  • receivers : string
  • subject : string
  • message : string
  • file : binary
  • file name : string

각 액츄에이터 인풋 필드는 자동화 룰이 실행되기 위해서 필요한 값을 받게 되는데, 엠블랑은 센서데이터를 변환하여 액츄에이터 인풋 필드에서 사용될 수 있게 만들 수 있습니다.
이때 변환되는 최종값은 인풋 필드에서 요구하는 타입에 맞아야 룰이 실행 될 수 있습니다.
예를 들어, string 필드에서 엠블랑 문법을 통해 string으로 도출해야 합니다. input type(string이어야 하는 경우)을 string으로 만들지 못한다면, 원래의 input type으로 쓰여지게 됩니다. 다른 필드 타입의 경우, 모든 인풋 데이터가 적절한 타입으로 변환되지 않는다면 액츄에이터가 제대로 실행되지 않습니다.

웹캠(WebCam)앱이 센서로 사용되어 trigger가 ‘snapshot 사용’인 경우의 이메일 액츄에이터 제목 필드 부분의 인풋 표현식을 보겠습니다.

  ````
      Snapshot taken at {{ time!strftime("%a, %d %b %Y %H:%M:%S +0000") }}
  ````
메세지 필드(message field),

  ````
      Checkout the snapshot below.
  ````

바이너리 데이터가 쓰여져야되는 파일 필드(file field),

  ````
      {{image}}
  ````
"snapshot 사용” trigger는 센서 데이터에서 두 개의 타입을 만드는데, ‘타임 스탭프(time stamp)’와 ‘스냅샷 이미지 파일(snapshot image file)’입니다.
각 데이터는 개별적으로 “time”과 “image”로 사용이 가능하고, “time” 데이터는 integer(정수)이기 때문에 string으로 변환되어져야 합니다. 이 경우 “strftime” 변환기가 사람이 읽을 수 있는 글자로 “time” 데이터를 천분의 일초(milisecond)로 변환합니다.


일단 웹캠에 움직임이 감지되면(motion detected), 위 인풋 값들이 쓰여진 이메일 앱이 첨부파일로 스냅샷을 함께 보내게 됩니다.



3. Recap

엠블랑은 센서 데이터 필터와 액츄에이터 인풋 값 정의에 사용되는 미니 프로그래밍 언어 입니다.
조금 복잡하기 때문에 전문가 분들만 사용하시겠지만, 복잡한 룰이라도 공유 받아 사용하는데는 전문지식이 필요없기 때문에 큰 걱정은 안 하셔도 될 겁니다.

아직 다 엠블랑의 기능을 보여드리진 못 했습니다. 앞으로 천천히 룰도 공유하면서 엠블랑을 더 깊게 알려드리도록 하겠습니다.



4. Rule Example




아래의 룰 이미지를 여러분의 엠비언시(ambiency) 페이지에 드래그 앤 드랍(drag & drop)하면, 룰이 공유되어 엠블랑(Amblang)의 사용예제를 직접 보실 수 있습니다.