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

 找回密码
 立即注册
查看: 84953|回复: 185

[进阶教程] 准确、及时、自动判断离家回家--多种方案试用后的最终选择

  [复制链接]

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

发表于 2020-5-29 11:54:07 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2023-10-9 16:15 编辑

2023.10.7更新:随着HA本身的发展,本贴所述方案已经不是最佳的了。
更好的方案就是HA自身的私密BLE设备跟踪功能,加上ESPHome的蓝牙代理功能也可以实现分布式。
传送门:https://bbs.hassbian.com/thread-22926-1-1.html
不过依然要感谢monitor这个优秀的软件!

以下为之前编辑的内容:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
本贴介绍的是一个非常牛的小软件,牛到什么程度呢?

github上的repo有906颗星、119次fork、22位贡献者。

作者在HA官方论坛发的新版介绍帖子,有10.5万次点击、1900个回复。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

玩智能家居,入坑深似海,来来回回的折腾,可是真正静心的想一想,虽然折腾有折腾的乐趣,可我们的初心图的其实是方便。

而这个方便之中,大家最在意、也是最尴尬的,就是如何才能准确、及时的自动判断回家离家,并且成本和复杂度又不宜过高。

说尴尬,是因为几乎每种方案都存在明显的弱点。更高科技的我没玩过,但我使用过的wifi、蓝牙、地理围栏等等好几种方法,翻遍了HA官方文档几十种presence detection类的集成,都没有找到一个让我可以接收、愿意长期使用的方案。全世界HA的玩家和开发者,几乎每个人都为这个问题绞尽脑汁,别的不说,迄今HA原生的presence detection类的集成,已经多达66种,这个数字正式大家思考探索的一个体现。

我们想要的效果,说起来很简单,准确、及时、自动,有这3点基本就够了。可以真要做到这3点要求,还真不是一件容易的事儿。

1. 自动,相对来说最容易的,也是大家对智能家居感兴趣的基本理由。基本上每种方法都追求自动,这个其实没啥好说的。

2. 及时和准确其实是相辅相成的,保证不了及时,准确也就失去了意义。保证不了准确,再及时也是然并卵。
一般来说,判断所有人离家相对比较容易,对及时性的要求相对宽松,晚个几十秒甚至几分钟都可以接受,只要准确性可以保证基本就可以了。
而判断有人回家,最起码应该在他/她打开门之前就应该准确地判断出,如果等他/她进门之后才判断出来,哪怕只是慢了一两秒,都是一种不合格的方案。比如我们一般都要求所有人离家之后自动进入警戒模式,如果不能及时判断回家,开门就会导致误报警,显然这是无法接受的。
至于那种开门自动开灯,要等进门后上完厕所出来才有反应,更是笑话(由于厂家的云端服务器故障或网络故障,这种事儿还真不少见)。

3. 前面说的几十种方法,基本上都是在及时和准确方面存在着严重的欠缺!
- 比如说基于WiFi的各种方案(包括用ping、nmap以及各种路由器的变种),最致命的缺陷就是无法做到及时准确的判断手机设备断开和恢复连接,其中一个重要的原因就是手机为了节能,并不会频繁的搜索wifi信号、快速的恢复连接。而路由器呢,为了避免频繁操作,在手机实际断开后,要等挺长一段事件才会判定手机断开,这也难以做到“及时”
- 比如基于GPS的各种方案,手机也不会高频率的上报位置,再说如果hass进程没有暴露在公网,也很难实现接收手机位置数据的要求
- HA原生的蓝牙功能,不好用不说,很多部署HA的平台上压根儿就没有蓝牙(比如群晖、路由器),所以也不是一个好的方案
- 我甚至专门买过几个蓝牙的beacon,也没有很好的解决我的诉求

4. 和很多HA玩家一样,我也是自从入坑以来,一直在苦苦寻找一种理想的方案而不得,直到有一天在HA官方论坛上看到了一位大神的神贴:
Reliable, Multi-User, Distributed Bluetooth Occupancy/Presence Detection
可靠,多用户,分布式,蓝牙——这几个词深深地吸引到我。再仔细阅读,深感这就是我理想中的方案。反复尝试(发明者也在不断的升级代码)之后,逐渐接近于完美,也就成了我一直使用的首选方案。
这个帖子的地址:https://community.home-assistant.io/t/monitor-reliable-multi-user-distributed-bluetooth-occupancy-presence-detection/68505,只要英语还过得去,推荐看原文。
这个作者(我更愿意称他为发明者)叫[color=rgb(3, 102, 214) !important]Andrew J Freyer,是一位了不起的玩家,蓝牙、linux都堪称精通。
这个方案的核心,实际上是一个shell脚本(我也曾惊叹shell脚本也可以做到如此厉害的程度),旧版本还不叫这个名字,不过不用管了,直接用最新的就好。
这个脚本的官方发布地址:https://github.com/andrewjfreyer/monitor,有非常详尽的文档!

