如何用手机控制空调 ——简单实用的智能家居教程 - 知乎

标签: | 发表时间:2019-01-04 12:45 | 作者:
出处:https://zhuanlan.zhihu.com

【首发少数派: 如何用手机控制空调 ——简单实用的智能家居教程


我家有三个单体空调,型号比较老,每次要在各自的控制面板上调节开关和温度,也没有定时控温功能。如果想实现远程操控(比如在手机上),最简单的方案就是 Nest Thermostat。然而抠门如我一看每个售价$169,三个要五百多美元,便萌生自己改装的念头。

可行吗?根据电路常识推测,空调各部分工作应该是由相应 IO(Input / Output)的高低电位触发,那么只要找到控制面板所连结的 IO,就可以取而代之。换个角度,即使空调结构是黑盒子,既然 Nest Thermostat 能用于大部分空调型号,这说明:1,空调的 API(操控界面)是高度统一的;2,只要能模拟 Nest 的行为,就可以实现从空调 API 到 Nest API 的转换;3,网上一定有许多通用的 DIY 开源项目。

在这个课题上,我花了一半时间找合适的开源项目。你需要综合评价:对方解决的问题是否和你一致,交互界面你是否喜欢,配件是否经济实惠,软硬件系统是否强健,是否有后续开放性,可否融合到更广的智能家居平台等等。由于是第一次改装家电,后两个因素暂时不考虑。因为我手头有多余的树莓派 Zero,在定制的 Linux 系统下可以轻松安装 Web App,通过 ssh 编程也极为简便,于是就以 thermostat + raspberry pi + web 为关键词搜索,最终选中了 这个方案:PyStat。

PyStat 的用户界面是一个网页:

用户界面非常直观:第一行显示室温和目标温度。第二行的三个圆圈表明相应部件是否工作。比如,在制热时,制热和风扇同时工作,所以第1、3个圆圈是亮的,中间代表制冷的不亮。第三行的三个方块是用户选择的工作模块,最多可选一个。注意无论选制冷还是制热,风扇始终是工作的。第四行是温度选择。选好模式和温度后点击 Submit Changes 即可传送指令。最下方是由 WeatherAPI 提供的天气预报。

因为是 Web App ,就可以在家里任何浏览器上操作,比如手机和 Tablet 上:

(打折时淘的 Fire Tablet 重获生机,可以嵌到墙里)

因为是内网页面,你只能在联入家里 Wifi 的设备上操控,即不能在回家路上事先打开空调——这是这个方案的缺点之一。我会在以后的系统智能家居方案中探索这个需求。

如果你喜欢这个界面,就可以下载 代码库,撸起袖子干了:

购买配件

树莓派 Zero W$10 + shipping

Micro SD 卡(至少8G) $8

4 Channel Relay$7

DS18B20温度探头$6

一个4.7k~10k欧姆的电阻

导线若干、Micro USB 充电线一根

总价:$31+。除了树莓派以外的配件在 AliExpress 上买便宜得多,只是要等2-3周。

此外,你可能还需要用于测试的 LED 灯若干、面包版、电焊工具、micro HDMI 线、micro USB hub、USB 鼠标键盘等辅助配件,以上都不算在耗材里。

预备树莓派

1,在树莓派上安装 Rasbian 系统, 参考这里。建议安装 这个带图形桌面的版本。

2,通过 Micro HDMI 连显示器,在图形界面里连上家里的 Wifi。

3,如果选择 ssh 联入,记得在 raspi-config 设置里 enable ssh。

4,下载代码: https://github.com/zhaozhichen/PyStat

设置温度探头

我先扯开一点,讲一下空调是怎么控制温度的。

纠正一个许多人都有的错误印象:(以制热为例)温度调得越高,空调功率越大,室温升温越快。事实上,对大部分普通空调,制热制冷功率是恒定的,和所调温度无关。比如室温是10度,制热目标温度设为20度,在制热过程中室温逐渐升高,当到达目标温度加容错值(比如2度),也就是22度时,空调停止工作。此后,室温逐渐回落,当落到目标温度减去容错值,也就是18度时,制热再次开启,如此往复保证室温在设定温度周围(18~22度)震荡。所以,设定温度高低只能决定最终稳定的室温,而不能改变初始升温的速度。

说这个原理,是因为我们要在程序里复现以上逻辑,也就是说除了控制制热/制冷/风扇的输出信号,我们还需要测量室温的输入信号。

温度是模拟量。不同于 Arduino,树莓派只支持数字输入,于是需要 DS18B20 这样的 1-Wire 设备将模拟信号转换为脉冲数字信号,然后解码为模拟量,保存在 /sys/bus/w1/devices 中。请参考 这个 教程,并将你的温度探头序列号复制到 这里。注意:我们用4号接口。

