일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 배당
- 엔비디아
- 빅데이터분석기사
- Espressif
- 라즈베리파이
- Apple
- Home Assistant
- 월패드
- 현대통신
- esp32
- Bestin
- MQTT
- 미국주식
- homebridge
- 매터
- raspberry pi
- 국내주식
- 해외주식
- 주식
- RS-485
- 애플
- 공모주
- 파이썬
- 홈네트워크
- 힐스테이트 광교산
- ConnectedHomeIP
- 나스닥
- cluster
- matter
- Python
- Today
- Total
YOGYUI
현대통신 월패드 HA 애드온 RS-485 명령 반복 전송 파라미터 추가 본문
Home Assistant Hyundai HT Wallpad Addon: add RS-485 repeat command parameters
지난 8월 21일, Home Assistant(HA)용 현대통신 월패드 RS-485 연동 애드온의 또다른 이슈가 댓글로 접수되었다
Home Assistant add-on 베타버전 릴리즈
이슈: 엘리베이터 호출 시 호출 기기에서 비프음이 반복 재생됨
자세한 문제상황을 알기 위해 메일로 문제 발생 시 영상을 부탁드렸다
확실히 비프음이 반복 재생되는 것을 확인할 수 있다
아마도 엘리베이터 호출 명령 RS-485 패킷을 월패드로부터 수신할 때마다 엘리베이터 호출용 미니패드에서 비프음이 발생하는게 아닌가 조심스레 추측해볼 수 있다
내 소스코드는 명령이 확실하게 수행될 때까지 일정 주기로 일정 횟수만큼 명령 패킷을 반복 전송하는 기능을 구현해뒀는데, 이게 댓글 작성자분과 같은 디바이스에서는 문제가 될 수도 있다.. 역시 베타 테스트를 하다보니 이런 저런 신기한(?) 케이스를 많이 접해보게 된다 ㅎㅎ
1. 소스코드 수정
1.1. 기존코드 구현 방식
안타깝게도 기존의 내 소스코드는 명령 패킷 반복 전송 관련 변수가 하드코딩되어 있었다 (아무래도 내가 거주중인 집만을 대상으로 우선적으로 구현하다보니 굳이 변경할 필요성을 느끼지 못했다)
# ThreadCommandQueue.py
class ThreadCommandQueue(threading.Thread):
@staticmethod
def getSendParams(parser: PacketParser) -> tuple:
interval = 0.2
retry_cnt = 10
if parser.getRS485HwType() == RS485HwType.Socket:
# ew11은 무선 송수신 레이턴시때문에 RS485 IDLE 시간을 명확하게 알 수 없으므로
# 짧은 간격으로 패킷을 많이 쏴보도록 한다
interval = 0.1
retry_cnt = 50
USB-to-RS485 컨버터와 같은 유선 연결의 경우 패킷 전송간 인터벌은 200ms, 최대 반복 횟수는 10회로 구현했고, EW-11과 같은 무선 네트워크 기반 컨버터의 경우 인터벌 100ms, 최대 반복 횟수는 50회로 하드코딩해뒀었다
댓글 작성자분이 '엘리베이터 호출될 때까지 1~2초가량 소요되는데, 그동안 10번 이상 비프음이 들린'다고 했으니 100ms 간격으로 명령 패킷이 전송되었던 것으로 추정된다
이 두개의 파라미터를 외부에서 수정 가능하게 변경해줘야 한다
※ 최대 반복 횟수의 경우, 월패드나 디바이스의 문제 등으로 인해 상태가 정상적으로 변경되지 않을 경우 명령 패킷 전송 쓰레드가 무한정 패킷을 전송하게 되는 문제를 방지하기 위해 반드시 필요한 파라미터라고 생각한다
1.2. 코드 수정 및 커밋
엘리베이터만 문제가 되는 경우이므로 각 디바이스 타입별로 반복 전송 파라미터를 구별하여 설정할 수 있게 해주는 게 올바른 구현 방법인데, 이러면 코드 변경점이 너무 많아져 코드가 좀 지저분해질 가능성이 있기에 이번에는 디바이스 무관 공통으로 설정할 수 있게 구현했다
# PacketParser.py
class PacketParser:
def __init__(self,
rs485_instance: RS485Comm,
name: str,
index: int,
send_command_interval_ms: int,
send_command_retry_count: int,
type_interpret: ParserType = ParserType.REGULAR):
self.send_command_interval_ms: int = send_command_interval_ms
self.send_command_retry_count: int = send_command_retry_count
이제 명령 패킷 반복 전송 관련 두 파라미터 (인터벌, 최대 횟수)는 각 PacketParser 객체가 내부에 멤버변수로 가지고 있게 변경했다
# ThreadCommandQueue.py
class ThreadCommandQueue(threading.Thread):
@staticmethod
def getSendParams(parser: PacketParser) -> Tuple[float, int]:
interval_sec = parser.send_command_interval_ms / 1000
retry_cnt = parser.send_command_retry_count
return interval_sec, retry_cnt
명령 패킷 전송 쓰레드에서는 관련 파라미터를 PacketParser 객체에서 직접 가져오도록 변경
그리고 HA 애드온으로부터 전달받은 애드온 파라미터를 소스코드 설정파일에 적용하는 내용은 코드가 좀 길어서 깃허브 커밋 내역으로만 공유하도록 한다
https://github.com/YOGYUI/HomeNetwork/commit/bc66e6d152c300ea98e9ec4921beccc725721748
2. HA 애드온 버전 릴리즈
HA 애드온의 설정을 통해 사용자가 파라미터를 변경할 수 있어야 하므로 애드온 버전 업데이트가 불가피해 1.1.3 버전을 릴리즈했다
2.1. 파라미터 설정법
'관련 문서' 탭에 DOCS.md 마크다운 문서로 파라미터 설정법을 기재해뒀다
cmd_interval_ms, cmd_retry_count는 optional 파라미터로, 반드시 기재하지 않아도 되며 만약 기재하지 않을 경우 문서와 같이 100ms / 50회가 default값으로 적용된다
만약 특성 RS-485 컨버터의 반복 명령 전송을 500ms 간격으로 최대 25회까지만 하고 싶다면 위와 같이 '구성' 탭에서 변경해주면 된다 (설정 저장 후 애드온 재시작 필요)
애드온 재시작 후 '로그' 탭에서 설정된 파라미터를 로그로 확인할 수 있다
3. 테스트
굳이 우리집에서 테스트할 필요는 없어서 댓글 작성자분께 바로 테스트를 부탁드렸다
얼마 지나지 않아 답변을 받을 수 있었다
월패드로 제어 가능한 디바이스가 '일반 조명'과 '엘리베이터' 2종류밖에 없는데, 인터벌을 지나치게 길게 하고 반복 횟수를 적게 할 경우 엘리베이터 호출 패드 비프음 현상은 사라지나 전등 제어가 씹히는 경우가 발생해 파라미터를 튜닝하는 작업을 거치셨다고 한다
※ 내 코드는 RS-485 명령에 대한 응답 패킷도 즉각적으로 해석해 반영하므로 1번만 제대로 전송되면 더이상 반복 전송하지 않는다는 특징이 있다
4. 마무리
감사인사와 함께 스타벅스 쿠폰을 선물받았다 ^^
요즘은 코드에 별 문제가 없는지 문의가 오는 횟수도 부쩍 줄었을 뿐만 아니라 기부를 해주시는 분이 없어서 약간 섭섭하던(?) 차에 기분좋은 선물을 받았다~ ㅎㅎ 개발자로 살아가는 소소한 즐거움이랄까?
선물주시는 분은 약소하다 하시지만 받는 입장에서는 당연히 기분이 굉장히 좋다!
이번 주말엔 간만에 또 스타벅스 아메리카노 한잔 때려야겠다 (메가커피 질려...)
야심차게 코딩작업하고 릴리즈까지 했는데, 정작 포스팅하니 내용이 별볼일 없어서 주저리주저리 잡설이 길어졌다.. ㅋㅋ
'홈네트워크(IoT) > 힐스테이트 광교산' 카테고리의 다른 글
현대통신 월패드 주방 비디오폰 세대현관문/공동현관문 자동 열림 기능 추가 (3) | 2024.10.24 |
---|---|
현대통신 월패드 '디밍조명' RS-485 응답 패킷 유형 추가 (깃허브) (0) | 2024.09.03 |
현대통신 월패드 시스템에어컨 '운전모드' 제어 기능 추가 (깃허브) (0) | 2024.08.02 |
현대통신 월패드 '디밍조명' 제어 기능 추가 (깃허브, HA 애드온) (4) | 2024.07.29 |
현대통신 월패드 HA 애드온 주방 비디오폰 설정 기능 추가 (5) | 2024.06.10 |