找回密码
 立即注册
搜索
查看: 4602|回复: 30

[生活] 智能家居平台的编程中,为什么参数寄存器一直缺位?

[复制链接]
     
发表于 2024-5-21 14:35 | 显示全部楼层 |阅读模式
题目取大了,其实我只用过米家的平台……

米家中,智能操作一定是由动作触发,然后配合状态条件,再执行操作。
比较典型的场景是,如果温度房间湿度超过70%,就启动空调,直到湿度降低到50%以下,再关闭。
米家会很智障的每隔几秒或者几分钟,触发一次开空调的操作,只因为这会的湿度依旧超过70%……
按理说,只需要在状态条件中,增加一个“这会空调没开”的状态判断,就行了。
但是不知道为啥,小米,以及小米生态链下的空调伴侣,都不支持状态参数。

我的想法和很多教程中的“高招”一样,再弄个智能开关,插在不用的地方,用开关的状态,作为空调状态的参数寄存器。平白无辜再多花几十块。
后来,有了米家极客版,因为要中枢网关,我没有跟进
听说,中枢网关里面开启极客版,可以使用参数,但中枢网关直接不支持空调伴侣,以至于各种教程中,还要教你怎样建立这些不被极客版承认的智能设备和极客版的关联,也就是所谓的“米极桥(什么破名字)”

我想知道,这弱智一样的状况是为什么。



瞎猜了挺久,有这样一个草台班子逻辑,能够解释:
我猜想是因为一开始,智能家居的产品规划,觉得所谓的智能家居,就是家电能够接收语音指令,不管是窗帘还是空调,都得先来一个“小爱同学”,
或者是用手机替代遥控器,从到处找遥控器,进化到在手机上找模块
总之,所有的动作都是由一个明确的指令触发的串行事务,不存在分支和判断
甚至一开始设计的接口文档中,大部分产品都不会有上行接口,只需要做几个改变产品状态接口就行了
所以很长一段时间,智能家居的使用体验,还不如叫一声“老公,帮我xxxx”,或者“妈~”
后来,传感器便宜了,各种传感器也偷偷能上网或者基于蓝牙协议接入智能家居了
整个智能家居才开始有一点“给你一个眼神,自己体会”的样子
但是这个时候,前面的产业布局已经铺开了好一段了,各种设备的价格锚点也基本都确立了
增加状态上行接口导致新一代产品价格上升这种事情,消费者不会买账的
而且,消费者懂个P的智能家居
与其这样,不如在开一个新的赛道,通过盘外招拉回一些“智能”体验
反正真正的智能家居平台,和那些使用低代码可视化编程的“极客”爱好者们没有啥关系,不如趁机再多买几个外设。

嗯,果然草台班子+阴谋论能够解释一切。

不是业内,也不知道猜对了多少
回复

使用道具 举报

     
发表于 2024-5-21 16:45 | 显示全部楼层
米极桥已经成为历史了,现在中枢极客版原生支持寄存器了
回复

使用道具 举报

     
发表于 2024-5-21 18:04 | 显示全部楼层
TLDR:
1. "寄存器"从未缺位过,几乎任何一个网关和传感器产品都有这个设计
2. 购买任意一个小米网关即可解决问题,他们允许自动化完全内网独立工作,可以根据多重条件触发,不需要连接到云端(甚至我的网关已经离线一年了,那些自动化仍然正常运行)


这个问题还挺有意思的, 我和另外一个开发哥们还聊了一会,为什么用户会从这个角度考虑问题
(免责: 我不是米家IOT开发,以下内容仅根据小米IOT开发者平台文档解释)


米家服务端的云端任务执行的设计逻辑是等待用户设备上报数据,然后服务端根据数据判断是否触发了某个条件,然后再执行某个操作.
我们叫做"事件状态机",大概意思是某个条件触发后才去做什么事情 . 仅当设备向小米IoT 平台推送“事件”后,自动化场景才能被触发.
这是一个相当可靠,而且大幅降低了服务端的压力的设计,并且相对用户体验是OK的.

