일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- homebridge
- Espressif
- 배당
- 해외주식
- raspberry pi
- 나스닥
- Bestin
- 미국주식
- 오블완
- Home Assistant
- 홈네트워크
- 파이썬
- Python
- 애플
- Apple
- 매터
- 코스피
- esp32
- RS-485
- matter
- 힐스테이트 광교산
- 월패드
- MQTT
- 현대통신
- cluster
- 공모주
- 국내주식
- ConnectedHomeIP
- SK텔레콤
- Today
- Total
YOGYUI
광교아이파크::전원콘센트 Apple 홈킷 연동 (1) 본문
최초로 Bestin을 Apple 홈킷과 연동했던 거실 및 각 방의 조명 제어를 구현할 때, 게이트웨이의 'Energy' RS-485 포트로 전송되는 패킷 중 조명과 관련된 바이트만 해석했었다 (관련 링크 참고)
그 때 해석했던 패킷들을 다시 적어보면 다음과 같다 (조명 상태 변화에 따른)
<거실(주방) 월패드 관련 에너지 상태 패킷>
02 31 1E 91 90 E1 C0 83 00 64 00 64 00 00 04 7F 00 EA 01 52 02 59 18 E1 02 C2 1D DD 00 F2 : 조명 All OFF
02 31 1E 91 39 E1 C1 83 00 64 00 64 03 7E 04 CC 00 00 01 5C 02 59 18 E3 02 C3 1D DF 00 AB: 조명1(싱크대)만 ON
02 31 1E 91 95 E1 C2 83 00 64 00 64 00 BB 04 C5 00 00 01 5E 02 59 18 E3 02 C3 1D DF 00 F9: 조명2(후드)만 ON
02 31 1E 91 D5 E1 C4 83 00 64 00 64 01 A7 06 36 00 00 01 53 02 59 18 E3 02 C3 1D DF 00 88: 조명3(식탁)만 ON
02 31 1E 91 C0 E1 C8 83 00 64 00 64 03 DE 00 00 00 00 04 35 02 59 18 E3 02 C3 1D DF 00 85: 조명4(거실 구석)만 ON
02 31 1E 91 C1 E1 CF 83 00 64 00 64 09 99 00 00 00 C4 02 FD 02 60 19 21 02 D2 1E 1A 00 01: 모두 ON
<침실 월패드 관련 에너지 상태 패킷>
02 31 1E 91 91 E2 20 83 00 64 00 64 00 00 00 54 01 28 00 00 00 59 08 5C 07 5B 00 E0 08 B6: 모두 OFF
02 31 1E 91 4D E2 21 83 00 64 00 64 02 52 00 4C 01 40 00 00 00 59 08 5D 07 5C 00 E0 08 FB: 조명1만 ON
02 31 1E 91 79 E2 22 83 00 64 00 64 01 22 00 4D 01 1C 00 00 00 59 08 5D 07 5C 00 E0 08 46: 조명2만 ON
02 31 1E 91 C1 E2 23 83 00 64 00 64 03 89 00 64 00 E9 00 00 00 5A 08 65 07 71 00 E3 08 BA: 모두 ON
<컴퓨터방 월패드 관련 에너지 상태 패킷>
02 31 1E 91 94 E3 20 83 00 64 00 64 00 00 00 4D 01 5F 00 00 01 5B 16 B4 05 47 00 00 00 D7: 모두 OFF
02 31 1E 91 9C E3 21 83 00 64 00 64 02 86 00 4B 02 45 00 00 01 5B 16 B4 05 47 00 00 00 89: 조명1만 ON
02 31 1E 91 64 E3 22 83 00 64 00 64 01 46 00 47 01 5A 00 00 01 5B 16 B4 05 48 00 00 00 44: 조명2만 ON
02 31 1E 91 CC E3 23 83 00 64 00 64 03 B3 00 45 01 DC 00 00 01 5B 16 B4 05 47 00 00 00 27: 모두 ON
즉, 02 31 1E 91 4바이트로 시작되는 길이 30(1Eh)의 패킷의 6번째 바이트의 하위 4비트는 방의 인덱스, 7번째 바이트의 바위 4비트는 각 조명의 On/Off 여부를 1/0로 해석할 수 있었다
나머지 패킷들은 소비 전력과 연관되어 있다고 지레짐작만 하고 값의 레퍼런스가 없다는 말을 남기고 얼렁뚱땅 넘어갔었는데, 시간을 내서 한 번 제대로 분석해봤다 (주말에 한 1~2시간만 작업한 듯? ㅎㅎ 이젠 익숙해져서 작업 속도가 상당히 빠르다)
각 소켓별 On/Off 제어 및 전력값 레퍼런스값은 거실의 중앙 월패드에서 실시간 전력 소모량 메뉴에서 확인할 수 있다
1. 실시간 소모 전력값
모니터링값과 에너지 패킷을 상호 비교해보자
거실 상태 패킷 추출
02 31 1E 91 76 E1 C0 83 05 7A 00 D8 00 00 00 23 00 26 03 0A 03 37 2B 01 04 EC 32 33 00 28
9~10번째 바이트0x057A는 십진수로 변환하면 1402, 11~12번째 바이트 0x00D8은 십진수로 변환하면 216인데, 이 값은 월패드 아래 '차단값 설정'의 설정값에 10을 곱한 정수값인 것을 알 수 있다
또한, 15~16번째 바이트 0x0023, 17~18번째 바이트 0x0026, 19~20번째 바이트 0x030A는 각각 십진수로 변환하면 35, 38, 778인데 이는 3.5, 3.7, 77.8에 10을 곱한 정수형 값으로 각 콘센트별 실시간 소모전력인 것으로 보인다
(월패드 위 소켓에서는 정수형으로 각각 4W, 4W, 78W로 표기되어서 긴가민가했는데, 아래 차단값 설정에 현재 값이 3.5W, 3.8W로 표기되어 있어서 확신을 갖게 되었다)
혹시나 싶어서 다른 방 (컴퓨터방)도 비교해봤다
컴퓨터방 상태 패킷 추출
02 31 1E 91 F0 E3 20 83 00 64 00 64 00 00 03 B3 01 06 00 00 01 7F 25 CC 08 FD 00 00 00 D1
거실과 마찬가지로 9~10, 11~12번째 바이트는 콘센트별 차단값이며, 15~16번째 바이트는 콘센트 1의 현재 소모전력값 (0x03B3 = 947 = 94.7 x 10), 17~18번째 바이트는 콘센트 2의 현재 소모전력값(0x0106 = 262 = 26.2 x 10)인 것을 알 수 있다
제대로 파악한 것인지 확인하기 위해 웹페이지를 하나 만들었다 (자세한 구현은 깃허브 링크 참고)
[웹페이지와 월패드 비교 결과]
콘센트별 소모전략값을 제대로 파싱하는데 성공!
2. 콘센트 On/Off 상태
소켓별로 On/Off 하면서 각 방별로 현대 상태 패킷의 차이를 비교해봤다
<거실/주방>
02 31 1E 91 C5 E1 C0 83 05 7A 00 D8 00 00 00 00 00 26 03 12 03 37 2B 03 04 EC 32 35 00 4A : 소켓 모두 ON
02 31 1E 91 02 E1 C0 81 05 7A 00 D8 00 00 00 00 00 00 03 1F 03 37 2B 03 04 EC 32 35 00 22 : 소켓 1, 3만 ON
02 31 1E 91 EE E1 C0 82 05 7A 00 D8 00 00 00 00 00 2B 03 28 03 37 2B 03 04 EC 32 35 00 8D: 소켓 2, 3만 ON
02 31 1E 91 3C E1 C0 80 05 7A 00 D8 00 00 00 00 00 00 03 20 03 37 2B 03 04 EC 32 35 00 2E : 소켓 3만 ON
참고: 거실은 소비전력이 모니터링되는 소켓은 3개지만, On/Off (차단) 제어가 가능한 소켓은 2개밖에 없다
원래 있어야 할 작은 방을 뜯어내고 거실을 확장한 구조라 그런가? 작은 방에서 제어가 되어야 할 소켓이 거실로 함께 묶여버린 것 같다 (어차피 해당 소켓에는 NAS랑 서버 PC 전원 공급 라인이라 건드리면 안되긴 하지만 ㅎㅎ)
소켓 1, 소켓 2 모두 주방 쪽에 있는 벽면 콘센트가 제어되는 것으로 확인되었다
거실 벽면의 콘센트는 월패드로 '차단'값만 설정할 수 있는 것 같아 포기! (패킷 확인 불가능)
<침실>
02 31 1E 91 3F E2 20 83 00 64 00 64 00 00 00 4D 00 D0 00 00 00 6F 0B 4A 0E CB 01 86 00 21 : 소켓 모두 ON
02 31 1E 91 7B E2 20 81 00 64 00 64 00 00 00 92 00 00 00 00 00 6F 0B 4A 0E CB 01 86 00 98 : 소켓 1만 ON
02 31 1E 91 C0 E2 20 82 00 64 00 64 00 00 00 00 00 FF 00 00 00 6F 0B 4A 0E CB 01 86 00 DB : 소켓 2만 ON
02 31 1E 91 0B E2 20 80 00 64 00 64 00 00 00 00 00 00 00 00 00 6F 0B 4A 0E CB 01 86 00 97 : 소켓 모두 OFF
<컴퓨터방>
02 31 1E 91 04 E3 20 83 00 64 00 64 00 00 00 77 01 E3 00 00 01 7F 25 CD 08 FD 00 00 00 50 : 소켓 모두 ON
02 31 1E 91 30 E3 20 81 00 64 00 64 00 00 00 9E 00 00 00 00 01 7F 25 CD 08 FE 00 00 00 E4 : 소켓 1만 ON
02 31 1E 91 CA E3 20 82 00 64 00 64 00 00 00 00 00 BD 00 00 01 7F 25 CD 08 FE 00 00 00 62 : 소켓 2만 ON
02 31 1E 91 FC E3 20 80 00 64 00 64 00 00 00 00 00 00 00 00 01 7F 25 CD 08 FE 00 00 00 83 : 소켓 모두 OFF
패킷의 8번째 바이트의 하위 4비트가 각 콘센트의 On/Off 여부를 나타내고 있는 것을 알 수 있다
3. 콘센트 On/Off 제어패킷 얻기
거실 중앙 월패드에서 콘센트 On/Off 제어를 하면서 각 방별로 콘센트 제어 패킷을 추출했다
아직까지도 패킷의 마지막 바이트를 생성하는 알고리즘을 파악하지 못했기 때문에, 추출된 예시 패킷을 홈킷 제어시에 그대로 사용하기로 한다 (ㅠㅠ)
<거실>
02 31 0D 01 FC 01 00 81 00 00 00 09 4F : 소켓 1 켜기
02 31 0D 01 D8 01 00 01 00 00 00 00 EC : 소켓 1 끄기
02 31 0D 01 D5 01 00 82 00 00 00 12 62 : 소켓 2 켜기
02 31 0D 01 0A 01 00 02 00 00 00 00 3F : 소켓 2 끄기
<침실>
02 31 0D 01 B3 02 00 81 00 00 00 09 11 : 소켓 1 켜기
02 31 0D 01 05 02 00 01 00 00 00 00 40 : 소켓 1 끄기
02 31 0D 01 65 02 00 82 00 00 00 12 CF : 소켓 2 켜기
02 31 0D 01 81 02 00 02 00 00 00 00 C1 : 소켓 2 끄기
<컴퓨터방>
02 31 0D 01 B1 03 00 81 00 00 00 09 1C : 소켓 1 켜기
02 31 0D 01 44 03 00 01 00 00 00 00 82 : 소켓 1 끄기
02 31 0D 01 E8 03 00 82 00 00 00 12 4D : 소켓 2 켜기
02 31 0D 01 6E 03 00 02 00 00 00 00 55 : 소켓 2 끄기
분석한 결과들을 토대로 Energy RS-485 패킷 중 상태 패킷의 명세서를 작성해보자
Packet Index | Description |
0 | 0x02, Start of Packet |
1 | 0x31, Header, Status 패킷임을 알 수 있음 |
2 | 0x1E, Packet Length, 길이 30의 패킷 (파싱 시 사용) |
3 | 0x91, 0x11 상태값 쿼리 패킷에 대한 응답 패킷 (MSB 토글) |
4 | Timestamp 혹은 Spin Code (0x00 ~ 0xFF 순환) |
5 | 하위 4비트: 방의 인덱스 (0x1: 거실, 0x2: 침실, 0x3: 컴퓨터방) |
6 | 하위 4비트: 각 조명의 On/Off 여부 |
7 | 하위 4비트: 각 콘센트의 On/Off 여부 |
8~9 | 콘센트 1 차단값 |
10~11 | 콘센트 2 차단값 |
12~13 | ??? |
14~15 | 콘센트 1 현재 소모전력 x 10 |
16~17 | 콘센트 2 현재 소모전력 x 10 |
18~19 | 콘센트 3 현재 소모전력 x 10 |
20~ | ??? |
(나중에 시간나면 21번 바이트부터는 무슨 의미인지 궁금하니 조사해봐야겠다 ㅋㅋ)
이제 홈킷과 연동할 준비 완료!
[시리즈 링크]
'홈네트워크(IoT) > 광교아이파크' 카테고리의 다른 글
광교아이파크::전원콘센트 Apple 홈킷 연동 (3) - Final (4) | 2021.08.23 |
---|---|
광교아이파크::전원콘센트 Apple 홈킷 연동 (2) (0) | 2021.08.23 |
광교아이파크::Bestin - Apple 홈킷 연동 소스코드 GitHub 업로드 (0) | 2021.07.25 |
광교아이파크::난방 온도값 파싱 오류 (0) | 2021.07.21 |
광교아이파크::Bestin ↔ Apple HomeKit 연동 Summary (1) (13) | 2021.03.20 |