YOGYUI

광교아이파크::가스 Apple 홈킷 연동 (1) 본문

홈네트워크(IoT)/광교아이파크

광교아이파크::가스 Apple 홈킷 연동 (1)

요겨 2021. 1. 6. 10:16
반응형

[1] Prepare

주방 가스레인지 옆 도시가스관을 보니 전자식 도시가스 개폐장치(신우전자, SV-20H)가 설치되어 있다

수동식 개폐기가 기존 가스관에 있어서 이중으로 차단...이 되고 있다

도시가스 밸브 개폐

차단기 상단에 있는 컨트롤러에 연결되어 있는 flat cable을 쫓아가니 레이지 후드 상단 수납함에 있는 홈네트워크 통신 모듈 발견

도시가스 개폐기 컨트롤러 통신 모듈

모듈 이름은 '주거용주방자동소화장치(제어부,옥내용)'이고, 역시나 신우전자의 AFE-1020E 모델이다 (관련 링크)

모듈 아래에 소화제가 담긴 통이 있는걸보니, 화재 감지 시 자동으로 소화 기능이 동작하도록 설계된 것 같다

(테스트를 위해 불을 질러볼 수는 없으니...그냥 그런걸로)

신우전자 주방자동소화장치 system schemtic

역시나... 통신모듈의 프로토콜 명세서는 검색이 힘들었다

 

Home Network Gateway의 CTRL485 쪽에 '난방', '가스', '환기' 라벨링된 케이블이 연결되어 있었고 가스 관련 패킷은 다 해석했으니 이를 토대로 [0x02 0x28]로 시작하는 패킷을 제외한 뒤, 가스 차단기 제어부를 열기/닫기 반복하면서 값이 변화하는 패킷을 찾아냈다

02 31 80 7E 80 01 00 00 00 50 # 열려있는 상태에서 테스트 시작
02 31 80 82 80 01 00 00 00 BC
02 31 80 86 80 01 00 00 00 B8
02 31 80 8A 80 01 00 00 00 C4 # 닫힘 버튼 누름
02 31 80 8E 80 02 00 00 00 C3 
02 31 80 92 80 02 00 00 00 AF
02 31 80 96 80 02 00 00 00 AB
02 31 80 9A 80 02 00 00 00 B7
02 31 80 9E 80 02 00 00 00 B3
02 31 80 A2 80 02 00 00 00 9F
02 31 80 A6 80 02 00 00 00 9B
02 31 80 AA 80 02 00 00 00 A7
02 31 80 AE 80 02 00 00 00 A3
02 31 80 B2 80 02 00 00 00 8F
02 31 80 B6 80 02 00 00 00 8B
02 31 80 BA 80 02 00 00 00 97
02 31 80 BE 80 02 00 00 00 93
02 31 80 C2 80 00 00 00 00 FD
02 31 80 C6 80 00 00 00 00 F9
02 31 80 CA 80 00 00 00 00 05
02 31 80 CE 80 00 00 00 00 01
02 31 80 D2 80 00 00 00 00 ED
02 31 80 D6 80 00 00 00 00 E9 # 열림 버튼 누름
02 31 80 DA 80 02 00 00 00 F7
02 31 80 DE 80 02 00 00 00 F3
02 31 80 E2 80 02 00 00 00 DF
02 31 80 E6 80 02 00 00 00 DB
02 31 80 EA 80 02 00 00 00 E7
02 31 80 EE 80 02 00 00 00 E3
02 31 80 F2 80 02 00 00 00 CF
02 31 80 F6 80 02 00 00 00 CB
02 31 80 FA 80 02 00 00 00 D7
02 31 80 FE 80 02 00 00 00 D3
02 31 80 02 80 02 00 00 00 3F
02 31 80 06 80 02 00 00 00 3B
02 31 80 0A 80 02 00 00 00 47
02 31 80 0E 80 02 00 00 00 43
02 31 80 12 80 02 00 00 00 2F
02 31 80 16 80 02 00 00 00 2B
02 31 80 1A 80 02 00 00 00 37
02 31 80 1E 80 02 00 00 00 33
02 31 80 22 80 02 00 00 00 1F
02 31 80 26 80 02 00 00 00 1B
02 31 80 2A 80 02 00 00 00 27
02 31 80 2E 80 02 00 00 00 23
02 31 80 32 80 02 00 00 00 0F
02 31 80 36 80 02 00 00 00 0B
02 31 80 3A 80 02 00 00 00 17
02 31 80 3E 80 02 00 00 00 13
02 31 80 42 80 02 00 00 00 7F
02 31 80 46 80 02 00 00 00 7B
02 31 80 4A 80 02 00 00 00 87
02 31 80 4E 80 02 00 00 00 83
02 31 80 52 80 02 00 00 00 6F
02 31 80 56 80 02 00 00 00 6B
02 31 80 5A 80 02 00 00 00 77
02 31 80 5E 80 02 00 00 00 73
02 31 80 62 80 02 00 00 00 5F
02 31 80 66 80 02 00 00 00 5B
02 31 80 6A 80 02 00 00 00 67
02 31 80 6E 80 02 00 00 00 63
02 31 80 72 80 01 00 00 00 4C
02 31 80 76 80 01 00 00 00 48
02 31 80 7A 80 01 00 00 00 54

