极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

2024-07-08 13:21:36 25点赞 117收藏 26评论

之前和大家说过,在iN的家里是没有墙面开关的。

原因就是都到了二十一世纪二十年代,开关这种古老的事物已经完全没有必要出现在现代的家居生活中。

话不能说的太绝对,家里还有一个实体开关,也就是这个:

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

丢在卫生间的洗手台上,主要的功能其实就是利用了快速开关的切换功能来调节卫生间镜前灯的色温,在出门化妆的时候方便一些,但这个开关除此之外也就别无他用了。

下面进入吐槽阶段:

所有设计智能家居的人脑子里面都有小农意识。如果一个智能家居系统的满分是100分,那么现在的各家智能家居品牌/平台的体验分最多也就是20分。各个品牌和厂商都守着自己的一亩三分地,虽然口口声声的喊着拥抱开放,但革命的依然不彻底。

说个场景,大家就可以理解到这一个现象了。

iN的起居室会兼顾影音室和娱乐房。依靠一个投影机投射到屏幕上播放所有的视频内容。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

如果使用过投影机的人都会有一个感受——环境亮度决定了画面的品质,因此在播放投影的过程中是要将灯光的亮度调低,并且拉上所有的窗帘的。这一点在智能设备的控制上我们可以做到——就是关个灯拉个窗帘嘛……

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

然而iN在这里就遇到了问题,由于灯光的控制是依靠传感器来实现的,因此即便是进入了“影院模式”,当有人在房间里走动的时候传感器会控制灯光,在一瞬间将室内的灯光调亮,这样一来要么你得忍受在观影的过程中时不时的来一下灯火辉煌,要不然你就得在观影的过程中一动不动。除非在进入观影模式的时候,我们将传感器关闭掉——是不是这个思路?但是不行!

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

究其原因就是Homekit对传感器的支持只有接受事件,但并不具备传感器的控制功能。

而HUE的传感器开关控制实际上只能在hue自己的应用中进行设定。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

这其实就是之前说的智能厂商的“圈地”行为,并不会对外开放所有的接口导致如果只依靠智能家居的应用设置很难将智能家居系统的联动功能充分打通。

这时候就有聪明人得说了——你可以用HA或者HB来做一个中间体,让HA来处理传感器的工作状态。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

依然很遗憾的是在第三方的智能家居平台上,对于一个传感器设备的启用和禁用仅仅局限于这个平台对传感器的可见性,传感器并不会真的被关闭,而是平台不会响应传感器的事件而已,这种“不响应”就是自欺欺人了。

怎么搞?——答案是我们可以设计一个传感器开关,让homekit控制这个开关,让开关控制传感器。和之前的观点是不是不同,有点精神分裂的嫌疑,且往下看:

事情分两步走,第一步我们先在Homekit网络中实现一个开关:

python有一个库叫做“pyhap”,写代码就超级无敌的简单了。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

通过这一小段代码,我们就可以在家里的网络中生成一个Homekit可以查找到的开关。

在apple的Home应用中,我们可以通过添加配件来做下面的操作了:

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

首先选择刚刚我们生成的开关,这时候Home会提示这是一个未经认证的配件,无所谓,选择——“仍然添加”

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

输入配对码,这个配对码在python的运行命令行界面中会有显示。

然后设置一下开关的位置

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

设置完毕之后,我们就会在apple的控制界面上看到这只虚拟的开关:

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

我们可以在apple的home中点按几下这枚开关,这时候程序就捕获到了开关的状态变化信息。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

第一步,我们就完成了,现在要做第二步——控制HUE的传感器。

飞利浦比较厚道的一点就是不断的升级自己网桥的应用接口。而且这个应用接口是对用户开放的。

当你按下hue网桥的中间按钮的时候(图中箭头所示)

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

hue网桥会进入注册模式。这时候在命令行中输入 curl -X POST -d '{"devicetype":"my_hue_app#python"}' http://【网桥IP】/api
你就可以在网桥上注册一个开发者key。这个key会以username的形式进行返回,例如:

