본문 바로가기

SmartHome. IoT/SmartHome 기본

HomeAssistant의 자동화를 알아보기 - 3.조건

728x90
반응형

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

갑자기 급 월급루팡을 하고싶어서... 작정하고 여러개 만들고 있네요!

이번시간은 자동화 알아보기 세번째 시간으로, 조건(contition)에 대하여 알아보겠습니다.

역시나 공식문서가 가장 확실하죠?

https://www.home-assistant.io/docs/scripts/conditions/

자세한 내용은 이쪽을 참조하시면 됩니다.

조건도 마찬가지로, 제가 쓰는것만 주로 쓰기때문에...설명 수준의 차이가 있을 수 있는점 양해해 주시기 바랍니다.

조건은 공통적인 내용이 트리거와 거의 비슷하기 때문에 간단하게만 진행하겠습니다.

YAML로 편집하기는 UI가 아닌 YAML방식으로의 편집을 의미하며,

트리거와 마찬가지로 비활성화도 가능하고, 복제/삭제는 뭐... 아시죠?

테스트 부분은 다음에 다룰께요!

조건의 유형은 트리거보다 조금 적은데요

기기, 다중조건(And), 다중조건(Not), 다중조건(Or), 상태, 수치 상태, 시간, 지역, 태양, 템플릿, 트리거

이렇게 11가지 선택지가 있습니다.

이해를 돕기위해 설명의 순서는 조금 변경하도록 하겠습니다.

트리거가 자동화의 방아쇠가 당겨지는 순간을 의미한다면,

조건은 자동화가 진행되기 위한 지속적인 조건을 의미합니다.

조정간 단발인지, 점사인지, 연발인지... 아니면 안전인지...?

불이 '켜져있는 상태', 습도가 50%보다 '높은 상태', 도어센서가 '열려있는 상태' 등등

그리고 기본적으로 조건은 and 값입니다.

조건이 3가지(불이 켜져있고, 습도가 50%보다 높고, 도어센서가 열려있을때) 라면

이중 1가지라도 불만족 하면 자동화가 동작되지 않습니다.

자동화의 기본적인 워크 플로우는, 트리거가 발생하면 -> 조건을 검사하고 -> 동작을 실행합니다.

그러므로 조건의 통제는 자동화의 고도화에 매우 중요한 작업입니다.

다중조건(And)

다중조건은 총 3가지가 있는데, 이 걸 조합해서 무수히 많은 조건값을 만들 수 있습니다.

그만큼 복잡해지니, 가능하면 변수를 잘 고려해서 간단하게 만드는게 좋겠죠.

and값은, 어차피 조건의 기본이 and이니 무의미한거 아니냐? 라고 할 수 있지만..

아래 나올 not이나 or과 조합하면, 강력한 조건값으로 활용할 수 있습니다.

다중조건(Not)

xx조건이 만족하지 않을때 를 조건값으로 쓸때 사용합니다.

가령, 조건으로 도어센서'열림'을 넣는것과 not 조건으로 도어센서'닫힘' 을 넣는것..

얼핏 보면 똑같아 보이죠?

하지만 도어센서의 값은 열림/닫힘만 있는게 아니라 unavailable도 존재할 수 있습니다.

아니면 반대로 장치가 정상적일때 를 기준으로 자동화 동작을 하게 할수도 있죠.

not 조건으로 해당 장치의 상태를 unavailable로 넣으면, 장치가 사용불가 상태가 아닐때만 동작하게 됩니다.

다중조건(Or)

조건이 여러개라면 기본적으로 and이기 때문에 모든 조건을 만족해야만 자동화가 진행됩니다.

하지만 어떤 조건은 여러개중 하나만 만족해도 동작하고 싶을때가 있습니다.

그럴때 쓰는게 바로 or조건으로, 이 조건 아래쪽에 위치한 조건들중 하나만 만족해도 동작이 됩니다.

집 구성원이 3명이라면, A, B, C중에 한명이라도 집에 있다면 - 자동화가 동작되게 할 수 있겠죠.

이 다중조건들은 줄줄이 쓸수도 있습니다.

or아래 and를 넣고 그 아래 not을 넣고... 혼란하죠?

하지만 or아래 조건이 3개인데 그중에 and로 조건 2개를 넣고...

이런식으로 하면 자기가 원하는 조건들을 만들어 갈 수 있습니다.

기기(device)

기본적인 내용은 트리거와 거의 같습니다.

