YOGYUI

HAOS에서 현대통신 RS485 연동 GitHub python 코드 실행하기 본문

홈네트워크(IoT)/힐스테이트 광교산

HAOS에서 현대통신 RS485 연동 GitHub python 코드 실행하기

요겨 2024. 1. 2. 01:28
반응형

 

지난 3월 20일, 현대통신 RS-485 코드가 적용된 HA 애드온 베타 버전을 출시하였으니, 편하게 애드온으로 사용하고자 하는 유저는 아래 링크 참고
Home Assistant add-on 베타버전 릴리즈   
(이 글이 생각보다 유입이 많네...)

 

2023년 막바지에 HAOS에서 내가 깃허브(GitHub)에 올려둔 힐스테이트 광교산 소스코드(현대통신 HDHN-2000 월패드 RS485 연동)를 HAOS가 설치된 SBC/NUC에서 실행하는 방법에 대한 문의가 3건 가량 들어왔다

(간간히 블로그 방문자분들께서 직접 시도해보는 경우가 있는 것 같다~ wow)

 

HAOS는 거의 사용해본 적이 없기 때문에, 이번 기회에 직접 설치하고 다뤄보면서 내 코드를 설정하고 실행하는 방법에 대해 간략히 정리해 포스팅하도록 한다

[Prerequisite]
- HAOS (라즈베리파이같은 SBC나 NUC 혹은 NAS에 설치)
- HA 애드온(Add-on): Advanced SSH & Web Terminal, File editor (혹은 Studio Code Server), Mosquitto broker

 

터미널 웹 UI를 실행해보자 (PuTTY나 TeraTerm같은 별도의 프로그램 없이 HA의 애드온만으로 웹 브라우저에서 SSH 접속이 가능하다! 엄청 편리하면서도 보안에 신경을 많이 써야 할 것 같은... ^^;)

HAOS Web Termianl 애드온 실행 예시

 

터미널에서 git, python, pip 설치 여부를 확인해보자

$ which git
$ which python
$ which pip

모두 HAOS 및 애드온 설치할 때 자동으로 설치되었다 (애초에 HA core가 python 기반으로 동작한다고 얼핏 본 것 같다)

python을 실행해보니 HA core 2023.12.4 버전은 python 3.11.6 버전 상에서 돌아가는 것으로 보인다

※ 만약 git / python / pip 중 하나라도 설치되어 있지 않다면 본문 댓글로 남겨주시길 바랍니다~ (apk를 통해 설치 가능하며, 설치 방법에 대해 글에 추가할 예정)

1. 코드 구동 환경 구성

1.1. 소스코드 클론 (clone source code)

HAOS 재시작 혹은 HA가 설치된 SBC, NUC 등 디바이스가 재부팅되어도 코드가 날아가지 않도록 Home Assistant 설정 파일(yaml)들이 존재하는 경로(/root/homeassistant)에 디렉터리를 임의로 하나 생성한 뒤 홈네트워크 소스코드를 클론해온다

깃허브 저장소 링크: https://github.com/YOGYUI/HomeNetwork

 

GitHub - YOGYUI/HomeNetwork: HomeNetwork(Homebridge) Repo

HomeNetwork(Homebridge) Repo. Contribute to YOGYUI/HomeNetwork development by creating an account on GitHub.

github.com

/root/homeassistant 경로는 /root/config 경로로 심볼링 링크가 생성되어 있다 (윈도우 OS의 바로가기랑 동일)
homeassistant 문자를 입력하는게 번거롭다면 /root/config 혹은 ~/config로 접근하면 된다
$ cd /root/config
$ mkdir repos
$ cd repos
$ git clone https://github.com/YOGYUI/HomeNetwork.git

1.2. 파이썬 가상환경 구성 및 패키지 설치

Terminal 애드온에서 python 앱을 구동한 경우, 애드온을 리부팅하면 기껏 설치해놓은 파이썬 패키지들이 날아가버려 다시 설치해야하는 이슈가 있다

 

이를 해결하기 위해, 클론한 경로 내부 로컬 경로에 파이썬 가상환경을 설치하는 스크립트를 추가해뒀다

commit 확인: 807031f5f262d925d10c4501c1f27736906c6470 

 

아래와 같이 activate.sh 스크립트를 터미널에서 호출해준다 (파이썬 설치, pip 패키지 설치가 자동으로 수행됨)

$ source ~/config/repos/HomeNetwork/Hillstate-Gwanggyosan/activate.sh

 

파이썬 가상환경이 활성화되면 터미널 커맨드라인 접두사가 (venv)로 바뀌게 된다

※ 파이썬 가상환경은 ~/config/repos/HomeNetwork/Hillstate-Gwanggyosan/venv 경로 내에 설치되며, 터미널이 재부팅되더라도 가상환경은 로컬에 계속 남아있다

2. 설정 파일 수정

RS485 컨버터, MQTT 브로커 (like Mosquitto)에 대한 사전 지식이 필요하다 (이 글에서는 해당 내용에 대해 자세히 다루지 않도록 한다)

소스코드의 파일 중 어플리케이션 설정 파일(config.xml)을 수정해 어플리케이션이 동작하도록 만들어줘야 한다

이 단계에서부터는 HA의 File editorStudio Code Server 애드온을 사용하면 편리한데, 파일 탐색기(explorer)가 도킹 패널로 제공되는 Studio Code Server를 사용하는 것을 추천한다

