본문 바로가기

SmartHome. IoT/SmartHome 기본

HomeAssistant(HA) 에 대한 기본적인 이해.

728x90
반응형

안녕하세요~

주말에 중선선 뽑다가 배선도 개판이라서 삽질도 하고 화장실 선 뽑다가 중간에 요비선 끊어져서 멘붕도 오고...

결국 원하는 바는 이뤘으나, 매우 다난했던 주말을 보낸 레이군 입니다.

이번 글은, HA에 대한 기본적인 이해를 목적으로 작성해보려 합니다.

제가 아는 부분에 대한것들만 적는것이니 만큼, 공신력이 있을만한 정보는 아니지만...

그래도 HA에 처음 입문하시는 분들을 위해 조금이나마 도움이 되시길 바라는 마음에 작성해봅니다.

1. HA란?

2. 센서(바이너리센서)

3. 스위치, 라이트

4. 그룹

5. 스크립트

6. 오토메이션

1. HA란?

Home Assistant - 직역하면 홈 도우미 라고 나옵니다.

라즈베리 파이 또는 시놀로지 등으로 구동 가능한 소형 서버라고 보시면 되고,

각종 센서 및 스위치, 라이트 등의 장치를 모두 모아서 통합제어를 목표로 합니다.

연결만 가능하다면, 상상하는 모든것이 가능한 수준이나...

그걸 위해선 그만한 이해도와 동작방식에 대한 공부를 해야하고... 쉽지는 않아요 ㅠ.ㅜ

2. 센서(바이너리센서)

각종 상태값을 받아올 수 있는 장치 입니다.

장치로 설정할 수 있는 온습도, 도어센서 등을 기본으로 하고, HA에서는 각종 상태값을 센서로 만들 수 있습니다.

가령 sun 이라는 센서(configuration.yaml 에 sun: 이 추가되어 있을겁니다) 를 사용하게 되면

일출/일몰을 기준으로 해서 센서값을 생성할 수 있고...

date_time 센서를 이용하게 되면, 날짜 및 시간등을 센서로 활용할 수 있습니다.

그 외에 각종 장치에 포함되어있는 상태값들도 센서로 만들어서 쓸 수 있어요.

3. 스위치, 라이트

스마트 플러그, 스마트 멀티탭, 스마트 LED전구 등 전원 자체를 제어하는 장치들 입니다.

on / off를 컨트롤 할 수 있으며 해당 상태값을 받아올 수 있어야 합니다.

원하는 경우 template를 사용하여 가상스위치 형태로 만들수도 있습니다.

(wol로 PC켜기 - net rpc 명령으로 PC끄기 = 컴퓨터 라는 스위치를 만들 수 있습니다)

4. 그룹

스위치, 라이트 등을 모아서 그룹 형태로 만들 수 있습니다.

가령 우리집에 전등이 10개가 있고, 그중에 1~4번이 거실에 있다면...

group1 = light1, light2, light3, light4 형태로 그룹으로 묶을 수 있습니다.

그러면 불을 한번에 켜고 끌때, light1~4 까지 따로 지정하는게 아니라

light.turn_off - group1 이런식으로 하면 한번에 꺼지는거죠.

특히나 러브레이스 UI가 아닌 이전의 frontend UI 사용시는 그룹별로 모아서 정렬되어 있어서 거의 필수였으나...

지금은 UI쪽에선 별 의미 없고, 특정 entity를 한번에 모아서 제어할때 쓴다고 보시면 됩니다.

저같은 경우는 딱히 그룹을 만드는 성격이 아니라 그냥 하나씩 지정하는데...

장치 많거나 하시면 그룹핑 하시는게 편하실거예요.

5. 스크립트

리모트 혹은 각종 동작을 하나로 호출할 수 있도록 만들어 줍니다.

remote.fan-on, remote.fan-led 이런식으로 2개를 호출해야 하는게 있다면,

