일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- raspberry pi
- 현대통신
- 오블완
- Python
- 파이썬
- matter
- 공모주
- 힐스테이트 광교산
- 배당
- Bestin
- Home Assistant
- RS-485
- 매터
- 홈네트워크
- 엔비디아
- 퀄컴
- 월패드
- Apple
- 코스피
- esp32
- 나스닥
- Espressif
- 애플
- homebridge
- 미국주식
- 국내주식
- 해외주식
- 티스토리챌린지
- ConnectedHomeIP
- MQTT
- Today
- Total
YOGYUI
광교아이파크::난방 Apple 홈킷 연동 (1) 본문
[1] Prepare
난방, 환기, 가스 관련 통신 케이블은 홈네트워크 게이트웨이 터미널의 "CTRL RS-485"에 연결되어 있다
혹시나싶어 조명 쪽 RS-485와 함께 묶어서 읽어보니 바이트스트림이 뒤섞여서 도저히 파싱할 수 없게 되었다
결국 RS485 to USB 컨버터를 하나 더 구매해서 라즈베리파이에 추가 연결!
바이트스트림을 제대로 후킹하는지 확인한 후, 조명 제어 때와 같이 거실의 중앙 월패드 이리저리 조작하면서 패킷 파싱
조명 개발 때와 마찬가지로 바이트스트림 패턴 분석 시도
02 28 15 A1 C3 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 E5
02 28 07 11 C4 02 F9
02 28 10 91 C4 02 02 17 00 D0 00 25 00 00 00 7B
02 31 00 C5 00 00 00 00 00 F6
02 31 80 C5 80 00 00 00 00 F6
02 61 00 C6 00 00 00 00 00 A9
02 61 80 C6 00 00 01 00 00 2A
02 28 06 21 C7 D8
02 28 15 A1 C7 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 E1
02 28 07 11 C8 03 F6
02 28 10 91 C8 03 02 54 00 C8 00 25 00 00 00 E1
02 31 00 C9 00 00 00 00 00 02
02 31 80 C9 80 00 00 00 00 02
02 61 00 CA 00 00 00 00 00 B5
02 61 80 CA 00 00 01 00 00 36
02 28 06 21 CB DC
02 28 15 A1 CB 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 9D
02 28 07 11 CC 01 F4
02 28 10 91 CC 01 02 17 00 CC 00 25 00 00 00 9C
02 31 00 CD 00 00 00 00 00 FE
02 31 80 CD 80 00 00 00 00 FE
02 61 00 CE 00 00 00 00 00 B1
02 61 80 CE 00 00 01 00 00 32
02 28 06 21 CF E0
02 28 15 A1 CF 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 F9
02 28 07 11 D0 02 ED
02 28 10 91 D0 02 02 17 00 D0 00 25 00 00 00 9F
02 31 00 D1 00 00 00 00 00 EA
02 31 80 D1 80 00 00 00 00 EA
02 61 00 D2 00 00 00 00 00 BD
02 61 80 D2 00 00 01 00 00 3E
02 28 06 21 D3 C4
02 28 15 A1 D3 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 F5
02 28 07 11 D4 03 EA
02 28 10 91 D4 03 02 54 00 C8 00 25 00 00 00 C5
02 31 00 D5 00 00 00 00 00 E6
02 31 80 D5 80 00 00 00 00 E6
02 61 00 D6 00 00 00 00 00 B9
02 61 80 D6 00 00 01 00 00 3A
02 28 06 21 D7 C8
02 28 15 A1 D7 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 F1
02 28 07 11 D8 01 E8
02 28 10 91 D8 01 02 17 00 CC 00 25 00 00 00 98
02 31 00 D9 00 00 00 00 00 F2
02 31 80 D9 80 00 00 00 00 F2
02 61 00 DA 00 00 00 00 00 C5
02 61 80 DA 00 00 01 00 00 46
02 28 06 21 DB CC
02 28 15 A1 DB 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 ED
02 28 07 11 DC 02 E1
02 28 10 91 DC 02 02 17 00 D0 00 25 00 00 00 A3
02 31 00 DD 00 00 00 00 00 EE
02 31 80 DD 80 00 00 00 00 EE
02 61 00 DE 00 00 00 00 00 C1
02 61 80 DE 00 00 01 00 00 42
02 28 06 21 DF D0
02 28 15 A1 DF 10 22 03 02 17 00 CC 02 17 00 D0 02 54 00 C8 89
02 28 07 11 E0 03 DE
02 28 10 91 E0 03 02 54 00 C8 00 25 00 00 00 F9
02 31 00 E1 00 00 00 00 00 DA
02 31 80 E1 80 00 00 00 00 DA
02 61 00 E2 00 00 00 00 00 8D
02 61 80 E2 00 00 01 00 00 0E
02 28 06 21 E3 F4
-
0x02로 시작
-
헤더 (두번째 바이트)는 0x28, 0x31, 0x61이 반복된다
-
헤더가 0x31, 0x61일 때는 세번째 바이트가 패킷의 길이를 가리키지 않으며, 네번째 바이트가 timestamp
0x28일 때는 세번째 바이트가 패킷의 길이를 가리키며 다섯번째 바이트가 timestamp
헤더 0x28일때는 네번째 바이트가 0x21 - 0xA1, 0x11 - 0x91로 최상위비트가 토글된 쌍으로 보임
난방 On/Off 제어 시 패킷도 후킹, 월패드 레퍼런스 데이터가 있으므로 상호 비교가 가능하다
02 28 0E 12 E9 01 01 00 00 00 00 00 00 E3 # 거실 난방 켜기
02 28 10 92 E9 01 01 18 00 DA 00 25 00 00 00 9C # 응답
02 28 0E 12 F7 01 02 00 00 00 00 00 00 C8 # 거실 난방 끄기
02 28 10 92 F7 01 12 18 00 DA 00 25 00 00 00 AF # 응답
02 28 0E 12 48 01 00 14 00 00 00 00 00 9B # 거실 난방 20도 설정
02 28 0E 12 61 01 00 54 00 00 00 00 00 08 # 거실 난방 20.5도 설정
02 28 0E 12 76 01 00 15 00 00 00 00 00 58 # 거실 난방 21도 설정
02 28 0E 12 88 01 00 55 00 00 00 00 00 9A # 거실 난방 21.5도 설정
02 28 0E 12 9A 01 00 16 00 00 00 00 00 AB # 거실 난방 22도 설정
02 28 0E 12 AA 01 00 56 00 00 00 00 00 FB # 거실 난방 22.5도 설정
02 28 0E 12 B8 01 00 17 00 00 00 00 00 8C # 거실 난방 23도 설정
02 28 0E 12 D2 01 00 57 00 00 00 00 00 C2 # 거실 난방 23.5도 설정
02 28 0E 12 E3 01 00 18 00 00 00 00 00 C6 # 거실 난방 24도 설정
02 28 0E 12 D3 02 01 00 00 00 00 00 00 EE # 침실 난방 켜기
02 28 10 92 D3 02 01 17 00 D0 00 25 00 00 00 70 # 응답
02 28 0E 12 DD 02 02 00 00 00 00 00 00 F5 # 침실 난방 끄기
02 28 10 92 DD 02 12 17 00 D0 00 25 00 00 00 93 # 응답
02 28 0E 12 59 02 00 14 00 00 00 00 00 6B # 침실 난방 20도 설정
02 28 0E 12 6B 02 00 54 00 00 00 00 00 11 # 침실 난방 20.5도 설정
02 28 0E 12 78 02 00 15 00 00 00 00 00 61 # 침실 난방 21도 설정
02 28 0E 12 87 02 00 55 00 00 00 00 00 EC # 침실 난방 21.5도 설정
02 28 0E 12 94 02 00 16 00 00 00 00 00 BA # 침실 난방 22도 설정
02 28 0E 12 A1 02 00 56 00 00 00 00 00 D5 # 침실 난방 22.5도 설정
02 28 0E 12 7E 03 01 00 00 00 00 00 00 58 # 컴퓨터방 난방 켜기
02 28 10 92 7E 03 01 54 00 C9 00 25 00 00 00 6C # 응답
02 28 0E 12 87 03 02 00 00 00 00 00 00 BA # 컴퓨터방 난방 끄기
02 28 10 92 87 03 12 54 00 C9 00 25 00 00 00 A2 # 응답
02 28 0E 12 4F 03 00 14 00 00 00 00 00 74 # 컴퓨터방 난방 20도 설정
02 28 0E 12 5F 03 00 54 00 00 00 00 00 44 # 컴퓨터방 난방 20.5도 설정
02 28 0E 12 6A 03 00 15 00 00 00 00 00 76 # 컴퓨터방 난방 21도 설정
02 28 0E 12 78 03 00 55 00 00 00 00 00 20 # 컴퓨터방 난방 21.5도 설정
02 28 0E 12 85 03 00 16 00 00 00 00 00 A8 # 컴퓨터방 난방 22도 설정
02 28 0E 12 92 03 00 56 00 00 00 00 00 01 # 컴퓨터방 난방 22.5도 설정
명령 패킷 명세는 다음과 같이 정리할 수 있다
Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
켜기 | 0x02 | 0x28 | 0x0E | 0x12 | Timestamp | Room Index | 0x01 | 0x00 |
끄기 | 0x02 | 0x28 | 0x0E | 0x12 | Timestamp | Room Index | 0x02 | 0x00 |
온도설정 | 0x02 | 0x28 | 0x0E | 0x12 | Timestamp | Room Index | 0x00 | 온도값 |
온도설정시 온도 설정값은 다음 규칙을 따르는 것으로 보인다
설정값(℃) = (packet[7] & 0x3F) + (packet[7] & 0x40) * 0.5
월패드로 조정할 때 온도 설정값의 Step Interval이 0.5℃였는데, 명령 패킷에도 그대로 반영되어 있는듯 하다
(bit6가 1이면 하위6비트 값에 0.5도를 더한다)
** 월패드의 온도 설정 범위는 0.5 ~ 40.0
명령 패킷 파싱 결과를 토대로 다음과 같이 평상시 반복 쿼리 패킷의 0x28 헤더값을 가진 패킷과 이에 대한 응답 패킷도 명세화 가능하다
Index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
쿼리 | 0x02 | 0x28 | 0x07 | 0x11 | Timestamp | Room Index | ?? | |
응답 | 0x02 | 0x28 | 0x10 | 0x91 | Timestamp | Room Index | 0x02 0x11 |
온도설정값 |
응답의 7번째 바이트가 0x02일 경우 난방이 꺼진 상태이며, 0x11일 경우 난방이 켜진 상태
뿐만 아니라, 응답의 10번째 바이트는 현재 온도값을 나타내는 것으로 추정할 수 있다
현재 온도값이 20.6℃, 난방 설정값이 23℃일때 거실 응답
02 28 10 91 BD 01 02 17 00 CE 00 25 00 00 00 ED
>> 0xCE = 206 = 20.6℃ * 10
현재 온도값이 20.9℃, 난방 설정값이 23℃일때 침실 응답
02 28 10 91 16 02 02 17 00 D1 00 25 00 00 00 5C
>> 0xD1 = 209 = 20.9℃ * 10
현재 온도값이 20.2℃, 난방 설정값이 22.5℃일때 침실 응답
02 28 10 91 A7 03 02 56 00 CA 00 25 00 00 00 8C
>> 0xCA = 202 = 20.2℃ * 10
난방 제어 뿐만 아니라 온도 센서로도 활용 가능할 것으로 기대된다
- 습도 측정도 같이 해주지 않는게 아쉽다
- 레퍼런스값만 있으면 상호 비교가 되니 패킷 해석이 참 쉬운데...
실시간 전력 사용량 같은건 레퍼런스가 없어서 너무 아쉽다
난방 켜기, 끄기, 온도 설정, 현재 온도값 측정 기능 관련 패킷 파싱 기능 준비 완료!
[시리즈 링크]
'홈네트워크(IoT) > 광교아이파크' 카테고리의 다른 글
광교아이파크::난방 Apple 홈킷 연동 (3) (0) | 2021.01.02 |
---|---|
광교아이파크::난방 Apple 홈킷 연동 (2) (0) | 2021.01.02 |
광교아이파크::조명 Apple 홈킷 연동 (7) - Final (6) | 2021.01.01 |
광교아이파크::조명 Apple 홈킷 연동 (6) (0) | 2021.01.01 |
광교아이파크::조명 Apple 홈킷 연동 (5) (0) | 2021.01.01 |