본문 바로가기

SmartHome. IoT/SmartHome 기본

2021.7 버전에 추가된 Trigger ID란 무엇인가?[출처] 2021.7 버전에 추가된 Trigger ID란 무엇인가?

728x90
반응형

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

오랜만에 HA설정에 관한 팁 포스팅 입니다!

오늘 알아볼건, 2021.7 버전에서 추가된 Trigger ID라는 기능 입니다.

https://www.home-assistant.io/blog/2021/07/07/release-20217/#trigger-conditions-and-trigger-ids

자세한 내용은 위 링크를 참조하시면 됩니다~

이 기능은 이름에서도 매우 직관적으로 알 수 있게 생겼네요.

바로 자동화의 시작지점을 결정하는 트리거에 ID를 지정해줄 수 있는 기능입니다.

물론 이건 자동화를 트리거별로 만드는 분들에겐 딱히 필요가 없습니다.

자동화를 좀 줄여보자! 라는 마음으로 한 자동화에 트리거를 여러개 넣고,

선택(choose) 나 조건(condition) 등을 활용하는 경우 유용하게 쓰일 수 있습니다.

기능 소개 링크에 있는 예시로 설명을 진행해 보겠습니다.

생략된 부분도 있을테니 적당히 상황을 맞춰 넣어보겠습니다.

사실 원하는 동작의 자동화를 하려면 선택(choose) 를 써야 하는데 내용이 복잡하므로

대충 맘에 안드는 자동화라도 만들어서 설명을 진행하겠습니다.

선택(choose) 기능 관련으로는 예전에 설명한게 있으니 글 하단의 링크를 참조해 주세요

automation:
  - alias: "Trigger IDs!"
    trigger:
      - platform: state
        id: "normal"
        entity_id: binary_sensor.gate
        to: "on"
      - platform: state
        id: "forgotten"
        entity_id: binary_sensor.gate
        to: "on"
        for:
          minutes: 10
    action:
      - service: light.turn_on
        entity_id: light.gate
      - condition: trigger
        id: "forgotten"
      - service: notify.frenck_iphone
        data:
          message: "Someone left the gate open..."
      - service: light.turn_off
        entity_id: light.gate

위 자동화는, 문이 열리면(binary_sensor.gate to "on") -> 불을 켜라(light.turn_on "light.gate") 입니다.

이후 컨디션 체크 항목에서 trigger id : forgotten이 만족한다면 다음으로 진행하지만,

해당 값을 만족하지 않는다면 자동화를 멈춥니다. 문 열림의 trigger ID는 normal 이므로 여기서 멈추겠죠.

그리고 문이 열린상태로 10분을 유지한다면(for minutes: 10) 다시 자동화가 트리거 되면서

불 켜짐 -> frenck_iphone으로 노티를 날림 -> 불을 꺼라(light.turn_off "light.gate") 동작을 수행합니다.

컨디션으로 trigger id : forgotten을 만족하기 때문에, 켠디션 체크 이후의 자동화 동작을 진행하는거죠.

사실 간단하게 하면 다음과 같이 할 수 있겠죠.

자동화 1 : 트리거 - 문열림, 액션 - 불켜기

자동화 2 : 트리거 - 문열림 10분 유지, 액션 - 노티 발송, 불끄기

어떻게 보면, 문열림 10분 유지시 불 켜기 자동화를 안 하므로 더 효율적일수도 있습니다.

하지만 자동화가 많아지다보면, 이렇게 나눠둔 자동화들이 뭘 하는지 알기 어려운 경우들이 생깁니다.

이름 지정하는것도 그렇고 규칙을 만드는게 쉽지 않은데다가 비슷한 자동화가 모여있는게 좋거든요.

제가 구동중인 HA에 자동화가 총 58개 구성되어 있는데, automation.yaml 파일을 열면 2042라인 입니다.

엄청 많다고는 할 수 없지만, 적은 양은 아닌데요, YAML로 관리하던 예전의 경우는 라인수를 줄이는게 더 효율적이라서

template를 적극적으로 활용하면서 라인을 줄였는데,

요즘엔 UI방식의 자동화 에디터를 많이 쓰다보니 UI상에서 보이는 자동화의 개수가 중요하더라구요.

그래서 더욱 선택(choose) 혹은 트리거 ID에 대해 알아보고 있는것 같아요.

여튼 잡설은 이만하고, 딱 봐도 트리거 ID가 뭘 의미하는지 아시겠죠?

바로 각종 컨디션 체크에 사용할 수 있는 실행중인 자동화 전용 변수(variable) 라고 보시면 됩니다.

트리거-컨디션-액션 에서의 컨디션, 혹은 선택(choose) 에서 쓰는 컨디션, 액션에서 쓰는 컨디션 등

다양한 곳에서 사용할 수 있는 변수로 지정할 수 있습니다.

물론 이전에도 트리거 되는걸 골라서 액션에 반영할 수 있긴 했습니다.

템플릿으로 쓸 수 있는 trigger.entity_idtrigger.to_state.state 같은것들도 있고

컨디션 항목에 다음처럼 입력해도, 위 예제와 동일하게 동작합니다.

    trigger:
      - platform: state
        id: "forgotten"
        entity_id: binary_sensor.gate
        to: "on"
        for:
          minutes: 10
    action:
      .....
      - condition: state
        entity_id: binary_sensor.gate
        state: "on"
        for:
          minutes: 10

하지만 이 예제의 경우 trigger.entity_id나 trigger.to_state.state는 사용하기 어렵습니다.

2개의 트리거가 동일한 entity_id와 to 값으로 트리거 되기 때문이죠.

물론 템플릿을 더 쓰면 가능하긴 한데, 복잡해지잖아요?

그러면 컨디션 체크할때 트리거에 있는 항목을 그대로(to 는 state로 변경해서 입력해야 함) 넣어주면 되는데

이렇게 되면 트리거 되는 값이 바뀌면(for 부분을 9분으로 한다던가) 컨디션 부분도 같이 바꿔줘야 합니다.

하지만 이처럼 트리거 부분에 ID를 지정하게 되면, 컨디션 체크할때 해당 트리거 ID만 넣어주면 됩니다.

      - condition: trigger
        id: "forgotten"

요렇게 말이죠.

물론 트리거의 시간을 변경한다던가 해도 액션은 건드리지 않아도 됩니다.

어차피 해당 트리거의 ID를 바라보는것이기 때문에 ID로 지정된 트리거가 실행 되였느냐 만 체크하거든요.

저도 처음 써보는 기능이라 설명이 좀 난잡한것 같은데...찰떡같이 알아봐 주시길 바랍니다!

사용자에 따라서 전혀 필요 없는 기능일수도 있고, 있으면 편한 기능일수도 있고, 꼭 필요한 기능일수도 있는...

Trigger ID에 대한 기본 개념을 알아보았습니다!

다음엔 이거랑 선택(choose) 를 조합해서 더욱 다양한 자동화를 진행해 볼께요!

 

 

728x90
반응형