script.fan-on-led = remote.fan-on, remote.fan-led 이런식으로 만들어 줄 수 있습니다.

스크립트는 주로 일정한 동작을 연속으로 실행할때 지정하며...

그룹과 마찬가지로 꼭 필요한건 아니니 필요시 공부하셔서 진행하시면 됩니다.

6. 오토메이션

HA의 꽃, 가장 어려운 부분인 자동화 입니다.

각종 센서값을 가지고 와서 그걸 토대로 자동화를 구성하는게 HA의 궁극적인 목적이라고 볼 수 있겠는데요...

자동화는 크게 트리거 / 액션 으로 나눠지고 필요시 컨디션이 추가됩니다.

간단하게는 문이 열리면(트리거) 불을 켜라(액션) 형태로 이루어 지는데요...

여기에서 트리거는 HA에서 상태값을 불러올 수 있는 거의 모든것(변화가 생길 수 있는것만) 입니다.

sun트리거를 쓰면 일몰/일출, 일몰 전 몇분에, 일출 전 몇분에 이런식으로도 설정 가능하구요...

time 트리거를 쓰면 몇시 몇분에 도 가능하고,

state 트리거를 쓰면 상태값 변화가 가능한 모든것(스위치 on/off, 문열림, 모션감지 등등) 을 트리거로 쓸 수 있습니다.

액션은 HA에서 제어나 명령 가능한 모든것입니다.

스크립트 실행이 될수도 있고, light를 켜거나 끌수도 있고, switch를 켜거나 끌수도 있습니다.

임의의 가상스위치(가령 재실모드) 를 만들어 해당 스위치를 켜고 끌수도 있구요..

자...이렇게 끝내면 또 너무 아쉽죠? 이미 검색하면 다 나오는 내용인데 왜 재탱하나 싶죠?

이제부터가 진짜입니다 ㅋㅋㅋㅋ

1. HA란?

HA란, 지식과 장비만 있다면 원하는 모든게 가능한 솔루션 입니다.

제가 IoT를 시작한 최초의 목적인 '여름에 집 도착하기 10분전에 에어컨을 켜기' 부터 해서...

누워서 말로 불 켜 / 꺼도 할 수 있고(스위치와 AI스피커가 있다면)...

센서만 충분하다면, 침대에 눕기만 해도 자동으로 모든 불이 꺼지게 할 수도 있습니다.

(지금 제 IoT의 목적은, 귀차니즘을 타파하자 입니다..)

에어컨을 켜고싶을때 리모컨을 찾아서 켜지 않아도 되고(누워서 구글한테 켜달라고 말만 하면 됨)

집에 들어올때 자동으로 거실과 주방의 불이 켜져 어두운곳을 돌아다니지 않아도 되며

화장대 의자에 앉기만 해도 자동으로 화장대 거울의 불이 들어와요.

양쪽 베란다 창문을 열면 환기모드로 바뀌면서 집안의 에어 써큘레이터들이 동시에 동작하고,

더워서 에어컨 터보모드를 켜면 에어컨 근처의 써큘레이터가 동작하여 공기를 더 빠르게 순환시킵니다.

잘시간쯤 되면 침실의 공청기를 취침모드로 변경하여 소음을 줄이고, 선풍기를 동작시켜 시원하게 잘 수 있게 합니다.

출근한 상태에서 쓸쓸하게 놀고있을 고양이들을 위해 어두워지면(일몰시간 근처) 거실의 보조등 2개를 켜게 해두었어요.

아주 단순한 것들이지만, 이걸 사람이 손수 하려면 상당히 귀찮아 집니다.

(물론 이것들을 자동화 하기 위해서는 훠어어어어얼씬 귀찮지만요...ㄷㄷ)

그래서 이런 아이들을 도와주는 도우미, 즉 Assistant 역할을 하는것이 Home Assistant, HA 인거죠.

2. 센서(바이너리센서)

