『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 25987|回复: 42

[经验分享] 【docker】【device_tracker】自建蓝牙扫描追踪设备

  [复制链接]

40

主题

3057

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11135
金钱
8028
HASS币
182
发表于 2018-1-7 20:53:44 | 显示全部楼层 |阅读模式
本帖最后由 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

  • HA_API_PASSWD(必须):输入 homeassistant API 密码
  • HA_URL(必须):输入 homeassistant 网址,格式为 [ http://home.domain.com | https://home.domain.com | http://ip:8123 ]
  • known_devices.yaml(必须):使用 -v 参数映射 Home Assistant 的 known_devices.yaml 文件。
  • --net=host:使用主机模式运行,容器才能使用蓝牙设备。
  • SLEEP_NUM(可选):此参数控制扫描的间隔,单位为秒。(默认是2秒)


副作用

  • 因为是使用 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/



评分

参与人数 4金钱 +80 收起 理由
lidicn + 20 分享是一种美德!
Roger + 20 谢谢分享!
+ 20 又如滚滚黄河之水,一发不可收拾…….
antsunzj + 20 在下对你的景仰犹如滔滔长江之水,连绵不绝.

查看全部评分

回复

使用道具 举报

5

主题

183

帖子

808

积分

论坛积极会员

积分
808
金钱
625
HASS币
0
发表于 2018-1-7 21:01:29 | 显示全部楼层
藍牙掃描操作
回复

使用道具 举报

62

主题

581

帖子

6061

积分

论坛元老

Rank: 8Rank: 8

积分
6061
金钱
5405
HASS币
240

教程狂人论坛风云人物

发表于 2018-1-7 21:10:34 | 显示全部楼层
支持原创!!!!!有空能否研究一下debian的蓝牙tts 我用hassio 用不了
尝试过萝卜,我想你一定会忘记青瓜
回复

使用道具 举报

6

主题

100

帖子

431

积分

中级会员

Rank: 3Rank: 3

积分
431
金钱
331
HASS币
0
发表于 2018-1-7 21:17:28 | 显示全部楼层
学习一下。谢谢!
回复

使用道具 举报

123

主题

4626

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16017
金钱
11306
HASS币
45
发表于 2018-1-7 22:06:14 | 显示全部楼层
牛比了,有空研究下!
回复

使用道具 举报

0

主题

73

帖子

417

积分

中级会员

Rank: 3Rank: 3

积分
417
金钱
344
HASS币
0
发表于 2018-1-7 22:19:27 | 显示全部楼层
这个不错,收藏备学
回复

使用道具 举报

0

主题

61

帖子

1367

积分

金牌会员

Rank: 6Rank: 6

积分
1367
金钱
1306
HASS币
0
发表于 2018-1-7 22:25:55 | 显示全部楼层
谢谢分享
回复

使用道具 举报

6

主题

388

帖子

2043

积分

金牌会员

Rank: 6Rank: 6

积分
2043
金钱
1655
HASS币
0
发表于 2018-1-7 22:29:00 | 显示全部楼层
学习了学习了
回复

使用道具 举报

27

主题

387

帖子

3105

积分

元老级技术达人

积分
3105
金钱
2698
HASS币
40

教程狂人

发表于 2018-1-7 22:47:19 | 显示全部楼层
厲害了 感謝分享
回复

使用道具 举报

13

主题

258

帖子

2072

积分

金牌会员

Rank: 6Rank: 6

积分
2072
金钱
1814
HASS币
0
发表于 2018-1-7 23:55:27 | 显示全部楼层
小米手环终于可以发光发热了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-5-1 06:27 , Processed in 0.059615 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表