본문 바로가기
IOT & 홈랩

IOT 시리즈 (3) - 공사 없이, 기존 초인종을 홈킷에 이식 해보자

by YangsDev 2022. 2. 24.

오늘 해보려고 하는 것 

오늘은 위의 화면처럼, Homekit의 도어벨 기능을 만드는 이야기를 적어보려고 한다.

 

방식

방식은 주방TV 시스템을 통해 사용 한다. 주방 TV에는 공동현관/현관을 여는 기능이 있다.

범용적이게 납품을 해야하니, 시스템적으로 통일을 하고 있을 것이라고 생각을 하고 보드를 보았다.

 

TV-PHONE 이라고 적힌 부분이 주방으로 가는 신호 선이다.

음~ 3/6번은 RS485 연결을 위한 데이터 통신 라인인듯하다.

그리고 VD 라인이 무엇일까 고민을 해보다가, 아날로그 비디오 신호라는 것을 알게 되었다.

 

그럼 패킷을 캡쳐 하기 위하여, 장비를 구매 해보자.

먼저 아날로그 비디오 라인을 위하여, RCA라인을 구매했다.

 

벤션 무산소 3 RCA to 3 RCA 오디오 비디오 AV 케이블 1.5m

COUPANG

www.coupang.com

 

라인이 있으면 당연히 캡쳐보드도 있어야 하니 캡쳐보드도 구매 하였다.

나 같은 경우에는 리눅스 장비에 연결을 해야 하기 때문에, EasyCAP 장비를 구매 하였다.

 

STK USB 2.0 비디오 / 오디오 변환기 오디오 비디오 어댑터 Easycap 캡처 카드

COUPANG

www.coupang.com

 

자 그럼 아날로그 비디오를 이제 연결 하여 보자.

 

 

아날로그 비디오를 연결 했지만 응답이 없었다.

자 그럼 아날로그 비디오를 이제 연결 하여 보자. 배선도를 보고 열심히 결선을 했는데..

응답이 없었다.. 왜 영상이 안들어오는걸까 문제를 알아보았는데 두가지 문제가 있었다.

 

첫 번째, 보드의 결선도와 실제 장비의 결선도는 다르다.

보드에서는 7번이 비디오 라인이었는데 실제 연결시에는 2번이 연결 라인이었다.

알고 봤더니 RJ45 라인이 표준대로 만들어지지 않았고 TV 장비에 맞춰서 랜 케이블이 만들어져있었다.

 

거의 대부분 주방 TV 뒷면에 결선도가 있으니, 보고 참고 하도록 하자

 

두번째, VD라인만 연결 하면 안되고, GND도 꼭 연결을 해주자.

사진은 없는데 비디오 선은 신호선과 GND라인이 있어야 한다.

처음에는 라인이 하나 밖에 없어서 당연히 하나로 해결 될 줄 알았는데, 그것이 아니었다.

 

외부에 보호용으로 있는 것 같은 줄이, GND 라인이었다.

보드 상에 있는 GND라인에 같이 연결을 해주자.

 

드디어 영상이 보인다.

드디어 영상이 보인다. 이제 영상을 스트리밍 해보자.

나 같은 경우에는 위에서 이야기한 EasyCap을 라즈베리파이에 연결 하여 사용 하고 있다.

 

여러가지를 사용 해보았는데 아래의 패키지가 가장 괜찮았다.

 

GitHub - mpromonet/v4l2rtspserver: RTSP Server for V4L2 device capture supporting HEVC/H264/JPEG/VP8/VP9

RTSP Server for V4L2 device capture supporting HEVC/H264/JPEG/VP8/VP9 - GitHub - mpromonet/v4l2rtspserver: RTSP Server for V4L2 device capture supporting HEVC/H264/JPEG/VP8/VP9

github.com

설치 방법은 나보다 잘 적은 분이 많으니 링크를 남긴다.

 

 

[Raspberry Pi] V4L2 RTSP Server 설치

프로젝트가 있어서 할 줄 모르는 라즈베리파이를 어쩔 수 없이 써봤다. 라즈베리의 RTSP 서버가 필요하여, 검색했더니 많이 사용하고있어서 그 내용을 정리할 겸 포스팅을 남긴다. 라즈베리파이

argc.tistory.com

 

이제 이벤트를 수신 해보자.

COMMAX는 홈 조명과 보일러를 제어하는 RS485라인과 문을 열어주는 RS485 라인이 물리적 분리가 되어있다.

그 라인이 주방TV에 연결된 TRX -/+ 이고, 이를 통해 현관 초인종, 공동현관 초인종이 울리는 이벤트를 받아야 한다.

 

방식은 이전 글에서 참고를 하도록 하자

 

IOT 시리즈 (2) - 기존 장비에서 패킷 캡처를 해보자

EW11 결선을 하고 셋팅을 완료 한 상태라면, 이제 패킷을 캡처 할 준비가 되었다. 내가 캡처를 하는 방식에 대해 이야기 해보려고 한다. 0. 패킷 캡처? 아마 처음 이런 시스템을 접한 사람들은 패킷

tech.yangs.kr

우리집의 Commax 장비 기준으로는 아래와 같다.

# 현관 카메라 ON/OFF
CAMERA_ON = ["02", "11", "00", "00", "00", "00", "02", "01", "14", "03", "04", "50", "00", "07", "86", "03"]
CAMERA_CALL_START = ["02", "11", "00", "00", "00", "00", "02", "01", "14", "03", "04", "40", "00", "07", "76", "03"]
CAMERA_OFF = [
    "02", "11", "00", "00", "00", "00", "02", "01", "14", "03", "06", "40", "00", "07", "78", "03"
] 