比如房间温度25,开空调,温度变成21了,关闭空调.

大多数米家的传感器的云端上报方式是:
1. 每次网络连接时
2. 有变化或查询才上报

为什么要这么设计,因为如果是从服务端主动去轮询设备执行任务,那么会导致服务端的压力非常大, 就类似于上面读燃气表,抄表员每家的每个设备都要去跑一圈,几千万个设备就要轮询几千万次.(有些小智能硬件厂家是这样设计的,任务的执行延迟非常高)
因为米家的设备非常多,如果每次都要轮询,全世界所有的米家设备都要轮询一圈,而且到用户侧的网络连接并不可靠,就比如上面抄表的时候人不在家意义,总不能读取不到就不执行了吧.
或者因为网络延迟问题,导致读取到了脏数据,这样会导致很多意外情况发生.

比如,上一分钟服务端寄存器里空调是开启的,然而房间停电了,假设3分钟后恢复
但此时服务端的缓存里空调还是开启的,这样就导致服务端定时任务执行时判定出错,导致空调不会再次开启. 还不如多此一举再开一次更好.

无论是从成本还是可靠性或者用户体验来说,这显然都不是什么好的方式.



这种主动式任务显然不适合云端主动读取设备读数执行,而改为设备上报的方式,什么时候来了新数据,什么时候执行任务, 这样不仅降低了延迟,也降低了服务端的压力.
而且相对也比较准确,用户提交的数据都是实时数据,不会有脏数据, 还可以做一个网关整合所有数据发过来,这样就不用每个设备都要连接云端了(而且并不是所有数据都具备接入网络的能力,比如一些BLE/Zigbee传感器)


想要了解自动化触发的方式,可以看看自动化触发历史,里面会提到是云端触发还是内网中枢执行.
大多数能连接到wifi的设备都可以交给云端控制,但是一些zigbee/蓝牙设备就不行了,因为它们并不具备连接云端的能力,只能交给内网中枢执行.

但内网中枢本地化执行也有自己的问题,比如自动判断工作日/节假日、每天的日升日落、向手机发送通知等等,  而且它也不适合门锁等安防设备(毕竟骇入内网网关远程开锁相当危险).
至少本地化执行是完全可以实现题主的需求的


至于所谓的阴谋论......我倒是挺佩服题主的想象力的,作为开发人员很少从这种角度去想问题.
装个网关改为内网执行就好了,和Homekit一样用户数据全部在家庭局域网本地运行,不会上传到云端,这样就不会有任何隐私泄露的问题了.
内网的网关允许非常复杂的自动化,比如极客模式的自动化,可以根据多重条件触发, 差不多是自己写脚本了.

但是这样会导致一些依赖云端体系条件的任务没办法跑,比如上面说到过的一些条件.


总结: 这问题好像就没存在过, 题主就是差了一个网关.

评分

参与人数 3战斗力 +4 收起 理由
百猪夜行 + 1
lley + 2 感谢分享
清醒之梦 + 1 好评加鹅

查看全部评分

回复

使用道具 举报

     
发表于 2024-5-21 18:06 来自手机 | 显示全部楼层
学学node-red吧
回复

使用道具 举报

头像被屏蔽
     
发表于 2024-5-21 18:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

头像被屏蔽
     
发表于 2024-5-21 18:18 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

     
发表于 2024-5-21 18:21 | 显示全部楼层
分支判断不好做呗
回复

使用道具 举报

     
发表于 2024-5-21 19:03 | 显示全部楼层
听不懂,啥黑话?寄存器?在我认知中只有硬件上面的数据寄存器。
你要说相关的,业务上有个说法叫做边缘计算,终端设备数据不需要千里迢迢的传输到数据中心服务器处理(云计算),5G把局域蜂窝网络数据交换放在本地网关,网络的边缘地带就行。
数据中心负责推送和同步,以及保存用户数据的配置,具体业务调度下方到个人网关。
回复