安装 Web App

我自己不会做网站,尤其不懂前端,对 LAMP 结构的 web server 敬而远之。直到发现基于 python 的 flask,三行代码写 Hello World,真是找到了救命稻草,一见钟情。Flask 的 web server 教程请 参考这里

这个系统的主代码是 ThermostatMain.py,初次运行时开启三个线程,分别是 :

  • ThermostatService
    • 从 current.set 读取指令(模式:制热/制冷/风扇,目标温度);
    • 通过温度探头读取室温;
    • 通过 GPIO 输出制热/制冷/风扇的开关。
  • ThermostatWeb
    • web server,通过温度探头读取室温显示在网页上;
    • (可选)从指定的天气信息服务商 API 读取所在地气候、天气预报等信息。推荐 Weather提供的 API;
    • 将用户在网页上做的指令保存于 current.set。
  • ThermostatScheduler
    • 定时开关,这个没有用户界面,我也没有用上。

然后循环运行以下任务:

  • 记录室温、指令、天气情况等信息,通过 sqlite3 保存到数据库中;
  • 检测各进程,及时报错。

运行主程序:

        $ Python3 ThermostatMain.py

然后在其他设备上访问:192.168.X.X:5000(填写树莓派的 IP 地址),应该可以看到用户界面。

这是 web app 的单元测试(unit test)。

树莓派电路

如果你没有在树莓派上用过 python 的 GPIO 库,可以参考 这个教程。我们用的树莓派的 GPIO 针脚排布在 这里,此外可以在 这里看到更详细的参数。我们用到了4个接口,除了用于前文提到的用于温度探头的4号口,其他三个输出口分别是:

  • 制热开关:17
  • 制冷开关:27
  • 风扇开关:22

除此之外,还需要用到3.3伏电位和地线(ground)。所以,焊接后的电路如下(温度探头的焊接方式在前文提到的 教程里):

(由于我用的是树莓派 Zero,不带 Wifi 功能,所以需要外接 USB Wifi 模块。如果你买的是我推荐的树莓派 Zero W,就可以忽略这个模块。)

在接空调之前,建议用 LED 灯模拟空调,检测制热/制冷/风扇在网页提供的指令下是否工作正常。比如,在17口和地线之间串联进一个 LED 灯加一个大于1k的电阻(防止 LED 灯电流过载而烧毁),如果空调应该处于制热模式,灯应该亮。

这是树莓派的单元测试。

注意:由于我们用到的 Relay 的开关和树莓派 GPIO 的输出是相反的,所以你在用 LED 灯测试时需要在 这里将输出指令掉转过来。)

空调电路

尽量获得空调的手册(至少是比较接近的型号),了解遥控模式的使用方式。比如,这个是和我家空调型号比较接近的控制板布局(摘自 手册):

注意 C、E、F 区。E 区中的 Remote 必须调至 ON,这意味着你将通过 C 区针脚操控空调,同时也意味着你放弃了控制面板的操作权。C 区的针脚布局如下:

每个空调的布局不尽相同,但一般都至少含有 R、G、W、Y、C 五个接口。含义如下:

  • R:24伏高电位
  • C:地线 Ground
  • G:风扇
  • W:制热
  • Y:制冷

当 W 和 R 相连,W 就获得了高电位,制热模式开启。风扇和制冷同理。

这种通用接口称为 Thermostats C Wire,可以参考 这篇介绍

在连入空调前,建议你先测试遥控模式下针脚是否工作正常。拿一根导线,将 R 和 G 连上,应该可以触发风扇工作。如果不行,将空调电源拔掉再接上试试。

这是空调遥控模块的单元测试。

注意,我们在树莓派上也连出五根线,分别对应以上五个接口。但是,树莓派的电位是3.3伏,而空调面板使用24伏,不能直接对接,需要用转换电压的 Relay,电路示意图如下(摘自 这里):

(空调地线不用接,因为它们最终连到同一个 Ground:地面——字面意思,非冷笑话。)

实物图(我用的是8通道 Relay,其实只用了其中三个通道):

最后,连入空调电路:

最后运行主程序,进行端到端成品测试(End to end test)。

祝你成功!

后续

1,设置静态IP:

        sudo vi /etc/dhcpcd.conf

加上(第二行自选IP):

        interface wlan0
static ip_address=192.168.X.X/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1


2,开机启动程序:

        sudo crontab -e

加上:

        @reboot sh /home/pi/PyStat/launch.sh >/home/pi/logs/cronlog 2>&1


3,我在做这个的过程中发现一个很棒的全栈方案,是下一个探索方向:

  • NodeMcu:客户端硬件;
  • MQTT:通讯协议;
  • Home Assistant:服务端控制平台。

相关 [手机 控制 空调] 推荐:

