此文为
少数派首页/会员文章的原稿, 《如何实现低成本的自动化家务管理》|少数派会员 π+Prime,请遵守相应的 版权。
自动化家务管理 #
家务往往是被掰碎了揉进生活中的,在空间和时间上都是如此,在双重变量的影响下,时常要处理意外的杂乱。没有人会忘记吃完饭后清洗餐具,但对于中长期需要定期完成的家务来说,记忆变得不靠谱。诚然,可以每周/每月安排一个家务日集中完成,但我还是习惯随时/随手做一点,分散到日常的闲杂时间中去,不至于造成很大的心里负担。这就需要一个系统按时来“提醒”我,该做什么了,我希望它能:
- 免打扰提醒。我不需要像ToDo那样的强提醒,只需要有一个待办的清单静静地等待我查看;
- 容许推迟,动态调整日期。家务没有很强的时效性,应当容许我拖延或提前几天;下一次的执行日期应该依据本次的完成日期重新计算时效,而不是机械地“每周三提醒我干xxx事情”、“每隔10天提醒我干xxx事情”;
- 快捷完成。做一个电子表格,完成后手动记录?这也太傻了。我需要很多个按钮,固定在事务旁边,完成后按一下就可以自动记录。
经过几个月的实践,我理出了约30项定期家务,并设定了最佳的间隔时间。按钮?最先想到了小米的无线开关,但物料就要花费上千元,且到处突出这么个按钮似乎并不美观。最终方案,选用NFC标签,并用手机触发完成记录。数据管理?就用家庭服务器的“基础设施”吧,很容易就能攒出个可用的自动化流程。最终效果?手机碰一碰即可快捷查询、记录。

准备工具 #
先看看需要准备的工具,如下表,其中Glance和PVC不干胶图标为非必要项目,可按需配置。必备项目中:
- 使用Baserow来填写和管理自定义的家务项目,也可以使用飞书、nocodb、teable这些类似的工具替代;
- 使用n8n管理触发的流程,链接来自NFC和Baserow的数据,可以使用node-red等自动化流程工具替代,或完全摒弃该部分,直接在Tasker中处理逻辑;
- 移动端使用Tasker读取NFC数据、触发流程,显示交互信息,使用NFC Tools将文本信息预先写入NFC标签,iOS端请使用类似的工具进行配置;
- 平均每个NFC标签成本为0.5~0.7元。
| 工具 | 平台 | 用途 | 必备 | 价格/元 |
|---|---|---|---|---|
| Baserow | 服务端 | 数据填写、管理 | 是 | / |
| n8n | 服务端 | Webhook自动化流程 | 是 | / |
| Glance | 服务端 | 信息面板,提醒 | 否 | / |
| Tasker | 移动端(Android) | 移动端自动化/交互 | 是 | / |
| NFC Tools | 移动端(Android) | NFC标签写入 | 是 | / |
| NFC标签 | 物料 | NFC标签 | 是 | 0.5 |
| PVC不干胶图标 | 物料 | NFC标签 | 否 | 0.2 |
以下所有的配置文件、脚本、图标文件均包含在仓库 GitHub - osnsyc/chores-automation中。
准备物料 #
NFC标签我购买的型号为215,直径25mm。每个花费0.5元。这个标签是纯白外观,直接使用的话颜值不够,我在淘宝找了一家不干胶标签打印店,制作了一版防水PVC不干胶标签。A4大小,塞下了54个标签,老板负责模切,10元包邮,平均每个0.2元。


图标的设计。在
Flaticon上免费下载图标元素,图标的含义应当是不言自明的,并在每个图标的合适位置添加NFC图标,使用背景颜色做功能的快速区分,蓝色为完成家务的打卡标签。可编辑的图标请查阅仓库中的nfc_tags.pptx 文件


