본문 바로가기

SmartHome. IoT/SmartHome 응용

HomeAssistant의 자동화를 알아보기 - 4.동작

728x90
반응형

안녕하세요~ 레이군 입니다.

홈 어시스턴트 자동화 알아보기 네번째 시간, 동작에 대해서 입니다.

언제나 그렇듯, 자세한 내용은 공홈을 참조해 주시기 바랍니다.

https://www.home-assistant.io/docs/automation/action/

트리거가 자동화의 시작이라면, 동작은 자동화의 끝 입니다.

그만큼 할 수 있는것도 많고, 복잡하기도 하죠.

If-then, 기기, 미디어 재생, 반복, 병렬실행, 서비스 호출, 선택, 이벤트 발행, 장면 활성화, 조건, 중지, 지연 시간, 템플릿 대기, 트리거 대기...

이중 if-then과 병렬실행, 중지 는 2022.05 버전에 추가된 신기능 입니다.

공통사항

트리거, 조건과 마찬가지로 동작에도 우측 상단의 3점을 누르면 공통 메뉴가 나타납니다.

동작 실행 버튼으로 개별 동작의 정상 실행 유무를 파악할 수 있고

YAML편집기로 좀 더 복잡한 동작을 지시할 수 있습니다.

예를들면 UI에서 아직 지원되지 않는 variables 라던지, continue_on_error 같은것들을 쓸 수 있죠.

복제, 비활성화, 삭제는....아시죠?

If-then

if-then 은 만약 A조건이 만족하면 a를 실행하고, 그렇지 않으면 b를 실행하라 라는 형태의 동작 입니다.

선택(choose)와 매우 비슷하지만, if-then은 Y or N 으로 둘중 하나만 가능하고 선택은 1, 2, 3, 4 등

더욱 많은 변수를 넣을 수 있다는 점이 다르네요. 간소하게 쓰기엔 if-then이 더 나아보입니다.

구성은, 조건(condition)을 설정 할 수 있고 이 내용은 이전시간에 다룬 조건 부분과 동일합니다.

해당 조건을 만족하면, then에서 지정한 동작을 실행하고

만족하지 않으면, else에서 지정한 동작을 실행합니다. else는 필요 없다면 비워두셔도 됩니다.

아빠와 엄마의 폰으로 재실감지를 하고, AI스피커에 TTS로 웰컴멘트를 날린다고 할때,

트리거 : 아빠폰, 엄마폰 재실

동작 : if - 아빠폰 재실 -> then - 아빠 환영합니다 / else - 엄마 환영합니다.

이런식으로 구분하여 동작을 시킬 수 있겠죠.

물론 if에서 지정할 수 있는 조건은 자유롭기 때문에, 아이디어에 따라서 무수한 가능성이 있습니다.

기기(device)

기기의 동작을 제어합니다.

call_service 에서 제어하기 어려운게 여기에 표시될수도 있습니다.

물론 기기 항목에 표시되는 장치에 대해서만, 제어 가능한 항목에 대해서만 표시됩니다.

전 습관적으로 call_service를 쓰는편이라 기기쪽은 잘 안건드리게 되네요..

미디어 재생(play_media)

tts가 아닌, media_source 에 포함된 항목들을 재생할 수 있습니다.

웰컴 뮤직이라던지, 이런거 할때 좋겠죠?

반복(repeat)

일정한 동작을 반복할때 사용합니다. 종류는 총 3가지를 지원합니다.

횟수(count)

지정한 횟수만큼 동작을 반복합니다. 간단하죠?

~인 동안(while)

조건을 걸고, 해당 조건이 만족하는 상태에서만 동작을 반복합니다.

조건 - 외출상태일때 / 동작 - 매시 정각에 로봇청소기 돌림

= 외출상태가 해제되기 전까지 매시 정각에 로봇청소기가 돌아감

~일 때 까지(until)

어떤 조건을 만족하기 전까지 지정된 동작을 계속 반복함

조건 - 재실상태일때 / 동작 - 매시 정각에 로봇청소기 돌림

= 재실 상태로 변경될때 까지 매시 정각에 로봇청소기가 돌아감

while과 until은 ~~하는 동안, ~~로 변경되기 전 까지 이므로

원하는 목적에 따라 어느걸 사용해도 무방할 경우도 있고, 둘중 하나만 조건을 만족할수도 있습니다.

이건 자동화 시나리오를 어떻게 짜느냐에 따라 달라집니다.

병렬실행(parallel)

기본적으로 자동화 동작은, 가장 위에서 부터 순차적으로 이루어 집니다.

1번 동작에 delay = 10초, 2번 동작에 불 켜기, 3번 동작에 delay = 20초, 4번 동작에 끄기를 넣는다면

10초 후 불이 켜지고, 불 켜진 다음 20초 후(자동화 최초 동작 후 30초 후) 불이 꺼질겁니다.

병렬 동작은, 2022.05에 추가된 기능으로 이 안쪽에 지정된 동작들은 동시에 진행합니다.

즉, 병렬 내에 delay = 10초, 불 켜기, delay = 20초 / 이후 동작으로 불 끄기를 넣는다면

3가지 동작이 동시에 진행되므로 불 켜짐 + 딜레이 10초 + 딜레이 20초 카운트가 동시에 시작됩니다.

