안녕하세요~ 레이군 입니다.
오늘은 홈 어시스턴트 자동화에 대해 알아보기 마지막 시간, 자동화 구성시의 고려사항과 주의사항 입니다.
이 시간을 마무리 하면, 대략적인 자동화 구성에 대해 이해하실 수 있을겁니다.
지난시간에 자동화의 기본구조 및 구성시 테스트를 위한 도구들을 소개해 드렸는데요
그럼 본격으로 자동화를 구성하려면 어떻게 해야 하는지 알아보도록 하겠습니다.
1. 집안이 어두울때만 동작하는 거실용 센서등을 구현해 봅시다.(이거 만드느니 그냥 센서등 하나 사서 다는게....)
어두울때 모션센서가 감지되면, 불을 켜고, 일정시간 후에 끄자
제가 원하는 자동화 동작은 위와 같습니다. 밤에 물마시러 갈때, 화장실 오갈때 어둠을 밝힐 용도죠.
일단 필요한걸 알아봅시다.
트리거가 될 모션센서가 필요하죠.
그리고 동작을 할 전등(or 스위치) 가 필요할꺼구요
어두울때를 어떻게 감지할까요? 가장 간단한건 조도센서 일겁니다.
집안의 모든 전등이 스마트 스위치 등으로 제어가 된다면, 모든 전등 꺼짐 + 일몰시 로 할수도 있겠죠.
자동화 구성을 해봅시다.
1차원적인 자동화는 켜고 -> 일정시간 후 -> 꺼짐 이죠.
모션이 감지되면 -> 어두운지 확인 후 -> 불을 켜라 -> 30초 대기 후 -> 불을 꺼라
간단하죠? 딱 이대로만 동작하길 원한다면 단순하게 끝날 수 있습니다.
하지만 인간의 욕심과 불만은 끝이 없는 법...!
가끔 30초 넘게 거실에서 서성댈때 불이 꺼지는게 싫어요... 그러면 어떻게 해야 할까요?
대기 시간을 늘린다...60초 후 꺼지게? 그럼 빨리 들어가 다시 자려고 할때 너무 길게 켜져있잖아요.
이런식으로 한번 해볼까요?
그러면 모션이 감지되지 않으면 -> 30초 후 불을 끄게 되니 모션 센서가 비활성화 되고 30초 지나면 꺼지겠네요.
물론 이렇게 하려면, 하나의 자동화에 트리거가 2개가 되어야 하고, 트리거 동작에 따른 동작을 별도로 해야하니..
자동화를 2개로 만드는것과, 1개를 복잡하게 만드는것 중 선택이 필요할겁니다.
음...그런데, 만약 모션센서의 감지범위를 벗어났다가 다시 들어오면....?
혹은, 모션센서의 동작방식이 정해진 인터벌 시간이 지나면 무조건 모션x로 변경되는 방식이라면?
그러면 이미 모션센서 미감지 트리거 -> 30초 대기 -> 불끄기 동작이 진행되고 있으므로...
중간에 불이 꺼져버릴겁니다.
그러면 트리거에 유지시간을 넣어보죠.
모션 미감지가 30초 유지되면 -> 불 끄기 동작을 합니다.
그러면 잠시 모션센서의 범위를 벗어났다가 들어온다면 다시 모션센서가 감지되므로 불이 안꺼져요.
그런데, 이 조건은 모션센서의 감지 인터벌이 30초 이내라는 조건이 붙습니다.
모션센서가 인터벌이 1분짜리다? 그러면 이 자동화는 쓰기 어려워요. 무조건 1분 30초는 켜져있을테니까요.
감지 인터벌이 30초 짜리라면, 최소한 60초가 켜져있을꺼고
인터벌이 5초짜리라면, 최소 35초는 켜져있게 되겠죠.
센서의 동작방식에 따라 자동화의 구성도 많이 달라집니다.
그렇기 때문에 자동화 구성시는 반드시 사용할 장치의 동작에 대한 이해를 진행하고 하셔야 합니다.
센서의 동작방식을 정확히 이해하면, 모션 미감지 시 xx초 대기의 수치를 조절해서 원하는 대로 구성할 수 있겠죠.
2. 집에 사람이 없으면 미사용 장비를 꺼봅시다.
재실 -> 외출로 변경 시, 스위치와 전등, 플러그등 지정된 기기 끔
위 조건으로 한번 만들어 볼까요?
트리거는 재실/외출을 감지할 수 있는 디바이스 트랙커가 있어야겠죠
딱히 조건은 없거나 걸어도 디바이스 트랙커로 걸면되니 무시하고
동작을 수행항 스마트 스위치나 전등, 플러그 등이 있어야겠죠.
재실에서 외출로 변경되면 -> 지정된 기기를 꺼라
여기서 좀 더 나아가면, 외출에서 재실로 변경시 -> 지정된 기기를 켜라
재실이 감지되지 않으면 -> 기기를 끄게 합니다.
간단하죠? 그런데 이렇게 하려면... 재실감지가 완벽해야 합니다.
단 한순간도 튀어나가면 안되죠.. 하지만 GPS던 블루투스던, wifi던...
재실감지라는건 언제나 오류가 있을 가능성이 있습니다.
그러므로, 혹시나 튀어나갈때를 대비해서 약간의 여유를 주도록 하겠습니다.
재실이 감지되지 않은 상태로 5분동안 유지되면 -> 기기를 끄도록 합니다. 이정도면 괜찮을듯 하죠?
재실이 감지되면, 기기를 켜도록 하겠습니다.
그러면 외출 5분후 기기가 꺼지고, 재실 즉시 기기가 켜지겠죠.
거의 원하는 대로 동작될것 같죠?
잠시 디바이스 트랙커가 튀어서 외출로 갔다가 재실이 된다고 해도, 어차피 켜져있는걸 켜짐동작 하는거라
느끼기엔 변화가 없을꺼거든요.
하지만....사람의 욕심은 끝이 없고....응?
1,2,3,4,5 라는 기기를 켜고/끄게 설정해 두었습니다.
그런데, 수동으로 3을 잠깐 꺼놨어요...
그 상태로 디바이스 트랙커가 튀어서, 재실 -> 외출 -> 재실로 변경되었다면 3이 갑자기 켜지겠죠...?
아니면, 켜짐/꺼짐 동작시 삐빅 소리가 나는 장치들이 있다면..
갑자기 삐빅거리는 소리에 놀랄수도 있겠죠?
고퀄 스위치가 그래요.. 켜져 있어도, switch.turn_on 보내면 삐빅거립니다..
그래서 조건을 추가해 봤어요.
1, 2, 3, 4, 5 가 모두 켜져있다면, 잠깐 튀어서 재실-외출-재실이 된다고 해도 괜찮겠죠?
그런데... 1, 2, 3, 4, 5를 모두 끄고 자고있어요... 그 상태에서 디바이스 트랙커가 튀면...?
조건을 바꿔서 외출상태가 5분 넘게 지속된 후 재실로 감지될때만 켜지게 합니다.
이러면 거의 원하는 대로 동작하겠죠? 오동작도 별로 없을것 같구요.
여기서 더 나아가서, 자동화가 동작해서 기기 끄기를 수행할때, 현재의 상태를 저장해 놨다가
기기 켜짐 자동화 에서 해당 상태를 복원하게 하는 방법도 쓸 수 있겠죠.
저장 방법은 장면(scene)을 만들어서 / 해당 장면을 복원하는 방법으로 쓸수도 있고(쉽진 않습니다)
각각의 상태를 가상스위치 같은걸로 저장해놨다가 해당 상태에 따라 복원할수도 있고...(마찬가지로 복잡..)
뭐 이런거 고민할 정도면 이미 이 글은 의미가 없습니다만...?
3. 외출에서 돌아오면, 집안의 불을 켜봅시다.
집 문을 열자마자 빠르게 동작. 사람 2명중 첫번째 에서만 동작하길 원함
재실감지를 위한 수단이 여럿 있지만, 보통 딱 집에 오는 순간을 맞추기엔 어렵습니다.
비컨을 쓸 수 있지만, 튜닝이 상당히 필요하죠.
전 현관문에 있는 도어센서와, 현관 안쪽에 설치한 모션센서의 조합으로 이 자동화를 진행하고 있습니다.
준비물은, 트리거에 필요한 도어센서
내부에 설치할 모션센서
그리고 컨트롤 할 전등 입니다.
이 자동화는 매우매우 단순한 원리에서 시작됩니다.
도어센서가 열리는건 - 문이 1cm만 열려도 감지됨
모션센서는 - 문이 훨씬 더 많이 열려야 감지됨
밖으로 나갈땐 - 문을 열기 전 모션센서가 감지된 상태
그러면 이렇게 표현할 수 있겠죠.
모션 감지 + 도어센서 열림 = 외출하려고 문을 열때
모션 미감지 + 도어센서 열림 = 집에 들어올
물론 외출시 출입문 앞에서 밍기적 거리다가 모션이 미감지 되었을때
문을 열어버리면 좀 애매하겠죠. 센서등 아래서 꼼지락거리다 불 꺼져서 휘적휘적 해본적 있으시죠?
모션센서의 원리도 같기때문에 그 타이밍에 문이 열리면 오류가 날 수 있긴 해요.
그래서 전 외출시는 수동으로 하고, 귀가만 자동으로 해둡니다.
우선 트리거는 도어센서 오픈을 넣습니다.
조건으로 모션센서 미감지를 넣어주고
동작에 원하는 전등을 몇개 켜주면 됩니다!
간단하죠?
그런데, 집에 이미 사람이 있을때 두번째 사람이 들어오면서 불을 켜면...
켜기 동작을 수행하면서 장치에서 소리가 날수도 있고(켜지는 소리가 아니라 동작음이 있는 장비가 있음, ex 고퀄 스위치)
살짝 일찍 자려고 불을 몇개 꺼두고 잠들었을수도 있죠.
그러면, 이런경우는 제외할 수 있도록 조건을 추가해 봅시다.
재실상태가 아닐때를 조건에 넣어봅니다.
간단하게 처리가 되었네요.
그런데, 가족의 생활패턴을 생각해보니
집에와서 잘때 자더라도 전등의 일부는 켜두고 잡니다.
아예 밤에 잘때는 끄지만요.
그러면 패턴에 맞는 조건을 넣어주는것도 방법이죠.
조건에 전등 1, 2, 3 이 모두 off 상태일때를 추가해 보았습니다.
and로 넣긴 했지만, 그냥 넣으셔도 어차피 조건은 기본값이 and이니 큰 상관 없겠죠.
다르게 표현하면, 전등 1, 2, 3이 모두 on 상태가 아닐때(not) 를 만족하면 켜지게 할 수 있습니다.
on을 감지하는가, off를 감지하는가에 따라 달라지는 부분이 생기겠죠. 가령 스위치 1개가 통신이 안된다면
그 스위치는 on도 아니고 off도 아닌 unavailable 상태가 될거거든요.
그러면 이 자동화를 and 조건으로 off일때로 넣으면, 해당 조건값은 통과가 되지 않습니다.
하지만, not으로 on 상태일때를 조건에 넣는다면, 스위치 1, 2, 3의 상태가 모두 on이 아닐때 를 만족해야 하므로
스위치 상태가 off일때나 연결이 끊겨서 unavailable 상태여도 해당 조건을 만족해서 통과가 됩니다.
이건 자동화의 동작을 어떤 방식으로 제어할지에 따라 결정하면 되겠죠.
이걸 다르게 표현하면, 이렇게도 됩니다.
전등 1, 2, 3 중 하나라도(or) 켜져있지 않은(not) 상태 라고 말이죠.
보통은 and와 or의 동작은 조금 다르지만, 이런 경우는 and를 쓰던 or을 쓰던 결과적으로는 큰 차이가 없습니다.
이런 다중조건(and, or, not)을 만들때는, 간단하게 생각하시면 되요.
전부(and), 하나라도(or), 아닐때(not) 으로 문장을 만들어 보시면 됩니다.
전등이 전부(and) 켜져(상태 on)있지 않을 때(not)
전등중 하나라도(or) 꺼져(상태 off) 있을 때
스위치중 하나라도(or) 꺼져(상태 off) 있지 않을 때(not) 이런식으로요.
4. 습도를 40~60% 사이로 유지하는 자동화를 만들어 봅시다.
사람이 집에 있을때 습도가 40% 이하면 가습기를 작동, 60% 이상이면 가습기 중지
적극적인 습도 조절을 위해 가습/제습기를 동시에 돌릴수도 있지만...
일반적으로 가습기 시즌과 제습기 시즌은 나눠져 있으니, 동작 유무로만 진행하겠습니다.
제습기 시즌이라면, 습도가 70% 이상이면 제습기 가동, 50% 이하라면 제습기 중지 처럼 바꿀 수 있겠죠.
필요한 것들을 알아봅시다.
가장 기본적으로 제어가 되는 가습기(제습기) 가 필요할거구요
해당 장비에서 습도 데이터를 받아올 수 있다면 괜찮지만, 만약 안된다면 별도의 습도센서가 필요하겠죠.
사람이 집에 있을때만 동작시킬거니 재실센서도 추가해야 합니다.
가장 단순하게 생각하면 이렇게 구성하면 됩니다.
얼핏 잘 동작할것 같습니다만, 몇가지 문제점이 보이네요.
수치 상태(numeric_state) 트리거는, 지정된 상태 이상(이하)에서 -> 이하(이상) 으로 변경될때 동작합니다.
아, 이게 표시는 이상/이하 로 되어있지만 실질적으로 동작하는건 초과/미만 으로 동작합니다.
이하(below) 40 으로 지정했다면, 해당 수치가 40.0 -> 39.9 로 변경되는 순간 트리거 되는거죠.
물론 더 큰 수치에서 -> 더 작은 수치(45 -> 30 이라던가) 로 변경될때도 트리거 됩니다.
이미 해당 수치보다 작아진 상태에서는 변화값에 반응하지 않습니다(39 -> 35 라던지)
그러면,외출했다가 집에 왔는데 집안 습도가 39%라면...?
40%까지 올라갔다가 다시 39%로 내려오지 않으면 가습기가 안 켜집니다.
그리고, 트리거가 습도 수치 2개만 있기때문에 재실이 된다고 해도 가습기가 안 켜집니다.
마찬가지로 재실에서 외출로 변경되면, 습도와 무관하게 가습기를 끄고 싶어요.
조건에 이것들을 넣어도 되지만, 그러면 동작을 실행하는데 좀 애매해집니다.
이럴때 선택(choose) 를 쓰면 매우 간단하게 해결이 되겠죠. 아니면 if-then도 괜찮구요
트리거에 습도 40%이하, 60% 이상 을 넣고, 재실상태와 외출상태까지 총 4개의 트리거를 집어넣었습니다.
이 상태에서 경우의 수는, 총 4가지가 되겠죠.
재실+습도 40%이하, 재실+습도 60% 이상, 외출+습도 40%이하, 외출+습도 60%이상...
여기에 동작은 2개, 가습기 켜기 / 끄기가 나오죠.
이걸 정리하면, 습도 40% 이하 + 재실상태 일때만 가습기 켜기, 나머지 3개 트리거는 가습기 끄기로 하면 됩니다.
그러면 이런식으로 구성할 수 있게 됩니다.
오 이정도면 충분한거 같아요? 그렇죠?
하지만... 아직 함정이 숨어있습니다.
위에서 조합이 4개라고 말씀드렸지만, 눈치 채셨을거예요...
사실 나올 수 있는 조합은 2개 더 있어서 총 6개가 정답입니다.
바로 재실상태 + 습도 40~60% 사이, 외출상태 + 습도 40~60% 사이가 있죠.
트리거가 습도 40이하, 60이상만 있다면 조합 4개가 맞지만, 외출과 재실은 그 사이에도 트리거가 되거든요.
그럼 이것까지 추가하면 어떻게 될까요?
어차피 외출은 기기 끄기로 갈거니 큰 상관 없지만, 재실+습도 40~60% 사이는 어떻게 할지 고민이 됩니다.
위에서 구성한 자동화 대로라면, 습도가 40% 보다 높기때문에 기기 끄기로 연결되게 됩니다.
트리거 될때 습도가 41%던, 59%던 기기를 끄게 될겁니다.
여기서는 사용자의 결정이 필요합니다.
만약 재실 + 습도 40~60%에 트리거 되었을때, 현재 습도가 40% 이상이니 끄는게 맞다 = 현 상태 유지
습도가 50% 이상이면 켜고, 그 이상이면 끄자 = 동작의 조건 부분에 습도를 50% 이하로 변경
습도가 60% 이하니까 무조건 켜자 = 동작의 조건을 습도 60% 이하로 변경
이정도 하면 다 된거 같아요....진짜 그럴까요? 정말요?
아뇨... 제가 보기엔 부족해요... 뭐가 부족한가?
바로, HA가 재시작 되어서 자동화가 리로드 되거나, 가습기(제습기) 물갈이를 하거나 하면서
장치를 껐다가 켰을때도 원하는 습도 내에서 유지가 되어야 한다고 생각해요.
장치 꺼짐이야 어차피 자동화던 수동으로 끄던 상관 없으니 무시하고, HA재시작과 장치 켤때는 들어가야겠죠?
그래서 이렇게 구성해 봅니다.
이정도면 원하는대로 다 동작할것 같아요!
엄청 생각할게 많아요.....
그런데...전 여기서 또 하나가 걸려요. 대체 그게 뭘까요??
바로, 트리거 - 선택조건을 만족하면 = 기기 켜기 동작을 하는 부분이요.
이게 왜????
트리거에 기기 켜기를 추가했기 때문이죠.
트리거 - 동작 - 기기 켜기 -> 기기 켜기 트리거 - 동작...
어차피 기기는 이미 켜져있기 때문에, 기기 켜기에 따른 트리거가 동작한다고 해도 변화는 없을겁니다.
하지만, 시도를 하면 띠링거리는 장치들이 있죠? 그런 장치는 아마 이때 띠링을 한번 더 할꺼예요...신경쓰이게!
그럼 어째요? 트리거에 기기 켜기를 빼요?
아뇨...다른 방법이 있습니다.
기기 켜기 동작 뒤에 1초의 딜레이를 주는겁니다.
그런 다음, 이 자동화의 동작을 단일(single) 로 바꿔버리면...?
기기 켜짐 순간에 이 자동화가 트리거 되겠지만, 1초 딜레이로 자동화의 동작이 진행중 이므로
해당 트리거는 무시됩니다.
자 이러면 맘에드는 자동화가 탄생했어요! 와우!
별거 아닌데 너무 복잡....ㅎㄷㄷ
자동화 구성할때는, if 를 생각하세요.
만약 이러면 어쩌지? 저러면 어쩌지? 혹시 이런상황이 생길수도 있지 않을까??
조합의 경우를 떠올리셔야 합니다..
이런 부분을을 고려해서 트리거를 결정하고, 조건을 결정한 다음, 동작을 정해야 합니다.
그래서 자동화는 시나리오를 짜는것이 매우 중요합니다.
머리속에서 시뮬레이션이 잘 안된다? 그러면 종이에 끄적거려 보세요.
하고싶은걸 문장으로 만들고, 거기에서 필요한 것들을 캐치해서 트리거와 조건, 동작을 정하시면 됩니다.
위에 설명드린 4가지 자동화를 문장으로 요약하면, 아래와 같습니다.
1번 자동화
모션센서가 감지되었을때 어두우면 불을 켜고,
모션 미감지 상태가 30초 지속되면 불을 꺼라
2번 자동화
재실에서 외출상태로 변경된지 5분이 경과하면 지정된 장치들을 끄고,
재실이 감지되었을때 외출상태가 5분 넘게 지속되어 있었다면 지정된 장치들을 켜라
3번 자동화
도어센서가 열렸을때 현관 모션이 미감지 상태이고 전등 1, 2, 3이 모두 꺼져있다면, 전등 1, 2, 3을 켜라
4번 자동화
습도가 40%이하로 내려가거나 60%이상으로 올라가거나, 외출, 재실, HA시작, 가습기 켜기가 발생했을때
재실상태 + 습도 40%(혹은 50% 등) 이하인 경우 가습기를 켜고
그 외의 경우는 가습기를 꺼라
자 오늘 강좌는 여기까지....!
그래서 오늘의 결론이 뭐냐구요...?
그냥 쉽게쉽게 가고싶습니다...
말만 하면 찰떡같이 알아듣는 AI가 만들어주는 자동화가 필요합니다....ㅠ.ㅜ
'SmartHome. IoT > SmartHome 응용' 카테고리의 다른 글
Home Assistant 자동화에서 If-Then 과 선택(choose) 은 어떻게 동작할까? (0) | 2022.05.30 |
---|---|
Home Assistant 에서 자동화 실행 중 종료하기 (0) | 2022.05.29 |
HomeAssistant의 자동화를 알아보기 - 5.유용한 도구 (0) | 2022.05.12 |
HomeAssistant의 자동화를 알아보기 - 4.동작 (0) | 2022.05.12 |
[HA] 3D Floor Plan 적용하기 #4.5_영역 토글(ios가능, 다른방법) (0) | 2022.03.10 |