之前在少数派看到利用IOS快捷指令+NFC标签实现“碰一碰”控制智能家居的文章:
这篇文章仅适用于IOS手机+HomeKit的组合。于是自己就在想,是否可以用更通用的解决方案来实现同样的效果,经过一番摸索和尝试,终于找到一个基本上只要是带NFC功能的智能手机都能支持的方案。
需要用到的工具
- 一台能装跑Homeassist的设备,可以是nas、软路由、XX派甚至旧手机都行。
- NFC标签。
工作原理
Homeassist支持webhook触发自动化,只要创建好对应的自动化,触发条件选择webhook并设置一个webhook id 之后给安装Homeassist的设备发送post请求到http://【设备IP】:【端口号】/api/webhook/【webhook ID】就能触发自定义任务了。Homeassist只能接受post请求,而不支持get请求,所以只要再安装个nginx把post请求转化成get请求,就可以直接用浏览器访URL的形式触发webhook了(手机浏览器访问URL本身就是个get请求)。这样只需要在NFC标签中写入URL地址,手机触碰后访问对应URL就可以触发自动化,而现在支持NFC的智能手机,不可能浏览器都开不了吧。
原理图:

操作步骤
第一步:部署Homeassistant 并添加智能家居(这一步本文就不再赘述了)
第二步:安装、配置 nginx(但凡能装Homeassistant的设备装nginx都不成问题)
如果是debian、ubuntu 环境下,没特殊要求只需要一条命令就够了
sudo apt install nginx
然后找到nginx的配置文件,默认配置文件一般是 /etc/nginx/conf.d/default.conf
里面加入:
server {
listen 8080;
location / {
proxy_method POST;
proxy_pass http://10.0.0.1:8123;
}
}
然后让nginx重载配置
nginx -s reload
这样,所有访问装有nginx设备8080端口的get请求就会转换成post请求发送到http://10.0.0.1:8123 只要把自己安装homeassistant的设备IP对应改上去就行。
android平台上有个app叫做 ksweb ,自带了 nginx 等一系列建站工具。
第三步:配置自动化和nfc标签
范例:

请求地址:
http://[Home Assistant的ip地址]:[部署Home Assistant的端口号]/api/webhook/[webhook ID]
假设我安装Homeassistant和nginx的设备ip是192.168.1.1,端口号是8123,那么只需要发送post请求到http://192.168.1.1:8123/api/webhook/chuangtoudeng 或者浏览器访问http://192.168.1.1:8080/api/webhook/chuangtoudeng 就可以触发这个自动任务。

之后把这个url写到nfc标签即可。效果展示:

我这里只是读取nfc标签访问homeassistant的主页,如果是配置了webhook的地址就会直接触发自动化任务,浏览器看到的就是个空白页。
优缺点
优点:
通用性高,乎所有支持nfc的智能手机都支持,只要能接入homeassist的智能家居都能兼容。(其实NFC标签都能用打印、扫描二维码的方式替代,有摄像头就能用。。。。)
手机端无需任何配置,只要打开NFC就行。
缺点:
服务端部署比较麻烦,还要设一条一条设置自动化任务
使用的时候必须得解锁状态,NFC标签读取后还要手动点一下通知才触发,触发过后还会打开一次浏览器,看上去比较呆
总结
其实也没啥好总结了,就是突然想到的一个方案。
个人使用的场景其实是配合接入homeassistant的红外万能遥控器用的,有些家电要用到的功能非常单一,每次要用还要去找遥控器,用完遥控器不放好,下次有得找,有时候半年不用,到要用的时候发现里面电池都漏液。索性都配置到万能遥控器,然后配置好后端,机器上贴个NFC标签,一碰就能用(其实也是可以手机端直接控制万能遥控器的,但是我们操作起来没难度,父母年纪大了根本玩不明白)。