[控场AI]
· 5 分钟阅读· 2,811 字

把马桶接入树莓派:一场荒诞又硬核的IT实验

把马桶接入树莓派:一场荒诞又硬核的IT实验

博主用树莓派和浮球开关给马桶分配IP,监控冲水以排查网络断连,并类比AI Agent安全监控。

一位IT博主为排查办公室NAS断连与冲水的关联,用树莓派3 Model B+和浮球开关给马桶分配了IP地址10.77.14.178。浮球开关利用磁铁与簧片通断将水位变化转为GPIO高低电平,配合内置上拉电阻抑制噪声。脚本每0.1秒轮询GPIO,记录冲水事件到state.json并触发Slack通知。安装过程充满意外,但最终闭环成功。项目被用来类比AI Agent提示注入攻击的日志关联与取证思路,强调异常发生时需要所有信号在同一时间线上。

当马桶有了IP地址

一位IT博主真的给自己的马桶分配了IP地址——10.77.14.178。这不是段子,而是他用一块树莓派3 Model B+和一枚液位浮球开关(float switch)完成的真实项目。起因是他在教学子网划分时开的玩笑:"我要给马桶一个IP地址"。多年后,这个玩笑变成了视频里的硬核实验。

但荒诞背后有一个正经的IT需求:他办公室的NAS和网络时不时会莫名断连,而每次断连似乎都和有人冲马桶有关。与其挨个问同事"是你刚冲水了吗",不如让马桶自己上报——精确到毫秒,方便和网络日志做时间线比对。

浮球开关特写

技术方案:用浮球开关感知冲水

监控马桶最难的部分不是硬件,而是"怎么知道它冲水了"。摄像头?不现实。手柄传感器?太复杂。最终方案出奇地简单:把一枚浮球开关放进水箱。

浮球开关的工作原理

这颗小器件内部有两片几乎接触的金属簧片和一枚磁铁。当浮球随水位上下移动时,磁铁让簧片吸合或断开,从而输出通断信号。把它接在树莓派的GPIO引脚上,就能把"水位下降"变成"一次冲水事件"。

浮球开关内部结构示意

浮球开关属于干簧管(reed switch) 的一种典型应用。干簧管是将两片铁磁性簧片密封在充有惰性气体的玻璃管中,当外部磁场(如固定在浮球上的磁铁)靠近时,簧片被磁化而吸合;磁场移开后,簧片靠自身弹性断开。这种结构没有机械磨损的触点暴露在空气中,因此适合潮湿环境。在液位检测中,浮球通常套在一根导管上,内部磁铁随液面移动,导管内固定干簧管,从而实现非接触式触发。其输出是纯粹的开关量(通/断),不需要模数转换,这也是它适合直接连接树莓派GPIO的原因。

接线与上拉电阻

接线同样极简:一根线接Pin 9(接地),另一根接Pin 11(GPIO 17)。博主用跳线临时缠上去,并提醒必须在通电前完成接线,避免短路。这里有个关键细节——树莓派GPIO内置弱上拉电阻,把引脚电压拉到3.3V。浮球断开时读为高电平(1),浮球下沉、簧片接地时读为低电平(0)。如果没有这个上拉电阻,引脚会拾取杂散电噪声,导致系统"看到"根本不存在的冲水事件——用博主的话说,就像有人吃了太多塔可钟。

上拉电阻(pull-up resistor) 是数字电路中的基础概念。GPIO引脚若悬空,电压不确定,容易受电磁干扰而随机翻转,读为0或1。上拉电阻将引脚通过一个较大阻值(树莓派内置约50kΩ)连接到3.3V,使默认状态稳定为高电平;当外部开关闭合到地时,引脚被拉低为0。树莓派GPIO可软件启用内部上拉/下拉,但内部电阻较弱,长导线或强噪声环境下仍可能误触发。若遇到不稳定,可在外部加一个4.7kΩ~10kΩ的上拉电阻增强抗干扰能力。另外,GPIO输入电压不得超过3.3V,直接接5V信号可能损坏引脚。