자동화를 위해서는 기본적으로 센서라는게 필요합니다.

이 센서는 날짜나 시간이 될수도 있고, 문열림이 될수도 있고, 움직임 감지, 온도, 습도가 될수도 있습니다.

각종 상태값을 받아와서 그걸 토대로 HA의 자동화를 구성하는...

HA의 핵심중 하나입니다.

센서가 정상적으로 추가되면 HA의 개발자도구 - 상태 ( <> 아이콘) 에서 확인이 가능합니다.

위 내용은 에너톡 컴포넌트가 설치되어 있는 상태의 real time usage 센서값 입니다.

센서명을 잘 보시면, sensor.enertalk_real_time_usage 로 되어있습니다.

이중 맨 앞의 sensor 는 HA에서 인식하는 domain 으로 종류를 나타내는 항목 입니다.

이후에 나오는 enertalk_real_time_usage 는 해당 센서에 지정된 이름이죠.

이 두가지를 합쳐서 sensor.enertalk_real_time_usage 가 되는데, 이걸 HA에서는 entity 라고 부릅니다.

성+이름 으로 해서 차별성을 가지는것처럼, 도메인+네임 으로 유니크한 항목을 만들게 됩니다.(중복 불가능)

그 옆의 103.31 은 해당 센서의 satet(상태값)을 나타냅니다.

센서는 크게 binary_sensor와 그냥 sensor로 나눠지는데, 바이너리 센서는 on / off 의 상태값을 가지는 센서들 입니다.

도어센서, 모션센서, 물리버튼의 눌림 등.. on / off 로만 이루어지는 센서들을 바이너리 센서라고 합니다.

그냥 센서는 상태값이 on/off 이외의 다른것(숫자, 문자 등) 으로 이루어져 있을때 사용합니다.

온습도, 전력량, 미세먼지 등급 등등.. 다양한 상태값을 표시할 수 있습니다.

가장 우측에 보면, 추가적인 정보들이 있습니다.

이 정보는 해당 센서를 클릭하면 표시될 수 있는 추가정보들로, attribute(속성) 이라고 불립니다.

오토메이션을 위해 template를 작성하다 보면, 센서의 state 가 아닌 attribute를 사용해야 할때가 있습니다.

이때 필요한 항목이며, HA의 모든 정보는 개발자 도구 - 상태 ( <> 아이콘) 에서 확인되어야만 쓸 수 있습니다.

- 장치(라즈베리)의 시간을 가져오는 now() 등은 상태 항목에 표시되지 않지만 사용이 가능합니다.

3. 스위치, 라이트

스위치나 라이트는 켜고 / 끄고가 가능하며

해당 상태값을 HA에서 인식할 수 있는것들 입니다.

스마트 플러그, 멀티탭, 휴 계열같은 LED라이트 등등이 여기에 해당되며...

추가적으로 HA에서 임의로 템플릿 스위치를 만들수도 있습니다.

이런식으로 on/off 라는 state 외의 값으로 소비전력이라던지 그런 정보를 추가로 가지고 있을수도 있고...

단순히 on/off 값만 가지고 있을수도 있습니다.

light라면 밝기라던가 색상등(조절 가능한 경우) 이 추가적으로 포함됩니다.

- platform: template

  switches:

    pc:

      value_template: "{{ is_state('switch.wol', 'on') }}"

      turn_on:

        service: switch.turn_on

        entity_id: switch.wol

      turn_off:

        service: switch.turn_off

        entity_id: switch.pc_off

​ 

이런식으로 wol 스위치와 pc_off용 스위치를 만든다음

해당 값을 template 플랫폼으로 pc라는 스위치를 만들게 되면, PC켜 / 꺼 가 가능하게 됩니다.

(구글홈과 연동 후 적당히 이름을 바꿔주면, 헤이 구글 컴퓨터 켜 / 꺼 가 가능합니다)

