卡片召唤师
精华
|
战斗力 鹅
|
回帖 0
注册时间 2018-11-26
|
TLDR:
1. "寄存器"从未缺位过,几乎任何一个网关和传感器产品都有这个设计
2. 购买任意一个小米网关即可解决问题,他们允许自动化完全内网独立工作,可以根据多重条件触发,不需要连接到云端(甚至我的网关已经离线一年了,那些自动化仍然正常运行)
这个问题还挺有意思的, 我和另外一个开发哥们还聊了一会,为什么用户会从这个角度考虑问题
(免责: 我不是米家IOT开发,以下内容仅根据小米IOT开发者平台文档解释)
米家服务端的云端任务执行的设计逻辑是等待用户设备上报数据,然后服务端根据数据判断是否触发了某个条件,然后再执行某个操作.
我们叫做"事件状态机",大概意思是某个条件触发后才去做什么事情 . 仅当设备向小米IoT 平台推送“事件”后,自动化场景才能被触发.
这是一个相当可靠,而且大幅降低了服务端的压力的设计,并且相对用户体验是OK的.
比如房间温度25,开空调,温度变成21了,关闭空调.
大多数米家的传感器的云端上报方式是:
1. 每次网络连接时
2. 有变化或查询才上报
为什么要这么设计,因为如果是从服务端主动去轮询设备执行任务,那么会导致服务端的压力非常大, 就类似于上面读燃气表,抄表员每家的每个设备都要去跑一圈,几千万个设备就要轮询几千万次.(有些小智能硬件厂家是这样设计的,任务的执行延迟非常高)
因为米家的设备非常多,如果每次都要轮询,全世界所有的米家设备都要轮询一圈,而且到用户侧的网络连接并不可靠,就比如上面抄表的时候人不在家意义,总不能读取不到就不执行了吧.
或者因为网络延迟问题,导致读取到了脏数据,这样会导致很多意外情况发生.
比如,上一分钟服务端寄存器里空调是开启的,然而房间停电了,假设3分钟后恢复
但此时服务端的缓存里空调还是开启的,这样就导致服务端定时任务执行时判定出错,导致空调不会再次开启. 还不如多此一举再开一次更好.
无论是从成本还是可靠性或者用户体验来说,这显然都不是什么好的方式.
这种主动式任务显然不适合云端主动读取设备读数执行,而改为设备上报的方式,什么时候来了新数据,什么时候执行任务, 这样不仅降低了延迟,也降低了服务端的压力.
而且相对也比较准确,用户提交的数据都是实时数据,不会有脏数据, 还可以做一个网关整合所有数据发过来,这样就不用每个设备都要连接云端了(而且并不是所有数据都具备接入网络的能力,比如一些BLE/Zigbee传感器)
想要了解自动化触发的方式,可以看看自动化触发历史,里面会提到是云端触发还是内网中枢执行.
大多数能连接到wifi的设备都可以交给云端控制,但是一些zigbee/蓝牙设备就不行了,因为它们并不具备连接云端的能力,只能交给内网中枢执行.
但内网中枢本地化执行也有自己的问题,比如自动判断工作日/节假日、每天的日升日落、向手机发送通知等等, 而且它也不适合门锁等安防设备(毕竟骇入内网网关远程开锁相当危险).
至少本地化执行是完全可以实现题主的需求的
至于所谓的阴谋论......我倒是挺佩服题主的想象力的,作为开发人员很少从这种角度去想问题.
装个网关改为内网执行就好了,和Homekit一样用户数据全部在家庭局域网本地运行,不会上传到云端,这样就不会有任何隐私泄露的问题了.
内网的网关允许非常复杂的自动化,比如极客模式的自动化,可以根据多重条件触发, 差不多是自己写脚本了.
但是这样会导致一些依赖云端体系条件的任务没办法跑,比如上面说到过的一些条件.
总结: 这问题好像就没存在过, 题主就是差了一个网关. |
评分
-
查看全部评分
|