[HA] Home Assistant API를 통해 통합 구성요소 '다시 읽어오기' 기능 구현
사물인터넷 | IoT/Home Assistant

[HA] Home Assistant API를 통해 통합 구성요소 '다시 읽어오기' 기능 구현

728x90
728x90

안녕하세요. JGP입니다.

Home Assistant 2021.4.2 버전으로 업데이트를 했더니, Local Tuya 컴포넌트가 제대로 작동하지 않는 상황에 놓였습니다.

현재 발생하는 문제는 HA가 시작될 때 기기가 정상적으로 연결되지 않는 것입니다.
HA를 막 구성하고 있는 분들이라면 재시작을 밥먹듯 하는데, 재시작시에도 발생하는 문제이기 때문에 아주 난처합니다 ㅜㅜ

또한 저 처럼 작업 스케줄을 걸어두고 자동으로 HA가 재시작되도록 설정한 상황에선 아주 불편한 문제이지요.

당장 해결방법이라곤, 통합 구성요소 화면에서 '다시 읽어오기'를 통해 리로드를 해주면 다시 장치를 읽어와 사용이 가능합니다.
하지만 자동 재시작은 제가 편하려고 하는건데 이렇게 되면 매일 HA 화면에 들어가서 재시작을 해주고 나와야하는 상황이지요 ㅜ

오늘은 Local Tuya 컴포넌트의 오류로 이렇게 글을 쓰게 되었지만..
HA의 API를 활용해서 스스로에게 Rest API 명령을 보내 자동으로 '다시 읽어오기'를 한 것 처럼 만들어보도록 하겠습니다.

다시 읽어오기를 굳이 UI 상에서 찾아 들어가 누르지 않고 할 수 있는 방법이기 때문에!
가상 스위치를 만들어 연결해서 간편하게 이용하는 등, 활용할 수 있는 곳이 아주 많다고 할 수 있겠습니다.


| Integration entry_id 찾기

/config 폴더에서 숨겨진 파일 보기를 활성화 한 후, .storage 폴더로 접근합니다.

 


+ OS별 숨긴 항목 보는 방법

macOS : jgpark.kr/727

Windows : jgpark.kr/728


 

 

.storage 폴더 하위에 core.config_entries 파일을 엽니다.

아마 열 수 있는 프로그램이나 앱이 없다는 경고나 나올 것입니다.
걱정 말고 그냥 본인이 사용하는 에디터로 열면 됩니다.

사용중인 에디터가 없다면 macOS는 텍스트 편집기, Windows는 메모장으로 열어도 됩니다.
저는 Virtual Studio Code를 통해 열겠습니다.

 

검색기능을 활용해 다시 시작할 entry_id 값을 찾아서 복사합니다.
사진 상 위에서 두 번째 붉은색 박스가 우리가 찾아야하는 값입니다.

만약 여러 개의 항목을 동시에 불러올 것이라면 미리 다른 항목의 entry_id도 복사해서 메모해둡니다.

 


| HA에서 장기 액세스 토큰 발급받기

  • 만약 이미 발급 받아둔 토큰이 있고, 그것을 사용해도 무방한 경우 이 단계는 건너뛰어도 됩니다.

  • HA 페이지에 접속 후, 좌측 탭 맨 아래의 본인 프로필로 접근합니다.
  • 아래쪽으로 계속 스크롤하여 '장기 액세스 토큰' 항목을 찾습니다.
  • 토큰 만들기 버튼을 눌러 토큰 생성 과정을 시작합니다.

 

토큰 이름을 지정합니다. 전 간단히 Reload Intergration 으로 했습니다.

 

토큰 값을 잘 복사하고 메모합니다.

참고로 장기 액세스 토큰은 보안을 위해 딱 한번만 보여집니다.
위 화면에서 확인을 눌러 저장하는 순간 재 확인이 불가능함을 유의합니다.

 