기본적으로 스위치나 라이트는 상태값을 확인할 수 있어야 하고

on 명령과 off 명령이 있으면 만들 수 있습니다.

# 거실 에어컨

- platform: template

  switches:

    living_air:

      value_template: "{{ is_state('binary_sensor.door_window_sensor_xxx', 'on') }}"

      turn_on:

        service: script.ac_cool_24_low_living

      turn_off:

        service: script.ac_power_off_living

이렇게 스위치를 생성하게 되면,

벨류값(상태값) 으로 도어센서의 on/off 여부를 받아오면서

on 서비스로 script에 지정된 ac_cool_24_low_living 이라는 명령을 전달하고

off 서비스로는 script에 지정된 ac_power_off_living 이라는 명령을 전달합니다.

해당 스위치를 켜면 에어컨 켜짐 명령을 전달해서 도어센서가 열리면서 스위치 상태가 on 으로 바뀝니다.

다시 누르면 에어컨 꺼짐 명령을 전달해서 도어센서가 닫히고 나면 off로 바뀝니다.

위 3가지만 있다면, 뭐든지 스위치로 만들 수 있습니다.

(상태값을 반드시 받아올 필요가 없다면 대충 아무거나 넣어서 가라로 만드셔도 되요)

4. 그룹

그룹은 크게 HA에서 자동으로 생성되는 그룹(all_fans, all_lights, all_automations 등) 이 있고

사용자가 정의하는 그룹(group: 아래쪽에 정의하는 임의의 그룹) 이 있습니다.

보통 특정 그룹에 지정된 entity를 한번에 제어할 목적으로 사용하나...

제가 잘 쓰는 부분이 아니라서 이 부분은 공홈을 참조해서 공부하시기 바랍니다 ㅠ.ㅜ

전 그냥 그룹 안 만들고 하나하나 넣는편이라서요...

5. 스크립트

음...저도 스크립트쪽은 정확히 잘 모릅니다.

제가 스크립트에서 활용하는 부분은, 리모트 명령을 실행할 수 있는 entity로 만들기 위해서 씁니다.

ac_cool_24_auto_bed:

  sequence:

  - service: remote.send_command

    entity_id: 'remote.remote_bedroom'

    data:

      command:

        - 'ac_cool_24_auto'

ac_cool_26_auto_bed:

  sequence:

  - service: remote.send_command

    entity_id: 'remote.remote_bedroom'

    data:

      command:

        - 'ac_cool_26_auto'

ac_cool_27_low_bed:

  sequence:

  - service: remote.send_command

    entity_id: 'remote.remote_bedroom'

    data:

      command:

        - 'ac_cool_27_low'

보통 IR리모트 등에서 학습한 command의 경우, remote.send_command 서비스를 사용해서 호출해줘야 하는데요...

대부분이 단방향(송출만) 이므로 상태값을 알기가 어려워 스위치로 만들기는 부적합 합니다.

게다가 remote 에 학습한 command는 그 자체만으로는 실행이 안 됩니다.

그럴때 위처럼 script로 만들어주면, 해당 스크립트가 entity로 등록되어 바로 실행이 가능하게 됩니다.

이런식으로 상태화면에서 볼 수 있고...

이런식으로 UI상에 표시하여 해당 스크립트를 바로 실행시킬 수 있습니다.

6. 오토메이션

자동화 관련은 너무 방대하므로... 얼마전에 작성한 글로 대체하겠습니다.

HA 자동화 구성에 대한 개념 / 예제. (tistory.com)

 

HA 자동화 구성에 대한 개념 / 예제.

안녕하세요 레이군 입니다. 오늘은... 홈 오토메이션의 꽃이라고 할 수 있는 자동화에 대해서 끄적거려 보려고 합니다. ​ 당연히 자동화 관련 글도 있을줄 알았는데, 뭔가 자동화 예제는 많은데

rayblog.tistory.com

 

728x90
반응형