File editor 애드온 사용 예시
Studio Code Server 애드온 사용 예시

2.1. 기본 설정 파일로 바꿔치기(?)

소스코드 디렉터리 (/HomeNetwork/Hillstate-Gwanggyosan) 경로에 config_default.xml 파일이 있는데, 내용 전체를 복사해 config.xml 파일에 붙여넣기 해준다

2.2. RS485 컨버터 설정

본인이 설치한 RS485 컨버터 환경에 맞게 설정을 바꿔준다 (USB to RS485 컨버터를 HAOS가 설치된 하드웨어에 장착했거나 ew11 등 TCP 소켓 기반 무선 컨버터를 설치한 환경을 지원한다)

config.xml 파일 중 <rs485> 노드를 찾는다

  • <name> 노드: 로그로 디버깅 시 구별할 수 있도록 유니크한 이름 입력 (바꾸지 않아도 됨)
  • <index> 노드: <port> 노드를 추가할 때마다 1씩 증가 (0부터 시작)
  • <enable> 노드: 정수값을 1로 바꿔 활성화
  • <hwtype> 노드: 0 = USB to RS485 컨버터 사용 시, 1 = ew11 등 WiFi TCP 소켓통신 기반 컨버터 사용시
  • <packettype> 노드: 값 0으로 고정 (만약 주방 서브폰 연동 시에만 1로 변경)
  • 만약 <hwtype>이 0이라면 <usb2serial> 노드의 설정만 변경 (<port> 노드에서 시리얼 드라이버 이름만 제대로 적어주면 된다)
    만약 <hwtype>이 1이라면 <ew11> 노드의 설정만 변경 (ip 주소 및 포트 번호)

※ default 설정은 하나의 <port> 노드만 설정되어 있는데, 여러 개의 컨버터를 사용한다면 노드 내용 전체를 하나 더 추가해주면 된다

2.3. MQTT 브로커 설정

HA의 통합구성요소에서 mqtt 브로커를 구성해준다 (Mosquitto broker 애드온 설치된 상태여야 함)

MQTT broker - 구성 - MQTT 재구성 클릭

'브로커'는 127.0.0.1 혹은 localhost로 변경

사용자 이름, 비밀번호 변경 (포트는 바꾸지 않는 것을 추천)

기기 검색 활성화 및 접두사(prefix) 설정 - 변경하지 않는 것을 추천

 

config.xml 파일 중 <mqtt> 노드를 찾는다

아래 노드값들을 모두 위에서 설정한 브로커 설정대로 입력하면 된다

  • <host> 노드: mqtt 브로커 주소 (ip주소, dns 모두 지원)
  • <port> 노드: mqtt 브로커 포트번호
  • <username>, <password> 노드: mqtt 브로커 아이디, 비밀번호
    ※ 아직 SSL 보안 기능은 지원하지 않는다, 필요 시 댓글로 달아주시면 추가 개발 예정
  • <homeassistant> - <discovery> - <prefix> 노드

2.4. 디바이스 자동 탐지 설정

  • <device> - <discovery> - <enable> 노드 값을 1로 변경

3. 어플리케이션 실행

터미널에서 파이썬 가상환경을 활성화한 뒤 app.py 스크립트를 실행한다

$ source ~/config/repos/HomeNetwork/Hillstate-Gwanggyosan/activate.sh
$ cd ~/config/repos/HomeNetwork/Hillstate-Gwanggyosan 
$ python app.py

어플리케이션이 컨버터를 통해 수신되는 RS485 패킷을 해석해 자동으로 전등, 난방, 콘센트 등의 디바이스를 감지해 추가해준다

1분이 지나면 자동으로 앱 내부가 재실행되며 디바이스를 제어할 수 있게 된다

 

config.xml 파일의 <device> 노드의 <entry> 노드에 디바이스 정보가 자동으로 추가되며, 다음 번 실행부터는 discovery 작업을 거치지 않고 바로 디바이스 제어를 할 수 있다

4. HA 대시보드 확인

MQTT broker 설정에 따라 discovert된 디바이스가 대시보드에 자동으로 추가된다

제어 테스트를 해본 후, 잘 동작한다 싶으면 대시보드를 커스터마이즈하면 된다

(대시보드 이쁘게 꾸미는 방법에 대해서는 다른 사이트를 참고... ^^;;)

5. TODO: 스크립트 자동 실행

파이썬 스크립트 (app.py)를 HAOS 시동 시 자동으로 실행하는 방법에 대해서는 좀 더 연구를 한 뒤 별도의 글로 포스팅할 계획 (내가 리눅스에서 평소에 쓰는 방식은 xdg autostart인데, HAOS에 사용하기에 적합할 지 검토 중)

  • docker 이미지로 만드는게 좋아보이기는 한데, 어차피 config.xml 파일 수정 때문에 일반 유저에게 번거롭기는 마찬가지가 아닌가 고민중
  • HA 애드온으로 만드는 것도 고려해볼만한데, 그러면 설정 관련 파일을 xml 포맷에서 yaml 포맷으로 바꿔야되기 때문에 여간 번거로운게 아니라 배제 중 ㅋㅋ
문의사항 및 본문 오류 사항은 댓글 혹은 이메일(lee2002w@gmail.com)로 남겨주시기 바랍니다
반응형
Comments