找回密码
 立即注册

微信扫码登录

搜索
查看: 34694|回复: 28

[技术探讨] HA 0.110版,控制米家网关警戒的最佳方案,我曾经建议过的

[复制链接]

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

发表于 2020-5-29 15:45:40 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2020-5-30 09:22 编辑

前言
0.110.0版本,一个重大变化就是集成了基于xiaomi_miio接口的警戒控制功能。

在此之前,我一直使用manual平台的警戒控制面板,通过模拟无线按键的代码修改实现与米家网关的同步。

其实,我曾在两年前向python-miio的作者rytilahti、syssi提出过这个建议,当时他还有些纠结,所幸终于想通了。感谢rytilahti和syssi

hass1.png
这是HA官方的文档:RELEASE NOTES
hass3.png
这是具体说明:
hass2.png

安装

根据官方文档,安装倒是很顺利。在前端界面就可以完成,不需要编辑yaml文件。

在侧边栏选“配置”,然后点击“集成”,然后点右下角的加号,就可以找到 xiaomi_miio,勾选 “连接到小米网关” 然后点“提交”,接下来填入正确的 “IP 地址” 和32个字符的 “token”,还可以设置一个好记的名称。提交后可以选择网关所在的区域。

获取token对大家来说不是难事儿,就不说了。实在需要HA的文档里也有。

测试

多了一个毫无用处的“在家警戒”模式,还没找到在哪儿可以去掉。

在hass前端操作,网关实时响应,手机上的米家app几乎也是零时延。

但反过来,在手机app操作,前端可以看到警戒打开/关闭的时延大约为5~25秒。

主要原因:(根据我之前抓包的记忆)miio接口并没有从网关发出的状态改变通知消息,而是要靠hass这边主动发起查询。所以实时性无法保证。

价值

简化。我之前做的模拟小米无线按钮动作的代码修改可以不用了。之前每次HA升级都要进容器修改,以后就省心了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20200530补充:
为了在hass中用好小米网关的警戒模式,我经过长期思考和实践,共摸索出两种方案,简单称之为新方案和旧方案。

新方案:
就是110版本开始,直接在前端配置增加小米警戒面板即可,不需要任何代码修改或复杂配置,当然,提前获取token是必须的。在110版本之前,我曾经尝试过自己修改miio接口的代码,原理和这个方案完全一样。

旧方案:
旧方案稍微复杂一点儿,但思路上还是很清晰的。
1. 配置manual alarm control panel
2. hass增加模拟无线按钮单击双击的能力,需要修改代码,简单几行,可参见我在github上的repo
3. 在米家app里设置自动化,单击布防、双击撤防
4. 在hass中设置自动化,布防模拟单击、撤防模拟双击
5. 在hass中设置自动化,单击布防、双击撤防
这样,hass这边可以根据别的条件(蓝牙检测手机)自动布防撤防,同时模拟无线按钮单击或双击的动作,触发小米网关联动。
网关这头呢,也可以把无线按钮放在门口或随身携带,出门前单击,小米网关和hass同步布防。如果随身携带,进门前进入zigbee有效范围双击,网关和hass同步撤防。
当然,还可以利用门锁触发布防和撤防的动作。

方案比较:
利用miio接口的新方案,优点是释放了无线按钮、可以减少自动化条目数量。
一个小缺点是警戒状态变动的实时同步是单向的(hass->网关实时,反之非实时),好在网关->hass的同步基本没啥意义(因为米家app和网关这边没有一个很好的机制自动布防撤防)。

另外,除非不得已,原生的肯定是最优选项,所以,综合考虑,还是优先推荐新方案。

评分

参与人数 1金钱 +20 收起 理由
+ 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-29 19:08:19 | 显示全部楼层
12512310 发表于 2020-5-29 16:34
确实发现了这点,挺好用的。110就是更新后一些插件用不起来了,我等小白又囧了 ...

玩HA的一大痛苦就是升级,而升级又很频繁。
当然,这也是一种乐趣,折腾嘛~
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-30 08:57:31 | 显示全部楼层
xuyang 发表于 2020-5-29 19:36
小米网关警戒的插件,论坛中早就有了,一直在用呢。

不知道你说的是哪一个?

我是最近才来到这个论坛,还没有认识各路大神。

大概看了几个有关HA控制小米网关警戒的帖子,不谦虚地说,都不如我的方案——我有两个方案,无论是新的还是旧的,都比论坛里原来的帖子说的更合理、更简单。

也许有更高明的帖子但我没有看到。

倒是有一个不管网关自己的状态、直接利用网关播放警报声音的想法让我觉得非常有创意,更简单实用。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-31 07:47:36 | 显示全部楼层
到底哪个方案好、哪个方案适合自己,见仁见智。

我个人是倾向于原生的、其次是尽量接近原生、尽量不用或少用增加或修改代码、配置尽量简单、思路尽量简洁清晰的方案。

警戒面板就是警戒面板,换成其他类型,总觉得不够完美。

对了,我是处女座。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-5-31 20:38:30 | 显示全部楼层
本帖最后由 XCray 于 2020-5-31 20:46 编辑

看本质。

那个switch,用的还是python-miio,现在python-miio的作者都在新版本里加入了网关警戒状态的控制,我们还真的有必要再绕一个弯子、用开关来模拟警戒状态?

嗯,关于延迟,我记得之前有人在原理上说的很清楚了,三方程序只能通过miio接口设置和查询米家网关的警戒状态,这个“设置和查询”是没有延迟的,也就是说,指令发出去、结果很快就可以拿到。