그리고 병렬 내에서 delay가 전부 끝나는 20초 후(동시 실행이므로) 다음 동작인 불 끄기가 동작됩니다.​

light.turn_on 이라던가 switch.turn_on 서비스가 1,2,3,4번 동작으로 지정되어 있다면

0.0x초 이지만 하나의 동작 이후 다음동작을 실행하는데 딜레이가 발생합니다.

이걸 병렬동작으로 하면 딜레이를 최소화 시킬 수 있을거예요.

물론 막 도입된 기능이라 얼마나 효과가 있을런지는...음...?

서비스 호출(service)

제가 가장 많이 쓰는 기능입니다.

call_service 로 서비스 호출이 가능한 모든 동작을 쓸 수 있습니다.

litght.turn_on 이라던지, switch.toggle 이라던지..

input_select나 script 등등 서비스 호출로 할 수 있는 HA의 모든 기능을 여기서 지정할 수 있습니다.

선택(choose)

if-then 이 Yes or No 라면, choose는 A or B or C or D.... 입니다.

옵션을 추가해서 조건을 여러개 만들 수 있고, 각 조건마다 동작을 지정할 수 있습니다.

만 아래 기본동작은, 위에서 설정한 옵션들을 전부 만족하지 못할때 진행되는것 으로

if-then의 else와 같은 역할 입니다.

트리거가 3개인 자동화를 짠다고 가정할때, 옵션을 3개 넣고

각각 트리거 1, 2, 3의 조건을 넣어 동작을 지정할 수 있겠죠.

옵션 1 - 아빠 재실 -> 동작 - 아빠 어서오세요

옵션 2 - 엄마 재실 -> 동작 - 엄마 어서오세요

옵션 3 - 아들 재실 -> 동작 - 아들 어서오세요

이런식으로요.

이벤트 발행(event)

개발자도구 - 이벤트 쪽에서 확인 가능한 이벤트들을 발행할 수 있습니다.

이쪽은 제가 잘 모르는 분야라 ㅠ.ㅜ

장면 활성화(scene)

장면(scene)으로 지정한 것들을 호출할 수 있습니다.

저는 ST에 있는 공기청정기의 취침모드 제어를 위해 사용하고 있긴 한데...

scene으로 만들어진걸 그대로 적용하는 역할을 합니다.

장면(scene)이란, 분위기 라고 표현할수도 있는데요

해당 장면에서 지정한 설정들을 그대로 불러와서 적용해 줍니다.

가령, 영상관람을 위하여 몇가지 설정을 조절한다고 하면

커튼을 닫고 / 거실 조명을 끄고(or 어둡게 하고) / 스피커과 TV를 켜고 의 동작을 해야 하겠죠.

이걸 자동화로 만들면 각각의 동작을 넣어야 하지만, 이 상태를 장면(scene)으로 저장해두면

씬 호출만 하면 해당 상태로 만들어 주니 훨신 편하겠죠.

장면 기능은, 단순히 해당 상태를 지정된 값으로 변경하는 역할을 합니다.​

기존 상태를 기억했다가 -> 장면으로 전환 후 -> 다시 복원시키는 기능은 없습니다.

또한 장면을 편집하려면, configuration.yaml 파일에 config: 항목이 필요하며

scene: !include scenes.yaml 으로 신 설정을 활성화 해야만 합니다.

조건(condition)

조건은 동작 진행중 해당 조건의 만족 여부를 확인하여 만족시에만 이후의 동작을 진행합니다.

만약 여기서 조건을 만족하지 않는다면, 자동화는 종료됩니다(조건 만족시까지 대기하는게 아니라 종료됨)

중지(stop)

음...stop 기능은 제가 안 써서...전혀 모르겠네요 ㅠ.ㅜ

말 그대로 자동화 동작중에 멈추게 할 수 있는 기능인데요, 단독으로 쓰기는 어려울듯 합니다.

가령 멈출까 말까 고민되는 위치쯤에 if-then과 같이 사용해서

조건을 만족하지 않으면(else) = stop 같이 사용할 수 있겠죠.

지연 시간(delay)

지정한 시간 만큼 대기 후 다음 동작을 실행합니다.

템플릿 대기(wait_template)

템플릿으로 지정한 조건값이 만족할때 까지 기다립니다.

가장 아래에 있는 제한 시간 이후 계속 진행(continue_on_timeout) 이 활성화 되어 있다면

템플릿 만족 유무와 관계 없이 설정한 제한 시간 동안 기다린 후 다음 동작을 진행하

비활성화 되어있다면 제한시간 까지 템플릿이 만족되지 않으면 자동화를 종료합니다.

트리거 대기(wait_for_trigger)

템플릿 대기와 마찬가지 이지만, 이건 트리거를 추가해서 해당 트리거가 만족되어야 동작됩니다.

템플릿에 익숙하지 않고, 간단한 동작이라면 템플릿 대기보다 좀 더 편하게 쓸 수 있겠죠.

자 오늘은 자동화의 끝인 동작에 대해 알아보았습니다.

다음시간엔 자동화 구성할때 유용한 몇가지 도구에 대해 알아보겠습니다.

728x90
반응형