
1. 项目概述从“养生”到“守护”一个打工人的自救实验“保温杯里泡枸杞”早就成了我们这代打工人的自嘲标签但说实话真到了项目上线前连轴转、或者被deadline追着跑的时候别说枸杞了连水都顾不上喝几口。颈椎报警、眼睛干涩、腰背僵硬这些“办公室职业病”就像温水煮青蛙等你意识到严重性时往往已经积重难返。我一直想有没有一种办法能把那些零散的、总被我们忽略的健康提醒用一种更智能、更无感甚至有点趣味的方式整合起来主动来“管管”我们直到我遇到了QClaw。它不是一个现成的健康App而是一个强大的、可视化的自动化流程搭建工具。你可以把它理解成一个乐高积木平台通过拖拽各种功能模块比如读取时间、读取手机通知、控制智能设备、发送网络请求等就能组合出满足你个性化需求的自动化流程。我的想法很简单用QClaw打造一个专属于我自己的、24小时在线的“养生龙虾”健康守护助手。为什么叫“龙虾”因为它就像一只不知疲倦的“小钳子”在我即将“越界”时轻轻地钳我一下提醒我该休息、该喝水、该活动了。这个项目本质上是一次用自动化工具对抗不健康工作习惯的“数字自救”。这个“养生龙虾”助手目标用户非常明确就是像我一样长期伏案、与电脑手机为伴的广大打工人、学生和自由职业者。它不追求复杂的医学监测而是聚焦于行为干预与习惯养成。通过一系列精心设计的自动化规则它能在后台默默工作在你沉浸于代码、文档或会议时适时地打断你的不良状态引导你进行微小的健康行动。接下来我将完整拆解我是如何从零开始用QClaw搭建起这个贴身健康管家的全过程包括设计思路、核心流程搭建、用到的关键模块以及那些踩过坑才得来的实操经验。2. 核心设计思路构建主动式、场景化的健康干预流在动手搭建之前明确设计原则至关重要。我不想要一个只会定时弹窗的“闹钟式”提醒工具那太容易被无视或关闭。我希望我的“养生龙虾”是**智能的、场景化的、且具备一定“强制力”**的。2.1 从“被动提醒”到“主动干预”的思维转变传统健康App大多是“被动”的你设置一个每50分钟休息一次的闹钟。但问题在于当你正在深度思考或进行重要线上会议时这个闹钟的出现就是一种干扰你大概率会立刻关掉它所谓的休息也就不了了之。我的设计思路是让干预变得“主动”且“合理”。核心逻辑基于两个判断状态判断系统需要知道我当前是否处于“可被中断”的状态。例如如果我的电脑正在全屏播放视频可能是在开会或看教程那么此时弹出休息提醒就不合适。累积风险判断健康风险往往是累积的。连续工作2小时和连续工作30分钟所需的干预强度应该不同。因此“养生龙虾”的干预是分级的轻度提醒工作时间不长采用温和的通知如一条系统通知或改变某个智能灯的颜色。中度干预连续工作时间过长采用更强制的打断如自动暂停音乐、调暗屏幕。深度干预检测到极度不健康的状态如深夜仍在使用电脑触发家庭智能设备联动如让智能插座断开路由器电源几分钟强制断网休息。2.2 核心场景与流程规划我主要规划了四个核心的健康守护场景它们共同构成了“养生龙虾”的骨架“20-20-20”护眼卫士每近距离用眼20分钟提醒我向20英尺约6米外远眺至少20秒。难点在于如何精准判断“近距离用眼”状态。“水灵灵”饮水督促官根据我的日常活动如长时间敲键盘、开会发言在合适的时间提醒我喝水并尝试记录粗略的饮水量。“脊椎拯救者”久坐终结者监测我连续坐在电脑前的时间定时提醒我起身活动并设计一些简单的微运动指导。“数字安眠”睡前护航员在预设的睡眠时间前逐步营造睡眠环境如自动降低屏幕色温、关闭非必要应用、播放白噪音等。所有这些场景的自动化流程都将通过QClaw进行串联和实现。QClaw的优势在于它能打通操作系统、各种应用和IoT设备形成一个闭环的干预系统。3. 工具与基础环境准备工欲善其事必先利其器。在开始搭建QClaw流程前需要准备好相应的软件和环境。3.1 QClaw的核心概念与安装QClaw目前主要支持Windows和macOS。它的核心是“流程”Flow每个流程由多个“节点”Node通过“连线”Wire连接而成。每个节点代表一个具体操作或判断例如“触发条件”、“读取文件”、“发送HTTP请求”、“弹出通知”等。注意QClaw的节点功能依赖其“节点库”。许多高级功能如读取特定传感器数据、控制特定品牌的智能家居需要安装对应的节点模块。社区提供了丰富的第三方节点这是其功能强大的源泉。安装完成后首次打开QClaw你会看到一个流编辑器和左侧的节点面板。我们的所有工作都将在这个可视化编辑器中完成。3.2 外围设备与软件生态准备为了让“养生龙虾”更有力我引入了一些外围设备和服务它们将通过QClaw进行联动智能家居平台如米家、Home Assistant用于控制灯光、插座等。QClaw可以通过HTTP请求或专门的节点如node-red-contrib-home-assistant-websocket与这些平台通信。系统工具需要用到一些能获取系统状态的工具或命令行指令。例如在Windows上可以用Get-Process命令来检测特定应用是否全屏。通知服务除了系统通知我还集成了Pushover和Telegram Bot用于向手机发送更醒目的提醒确保在电脑通知被忽略时手机能接力提醒。简单的本地数据库可选为了记录饮水次数、久坐时长等数据我使用了一个轻量级的SQLite数据库。QClaw可以通过node-red-node-sqlite节点对其进行读写。4. 核心流程搭建与节点详解这是整个项目的核心部分。我将以“久坐终结者”和“数字安眠”两个场景为例详细拆解流程搭建过程。4.1 场景一“脊椎拯救者”久坐终结者流程搭建这个流程的目标是监测用户持续使用电脑的时间每45分钟提醒一次活动若用户忽略提醒且持续工作超过2小时则触发强制干预。流程逻辑图文字描述开始 - [定时触发器每5分钟运行一次] - [判断电脑是否处于活跃状态] - 否 - 结束 - 是 - [计算本次活跃时长] - [判断时长是否≥45分钟且120分钟] - 是 - [动作发送轻度提醒系统通知] - [判断时长是否≥120分钟] - 是 - [动作发送中度干预暂停音乐强提醒]关键节点配置与原理inject节点定时触发器作用作为流程的起点定期例如每5分钟触发一次检查。配置设置重复间隔为“5 minutes”。msg.payload可以留空或携带一个时间戳。exec节点执行系统命令作用执行命令行获取系统空闲时间。在Linux/macOS上可以用xprintidle需安装或通过读取/proc/uptime等方式计算。在Windows上可以使用PowerShell命令。Windows示例命令powershell -Command (Get-Host).UI.RawUI.WindowTitle ; Add-Type -AssemblyName System.Windows.Forms; [System.Windows.Forms.Cursor]::Position注这是一个变通方法通过获取鼠标位置来间接判断更精确的方法可能需要调用Windows API或使用第三方工具这里为简化使用此方法。实际部署时我使用了社区一个读取系统空闲时间的节点。关键技巧将命令输出传递给下一个节点并解析出空闲时间毫秒。如果空闲时间小于一个阈值如30秒则认为用户正在活跃使用电脑。function节点JavaScript函数处理这是QClaw的大脑。在这里编写逻辑代码。代码示例简化逻辑// 假设上一个节点传来的msg.payload是空闲时间毫秒 let idleTime msg.payload; const ACTIVE_THRESHOLD 30000; // 30秒 let isActive idleTime ACTIVE_THRESHOLD; // 使用context对象在流程内持久化存储变量 if (!context.global.lastActiveTime) { context.global.lastActiveTime Date.now(); } if (!context.global.continuousActiveStart) { context.global.continuousActiveStart null; } if (isActive) { // 用户当前活跃 if (context.global.continuousActiveStart null) { // 开始一个新的持续活跃时段 context.global.continuousActiveStart Date.now(); } // 计算持续活跃了多久 let continuousDuration Date.now() - context.global.continuousActiveStart; msg.continuousDuration continuousDuration; // 传递给后续节点 msg.needReminder false; msg.needForceBreak false; if (continuousDuration 45 * 60 * 1000 continuousDuration 120 * 60 * 1000) { msg.needReminder true; // 需要轻度提醒 } else if (continuousDuration 120 * 60 * 1000) { msg.needForceBreak true; // 需要强制干预 } } else { // 用户不活跃重置持续计时 context.global.continuousActiveStart null; msg.needReminder false; msg.needForceBreak false; } context.global.lastActiveTime Date.now(); return msg;要点解析context对象用于在流程的不同执行周期之间保存状态如continuousActiveStart。这是实现“持续时长”计算的关键。switch节点路由判断作用根据function节点设置的msg.needReminder和msg.needForceBreak属性将消息路由到不同的分支进行处理。配置设置多个规则例如检查msg.needReminder true和msg.needForceBreak true。动作节点执行干预轻度提醒分支连接一个notify节点系统通知或http request节点调用Pushover API发送手机通知。通知内容可以随机从一组鼓励性的语句中选取增加新鲜感。强制干预分支连接一个exec节点执行命令暂停系统音频播放例如在Windows上使用nircmd.exe mediapause。连接一个http request节点向智能家居平台发送请求将桌面智能灯的颜色变为闪烁的红色警告色。连接一个notify节点弹出无法轻易忽略的全屏提示需依赖第三方节点或脚本。4.2 场景二“数字安眠”睡前护航员流程搭建这个流程在晚上10:30自动启动旨在用30分钟时间帮助我脱离工作状态进入睡眠准备。流程逻辑开始 - [定时触发器每天22:30] - [并行执行多条动作链] 链1: [动作降低屏幕亮度与色温软件或硬件控制] 链2: [动作检查并关闭指定工作应用如IDE、设计软件] 链3: [动作启动白噪音播放器调用本地播放器或在线服务] 链4: [动作设置智能夜灯模式] 链5: [延迟25分钟] - [动作再次检查并强制关闭剩余高亮度应用] 链6: [延迟30分钟] - [动作执行锁屏或睡眠检测预备]关键节点与技巧time节点设置为“在指定时间”配置22:30重复周期为“每天”。这是流程的发起者。split节点将单一的msg复制成多份发送到后续并行的多条动作链实现同时执行多个任务。控制屏幕与应用屏幕色温使用exec节点调用开源工具f.lux或Redshift的命令行接口或直接调用Windows的“夜间模式”设置API。关闭应用使用exec节点执行taskkill命令Windows或pkill命令macOS/Linux。为了避免误杀重要进程可以在function节点里维护一个“允许列表”和“强制关闭列表”。// function节点内生成关闭命令 let appsToKill [‘notepad.exe‘, ‘figma.exe‘]; // 示例 msg.payload taskkill /F /IM ${appsToKill.join(‘ /IM ‘)}; return msg;重要警告强制关闭应用/F参数可能导致未保存的数据丢失。务必谨慎设置列表或先尝试发送关闭信号/IM不带/F在后续流程中再处理无响应的应用。智能家居联动通过http request节点向Home Assistant的REST API发送一个POST请求调用light.turn_on服务并将参数设置为低亮度、暖色调例如{entity_id: light.bedroom_lamp, brightness_pct: 10, color_temp: 300}。delay节点用于实现“分阶段”干预。例如在流程开始25分钟后再执行一轮更严格的应用清理。这模拟了渐进式的放松过程。5. 数据记录、可视化与个性化增强一个只能提醒的助手是单薄的。为了让“养生龙虾”更有“养成系”的感觉我为其增加了简单的数据记录和反馈功能。5.1 利用SQLite记录健康数据我创建了一个简单的SQLite数据库health.db包含两张表drink_log记录每次喝水提醒的响应时间timestamp。break_log记录每次久坐提醒的响应时间及类型timestamp,type如‘reminder‘或‘forced‘。在“饮水督促官”流程中当我点击手机通知上的“已喝水”按钮通过Pushover的回调功能或Telegram Bot的键盘回调会触发另一个QClaw流程向一个特定的HTTP端点发送请求。该端点对应的流程会执行一个sqlite节点将当前时间插入drink_log表。5.2 使用Dashboard节点进行可视化QClaw有一个非常强大的官方节点集node-red-dashboard。安装后你可以轻松创建Web可视化界面。我创建了一个简单的面板包含以下部件今日喝水次数一个chart部件通过查询drink_log表统计今日数据并显示。久坐中断统计一个gauge仪表盘部件显示今日已执行的“有效休息”次数。手动触发按钮放置了几个button部件可以手动触发“立即休息5分钟”、“播放白噪音”等操作增加了交互的灵活性。这个面板部署在本地网络的某个端口如1880/ui我将其添加到了浏览器书签随时可以打开查看“养生龙虾”的工作成果获得正反馈。5.3 个性化技巧让提醒更“聪明”随机化提醒文案在function节点中维护一个数组里面存放各种有趣的提醒语每次随机选取一条发送避免枯燥。const reminders [ “龙王喊你喝水啦咕咚咕咚~“, “检测到您的颈椎正在发出抗议请速速抬头看天花板“, “起来走走吧不然椅子要和您长在一起啦“, “眼睛我累了。大脑不你没有。系统听眼睛的“ ]; msg.payload reminders[Math.floor(Math.random() * reminders.length)]; return msg;基于日历的免打扰集成日历API如Google Calendar在流程开始的function节点中先检查未来半小时是否有标记为“会议”或“勿扰”的日历事件。如果有则跳过本次提醒或降低干预强度。学习模式进阶通过记录用户对提醒的响应延迟或忽略次数动态调整提醒的阈值和强度。例如如果用户连续三次立即响应了45分钟的提醒那么可以将下一次提醒的阈值延长到50分钟。这需要更复杂的状态管理和算法但QClaw的function节点和context完全能够实现。6. 部署、调试与日常维护心得将设计好的流程真正稳定运行起来并融入日常生活这一步至关重要。6.1 流程的部署与自启动QClaw流程编辑好后点击右上角的“部署”按钮即可让流程生效。但要实现开机自启和后台稳定运行还需要一些设置Windows可以将QClaw安装为Windows服务。使用工具如nssmNon-Sucking Service Manager可以很方便地实现。命令大致如下nssm install QClaw “C:\Program Files\nodejs\node.exe“ “C:\Users\YourName\.qclaw\qclaw.js“ nssm set QClaw AppDirectory “C:\Users\YourName\.qclaw“然后到“服务”管理界面将QClaw服务设置为“自动”启动。macOS/Linux可以创建systemd服务单元文件或使用launchd将QClaw作为守护进程运行。6.2 调试与排错实录在搭建过程中我遇到了几个典型问题流程不触发或触发异常检查点首先检查inject或time触发节点的配置是否正确时区、重复间隔。在QClaw编辑器中每个节点下方有一个小蓝点部署后如果节点被激活蓝点会闪烁这是最直观的调试手段。使用debug节点这是QClaw最强大的调试工具。在任何你想查看msg对象内容的地方连接一个debug节点部署后右侧的调试面板会输出该消息的完整内容包括payload和所有自定义属性。外部命令执行失败权限问题确保QClaw进程有权限执行相应的命令或访问相关文件。在Windows上以管理员身份运行QClaw可能能解决部分问题但这不是最佳实践。更好的方法是调整命令本身或目标资源的权限。路径问题在exec节点中使用绝对路径指向脚本或可执行文件避免使用相对路径。特别是调用第三方命令行工具时。智能家居联动失败网络与API首先在浏览器或curl中测试你的HTTP请求URL和参数是否正确。检查API密钥、实体ID是否正确。QClaw的http request节点配置确保“方法”GET/POST/PUT、URL、Headers如Authorization: Bearer token和msg.payload请求体的格式完全符合目标API的要求。使用调试节点查看最终发出的请求信息。流程逻辑错误状态管理混乱这是最复杂的一类错误。确保你清楚地知道每个变量尤其是存储在context中的在流程的哪个环节被读取、修改和重置。在关键的function节点前后添加debug节点输出context的状态是理清逻辑的好方法。6.3 日常使用与优化建议循序渐进不要试图一开始就搭建一个完美、复杂的大系统。先从一个小场景开始比如“饮水提醒”让它稳定运行几天再逐步添加新功能。保持简洁流程越复杂出错的概率越高维护成本也越高。定期回顾你的流程思考是否有节点可以合并逻辑是否可以简化。备份你的流程QClaw的流程定义保存在一个JSON文件中通常是flows.json。定期导出备份这个文件。你可以将其保存到Git仓库中实现版本管理。加入社区QClaw有一个活跃的社区。遇到棘手问题时去论坛或相关社群搜索很可能已经有人解决了类似问题。分享你的“养生龙虾”创意也许能激发更多人的灵感。7. 总结与展望自动化作为生活质量的延伸打造“养生龙虾”的过程与其说是在开发一个工具不如说是在进行一场持续的个人实验和对话。QClaw赋予我的不是某个现成的解决方案而是一种“连接”和“塑造”的能力——将散落在各处的数字信号时间、应用状态、设备指令连接起来塑造成符合我个人生活节律的健康干预流。它不会取代专业的健康管理或医疗建议但它成功地在我与不健康的工作习惯之间建立了一道自动化的、温和而坚定的缓冲带。那些曾经被忽略的提醒现在因为有了场景判断和渐进式干预变得更容易被接受。看着Dashboard上累计的“成功饮水”和“有效休息”次数获得的是一种细微但确凿的掌控感。这个项目还有巨大的扩展空间。例如可以接入更丰富的生物传感器数据需要硬件支持实现基于心率变异性的压力提醒可以结合天气预报在空气质量差时提醒减少户外活动甚至可以与番茄工作法等时间管理法深度结合形成完整的工作-健康循环系统。关键在于这一切的蓝图和实现工具都掌握在你自己手中。