구성하기 - 기기 및 서비스 - 기기 에서 표시되는 항목중 지원되는 조건들을 표시해 줍니다.

해당 조건은 켜짐/꺼짐 등의 상태일수도 있고, 수치일수도 있으며 지원 가능한 조건에 따라서

설정할 수 있는 항목은 조금씩 차이가 납니다.

상태(state)

구성요소(entity)의 상태값을 조건으로 겁니다.

트리거와 달리 from/to 등이 없고, 지정된 상태일때 조건을 만족하게 됩니다.

상태를 비워둘 수 없으며, 속성(attributes)를 지정하여 조건을 걸 수 있습니다.

경과 시간은 for으로, 해당 상태가 for 시간만큼 유지된 이후에 조건을 만족합니다.

수치 상태(numeric_state)

수치상태도 트리거와 마찬가지로 해당 구성요소(entity)의 상태값을 수치화 하여

이상/이하로 조건을 걸어줄 수 있습니다.

속성을 지정할 수 있고, 값 템플릿을 통하여 해당 조건값의 계산식을 넣어서 오프셋 등을 줄 수 있습니다.

시간(time)

시간은 특정 시간 이전/이후 등으로 조건을 걸어줄 수 있습니다.

이후/이전/평일 3가지 항목이 있는데, 모두 입력해도 되고 적어도 1개는 입력되어야 합니다.

평일 항목은 아마 week가 오역된 것으로 보이며, 요일을 지정할 수 있습니다.

기준시간 이전/이후만 지정하던가, 요일만 지정하던가, 혼합해서 쓸 수 있겠죠.

마찬가지로 날짜/시간 입력 도우미로 설정할 수 있습니다.

지역(zone)

device_tracker를 사용해서 zone의 위치여부를 선택할 수 있습니다.

어디에 있다/없다 만 조건으로 감지하기 때문에, work에서 벗어난 상태를 조건으로 걸고싶다면

다중조건(not)을 설정하고, 그 아래 지역(zone)으로 device_tracker가 work일때를 설정하면

해당 값의 not 이므로, work 에서 벗어난 상태를 조건으로 걸 수 있습니다.

태양(sun)

태양의 상태를 조건으로 걸 수 있습니다.해넘이 이전, 해돋이 이후 = 해가 떠있을때

 

해돋이 이전, 해넘이 이후 = 해가 졌을때 등으로 걸 수 있고, 당연히 오프셋도 설정 가능합니다.

둘 다 걸어도 되고, 둘중 하나만 걸어도 됩니다.

선택한 뒤 취소를 못하는게 좀 불편하긴 한데, 다른걸로 설정했다 돌아오면 되니 뭐...개선되겠죠?

 

이때 주의할점은, 현재의 태양 트리거는 동일한 날짜 사이에서만 조건이 동작됩니다.

사용자 친화적 관점에서 보면, 일출 이후~일몰 전 = 해가 떠있을때 이고

일몰 이후 ~ 일출 전 = 해가 졌을때 인데요

 

HA에서 인식하는 태양 조건은, 동일한 날짜에서만 동작하기 때문에

일출 이후~일몰 전 = 일출(07시) 이후 ~ 자정(24시) 까지 and 00시 ~ 일몰(17시) 까지 이므로

07시~17시 라는 교집합을 만족해서 그 시간동안 해가 떠 있을때 로 인식하지만

 

일몰 이후~일출 전 = 00시~일출(07시) 이전 and 일몰(17시) 이후 ~ 자정(24시) 까지이므로

00~07, 17~24 사이에 교집합이 발생하지 못하기 때문에, 이 조건은 아예 동작할 수 없습니다.

(2022.09 버전 에서는 안 됩니다)

 

이후 개선되어서 동일 날짜가 아닌 다음날, 전날 등의 조건에서도 동일하게 동작되면 좋겠네요.

UX관점에서 정말 개선되어야 할 부분이라고 생각합니다.

 

트리거(trigger)

트리거 편에서 설명드렸던, 트리거ID 설정하기를 활용 할 수 있는 조건값 입니다.

트리거가 여러개일때, 지정된 트리거ID가 자동화의 시작으로 동작할때만 조건을 만족합니다.

템플릿(template)

템플릿은...어...음...어.......

언젠가 다음기회에 ㅠ.ㅜ

자 조건까지 알아봤어요!

다음엔 동작을 볼께요~

 

728x90
반응형