# 현관문 관련 이벤트
MAIN_DOOR_OPEN_EVENT = ['02', '10', '02', '01', '14', '03', '02', '01', '14', '03', '00', '00', '00', '00', '44', '03', '02',
                   '10',
                   '02', '01', '14', '03', '02', '01', '14', '03', '10', '00', '00', '00', '54', '03']
MAIN_DOOR_END_EVENT = ['02', '10', '02', '01', '14', '03', '02', '01', '14', '03', '00', '00', '00', '00', '44', '03']
MAIN_DOOR_OPEN = [
    "02", "11", "00", "00", "00", "00", "02", "01", "14", "03", "05", "00", "00", "07", "37", "03"
]

# 공동현관 이벤트
COMMON_DOOR_START_EVENT = ['02', '10', '02', '01', '14', '03', '02', '01', '14', '03', '00', '00', '00', '00', '44', '03',
                     '02', '10', '02', '01', '14', '03', '02', '01', '14', '03', '04', '00', '00', '00', '48', '03']
COMMON_DOOR_SESSION_START =  ['02', '11', '00', '00', '00', '00', '02', '01', '14', '03', '04', '30', '00', '07', '66', '03']
COMMON_DOOR_END_EVENT = [
    "02", "10", "02", "01", "14", "03", 
    "02", "01", "14", "03", "00","00", "00", "00", "44", "03"
]
COMMON_DOOR_SESSION_END = ['02', '11', '00', '00', '00', '00', '02', '01', '14', '03', '06', '30', '00', '07', '68', '03']

# 지하주차장과 지상출입문의 패킷이 다르다.
COMMON_DOOR_SESSION_END2 = [
    '02','12','00','00','00','00','02','01','14','03','41','30','00','07','a4','03',
    '02','15','02','01','14','03','02','01','14','03','03','00','00','00','4c','03',
    '02','10','02','01','14','03',
    '02','01','14','03','00','00','00','00','44','03'
]

COMMON_DOOR_OPEN = ['02', '11', '00', '00', '00', '00', '02', '01', '14', '03', '05', '00', '00', '07', '37', '03']

캡쳐한 패킷을 기반으로, sound type의  binary_sensor로 데이터를 받을 수 있게 커스텀 컴포넌트를 개발 하였다.

그리고 도어 오픈 의 경우에도 Lock Entity를 통해 사용 할수 있도록 커스텀 컴포너트를 개발 하였다.

 

HomeAssistant 설정하기

먼저 EASYCap에서 RTSP로 카메라를 연결 해보자.

camera:
  - platform: generic
    stream_url: RTSP주소
    name: "현관"

 

그리고 이어서, 홈킷에서 알림을 받기 위하여, 트리거 관련 설정을 해보자.

homekit:
  - name: Home
    port: 21066
    safe_mode: true
    entity_config:
      camera.gongdonghyeongwan: // 카메라 이름 
        linked_doorbell_sensor: binary_sensor.doorbell // 위에서 개발한 현관 도어벨 이벤트를 수신하는 바이너리센서

이렇게 한 뒤 HomeAssistant 를 재시작 해주면 준비 끝! 

 

HomeKit 알림 받기 

위의 설정이 잘 되었다면 홈앱에 위와 같이 카메라들이 나오기 시작 할 것 입니다.

카메라에 들어가서 설정으로 간 다음

 

알림을 클릭하고

 

초인종 알림을 선택하게 되면 이제 홈킷에 알림이 연동되게 됩니다.

 

 

예상되는 질문 QNA

Q. 공동현관도 지원이 되나요? 라인이 따로 있나요?

A. 아니요 라인이 따로 있지는 않고, VD라인을 통해 넘어옵니다. 기본적으로는 현관 화면이 나오게 되는데 공동현관이 울린 경우에는 공동현관 화면이 나옵니다. 추정하기로는 공동현관 <---> 집 월패드 (TCP) -----> 주방TV (아날로그) 로 넘어오는것으로 추정 됩니다.

 

Q. 현관문은 도어를 눌러야 열리나요?

A. 코맥스 장비의 경우는 통화 세션과 상관없이 문열림 패킷으로 문을 열 수 있습니다.

공동현관은 통화 세션이 필요합니다.

 

Q. 커스텀 컴포넌트를 공유 해 주 실 수 있나요?

A. 따로 공유 계획은 없습니다.

 

Q. 쓸만한가요?

A. 쓸만합니다

 

마치며

잘 쓰는중..ㅋㅋ

애플 생태계 속에서는 TV를 보는 중에도 현관에 문을 열어 줄 수 도 있고, 외부에서 손님이 와도 먼저 들어갈 수 있게 해줄 수 있다.

애플의 홈 생태계는 정말 최고다.

 

마음 같아서는, 현관벨을 로지텍에서 FHD급으로 지원해주는 카메라로 바꾸고 싶지만, 

아직 내집이 아닌 전세 난민이기에... 최대한 공사 없이 그리고 이사갈때 가볍게 띠어 갈 수 있는 구성으로 한번 대리 만족 해보았다.

 

빔 프로젝트를 보면서 월패드가 항상 눈에 거슬리는데, 상황을 보고 저 월패드도 가려버리던가 해야겠습니다.

홈 IOT는 언제나 재미있네요.

 

댓글