低成本的自动化家务管理

低成本的自动化家务管理

此文为少数派首页/会员文章的原稿, 《如何实现低成本的自动化家务管理》|少数派会员 π+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可以是choreslightTV等,我们筛选出chores的请求,然后根据第二个参数id的值进行具体的操作。流程的配置请查阅仓库中的n8n.json 文件,在n8n的画布中直接粘贴即可使用:

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 NFC Tools

提醒 #

我不需要像ToDo那样的强提醒,只要有一个地方免打扰式地显示即可。除了专门配置了一个标签供查看待办外,最近在使用Glance作为服务器的信息面板2,一小段配置代码就可以将家务提醒嵌入Glance了。调整Baserow中的待办视图,就可以同时显示已过期和未来1日内的待办家务了。代码片段请移步 glance-widgets/widgets/chores-from-baserow

Glance面板中的自定义组件 Glance面板中的自定义组件

使用感受 #

出乎意料的是,把家务日程化并没有给我带来额外的负担,反而让我感到一种意想不到的轻松。琐碎的任务不再在脑海里反复提醒、时不时跳出来打扰我,而是被清晰地规划在某个未来的时刻——“到点了再做”,足够了。这种规划并不僵硬,它不是一份必须完成的 ToDo清单,而是一个温和的参考提示,允许我根据当天的状态去灵活调整。

在这个过程中,我不再有“总觉得还有什么没做”的模糊焦虑,而是能安心地告诉自己:现在不需要做任何家务,因为它们都已经被妥当地计划好了。这种缓解了不确定性的体验,比起强提醒更贴近生活节奏,也让我在面对日常杂事时多了一分从容。


  1. 最大可能达到40mm: Near-field communication - Wikipedia  ↩︎

  2. 可以移步我的博客查看 Glance的相关主题  ↩︎

前一篇 故乡风 慢记 Vol... 随机阅读 hugo博客装修小记... 后一篇