如何用手机控制空调 ——简单实用的智能家居教程 - 知乎

- -
如何用手机控制空调 ——简单实用的智能家居教程】. 我家有三个单体空调,型号比较老,每次要在各自的控制面板上调节开关和温度,也没有定时控温功能. 如果想实现远程操控(比如在手机上),最简单的方案就是. 然而抠门如我一看每个售价$169,三个要五百多美元,便萌生自己改装的念头. 根据电路常识推测,空调各部分工作应该是由相应 IO(Input / Output)的高低电位触发,那么只要找到控制面板所连结的 IO,就可以取而代之.

建立基于Arduino的空调控制系统 – 参考项目

- - CSDN博客推荐文章
建立基于Arduino的空调控制系统– 参考项目. 技术小战博客原创,其中引用内容如涉及侵权请原作者留言评论,确认后将立即予以删除. 人们在生活常常会在回家前希望家里的设备可以提前打开或者准备好某些功能,例如打开空调. 而实际上,空调遥控器通常都是手动控制,最多提供定时功能. 要实现稍微复杂一点的都不容易,比如一次设定就实现定时开机后再定时关机.

Android手机远程控制电脑

- - Wing的风言风语
人类总是有一股很强的控制欲,就像三体里面很多人抢着当执剑人一样,尽管执剑人的生活估计在地狱都很难找到. 用电脑控制另一台电脑显然已经不能满足我们了,于是就想到了用手机远程控制电脑,这里介绍两款免费的Android手机的软件. 官方网址: http://www.teamviewer.com/zhCN/index.aspx.

XBMC Romote:用 Android 手机控制 XBMC 媒体播放

- 亚 强 - Wow! Ubuntu
现在 XBMC 开发组已经发布了 10.1 的发布版了,但是这个不是今天在这里介绍的重点,XBMC Remote 才是今天介绍的重点,这个是一款开源的Android应用程序. 专门用来远程控制你的XBMC,同时也支持浏览你的 XBMC 媒体库的功能,作用就是把你的 Android 手机作为一个高端的 XBMC 遥控器.

向日葵手机远程控制Android版

- nikelius - cnBeta全文版
给大家隆重介绍下向日葵的手机版,这是通过某支付公司组织的开发者沙龙上找向日葵的产品经理拿到的向日葵Andriod手机内部版,用了一下很易上手,而且跟现在流行的多点触摸屏做到了流畅的融合. 下载地址: http://u.115.com/file/aqzs2jq8. 要控制远程主机只装这个东东可不行,先到向日葵官网上下载向日葵被控端程序,安装到要控制的主机上.

诺基亚透露通过弯曲控制的手机

- Woooon - Solidot
诺基亚演示了一款通过双手弯曲控制的智能手机概念原型Nokia Kinetic. 它可以通过双手握住手机两端向内或向外弯曲,从而实现滚动、缩放或选择等各种操作. 这种新的交互方式可能更适合游戏等应用. 诺基亚声称它可以整合到绝大多数操作系统中.

使用 viewport meta 标签在手机浏览器上控制布局

- - 我爱水煮鱼
手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口”(viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网页的不同部分. 移动版的 Safari 浏览器最新引进了 viewport 这个 meta tag,让网页开发者来控制 viewport 的大小和缩放,其他手机浏览器也基本支持.

揭秘:独特的技术手段,远程控制你的手机

- - 极客范 - GeekFan.net
我们最近在分析恶意样本时候发现了两类独特的技术手段,一种利用轻量级web服务器jetty来窃取用户隐私,另一种使用Androidpn推送指令来远程控制. 一、更独特隐蔽的隐私窃取—web服务器. 这类木马利用轻量级web服务器jetty将目标手机变成服务器后,通过url请求获取手机上的任意资源,造成用户隐私泄露.

安卓曝大漏洞:一条彩信可控制手机,影响95%设备

- - FreeBuf.COM | 关注黑客与极客
以色列移动信息安全公司 Zimperium 研究人员 Joshua Drake 在 Android 系统中发现了多处安全漏洞,Android 2.2到5.1的所有版本上均存在此漏洞,预计会有95%的Android设备受到影响. 只需简单的一条彩信,黑客就可能完全控制用户手机. 漏洞发现于原生的 Android 的 Stagefight 媒体库上,堪称移动世界的“心脏滴血”.

使用HTML5技术控制电脑或手机上的摄像头

- - WebHek
移动设备和桌面电脑上的客户端API起初并不是同步的. 最初总是移动设备上先拥有某些功能和相应的API,但慢慢的,这些API会出现在桌面电脑上. 其中一个应用接口技术就是 getUserMedia API,它能让应用开发者访问用户的摄像头或内置相机. 下面就让我展示一下如何通过浏览器来访问你的摄像头,并提取截屏图形.