[{"success":{"username":"RKKCCuo9lGO019eoskdHFWT9THL7qcMxU2qniVPfAhmQ"}}]

返回的key就是你来控制hue设备的关键了。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

通过代码我们可以列出hue网桥上所接的所有传感器信息,我们就可以得知起居室的传感器ID为4(当然了不想写死代码的时候我们也可以利用其他方式来获取这个ID)

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

知道ID后事情就相当简单了。在前面做的虚拟开关被按下的时候,发送指令让传感器关闭,在虚拟开关被关闭后,发送指令让传感器恢复。

所以,我们要改写前面虚拟开关的代码:

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

把控制指令写进去就可以了。这时候我们再运行程序的时候,传感器的开关状态就受到程序控制了。

在homekit的场景中设置进入这个场景,开关打开就可以了。

极度精神分裂:我家没有墙面开关,但我虚拟出来了一系列开关

关于这个开关持久化的问题,实际上到/etc/systemd中,写成一个脚本service就可以在家庭网络中一直运行着这个虚拟开关。

写在后面:为什么不用HA或者HB反而要写段程序呢?一直在说的一个概念就是“只有傻子才用HA或者HB来控制智能家居”。十几分钟就可以写好的程序其实要比现在所谓的智能家居平台要靠谱的多,也要灵活的多。毕竟当一个智能家居的接口被暴露出来,作为会写程序的人能做的事情只能用为所欲为来形容了。

展开 收起
26评论

  • 精彩
  • 最新
  • 太干了,我用米家,如果要实现这种模式,应该是开电影模式的时候把这个传感器的场景禁用就可以了。然后在幕布收回或者投影仪关闭时再把传感器的场景启用。

    校验提示文案

    提交
    我也是,感觉他这个好复杂

    校验提示文案

    提交
    把传感器场景,除光照或人体之外,加一个“与”条件不就行了?比如“投影关着”。这样就能在投影开着时闭锁传感器场景

    校验提示文案

    提交
    收起所有回复
  • 少有的有内容的作者 [献黄瓜]

    校验提示文案

    提交
    啊?啥意思 就这也算有内容?

    校验提示文案

    提交
    因为大妈上面很多都是ai文,理解一下

    校验提示文案

    提交
    收起所有回复
  • 找一个常闭继电器,装在沙发屁股底下,一坐下去就切断传感器,多简单的事

    校验提示文案

    提交
    你这个菊控开关多搁的慌啊

    校验提示文案

    提交
    收起所有回复
  • 有没有一种可能性,有很多东西,装个开关会更方便……

    校验提示文案

    提交
    不会的,再一个程序中是可以定义足够多的逻辑开关的

    校验提示文案

    提交
    断网的时候不得废了嘛 [喜极而泣]

    校验提示文案

    提交
    还有3条回复
    收起所有回复
  • HA加个投影状态条件不就好了么…

    校验提示文案

    提交
    HA并不是万能的

    校验提示文案

    提交
    收起所有回复
  • 首先兄弟辛苦了,主要看不懂

    校验提示文案

    提交
  • 划拉完了,不明觉厉,点赞!

    校验提示文案

    提交
  • 想搞,就是看不懂

    校验提示文案

    提交
  • 寄存器

    校验提示文案

    提交
  • 所以几个东东的开发手册在哪,我要学

    校验提示文案

    提交
  • 没什么卵用瞎折腾

    校验提示文案

    提交
  • 我总认为物理开关给人一种踏实的感觉。

    校验提示文案

    提交
  • 这玩意只适合单身人士

    校验提示文案

    提交
  • 学习了 这个太硬核了

    校验提示文案

    提交

    iN在

    作者

    whzr

    其实很简单的

    校验提示文案

    提交
    收起所有回复
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
117
扫一下,分享更方便,购买更轻松