| configulation.yaml에서 다시 읽어오기 용 rest_command 추가

HA API를 활용하여 다시 읽어오기를 시도할 것이므로, HA 내장 기능 중 하나인 rest_command를 활용할 것입니다.

POST 방식으로 http://[Home Assistant 접속 IP]/api/config/config_entries/entry/[entry_id]/reload  URL에, Bearer [장기 액세스 토큰]을 헤더에 담아 application/json 방식으로 쏘면 됩니다.

 

아래 내용을 Step-by-Step 으로 진행하세요.

rest_command:
  [rest_command_id]:
    url: http://[Home Assistant 접속 IP(:8123)]/api/config/config_entries/entry/[entry_id]/reload 
    method: POST
    headers:
      authorization: 'Bearer [장기 액세스 토큰]’
      content-type: 'application/json'
  • [rest_command_id]
    • 임의로 정하는 ID값.
    • test라는 값을 적으면 'rest_command.test' 라는 서비스 명이 됨.
    • 띄어쓰기, 한글 불가능
  • [Home Assistant 접속 IP(:8123)]
    • 본인이 Home Assistant 에 접속할 때 사용하는 IP.
    • ha.domain.com 등 일반 도메인 사용가능, 만약 접속 시 포트를 붙여 접속한다면 해당 포트도 반드시 포함해야함.
  • [entry_id]
    • 1단계에서 메모해둔 entry_id를 대입
  • [장기 액세스 토큰]
    • 직전 단계에서 발급했거나 기존에 발급한 장기 액세스 토큰을 대입.
    • 따옴표 필수.
      • 예를 들어, authorization: Bearer 1234 불가, authorization: 'Bearer 1234' 가능.

위 내용을 참고하여 configulation.yaml을 구성하면 됩니다.

 

만약 여러개의 rest_command를 설정해야한다면 아래 형식을 참고합니다.
들여쓰기(띄어쓰기)에 주의하세요.

rest_command:
  reload_tuya_jgp:
    url: http://192.168.0.x:8123/api/config/config_entries/entry/YOUR_ENTRY_ID1/reload 
    method: POST
    headers:
      authorization: 'Bearer YOUR_ACCESS_TOKEN'
      content-type: 'application/json'
  reload_tuya_jtp:
    url: http://192.168.0.x:8123/api/config/config_entries/entry/YOUR_ENTRY_ID2/reload 
    method: POST
    headers:
      authorization: 'Bearer YOUR_ACCESS_TOKEN'
      content-type: 'application/json'
  reload_tuya_rest:
    url: http://192.168.0.x:8123/api/config/config_entries/entry/YOUR_ENTRY_ID3/reload 
    method: POST
    headers:
      authorization: 'Bearer YOUR_ACCESS_TOKEN'
      content-type: 'application/json'

 


| 기기 인식 불가 시에 자동 복구기능 구현하기

제목이 쓸 데없이 거창한데, 단순히 기기 상태가 'unavailable' 상태일 때, 전 단계에서 구성한 rest_command를 호출하도록 설정하면 됩니다.

- alias: Local Tuya Auto Fix
  trigger:
  - platform: state
    entity_id: switch.jgp_wall_relay1
    to: unavailable
  action:
  - service: rest_command.reload_tuya_jgp
  - delay: 5

저의 경우 switch.jgp_wall.relay1 이 unavailable 상태가 되면 rest_command.reload_tuya_jgp 를 호출하도록 구성했습니다.

딜레이를 준 이유는, 바로 구성요소가 불러와지지 않고 몇 초 정도 불러오는 시간이 있기 때문에, 무한 호출을 방지하기 위해서 딜레이를 넣어줬습니다.

 


이제 버그가 고쳐질 때 까지 신경쓰지 않고 HA를 사용할 수 있게 되었습니다.
도움이 되셨다면 공감과 구독하기 눌러주시면 큰 힘이 됩니다. 감사합니다.

 

 

728x90
728x90