软件逻辑:每0.1秒轮询一次

系统在树莓派上运行精简版64位操作系统,没有图形界面。脚本每0.1秒检查一次GPIO状态,记录冲水事件并写入state.json文件,同时统计低水位持续时间——如果水位下降太快、恢复太快,则不计为有效冲水,从而过滤掉误触发。

博主还让AI生成了一段可视化动画演示:水位满时浮球在上,冲水后浮球下沉,计时器开始计数,随后水箱重新注满,状态复位。这套逻辑先在水箱外完成验证,确认可靠后才装入真实马桶。

轮询(polling) 与中断(interrupt) 是两种常见的GPIO事件检测方式。轮询是程序按固定间隔主动读取引脚状态,实现简单但占用CPU且可能漏掉短脉冲;中断则是由硬件在引脚电平变化时触发回调,实时性更好、CPU占用低。本项目选择0.1秒轮询,是因为冲水导致的水位变化持续数秒,远大于轮询间隔,不会漏检,且逻辑更易调试。state.json用于持久化当前状态(如是否正在冲水、上次冲水时间),即使脚本重启也能恢复上下文。实际部署中还可加入去抖逻辑,避免浮球在临界水位附近抖动导致重复计数。

安装过程:充满意外的实战

实际安装并不优雅。博主先尝试用乐高积木做支架,再用扎带把树莓派固定在水箱附近,过程中线材沾了水,不得不拆掉重来。他坦言自己并不擅长手工,最终成品看起来相当"将就"。

安装过程中线材沾水后重做

装好通电后,真实冲水测试成功:系统捕获到事件,并触发Slack通知推送到团队频道。博主还特意打了码,只露出通知出现在general频道。至此,马桶监控闭环完成——从物理动作到数字信号,再到团队消息。

从马桶到AI安全:监控思路的迁移

这个项目被用来类比一个更严肃的议题:AI Agent安全问题。视频中插播的Wiz演示展示了一次提示注入攻击——恶意prompt让AI Agent执行攻击者代码,窃取云凭证、开启反向shell、拷贝数据库。Wiz的AI检测与响应系统把CloudTrail、DNS日志、模型日志和服务器传感器数据聚合到一张攻击路径图上,再由AI Agent判定为恶意并完成取证分析。

两者的共同点在于:当异常发生时,你需要所有相关信号在同一条时间线上。马桶冲水与NAS断连的关联,黑客行为与日志异常的关联,本质上是同一个IT方法论——观测、关联、定位。

提示注入(prompt injection) 是AI Agent面临的主要安全威胁之一。攻击者将恶意指令伪装成普通内容(如网页文本、邮件、文档),诱导Agent将其当作合法指令执行,从而越权调用工具、泄露数据或执行代码。与SQL注入不同,提示注入没有严格的语法边界,防御难度更高。Wiz演示中的攻击链正是利用Agent对工具调用的信任,让Agent主动执行攻击者代码。CloudTrail是AWS的API审计日志服务,记录所有云上操作;DNS日志可暴露恶意域名解析;反向shell则是攻击者获取远程控制权的常用手段。将这些异构日志聚合到统一时间线,是检测和取证的关键。

这个项目值不值得做

从实用角度看,给马桶装IP地址几乎没有日常价值。但从学习角度看,它把GPIO输入、上拉电阻、轮询与状态文件、通知集成串成了一条完整链路,成本只有一块树莓派、一枚浮球开关和几根扎带。博主在结尾的祷告中说,他希望这种"傻项目"能打开观众对技术可能性的想象——也许是一个职业方向,也许只是一件能点燃热情的小事。

对于想要复现的读者,核心清单如下:树莓派(带GPIO即可)、浮球开关、跳线、扎带,以及通电前接好线的安全意识。

#树莓派#GPIO#浮球开关#马桶监控#上拉电阻#AI Agent安全#提示注入#DIY硬件
分享:

相关推荐