百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

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

xsobi 2024-12-23 14:20 2 浏览

本内容来源于@什么值得买APP,观点仅代表作者本人 |作者:iN在



之前和大家说过,在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来控制智能家居”。十几分钟就可以写好的程序其实要比现在所谓的智能家居平台要靠谱的多,也要灵活的多。毕竟当一个智能家居的接口被暴露出来,作为会写程序的人能做的事情只能用为所欲为来形容了。



相关推荐

好用的云函数!后端低代码接口开发,零基础编写API接口

前言在开发项目过程中,经常需要用到API接口,实现对数据库的CURD等操作。不管你是专业的PHP开发工程师,还是客户端开发工程师,或者是不懂编程但懂得数据库SQL查询,又或者是完全不太懂技术的人,通过...

快速上手:Windows 平台上 cURL 命令的使用方法

在工作流程中,为了快速验证API接口有效性,团队成员经常转向直接执行cURL命令的方法。这种做法不仅节省时间,而且促进了团队效率的提升。对于使用Windows系统的用户来说,这里有一套详细...

使用 Golang net/http 包:基础入门与实战

简介Go的net/http包是构建HTTP服务的核心库,功能强大且易于使用。它提供了基本的HTTP客户端和服务端支持,可以快速构建RESTAPI、Web应用等服务。本文将介绍ne...

#小白接口# 使用云函数,人人都能编写和发布自己的API接口

你只需编写简单的云函数,就可以实现自己的业务逻辑,发布后就可以生成自己的接口给客户端调用。果创云支持对云函数进行在线接口编程,进入开放平台我的接口-在线接口编程,设计一个新接口,设计和配置好接口参...

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

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:iN在之前和大家说过,在iN的家里是没有墙面开关的。...

window使用curl命令的注意事项 curl命令用法

cmd-使用curl命令的注意点前言最近在cmd中使用curl命令来测试restapi,发现有不少问题,这里记录一下。在cmd中使用curl命令的注意事项json不能由单引号包括起来json...

Linux 系统curl命令使用详解 linuxctrl

curl是一个强大的命令行工具,用于在Linux系统中进行数据传输。它支持多种协议,包括HTTP、HTTPS、FTP等,用于下载或上传数据,执行Web请求等。curl命令的常见用法和解...

Tornado 入门:初学者指南 tornados

Tornado是一个功能强大的PythonWeb框架和异步网络库。它最初是为了处理实时Web服务中的数千个同时连接而开发的。它独特的Web服务器和框架功能组合使其成为开发高性能Web...

PHP Curl的简单使用 php curl formdata

本文写给刚入PHP坑不久的新手们,作为工具文档,方便用时查阅。CURL是一个非常强大的开源库,它支持很多种协议,例如,HTTP、HTTPS、FTP、TELENT等。日常开发中,我们经常会需要用到cur...

Rust 服务器、服务和应用程序:7 Rust 中的服务器端 Web 应用简介

本章涵盖使用Actix提供静态网页...

我给 Apache 顶级项目提了个 Bug apache顶级项目有哪些

这篇文章记录了给Apache顶级项目-分库分表中间件ShardingSphere提交Bug的历程。说实话,这是一次比较曲折的Bug跟踪之旅。10月28日,我们在GitHub上提...

linux文件下载、服务器交互(curl)

基础环境curl命令描述...

curl简单使用 curl sh

1.curl--help#查看关键字2.curl-A“(添加user-agent<name>SendUser-Agent<name>toserver)”...

常用linux命令:curl 常用linux命令大全

//获取网页内容//不加任何选项使用curl时,默认会发送GET请求来获取内容到标准输出$curlhttp://www.baidu.com//输出<!DOCTYPEh...

三十七,Web渗透提高班之hack the box在线靶场注册及入门知识

一.注册hacktheboxHackTheBox是一个在线平台,允许测试您的渗透技能和代码,并与其他类似兴趣的成员交流想法和方法。它包含一些不断更新的挑战,并且模拟真实场景,其风格更倾向于CT...