简单来说,这个方案就是利用1个到多个树莓派(zero w起,因为要用蓝牙,其他类似的板子也可以),以一种非常聪明的方式检测指定的蓝牙设备是否在可联系范围,然后用mqtt协议通知HA。

5. 在城市里,一般也不会住大院子,所以一个树莓派基本上也够用了。尽量放在离门口比较近的地方。
我就是用了一个3B+(只有这一个),结合门磁传感器和智能门锁,基本完美地实现了及时准确的判断所有人离家、有人回家的事件,可以及时进入警戒、及时解除警戒以及相应的操作摄像头、照明等。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20200611补充:我结合我自己的用法,把安装配置步骤翻译了一下,放在了26楼,懒得看英文的朋友可以参考。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里说说这个工具好在哪儿。

利用低功耗蓝牙进行在家/离家检测,基本做法是向已知地址发出名称查询指令,收到回复就认为该设备在家。没收到?那就是不在喽~~~

具体实现上,一般的做法就是周期性检测,当然这也是最笨的做法——检测频率低了,时效性不够;检测频率高了,耗电不说,干扰会很大(蓝牙也是2.4G,频繁检测的话对2.4G WiFi的干扰就不容忽视了)。

而这个脚本呢?巧妙的充分利用了低功耗蓝牙设备的特性和行为规律,只在必要时进行检测——就是只有在发现新出现的蓝牙设备时才检测,具体细节看原文吧。

另一个很大的优点,就是分布式。如果房子大院子大的话,可以在不同的位置放置多个树莓派,都运行这个脚本(当然要设置好),它们就会协同工作,提供更准确合理的检测结果。

这个作者最让我感动的一是他的专业知识(一般人想不出这么巧妙的方法、写不出这么完善的脚本),二是他的善解人意,考虑的非常周到,把能用脚本自动实现的各项配置都在脚本里实现了,使用者只需要简单的设置即可(当然,要熟悉ha、有基本的linux以及mqtt协议知识等)

评分

参与人数 9金钱 +56 HASS币 +10 收起 理由
adr + 5 高手,这是高手!
e27bbb + 2
Arnie97 + 1 感谢楼主分享!
yanghaoyu + 2
chenquanhao + 10 博览群贴,诲人不倦。
liarcc + 5 墙都不扶,就服楼主!
ddkens + 1 homekit里的到家离家很牛的.你可以试试,联.
he_qr + 10 感谢楼主分享!
+ 20 + 10 感谢楼主分享!

查看全部评分

回复

使用道具 举报

62

主题

603

帖子

6380

积分

论坛元老

Rank: 8Rank: 8

积分
6380
金钱
5702
HASS币
240

教程狂人论坛风云人物

发表于 2020-5-29 12:04:42 | 显示全部楼层
方案因人而异。
哎,我家的智能家居罩门在于我妈,
我妈出门不带手机的我曾经想过在鞋子嵌入蓝牙标签,
但是这些女的太多鞋子了

尝试过萝卜,我想你一定会忘记青瓜
回复

使用道具 举报

105

主题

2954

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
12103
金钱
9084
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-29 12:45:22 | 显示全部楼层
本帖最后由 XCray 于 2020-6-11 21:40 编辑
antsunzj 发表于 2020-5-29 12:04
方案因人而异。
哎,我家的智能家居罩门在于我妈,
我妈出门不带手机的我曾经想过在鞋子嵌入蓝牙标签,

是的,一千个人眼中有一千个哈姆雷特,可是一千个玩家手里,能有好几千个智能家居方案。
没有固定的随身携带的物件,那就不是技术方案容易解决的了。
也许以后人工智能可以更好的适应这种情形。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20200611,利用这个楼层补充一下这个脚本的基本工作原理,或者说理念。

这个脚本的检测基本机制是向预先指定的mac地址发送名称查询命令,收到回复就判定在家,否则就判定不在家。

一般地,可以指定数个设备(智能手机、手表手环等任意低功耗蓝牙器件,简单说就是4.0及以上的蓝牙),脚本在每次离家或回家检测时,会挨个向这个列表里的设备发出查询指令。

具体执行方法,又有周期性、事件触发(匿名蓝牙广播触发)、mqtt消息触发几种

周期性检测是最笨的方法,为了减少干扰,这个周期会设置的比较长。

同时,这个检测被分为两种:离家检测和回家检测,离家检测时,只针对当前状态是在家的蓝牙设备;同理,回家检测时,只检测当前不在家的。

离家检测,时效性要求相对较低,周期性动作基本可以满足大部分场景的需求。为了提高灵敏度,可以在ha中设置自动化,利用开门时间通过mqtt提醒脚本进行离家检测。