패킷 명세서를 기록하자 (다른 패킷들과는 다르게 패킷 길이는 10으로 고정이고 길이 정보가 패킷에 포함되지 않음)

Index 0 1 2 3 4 5 6 7 8
쿼리 0x02 0x31 0x00 stamp 0x00 0x00 0x00 0x00 0x00
응답 0x02 0x31 0x80 stamp 0x80 0x00
0x01
0x02
0x00 0x00 0x00

4번째 바이트는 다른 패킷들과 유사하게 방 인덱스인 것 같으나, 주방은 한군데 뿐이니 무시하도록 한다

6번째 바이트는 현재 밸브 상태값을 가리킨다

  • 0x00: 밸브가 닫혀있음
  • 0x01: 밸브가 열려있음
  • 0x02: 밸브가 움직이고 있음 (열림→닫힘 or 닫힘→열림)

거실 월패드에서 가스 밸브 '닫기' 제어가 가능하여 반복적으로 누르면서 명령 패킷을 찾아냈다

거실 월패드에서 가스 밸브 제어

02 31 00 38 00 00 00 00 00 13 >> 상태 쿼리
02 31 80 38 80 01 00 00 00 12 >> 밸브가 열려있는 상태
02 31 02 3C 00 00 00 00 00 11 >> 월패드 명령 패킷
02 31 82 3C 80 01 00 00 00 10 >> 외부 명령에 대한 응답
02 31 00 3D 00 00 00 00 00 0E >> 상태 쿼리
02 31 80 3D 80 02 00 00 00 0C >> 밸브가 움직이는 상태

 

월패드에서 밸브를 여는 UI는 존재하지 않으며, 월패드 명령 패킷의 5번째 바이트를 0x01 혹은 0x02로 값을 설정한 뒤 10번째 바이트를 0 ~ 255 까지 모두 전송해봤지만 밸브가 열리지 않았다

>> 02 31 02 3C 00 01 00 00 00 XX

 

월패드와 가스 제어부간 통신 브로커에서는 '닫기' 명령에 대해서만 가스 제어부로 전달하는 것이 아닐까 추측해본다

아마 이런 논리로 설계하지 않았을까?

  • 도시가스는 사용자가 요리를 할 때 외에는 열려 있을 필요가 없다
  • 요리할 때는 무조건 가스 밸브 근처에 있을테니 사용자가 수동으로 열어야 한다
  • 사용자 부재 시 안전을 위해 밸브를 외부 제어를 통해 닫을 수 있어야 한다

왼쪽 박스가 아마도 월패드 - 가스 모듈 간 통신 브로커인듯?

아쉬운대로 닫기 명령만 전송할 수 있는 액세서리를 추가하기로 한다

(좀 더 하드코어하게 하려면 브로커 - 가스모듈간 통신선까지 후킹하는 것도 방법이지만, 그렇게까지 고생하고 싶지는 않다)

 

[시리즈 링크]

광교아이파크::가스 Apple 홈킷 연동 (1)

광교아이파크::가스 Apple 홈킷 연동 (2)

광교아이파크::가스 Apple 홈킷 연동 (3)

반응형