之前在少数派看到利用IOS快捷指令+NFC标签实现“碰一碰”控制智能家居的文章:

 

 

这篇文章仅适用于IOS手机+HomeKit的组合。于是自己就在想,是否可以用更通用的解决方案来实现同样的效果,经过一番摸索和尝试,终于找到一个基本上只要是带NFC功能的智能手机都能支持的方案。

需要用到的工具

  1. 一台能装跑Homeassist的设备,可以是nas、软路由、XX派甚至旧手机都行。
  2. 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标签,一碰就能用(其实也是可以手机端直接控制万能遥控器的,但是我们操作起来没难度,父母年纪大了根本玩不明白)。