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

 找回密码
 立即注册
查看: 1821|回复: 18

[插件集成] 【小白专用】通过手机蓝牙判断人员是否在家(room-assistant)

[复制链接]

18

主题

266

帖子

2160

积分

论坛DIY达人

积分
2160
金钱
1889
HASS币
20
发表于 2024-8-16 15:57:55 | 显示全部楼层 |阅读模式
用过ESpresence和monitor等东东,皆不尽人意。论坛大神seon介绍的room-assistant,感觉很适合我的环境,特将此文分享给与我英文一样烂的小白。

简介
room-assistant可以通过经典蓝牙扫描手机(无需进行蓝牙配对),判断人员是否在家。为了便于我等小白复刻,这里只介绍通过加载项安装的单实体方式,同时您的HA主机里已安装有MQTT代理,您只需要花5分钟时间即可搞定。如有您有docker、集群、BLE等其它需求请阅读原文

安装
在HomeAssistant的加载项商店里,通过以下URL新增仓库,然后安装“room-assistant”加载项。:
https://github.com/mKeRix/hassio-repo
设置

以下为经典蓝牙的设置参数:
名称
类型
默认值
描述
addresses
Array
需要追踪的手机蓝牙MAC地址列表。(通常可以在手机设置中找到)
minRssi
Number
RSSI阀值。追踪的手机RSSI低于设定值时将视作“离家”。(RSSI用于表示接收到的无线信号的强度)
rssiFactor
Number
1
RSSI数值的乘数。再使用多个room-assistant时,使用它来微调测量值
hciDeviceId
Number
0
room-assistant用于扫描的蓝牙设备ID,例如 0 表示 hci0 。
interval
Number
10
扫描间隔时间,以秒为单位。
scanTimeLimit
Number
6
完成一次扫描的最时间限制(以秒为单位)。此值应设置为比扫描间隔时间更小。
timeoutCycles
Number
2
判定手机"离家”的扫描次数。当连续扫描X次均未发现该手机,则视为“离家”
preserveState
Boolean
false
在关闭“扫描开关”后,是否应该保留最后一次扫描结果。
inquireFromStart
Boolean
true
当启动 room-assistant 时,“扫描开关是否打开。
entityOverrides
属性设置
实体属性设置。可配置MAC地址对应实体的ID和名称
kalmanProcessNoise
Number
1.4
过程噪声的协方差,通过卡尔曼滤波器减少测量噪声。
kalmanMeasurementNoise
Number
1
测量噪声的协方差,通过卡尔曼滤波器减少测量噪声。
设置示例:
配置文件路径:homeassistant\room_assistant\local.yml,您只需要代开配置文件,复制该示例,并修改成您需要追踪的手机蓝牙MAC即可。
global:
  integrations:
    - bluetoothClassic
bluetoothClassic:
  timeoutCycles: 2.5
  minRssi:
    '08:05:90:ed:3b:60': -10
    default: -20
  addresses:
    - '08:05:90:ed:3b:60'
    - '77:50:fb:4d:ab:70'
  entityOverrides:
    '08:05:90:ed:3b:60':
     id: my-phone
     name: My Phone

使用
启用home-assistant加载项。这时查看MQTT集成,你会看到新增了一个名为“xxxx-room-assistant”的设备,该设备有个开关实体,这个实体将控制room-assistant是否进行周期性蓝牙扫描。我创建了一个自动化,在每次开门时,开启该开关通过蓝牙扫描手机,5分钟后关闭该开关,以减少room-assistant在扫描时造成的蓝牙频段干扰。
当扫描到您设置的手机蓝牙MAC地址后,MQTT集成将会新增一个您在“entityOverrides”中设定的名称的设备,该设备的device_tracker.xxxxxx_tracker实体,该实体可以与人员绑定,以判断该名家庭成员是否在家。
常见问题
随机出现错误的“家”状态
当设备最近没有进行任何追踪时,就会出现这种情况。为了使超时时间稍微宽松一些,并消除这些错误状态,可以将 timeoutCycles 值提高。请注意,这将导致设备在真正离开时被报告为 “离家” 的时间延长。
WiFi/蓝牙干扰
蓝牙使用2.4 GHz频段,这可能与您的其他WiFi设备使用的频段相同。这可能会导致干扰。一些蓝牙设备可能无法很好地处理过于频繁的刷新间隔。如果您注意到任何问题(例如WiFi设备从网络断开连接,蓝牙耳机随机断开连接),请尝试将 interval 稍微提高一些。请注意,这将使状态更新速度稍微变慢。

