IOT

[HomeAssistant] BLE를 활용한 재실감지 및 세대현관 문열림 자동화(1)

오리야호 2022. 11. 2. 07:52
반응형

BLE를 활용한 재실감지 및 세대현관 문열림 자동화 사례

 

엘리베이터 호출하기와 더불어 만족도가 높았던 자동화 입니다.

 

앞서 BLE를 활용하여 재실을 감지하고 현관문 자동화를 하신 분들이 많이 있었습니다.

 

저희집 구성원은 안드로이드와 아이폰을 모두 사용하고 있어서 BLE를 이용한 재실 자동화를 쉽게 적용하지 못하고 있었습니다.
(제가 못한거라고 봐야겠죠 ㅎㅎ)

 

ESPresense 3버전부터 iOS를 제대로 지원한다는 네이버 HA 까페 글을 보고 세팅 해봤습니다.

 

일부러 풀어 쓴 내용이 있으니 이미 쓰고 계신분들은 굳이 안보셔도 괜찮을 것 같습니다.

 

대부분의 내용이 사전 참고 글, 댓글과 중복됩니다.

 

진행하면서 시행착오가 좀 있었는데 처음부터 끝까지 설명된 글이 있으면 좋겠다 싶어서 정리 해두었습니다.



사전 참고하면 좋은 글

네이버 HA 까페 iOS의 재실을 지원하는 ESPresense 3 소개글

HomeAssistant

 

iOS의 재실을 지원하는 ESPresense 3

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

네이버 HA 까페 ESP32 보드를 활용한 BLE 재실 감지 - 1 정리 글

HomeAssistant

 

ESP32 보드를 활용한 BLE 재실 감지 - 1

안녕하세요. 현관문 자동열기를 위해 ble 트리거를 어떤 방식으로 구현할지 테스트하고 있습니다. 공홈의 MQTT 내용 중 ESP32에 올려서 사용할 수 있는 1,2,5,...

cafe.naver.com

네이버 HA 까페 ESP32 보드를 활용한 BLE 재실 감지 - 2 정리 글

 

시작하기 앞서…

 

문열기 자동화의 핵심은 집으로 들어오려는 적절한 시점을 잘 설정하는 것입니다.

 

BLE 신호세기를 기반으로 설정된 Room의 값이 기기의 상태값이 됩니다.
(마지막까지 보시면 왜 그런지 알 수 있습니다.)

 

자동화는 “집 밖에서 집으로 들어오려고 할 때”가 트리거가 되는데, 혹시나 BLE 신호가 약해서 집에 있는데 집 밖으로 인식되지 않을까? 하는 걱정이 좀 들었습니다.

 

현관문 열림 자동화는 보수적인 기준이 좋겠다 싶어서 m5stack lite를 5개 주문했습니다.

 

각 방 또는 구역과 현관 6군데 배치하였습니다. 기기는 우선 2대만 등록하였습니다. 1대 안드로이드, 1대 아이폰입니다.

 

2024.1.27 안드로이드 기기 식별방법 추가

 

 



선행 조건

  • 도어락 연동 (HA에서 제어 가능한 상태)

 

구매품목

  • m5stack mini 5개 (크기가 작고, 케이스가 있는 제품이라 눈에 띄어도 거부감이 덜 합니다.)
  • usb c male to usb a male adapter 5개

 

건전지를 옆에 두니 얼마나 작은지 티가 확 나죠?

 

m5stack mini는 USB-C 타입으로 전원을 공급하고, 최초 펌웨어 설치를 합니다.

 

 

구매한 5개의 m5stack mini 외 여유분의 ESP32를 현관에 배치

 



ESPresense 3 공식 사이트

 

ESPresense 공식

Home

 

Home

ESP32 based indoor positioning system

espresense.com

 

수신장치 지원기기 목록

Base Stations

 

Base Stations

ESP32 based indoor positioning system

espresense.com

 

비컨으로 사용 가능한 기기

Beacons

 

Beacons

ESP32 based indoor positioning system

espresense.com

 

안드로이드, 아이폰, 애플워치 등 가능하네요.



M5STACK ATOM Lite 펌웨어 설치

 

PC에 꽂은 뒤

 

 

Install Firmware

 

Install Firmware

ESP32 based indoor positioning system

espresense.com

 

위 주소로 접속하여 CONNECT 버튼을 눌러 연결해줍니다.

 

 

 

순서대로 설치를 진행합니다. 그냥 클릭만 해주면 되는 수준이라 뭐라 설명할 것이 없네요 ㅎㅎ

 

 

 

 

 