使用道具 举报

     
发表于 2024-5-21 20:20 来自手机 | 显示全部楼层
看不懂+1
回复

使用道具 举报

     
发表于 2024-5-21 22:01 | 显示全部楼层
我觉得没有那么复杂,其实就是数据一致性问题。

在网络环境下,如何保持状态数据的一致和同步,是个很复杂或者代价很高的事情。比如楼上说的断电了空调重启,云端不知道,状态就不同步了,就会导致决策错误。如果真要做到断电也能同步状态,那就需要设计一个非常复杂的协议或者机制才行了。

比较简单的解决方法就是用无状态的模式(stateless),每次请求的时候,把所有的参数或者当前状态都给到决策模块,决策模块只根据当次请求包含的参数来判断,这样可以避免状态不同步导致的问题。
回复

使用道具 举报

     
发表于 2024-5-21 23:08 | 显示全部楼层
我结合回复看,主楼的"参数寄存器"像是个存储设备是否在运行的标志位,然后楼主好像认为如果在云端存储这个标志位,就不用再每几秒种发个开启/关闭命令了

但关键问题就是10楼说的那样,是个状态同步问题,云端是不知道设备在不在线的,毕竟空调突然宕机或被路过的忍者扎穿之类的,也不会在停机之前给服务器发遗言说我要关闭了
进行状态同步,最常见的实现就是发心跳包或其等价物,可能是主机发给僚机看僚机回不回复,可能是僚机自己上报
在这个场景下,小米的服务器肯定不会有事没事遍历所有生产过的产品,看看产品在不在线;要是有个人买了个小米扫地机结果吃灰七年,服务器这七年里孜孜不倦地每隔3s问一遍"你还活着吗",这合理吗,这不合理,所以是产品自己请求服务器的模式

而心跳检测实现了,回到最初的问题,最初的问题是"如果存储了标志位,那么就不用在每几秒种发个开启/关闭命令了"
好像有什么地方不对,"每几秒种发送个心跳包来维持状态同步",好像比无状态的根据指标变化时才请求的代价还要高
最后的实现,就是主楼看到的这种"看起来很智障"的行为了
其实也不用纠结,返回包里的那个开启或关闭业务含义不要理解为"指令",理解为status_shall_be就行了,这个shall_be发给设备,设备自己决定要不要切状态
回复

使用道具 举报

     
发表于 2024-5-21 23:29 | 显示全部楼层
感觉就是只要不上云端啥都好说,为啥非要上云
回复

使用道具 举报

     
发表于 2024-5-22 00:09 来自手机 | 显示全部楼层
点进来之前还以为是什么高深的技术问题想来学习一二
回复

使用道具 举报

     
发表于 2024-5-22 00:59 | 显示全部楼层
你买家电才额外付了多少钱啊,就想要搞成有状态且同步的...
要完美实现成本加个零吧

除了楼主这种人,1w个里面9999个不需要这玩意
回复

使用道具 举报

     
发表于 2024-5-22 01:10 来自手机 | 显示全部楼层
太专业了,建议移到PC数码区讨论
回复

使用道具 举报

     
发表于 2024-5-22 15:30 来自手机 | 显示全部楼层
空调没有数据回传是这样的。

华为的空调伴侣是智能插座+红外一体的,通过判断电流大小判断空调开没开。可惜生态很垃圾。

自己做的话搞个霍尔电流传感器就可以做基本的功耗监测了,判断消耗功率来确定电器是否运行,是现在非智能化家电增加反馈的最优解。
回复

使用道具 举报

     
发表于 2024-5-22 15:50 来自手机 | 显示全部楼层
中枢网关也没有直接支持的状态存储的,不过稍微绕个圈子可以实现。
中枢网关可以发送自定义事件,然后用米家控制其他设备(比如空调),我觉得还算能接受
回复