通过SSH连接的设备反应慢无响应在一些主机上,比如集成了Wifi/BT的树莓派,蓝牙和WiFi共用一块芯片和天线。如果正在进行蓝牙通信,芯片会暂时关闭WiFi数据包,直到通信完成,然后再切换回来。同时只有一个协议可以处于活动状态,这可能导致请求超时和数据包延迟:如果在错误的时间对设备进行ping测试,它将不接受连接,因此会超时。这也会偶尔导致SSH会话变得缓慢。为什么会这样?用于轮询的命令总共需要大约5.5秒,其中大部分时间用于蓝牙通信。如果所有的白名单设备都不在附近,那么主机基本上只有6秒间隔中的大约1秒可用于WiFi通信。如果设备在附近,影响就不太明显,因为轮询会很快完成,并进行WiFi通信。如果主机上没有其他运行的东西,这应该不会造成影响 - room-assistant可以处理恶劣的网络条件。如果您希望主机具有更好的响应性或希望在主机上同时运行更多使用蓝牙/WIFI的其他应用程序,目前只有一个可以解决问题的方法:增加轮询间隔。当然,这也会稍微减慢检测速度。
苹果手表未被检测到
尝试先将 Apple Watch 与其它蓝牙设备(如耳机/扬声器)配对,然后再将其添加到房间助手中进行检测。在room-assistant检测到手表后,您可以取消与外围设备的配对。


回复

使用道具 举报

3

主题

49

帖子

606

积分

高级会员

Rank: 4

积分
606
金钱
557
HASS币
0
发表于 2024-8-16 23:24:58 | 显示全部楼层
按照教程来了,但是MQTT里面没有出现设备,我用的是华为手机
回复

使用道具 举报

146

主题

2267

帖子

7004

积分

元老级技术达人

积分
7004
金钱
4732
HASS币
30
发表于 2024-8-16 23:46:22 | 显示全部楼层
这个是利用ha的蓝牙,检测手机的蓝牙是否存在,来判断是否在家是吗
回复

使用道具 举报

18

主题

266

帖子

2160

积分

论坛DIY达人

积分
2160
金钱
1889
HASS币
20
 楼主| 发表于 2024-8-17 14:16:59 | 显示全部楼层
sanwangxiang 发表于 2024-8-16 23:24
按照教程来了,但是MQTT里面没有出现设备,我用的是华为手机

启动room-assistant,观察其日志,排查问题,确认是否已正常启动
回复

使用道具 举报

18

主题

266

帖子

2160

积分

论坛DIY达人

积分
2160
金钱
1889
HASS币
20
 楼主| 发表于 2024-8-17 14:18:10 | 显示全部楼层
bugensui 发表于 2024-8-16 23:46
这个是利用ha的蓝牙,检测手机的蓝牙是否存在,来判断是否在家是吗

是的。
回复

使用道具 举报

146

主题

2267

帖子

7004

积分

元老级技术达人

积分
7004
金钱
4732
HASS币
30
发表于 2024-8-17 15:12:49 | 显示全部楼层

可以用,但是有bug,如果蓝牙设备是被其他设备连接了(手机连接了蓝牙音响)。,这个时候好像扫描不到(蓝牙音响,因为他被连接了)。或者是蓝牙设备关了。ha重启后,就显示不可用
回复

使用道具 举报

3

主题

49

帖子

606

积分

高级会员

Rank: 4

积分
606
金钱
557
HASS币
0
发表于 2024-8-17 19:21:36 | 显示全部楼层
polisher 发表于 2024-8-17 14:16
启动room-assistant,观察其日志,排查问题,确认是否已正常启动

我HA装在虚拟机里 然后蓝牙适配器直通的HA这样行不行
回复

使用道具 举报

18

主题

266

帖子

2160

积分

论坛DIY达人

积分
2160
金钱
1889
HASS币
20
 楼主| 发表于 2024-8-18 14:58:56 | 显示全部楼层
sanwangxiang 发表于 2024-8-17 19:21
我HA装在虚拟机里 然后蓝牙适配器直通的HA这样行不行

我没用过虚拟机,需要您自行尝试了。我猜测可能是不行的,因为room-assistant依赖hcitool。
回复

使用道具 举报

18

主题

266

帖子

2160

积分

论坛DIY达人

积分
2160
金钱
1889
HASS币
20
 楼主| 发表于 2024-8-18 15:14:07 | 显示全部楼层
bugensui 发表于 2024-8-17 15:12
可以用,但是有bug,如果蓝牙设备是被其他设备连接了(手机连接了蓝牙音响)。,这个时候好像扫描不到( ...

没事儿把手机蓝牙关闭干嘛呢?非连接状态消耗不了多少电量。至于您提到的连接占用,通过自动化控制可以最大程度避免。
当然,您家人允许,也可以在手机装个APP来持续发送蓝牙广播,通过BLE来跟踪手机,缺点是APP被一键优化就失效了。
回复

使用道具 举报

146

主题

2267

帖子

7004

积分

元老级技术达人

积分
7004
金钱
4732
HASS币
30
发表于 2024-8-18 15:44:39 | 显示全部楼层
sanwangxiang 发表于 2024-8-17 19:21
我HA装在虚拟机里 然后蓝牙适配器直通的HA这样行不行

可以的,虚拟机可以
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 05:56 , Processed in 0.056171 second(s), 31 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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