本帖最后由 neroxps 于 2018-1-21 15:36 编辑  
 
写在最前 
 
一直在尝试wifi追踪是否回家,还有各种解决方案论坛都有,试过大部分人回家几分钟了,homeassistant还是没反应,路由器wifi追踪回家 Android 不亮屏的话是不会连接wifi的(至少我的魅蓝2是这样,即使关闭了锁屏休眠依然不会自动连接wifi)。 
 
 
甚至论坛有人买了设备做蓝牙定位,但是效果欠佳,思前想后觉得有一个设备一直在扫描蓝牙设备,扫描到就 home,扫描不到就not_home,这样是最简单的。后来折腾了下写了个demo后,就发现《自己寫個藍牙搜尋器檢查是否進入某區域並更新到HA》竟然连 iphone设备都可以使用蓝牙追踪,所以我就改了下,结合我现在的情况写了这个脚本。 
 
 
实时性绝对一流,但是如果 known_devices.yaml 里面跟踪 track 的设备多的话,其实会减慢速度。 
 
 
我是用小马V5主机安装 ESXI,安装 debian 系统,homeassistant 是用 hassio 安装的。 
 
 
到淘宝买了这款USB蓝牙适配器《绿联US192》,Debian 下是免驱的。 
 
 
sudo apt-get install bluetooth bluez bluez-tools 
  
 
 
安装完毕后重启 
 
 
hciconfig dev
hci0:        Type: Primary  Bus: USB
        BD Address: 00:1A:7D:DD:23:33  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING 
        RX bytes:524360 acl:0 sco:0 events:4109 errors:0
        TX bytes:25019 acl:0 sco:0 commands:1768 errors:0
 
  
 
见到以上参数证明蓝牙已经驱动了。 
 
原理 
 
使用 hcitool name $MAC 方法来查询设备是否在家,如在家则通过 Rest_API 更新 device_tracker 的 location_name( home | not_home )。 
 
先决条件 
 
- 运行 docker 的设备必须驱动了蓝牙,能够正常使用蓝牙。
 
 
  
安装 
 
 
第一步:编辑 Home-Assistant 的 known_devices.yaml 文件 
 
格式如下: 
mi3xiaomishouji:
  hide_if_away: false
  icon:
  mac: C4:6A:B7:C5:DD:BF
  name: MI3-xiaomishouji
  picture:
  track: true
  vendor: unknown 
  
对于我们来说,只需要编写三个地方。 
- mi3xiaomishouji:这个是 Home Assistant device_tracker 的设备ID,必须为英文。
 - mac:此处编写需要跟踪设备的蓝牙mac,注意是蓝牙的mac,不是wifi的mac。
 - track:此选项控制是否跟踪此设备,如果不需要跟踪则设为 false。
 
 
 
  
参考自:https://home-assistant.io/components/device_tracker/ known_devices.yaml 部分。 
 
第二步:运行 image 
 
docker run 
--net=host 
--name bluetooth_scan 
-e HA_API_PASSWD="home-assistant_rest_api_passwd" 
-e HA_URL="https://home-assistant_url" 
-e SLEEP_NUM=2
-v /usr/share/hassio/homeassistant/known_devices.yaml:/known_devices.yaml 
-itd neroxps/bluetooth_scan_track 
  
 
 
副作用 
 
- 因为是使用 REST_API 更新状态,所以会导致 IOS 和 Android 利用 REST_API 更新设备地理位置被覆盖,导致无法进行地理位置跟踪。(后期看看改一下脚本,做一个mqtt版本就没这个问题了)
 - 此方法需要一直占用蓝牙适配器,导致服务器的其他蓝牙服务无法使用。
 - 不能与其他基于网络 device_tracker 插件同时使用,因为 known_devices.yaml 的 MAC 只能写一个,这里我们需要写蓝牙的 MAC,我试过自定义叫 btmac 的参数是出错的。
 
 
  
这个镜像是根据 amd64 编译的,所以可能树莓派不能用,我手头上没有树莓派不知道能不能 build 一个支持树莓派的镜像。 
 
 
源代码:https://github.com/neroxps/bluetooth_scan_track 
Docker:https://hub.docker.com/r/neroxps/bluetooth_scan_track/ 
 
 
 
 |