但是,米家网关没有提供任何一种接口,在其警戒状态改变时主动在局域网发出通知,三方程序只能主动查询,而查询的频率,和时延就直接相关了。
唯一的例外,是网关会主动通知云端/米家app,当然是加密的,貌似还没有人解开(可能解开的结果一公布出来,官方就会改掉)。
做个简单的测试就明白了:

- 在米家app里改变网关警戒状态,hass里的状态需要多久才会更新?——当然,这个时延其实没啥影响,因为玩hass都用不到这个方向的同步。

- 在hass里改变状态,网关和米家app里的状态需要多久会更新?——没有任何时延(就是数据包传输和处理器耗时),这个才是大家真正用到的。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-1 14:28:59 | 显示全部楼层
823202848 发表于 2020-6-1 11:50
110.4版本,安装syssi的第三方库没有显示,添加后是未知的,求教各位大神怎么弄的,刚接触hassio,网上也没 ...

愣是没看懂你问的到底是什么问题。。。。。。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-2 07:51:43 | 显示全部楼层
本帖最后由 XCray 于 2020-6-2 07:58 编辑
raspberry0316 发表于 2020-6-1 19:26
米家app警戒状态和hass的状态双向同步需要多久。这个真没测试过,毕竟手头没有毫秒级别的计时器。米家app  ...

我们是在争论什么吗?

先说hass控制米家网关警戒的意义,毫无疑问,我也认为这个能力非常重要,所以两年前我就开始寻找比较合理的实现方式,并于python-miio的作者进行了讨论,也曾经自己写程序验证。

延迟的事情,也很清楚啊!
- hass控制网关警戒,二者之间没有延迟
- 米家app控制网关警戒,这二者之间也没有延迟
- 网关警戒被hass或A手机上的米家app控制,状态改变后,B手机上米家app里的状态更新,有延迟,但不大
- 网关警戒被手机上的米家app控制,状态改变后,hass中的状态更新,延迟较大(几秒到二十几秒)
延迟的原因,是网关警戒状态变化时,没有提供对外的通知(只有到云端的通知,加密的,除米家官方外都无法使用)。三方程序包括hass等只能通过miio接口主动查询——而主动查询,往往不能频率太高,了解编程的盆友不难理解这一点。
~~~~~~~~~~~~~~~~~~
附:当时我用自己写的一个小程序控制网关警戒状态时与网关的交互消息:
查看警戒模式状态:{"id":65005,"method":"get_arming","params":[]}

{"result":["off"],"id":65005}

查看警戒模式延时:{"id":65006,"method":"get_arm_wait_time","params":[]}

{"result":[5],"id":65006}

设置警戒模式,开:{"id":65013,"method":"set_arming","params":["on"]}

{"result":["ok"],"id":65013}

设置警戒模式,关:{"id":65014,"method":"set_arming","params":["off"]}

{"result":["ok"],"id":65014}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的观点是:

在python-miio没有提供控制网关警戒这个能力之前,模拟一个开关来代表网关的警戒状态,不失为一种“巧妙”的解决办法。但是在python-miio已经提供这个能力、hass具备了原生的支持能力的情况下,再采用这种绕弯子的方法就没啥必要了。
至于你说的发生报警时,米家推送和HA推送有啥区别的问题,
- 如果互联网中断,ha可以发短信,米家不可以
- ha可以监控到网关离线或重要的传感器离线并推送告警,米家不可以
- 如果停电,ha可以获取UPS提供的事件通知,并推送告警,米家不可以
- 米家的云端服务器经常性瘫痪,导致告警事件推送失败或延迟,ha的推送则靠谱的多
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-3 12:21:13 | 显示全部楼层
本帖最后由 XCray 于 2020-6-3 12:22 编辑
pauldw1230 发表于 2020-6-3 08:40
目前使用了官方的网关警戒功能,设置了家中无人自动打开警戒,检测到有人回家自动关闭警戒。实际使用中可 ...

你这个是检测回家的及时性问题,曾经也是我很头疼的事儿。

推荐解决方案:
1、智能门锁,正常开锁就解除警戒。注意必须是本地联动才可以保证时效;
2、蓝牙,在门口放个人体传感器,有人就触发蓝牙探测、探测到任一家人的手机(也可以是蓝牙beacon/手表手环等任意蓝牙器件)就解除警戒(撤防)

两种方案,具体都可以参考我其他的帖子。

顺便说下,我现在的配置,所有家人离家自动布防/任一家人回家自动撤防 运行非常完美
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-3 16:29:26 | 显示全部楼层
pauldw1230 发表于 2020-6-3 15:32
智能门锁短期内不会更换了,之前已经换过三星的锁了,再换成本就太大了,家里也不会同意了。蓝牙的这个可 ...

蓝牙,就是我在另一个帖子里说的 monitor 那个,确实很好用——其实是最好用,我反正是没找到更好用的方案。

三星锁?如果支持联网的话,说不定也可以集成到 HA 呢。
回复

使用道具 举报

104

主题

2846

回帖

1万

积分

超级版主

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

积分
12299
金钱
9284
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2020-6-4 18:35:28 | 显示全部楼层
raspberry0316 发表于 2020-6-4 13:15
最好的办法就是换一个信号强一点的路由器 你在楼道里就已经连接上wifi 问题就解决了。 ...

问题的根本原因不是信号不够强,而是手机为了节能,睡眠状态下扫描wifi信号的频次很低,可能几分钟才扫一次。
一个改善的方法是上楼的时候激活屏幕(解锁不解锁都行),可以很快地连上wifi——但这不是自动化啊。
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian ( 晋ICP备17001384号-1 )

GMT+8, 2025-9-25 03:28 , Processed in 0.223890 second(s), 9 queries , MemCached On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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