而回家检测,时效性要求很高。除了频率较低的周期性检测,这个脚本最主要、也是最巧妙的方法,就是利用BLE的机制、在收到匿名广播信息时进行检测。收到匿名广播信息意味着有一部手机进入了检测范围,这部手机可能是你的(匿名是为了安全),也可能不是。这儿可以利用厂家信息进一步减少检测的频次(也就是减少干扰),因为设备匿名广播时,广播的厂家名称还是真实的。比如你只用iPhone,那就可以指定只针对苹果的匿名广播响应。

通过ha在恰当的时候发出mqtt指令,主动进行回家检测,是进一步提高回家检测时效性的好办法。比如可以利用人体红外传感器、声音检测、摄像头检测等触发ha自动化,发出立刻检测回家的mqtt指令。


beacon和手机等设备不太一样,这儿不展开了。相信玩beacon的朋友都大概了解,需要的话可以看原文,也可以跟帖讨论。
回复

使用道具 举报

11

主题

271

帖子

3099

积分

论坛元老

Rank: 8Rank: 8

积分
3099
金钱
2828
HASS币
10
发表于 2020-5-29 13:41:19 | 显示全部楼层
我家是用小米的门锁,在米家里联动马桶的插座。
反锁就关掉插座,特定指纹解锁就打开插座。
回复

使用道具 举报

21

主题

463

帖子

2867

积分

金牌会员

Rank: 6Rank: 6

积分
2867
金钱
2404
HASS币
0
发表于 2020-5-29 13:44:08 | 显示全部楼层
antsunzj 发表于 2020-5-29 12:04
方案因人而异。
哎,我家的智能家居罩门在于我妈,
我妈出门不带手机的我曾经想过在鞋子嵌入蓝牙标签,

人体嵌入芯片。。。
回复

使用道具 举报

7

主题

192

帖子

1705

积分

金牌会员

Rank: 6Rank: 6

积分
1705
金钱
1508
HASS币
30
发表于 2020-5-29 13:59:12 | 显示全部楼层
我分享下我自己的方案, 我用的是 gps+wifi 的方案, 稍微简化了点。
首先虚拟出一个开关, input_boolean.at_home, 不在的时候为关

回家场景:
我从外回家, 这时 person 的位置会从 away 或者之类的变成 home, 但是此时我还没有进门。 如果person的位置是 home 的时候我开门, 就马上触发回家动作, 同时打开 input_boolean.at_home;  如果我的位置不是home的时候开门, 就马上触发警报; 当然如果钻牛角尖的话, 如果我在附近,然后又有人闯入... 我觉得这个场景完全可以忽略不计。
如果要判断谁回家也可以, 直接加上Wi-Fi判断就行了, 哪些人的位置是在 home 且Wi-Fi连接上家里Wi-Fi了的。

离家场景
比较简单, 如果我离开了 home 位置,且Wi-Fi没有连接到家里Wi-Fi, 自动关闭 input_boolean.at_home

为啥要Wi-Fi判断?
因为我发现有时 GPS 会突然飘走几分钟, 不知道为啥, 如果我在家直接飘走的话就会触发离家行为, 会很尴尬... 所以离家的时候家了Wi-Fi判断, 实际上我还给家庭成员回家做了tts播报, 谁的gps从away变成了home, 就意味这这人马上就要到家了。
回复

使用道具 举报

27

主题

2143

帖子

8930

积分

论坛元老

Rank: 8Rank: 8

积分
8930
金钱
6782
HASS币
30

论坛元老

发表于 2020-5-29 14:01:57 | 显示全部楼层
antsunzj 发表于 2020-5-29 12:04
方案因人而异。
哎,我家的智能家居罩门在于我妈,
我妈出门不带手机的我曾经想过在鞋子嵌入蓝牙标签,

你不是有人脸识别方案嘛
回复

使用道具 举报

4

主题

162

帖子

765

积分

高级会员

Rank: 4

积分
765
金钱
603
HASS币
10
发表于 2020-5-29 14:28:50 | 显示全部楼层
很棒  很需要这个啊
回复

使用道具 举报

15

主题

335

帖子

2454

积分

金牌会员

Rank: 6Rank: 6

积分
2454
金钱
2119
HASS币
10
发表于 2020-5-29 14:40:10 | 显示全部楼层
为啥不利用门锁呢?米家门锁接入可以判定是室内开门或XXX指纹、密码开门,室内开门后,检测路由手机设备来判断家中有人无人,再决定是否触发离家场景,室外开门同理,通过路由设备判断家中无人的话执行回家场景
回复

使用道具 举报

106

主题

551

帖子

2789

积分

金牌会员

Rank: 6Rank: 6

积分
2789
金钱
2238
HASS币
20
发表于 2020-5-29 14:50:13 | 显示全部楼层
star_liu 发表于 2020-5-29 14:40
为啥不利用门锁呢?米家门锁接入可以判定是室内开门或XXX指纹、密码开门,室内开门后,检测路由手机设备来 ...

米家门锁还无法接入HA吧
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-24 12:20 , Processed in 0.178324 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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