布置 #
NFC标签可以贴在家中常见的非金属表面(使用“防金属”NFC 标签,也可用于金属表面),为了美观,也可以贴在家电的侧面或者柜体面板的内侧、底部。对于贴在柜体内侧的标签,我们甚至可以直接贴在物体内部,穿透识别,实测可以直接穿透20mm的胶合板1。
贴在物体表面
贴在物体表面
贴在物体侧面
贴在面板内侧
服务端配置 #
Baserow #
用Baserow管理数据(其它多维表格也能胜任,以下操作也相似),在一个数据库中只需要两张表格:历史记录和主表。在历史记录表格中,将主字段改为“时间格式”。在主表表格中,必备字段为name(单行文本)、间隔天数(时长格式)、下次执行(公式),历史记录(链接至表历史记录),具体的设置参照下图。在主表表格中,我们再添加一个待办视图,用于筛选已经到期的家务项目。并且根据当前表格的浏览器地址,记录下表格id和视图id以备用。数据模板请查阅仓库中的data.md 文件。
表格-历史记录
我们还可以在历史记录表格中增加表单视图,供直接填写提交家务记录(极不频繁的事务)。
表格-主表
表格-主表-待办视图
n8n #
在n8n中,使用统一的Webhook作为流程的触发节点,通过GET请求传入的param进行分流。第一个参数type可以是chores、light、TV等,我们筛选出chores的请求,然后根据第二个参数id的值进行具体的操作。流程的配置请查阅仓库中的n8n.json 文件,在n8n的画布中直接粘贴即可使用:
n8n流程
chores的Shell节点用于获取Baserow中的数据(不用Code的节点直接操作是因为该节点的依赖缺失、不易调试),节点和代码请查阅仓库中的chores.py文件,传入id值即可:
# 目录结构
# /PATH/TO/PROJECT
# ├── config.json
# └── chores.py
cd /PATH/TO/PROJECT && python chores.py {{ $item("0").$node["Webhook"].json["query"]["id"] }}
准备好Baserow的配置参数config.json
{
"BASE_URL": "http://192.168.1.1:5678",
"BASEROW_API_TOKEN": "xxxxxxxxxxxxxxxx",
"HISTORY_TABLE": 123,
"MAIN_TABLE": 124,
"TODO_VIEW": 2345
}
测试。浏览器直接访问http://192.168.1.1:5678/webhook/nfctrigger?type=chores&id=0将显示待办家务信息,样式可以在chores-code节点中自定义。
移动端(交互)配置 #
Tasker 流程配置 #
- 探测到NFC,作为流程的触发;
- NFC的文本信息满足
type=xx&id=xx格式,则判定为家务自动化,其它则为自定义控制行为; - 发起HTTP GET请求,Endpoint为n8n的自定义webhook;
- 根据
Response Code分类,200为触发成功,显示完成界面,201为触发查询成功,显示待办家务,404为错误界面。

Tasker配置请查阅仓库中的nfc.prj.xml文件,注意,导入时需要在任务-设置界面指定%nfc_webhook即n8n的自定义webhook地址,如http://192.168.1.1:5678/webhook/nfctrigger,配置成功后,可以在任务配置界面长按http 弹出选中后,点击左下方的开始图标,直接预览完成流程时的样式。
NFC标签写入 #
我们按照type=chores&id=数字格式写入标签,数字Baserow中相应事项的行id,若数字为0,则为查询信号,将返回待办家务列表。我们借助NFC Tools这个APP来对NFC标签写入数据。
NFC Tools
提醒 #
我不需要像ToDo那样的强提醒,只要有一个地方免打扰式地显示即可。除了专门配置了一个标签供查看待办外,最近在使用Glance作为服务器的信息面板2,一小段配置代码就可以将家务提醒嵌入Glance了。调整Baserow中的待办视图,就可以同时显示已过期和未来1日内的待办家务了。代码片段请移步 glance-widgets/widgets/chores-from-baserow
Glance面板中的自定义组件
使用感受 #
出乎意料的是,把家务日程化并没有给我带来额外的负担,反而让我感到一种意想不到的轻松。琐碎的任务不再在脑海里反复提醒、时不时跳出来打扰我,而是被清晰地规划在某个未来的时刻——“到点了再做”,足够了。这种规划并不僵硬,它不是一份必须完成的 ToDo清单,而是一个温和的参考提示,允许我根据当天的状态去灵活调整。
在这个过程中,我不再有“总觉得还有什么没做”的模糊焦虑,而是能安心地告诉自己:现在不需要做任何家务,因为它们都已经被妥当地计划好了。这种缓解了不确定性的体验,比起强提醒更贴近生活节奏,也让我在面对日常杂事时多了一分从容。
-
最大可能达到40mm: Near-field communication - Wikipedia ↩︎
-
可以移步我的博客查看 Glance的相关主题 ↩︎