使用道具 举报

     
发表于 2024-5-22 16:03 | 显示全部楼层
状态同步维持就需要家居能够回传状态信息,至少目前没实现全智能家具那就是不现实(
回复

使用道具 举报

     
发表于 2024-5-22 16:17 | 显示全部楼层
你说的这些,硬件单片机层面都很好实现,无非这些智能家居不给做而已。比如这种精确控制湿度的玩意,他要比较麻烦的加入PID,还得反复测试,配PID参数,有这功夫都做好几种智能家居了
回复

使用道具 举报

     
发表于 2024-5-22 16:19 | 显示全部楼层
智能家居的发展确实离当初的设想差了非常非常远,但也没有草台班子到你说的程度
回复

使用道具 举报

     
发表于 2024-5-22 16:52 来自手机 | 显示全部楼层
成本,效率,安全,这三者不可兼得。学习成本也是成本。

—— 来自 OnePlus PHB110, Android 14上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2024-5-22 17:29 来自手机 | 显示全部楼层
木谷高明 发表于 2024-5-22 15:30
空调没有数据回传是这样的。

华为的空调伴侣是智能插座+红外一体的,通过判断电流大小判断空调开没开。可 ...

小米空调伴侣就有的功能啊  
回复

使用道具 举报

     
发表于 2024-5-22 17:32 | 显示全部楼层
海尔是不是特小众?海尔智家的逻辑是可以添加开关机状态判断的,所以没有这个问题。
回复

使用道具 举报

     
发表于 2024-5-22 17:41 | 显示全部楼层
看标题以为寄存器里的数据位缺失了
回复

使用道具 举报

发表于 2024-5-22 17:42 | 显示全部楼层
认识一个哥们插了一个智能插座悬空不插东西通过这个插座的开关状态实现类似逻辑

不过现在的智能家居市场缺乏本地中枢这个概念,或者说现阶段的大众消费者认识不到这个东西的重要性,全走云端哪有那么复杂的逻辑给你配置

推广Matter这种本地交互标准配合宣传家庭智能中枢的产品概念才是智能家居的未来
回复

使用道具 举报

     
发表于 2024-5-22 20:02 | 显示全部楼层
寄存器不是这个意思.
回复

使用道具 举报

     
发表于 2024-5-22 20:08 | 显示全部楼层
还以为楼主是自己搞单片机弄自己的智能家居+1
就进来的问题,不上云搞私有部署解决问题+1
回复

使用道具 举报

     
发表于 2024-5-22 20:09 来自手机 | 显示全部楼层
想跟人正常讨论就不要自己发明新名词,不然看得人一头雾水。你想说的是家电参数保存吧,寄存器是专指硬件上的功能器件。

—— 来自 HUAWEI OCE-AN50, Android 12上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

     
发表于 2024-5-22 20:59 来自手机 | 显示全部楼层
借楼问问

智能家居,有比米家更好的么?

我曾经试图自己用单片机写一个(套),用传感器获取各种参数然后控制电器,但是使用中发现bug不少。

—— 来自 HUAWEI VOG-AL10, Android 10上的 S1Next-鹅版 v2.5.4
回复

使用道具 举报

发表于 2024-5-22 21:00 | 显示全部楼层
什么寄存器,不就是useState吗,太伟大了react
回复

使用道具 举报

     
发表于 2024-5-22 21:09 | 显示全部楼层
这种叫插件或者接口,复杂的逻辑本来就是留给用户自己定义的。

像楼主空调这种情况,遇到广东回南天结果没启动就不开,肯定被人打死。不同用户需求肯定千差万别,官方只能实现一点默认功能

实际上小米提供一个接口,接收开关两种信号,至于信号怎么输出是交给用户的
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|上海互联网违法和不良信息举报中心|网上有害信息举报专区|962110 反电信诈骗|举报电话 021-62035905|Stage1st ( 沪ICP备13020230号-1|沪公网安备 31010702007642号 )

GMT+8, 2024-6-17 07:08 , Processed in 0.222013 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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