설치 완료 후 CONNECT TO WI-FI를 누르면 SSID와 비밀번호를 입력하면 연결됩니다.

 

 

아쉬운 것은 static ip 설정을 미리 할 수 없습니다. IP를 고정으로 굳이 할 필요는 없지만 저는 관리 편의상 공유기 설정에서 고정해주었습니다.

 

등록된 기기 확인은 통합구성요소 → Mosquitto broker → 기기 에 가시면 목록에서 확인 가능합니다.

 

 



수신 장치(Base Stations) 설정하기

 

공식 문서

ESPresense

 

ESPresense

ESP32 based indoor positioning system

espresense.com

 

 

 

장치가 위치할 방 이름을 지어주고 MQTT 서버 정보를 입력해 줍니다.

(설치된 Mosquitto broker의 옵션에서 설정한 사용자 정보)

 

 

 

저는 캘리브레이션 설정은 따로 하지 않고 감지 주기만 1초로 설정해주었습니다.

 

여기 까지 되었으면 BLE를 수신할 준비가 된 상태입니다.



Beacon 기기 등록하기

 

안드로이드 폰 ID 확인

http://espresense_device_ip/ui/#/fingerprints

위 주소로 접속하면 주변 기기 리스트를 알 수 있습니다. 아이피는 위에 펌웨어를 설치한 기기의 IP 입니다.

안드로이드 기기는 iBeacon:~~~~ 식으로 시작하는데 오차는 있지만 거리 값으로 가까운것을 찾으면 바로 알 수 있었습니다.

 

 

 

 

 

또 다른 방법으로는 HA 앱을 활용하는 방법이 있습니다.

 

HA 앱 > 왼쪽메뉴에서 앱 구성 > 센서 관리 > BLE 송신기 > 센서 활성화 아래쪽에 ID 부분

 

 

 

ID를 확인할 수 있습니다. 센서 활성화를 해두면 HA에서도 센서 속성으로 확인되니 값 복사는 HA에서 하시면 됩니다.

 

 

 

그런데 만약 송신세기가 매우 낮음 (ultraLow)인 경우 세기를 조정해주는게 좋습니다.

 

 

 

 

iOS irk값 확인

 

 

공식홈에는 다른 방법을 안내하고 있는데 네이버 까페에 소개된 방법을 추천드립니다.

 

HA의 ESPresense 기기 설정에서 Enroll 누르기를 선택하고 아이폰에서 블루투스 메뉴로 들어가면 ESPresense 기기가 목록에 뜹니다.

 

 

페이링 해주면 irk 값이 조회됩니다.

 

 

 

MQTT Explorer을 이용하면 여러 기기의 ESPresense에서 올라오는 주변의 기기정보를 확인할 수 있습니다.

 

 

 

 

HomeAssistant 등록하기

공식문서

Home Assistant

 

Home Assistant

ESP32 based indoor positioning system

espresense.com

MQTT Room Presence

 

MQTT Room Presence

Instructions on how to track room presence within Home Assistant.

www.home-assistant.io

 

configuration.yaml 파일 내 sensor 아래에 위에서 식별한 ID를 등록합니다.

 

sensor:
  - platform: mqtt_room
    device_id: "irk:xxxxxxxxxxxxxxxxxx" # iOS 기기
    name: "My iPhone"
    state_topic: 'espresense/devices/irk:xxxxxxxxxxxxxxxxxx'
    timeout: 10 # 여러개의 ESPresense가 있을 때 timeout 이내의 시간 중 가장 가까운 신호값을 기록함(초)
    away_timeout: 30 # 외출로 판단하는 시간(초)
  - platform: mqtt_room
    device_id: "iBeacon:xxxxxxxx-xxxx-xxxx-xxxx" # Android 기기
    name: "My Android"
    state_topic: "espresense/devices/iBeacon:xxxxxxxx-xxxx-xxxx-xxxx"
    timeout: 10 # 여러개의 ESPresense가 있을 때 timeout 이내의 시간 중 가장 가까운 신호값을 기록함(초)
    away_timeout: 30 # 외출로 판단하는 시간(초)

 

device_id와 state_topic에 식별된 ID를 그대로 입력해주고 나머지 이름과 타임아웃관련 설정은 각자의 상황에 맞게 설정하시면 됩니다.

 

자동화 설정

등록한 기기가 외출에서 현관으로 인식될 때 세대현관 문열기 동작하는 샘플 입니다.

 

 

 

매우 기본적인 예제 입니다.

 

생활 패턴에 맞게 자동화를 작성한다면 보안적인 면과 편리함을 모두 잡을 수 있지 않을까 생각합니다.

반응형