基于Shelly 1与PIR传感器打造百元级智能安防灯全攻略
1. 项目概述与核心思路
最近在折腾家里的安防照明,发现市面上的成品智能安防灯要么功能单一,要么价格不菲,而且很多封闭系统无法接入自己搭建的家庭自动化平台。于是,我决定自己动手,用更灵活、更具性价比的方案来改造。核心目标很明确:打造一个能联网、可编程、支持多种触发方式的智能安防灯,并且成本要控制在百元以内。
我选择的方案核心是Shelly 1智能继电器模块。这东西本质上是一个基于ESP8266WiFi芯片的“大脑”,但它比我们常玩的NodeMCU或Wemos D1 Mini开发板方便得多——它可以直接接入220V家庭电路取电,省去了额外配置5V或3.3V电源的麻烦,而且外壳绝缘,安全性更有保障。整个系统的逻辑是:由PIR(被动红外)传感器检测人体移动,产生一个开关信号;这个信号送给Shelly 1;Shelly 1根据预设的逻辑(比如通过MQTT协议从家庭自动化服务器Home Assistant接收的指令)来决定是否闭合内部继电器;继电器控制LED泛光灯的电源通断,从而实现亮灯。这样一来,灯何时亮、亮多久、由什么触发(不仅仅是PIR,还可以是门窗传感器、地理围栏甚至时间表),就完全由我通过软件来定义了,实现了真正的智能化。
这个项目的技术价值在于,它清晰地展示了一个典型的物联网(IoT)边缘节点的构建过程:感知(PIR)→ 处理与控制(ESP8266/Shelly 1)→ 执行(继电器/灯)→ 通信与协同(WiFi/MQTT/家庭自动化平台)。对于想要入门智能家居硬件DIY的朋友来说,这是一个绝佳的实践案例,涵盖了电路连接、设备配置、网络通信和自动化逻辑编排等多个环节。
2. 核心器件选型与功能解析
为什么是这些零件?每个部件在系统中扮演什么角色?这里详细拆解一下我的选型考量,这也是DIY项目中避免“翻车”的关键一步。
2.1 控制核心:Shelly 1智能继电器
Shelly 1是整个项目的大脑,它的选择直接决定了项目的复杂度上限和可玩性。
- 核心芯片:其内部搭载了ESP8266,这是一颗集成了WiFi功能的微控制器。这意味着它本身就是一个可以编程的微型电脑,能够运行复杂的逻辑,并通过网络与其他设备通信。
- 核心功能:它提供了一个电磁继电器,可以安全地开关最高16A、250V AC的负载,驱动一个几十瓦的LED灯绰绰有余。继电器本身是物理隔离的,控制电路(低压逻辑部分)和负载电路(高压灯部分)是分开的,安全性高。
- 输入接口:它有一个“SW”输入端子,可以检测外部开关信号的通断(干接点)。这正是我们连接PIR传感器输出信号的地方。同时,它还有“I”端子,可以用于检测外部电压(比如另一个开关的状态),在这个项目里我们用它来接入常通电的火线,用于设备自身供电和状态检测。
- 供电优势:最省心的一点是,它可以直接从L(火线)和N(零线)取电,内部有开关电源模块将其转换为芯片和继电器所需的工作电压。这避免了为ESP8266单独寻找一个5V USB电源的麻烦,让安装位置的选择更加灵活。
- 固件生态:出厂固件功能已经很强,自带Web配置页面,原生支持MQTT和HTTP回调。如果追求极致自定义,社区流行的Tasmota或ESPHome固件也能轻松刷入,可玩性极高。我这次用的是原厂固件,稳定性最好,配置也简单。
注意:Shelly 1有多个版本(如Shelly 1, Shelly 1PM等),1PM带功率计量功能。对于单纯的开关控制,Shelly 1性价比最高。购买时请认准正规渠道,确保符合所在地区的电气安全标准。
2.2 感知单元:PIR运动传感器
PIR传感器是系统的“眼睛”,负责探测特定区域内的红外辐射变化,通常由人体移动引起。
- 工作原理:它内部有热释电红外传感器元件,当检测到视野内红外热源(如人)移动时,会输出一个高电平或闭合一个继电器触点(取决于型号)。
- 选型关键:我选择的是交流220V直接供电型的PIR传感器模块。这一点非常重要!这意味着它可以直接从家里的照明线路取电(L/N),其输出端(常标记为COM和NO)是一个无源的继电器触点,可以直接接入Shelly 1的“SW”输入端。千万不要选用需要直流5V或12V供电的模块,那样你需要额外配置电源,增加复杂度和安全隐患。
- 可调参数:好的PIR模块通常带有三个旋钮,用于现场调节:
- SENSITIVITY(灵敏度):调节探测距离和触发难易度。避免设在最高档,否则小动物或树叶晃动都可能误触发。
- TIME(延时时间):传感器触发后,输出信号保持的时间。在这个智能项目中,我们计划用软件控制亮灯时长,所以建议将此时间调到最短(如3-5秒),让传感器只负责“报告事件”,而由Shelly来决定灯亮多久。
- LUX(光敏阈值):调节环境光亮度阈值,只有在环境光低于此值时才会触发。这样白天就不会无故亮灯,节约能源。可以根据安装位置的光照情况精细调整。
2.3 执行单元与安装载体
- LED泛光灯:我选用了一款30W的户外防水LED泛光灯。选择理由:亮度足够(约3000流明),IP65防水防尘等级适合户外安装,功率适中(30W对于Shelly 1的16A继电器来说负载很轻,长期工作发热小)。灯体自带一小段三芯电缆(火线L、零线N、地线PE),方便接线。
- 防水接线盒(Wiska Box):这是安全与整洁的保障。我选择了一个带有多个敲落孔和电缆防水接头(GLP20+ Cable Glands)的塑料防水盒。它的作用是将Shelly 1、PIR传感器以及所有的电线连接点保护起来,避免日晒雨淋和意外触电。尺寸要足够容纳所有部件并留出散热和操作空间。
- 电气连接件:Wago 221系列接线器。这是我强烈推荐的接线方式,相比传统电工胶布或螺丝端子,它更安全、可靠、易于维护。通过杠杆按压式连接,接触牢固,抗振动,且完全绝缘。准备几个2位和5位的,用于汇集零线、火线和地线。
3. 硬件组装与安全接线实操
这是最具实操性的部分,安全是绝对的第一要务。请务必在完全断电的情况下操作,如果你对家庭电路不熟悉,建议请专业电工协助。
3.1 防水盒与部件预处理
- 规划与开孔:将防水盒、PIR传感器、LED灯摆在一起,规划好布局。通常,PIR传感器需要朝向探测区域,灯朝向照明区域。在防水盒上,选择合适的位置,用螺丝刀顶开(或用电钻钻孔)三个敲落孔。这三个孔分别用于:①PIR传感器的螺纹管安装;②引入户外的220V电源线;③引出连接LED灯的电缆。开孔后,安装上电缆防水接头(Gland)。
- 固定PIR传感器:将PIR传感器自带的锁紧螺母从防水盒内部拧到其螺纹管上,将其牢固固定在盒子上。确保传感器底部的调节旋钮朝外或朝下,便于后续调试。
- 处理LED灯线缆:LED灯自带的线可能较长,根据防水盒到灯的实际距离,剪短至合适长度(预留一些余量),并剥去末端约7-8厘米的外皮,露出内部的火线(通常是棕色或红色)、零线(蓝色)和地线(黄绿色)。同样,将线缆穿过对应的防水接头引入盒内。
3.2 核心电路接线详解
接线是项目的核心,务必对照原理图(下文以文字描述)并仔细核对。我们使用Wago接线器来构建安全的连接节点。
假设我们有以下线头需要连接:
- 电源进线:来自家庭电路的L(棕)、N(蓝)、PE(黄绿)。
- PIR传感器:三根线——L(棕,供电火线)、N(蓝,供电零线)、SW(红,信号输出线)。
- LED灯线:三根线——L(棕)、N(蓝)、PE(黄绿)。
- Shelly 1:需要接入五根线——自身供电的L和N,信号输入SW,状态输入I,负载输出O。
- 备用短接线:用之前剪下的灯线材料制作的几段短导线(棕色和蓝色),用于桥接。
接线步骤与逻辑:
- 建立保护地(PE)节点:将所有需要接地的部分汇集。将电源进线的PE线和LED灯的PE线,插入一个2位Wago接线器。PIR传感器和Shelly 1的金属外壳通常通过安装方式或本身设计实现接地,此处无需单独接线。确保连接牢固。
- 建立零线(N)总线节点:零线是设备的公共回路。准备一个5位Wago接线器。将以下线头插入:
- 电源进线N(蓝)
- PIR传感器N(蓝)
- LED灯N(蓝)
- 一根备用蓝色短导线(这根线的另一端将接入Shelly 1的“N”端子)
- (空余一位,可用于未来扩展)
- 建立火线(L)总线节点:火线是电能的来源。准备另一个5位Wago接线器。将以下线头插入:
- 电源进线L(棕)
- PIR传感器L(棕,用于给PIR供电)
- 两根备用棕色短导线(这两根线的另一端将分别接入Shelly 1的“L”和“I”端子)
- (空余一位,可用于未来扩展)
- 连接Shelly 1:现在,将准备好的短导线连接到Shelly 1的对应端子。
- N端子:连接来自“零线总线节点”的那根蓝色短导线。
- L端子:连接来自“火线总线节点”的其中一根棕色短导线。这是给Shelly 1主板供电的。
- I端子:连接来自“火线总线节点”的另一根棕色短导线。这个端子用于检测电压,在这里接入常火线,可以让Shelly 1感知电路是否通电,用于某些高级逻辑或状态上报。
- SW端子:连接PIR传感器的信号输出线(红色)。当PIR检测到运动时,这根线会与PIR内部的L线接通,相当于给SW一个“开关”信号。
- O端子:连接LED灯的火线(棕色)。这是Shelly 1继电器的输出端,当继电器闭合时,电流从这里流向LED灯,灯即点亮。
至此,所有电气连接完成。再次强调,操作前务必断电,接完线后不要急于通电,先仔细目视检查两三遍,确保没有裸露铜线,所有线头都插接到位,火线、零线、地线没有接混。
3.3 整体安装与初步测试
- 整理与封装:将连接好的Wago接线器、多余的线缆 neatly地盘绕在防水盒内,确保不挤压Shelly 1模块。然后盖上防水盒的盖子并拧紧,确保所有防水胶圈就位,电缆防水接头锁紧。
- 固定设备:将LED灯和装有防水盒的支架(如果使用)安装在墙或柱子上。调整PIR传感器的角度,使其覆盖你想要的探测区域。
- 调节PIR:根据3.2节的说明,初步设置PIR的灵敏度、光敏和延时时间。建议先将延时调到最小,光敏调到中间档位。
- 上电测试:接通220V电源。此时,Shelly 1上的LED指示灯应该开始闪烁,表示它正在尝试连接WiFi(首次使用)或已经启动。用手机或电脑搜索WiFi网络,应该能找到一个名为“Shelly1-XXXXXX”的热点。连接这个热点,是进行下一步配置的入口。
4. Shelly 1网络配置与MQTT集成
硬件就绪后,接下来是赋予它“智能”的灵魂——联网和接入自动化平台。
4.1 初次配置与接入本地网络
- 连接设备热点:上电后,用手机连接Shelly 1发出的WiFi热点(如Shelly1-A1B2C3)。
- 访问配置页面:连接成功后,手机会自动弹出配置页面,或提示你打开浏览器。如果没有,手动打开浏览器访问
http://192.168.33.1或http://shelly1-xxxxxx.local(如果支持mDNS)。 - 配置WiFi:在配置页面中,找到“Internet & Security”或“WiFi”设置。选择你的家庭WiFi网络(2.4GHz频段,ESP8266不支持5GHz),并输入密码。保存后设备会重启并尝试连接你的网络。
- 获取IP地址:设备重启后,你需要知道它的新IP地址。有几种方法:
- 路由器后台查看:登录你家路由器的管理界面,在DHCP客户端列表里查找名为“Shelly1-XXXXXX”的设备。
- 使用发现工具:Shelly官方有手机App(Shelly Cloud),在同一WiFi下可以自动发现设备。
- 再次连接热点:如果找不到,可以再次连接设备热点,在配置页面里查看状态。
- 访问设备后台:用获取到的IP地址(例如
http://192.168.168.100)在浏览器中访问,即可进入Shelly 1的嵌入式Web管理界面。至此,设备已成功接入你的本地网络。
4.2 启用并配置MQTT协议
MQTT是一个轻量级的“发布-订阅”消息协议,是智能家居设备与中心服务器(如Home Assistant, Node-RED)通信的“普通话”。配置好它,Shelly 1就能和你的智能家居平台对话了。
- 准备MQTT服务器(Broker):你需要一个MQTT代理服务器。最常见的是在运行Home Assistant的服务器(比如树莓派)上安装Mosquitto插件。记下它的IP地址、端口(默认1883)、用户名和密码(如果设置了)。
- 在Shelly中配置MQTT:
- 在Shelly的Web界面,进入“Internet & Security” -> “Advanced - Developer Settings”。
- 找到“MQTT”部分,启用它。
- Server:填写你的MQTT Broker的IP地址和端口,如
192.168.1.10:1883。 - Username/Password:如果Broker有认证,在此填写。
- Root Topic:这是设备所有消息的前缀,建议设为
shelly1-light/或home/securitylight/以便管理。设备会自动在它后面添加/relay/0、/online等子主题。 - 其他设置:保持默认的“Clean Session”为开启,QoS设为0即可。
- 点击保存,设备会重启并连接MQTT服务器。
4.3 理解Shelly 1的MQTT主题与消息
配置成功后,Shelly 1会自动向MQTT服务器发布和订阅消息。理解这些主题是编写自动化规则的基础。以下是一些关键主题(假设Root Topic为shelly1-light/):
- 状态发布:
shelly1-light/relay/0:继电器状态。消息内容为on或off。shelly1-light/online:设备在线状态。内容为true或false。shelly1-light/input/0:SW输入端口的状态。当PIR触发时,会发送1(或其它值,取决于设置),未触发为0。
- 命令控制:
- 向
shelly1-light/relay/0/command主题发送on、off、toggle消息,可以远程控制灯的开关。
- 向
- 设备信息:
shelly1-light/info:发布设备固件版本、IP地址等JSON格式信息。
你可以使用MQTT客户端工具(如MQTT Explorer, MQTT.fx)订阅shelly1-light/#(#是通配符),来观察所有相关的消息流,验证PIR触发时是否会发布input/0消息,以及手动控制命令是否有效。
5. 家庭自动化平台集成与场景编排
设备已经联网并“会说话”了,现在需要有一个“大脑”来指挥它,实现复杂的自动化逻辑。我以Home Assistant (HA)为例,展示如何集成和创建自动化。
5.1 在Home Assistant中集成Shelly设备
Home Assistant对Shelly设备有很好的原生支持(通过Shelly for HACS集成),但通过MQTT手动集成更通用、更可控。
- 安装MQTT集成:在HA的“配置->设备与服务”中,添加“MQTT”集成。填写与Shelly 1配置相同的Broker信息。
- 手动添加MQTT设备(推荐):
- 在HA中,进入“配置->设备与服务”,点击“添加集成”,搜索“MQTT”。
- 选择“通过MQTT手动配置一个设备”。
- 主题:填写
shelly1-light/relay/0。 - Payload_on/off:分别填写
on和off。 - 命令主题:填写
shelly1-light/relay/0/command。 - 这样,HA中就创建了一个可以控制的“开关”实体,例如
switch.shelly1_light_relay_0。
- 创建二进制传感器(用于PIR状态):
- 同样通过手动配置MQTT,添加一个二进制传感器。
- 主题:填写
shelly1-light/input/0。 - Payload_on:填写
1(根据你实际观察到的触发消息填写)。 - 这样,你就得到了一个表示“是否检测到运动”的实体,例如
binary_sensor.shelly1_light_motion。
5.2 构建自动化场景:超越简单的PIR控制
现在,你可以利用HA强大的自动化引擎,设计各种亮灯逻辑。以下是几个例子:
场景一:基础安防照明
- 触发:
binary_sensor.shelly1_light_motion状态从off变为on(即检测到运动)。 - 条件:
sun.sun实体状态为below_horizon(即天黑后)。并且,可以加上时间条件,如只在晚上8点到早上6点之间。 - 动作:
- 调用服务
switch.turn_on,目标实体为switch.shelly1_light_relay_0(开灯)。 - 等待
5 minutes(或其他你设定的时长)。 - 调用服务
switch.turn_off,目标实体为switch.shelly1_light_relay_0(关灯)。
- 调用服务
场景二:回家地理围栏触发
- 触发:你的手机(通过HA的官方App或地理围栏集成)进入家附近某个区域(Geo-Zone)。
- 条件:天黑了。
- 动作:打开安防灯,并设定2分钟后关闭。这样当你开车或步行到家时,灯已经为你亮起。
场景三:联动其他传感器
- 触发:后门的门窗传感器状态变为
on(打开)。 - 条件:天黑了,并且家里有人(通过HA的“人员”实体判断)。
- 动作:打开后院的安防灯,持续10分钟。
场景四:手动覆盖与通知
- 创建一个仪表盘按钮,用于手动开关此灯。
- 在自动化中增加动作:当灯因运动触发而打开时,向你的手机发送一条推送通知:“后院检测到运动,安防灯已开启”。
通过这样的编排,这个简单的DIY安防灯就从一个孤立的设备,变成了一个能根据环境、时间、人员状态和外部事件智能响应的家庭自动化系统节点。
6. 进阶调试、优化与避坑指南
在实际部署和长期使用中,我积累了一些经验和常见问题的解决方法。
6.1 PIR传感器调试与防误触发
PIR误触发是安防灯最常见的问题。
- 安装位置:避免正对热源(如空调外机、散热器)、通风口、窗户(窗外树枝晃动)或阳光直射变化剧烈的区域。安装高度建议2-2.5米,略微向下倾斜。
- 灵敏度调节:不要一味求高。先从中间档位开始,测试人员正常走动的触发情况,再微调。过高的灵敏度会探测到更远、更微小的变化,包括小动物。
- 光敏调节:白天测试,用物体遮挡传感器上的光敏电阻,看灯是否会亮,以此校准白天不触发的阈值。
- 延时设置:务必设为最短(如3秒)。长延时会导致PIR自身保持输出信号很久,干扰我们通过HA控制的关灯逻辑。我们的目标是“瞬时触发信号”。
6.2 Shelly 1固件与网络稳定性
- 固定IP地址:在路由器中为Shelly 1的MAC地址分配静态IP地址,避免IP变化导致HA或MQTT连接失败。
- WiFi信号强度:安装位置需要保证良好的WiFi信号。Shelly 1的天线在内部,金属外壳的防水盒可能会屏蔽信号。如果信号弱,考虑在盒子上方或侧面使用非金属安装位置,或添加WiFi中继器。
- 固件更新:定期检查Shelly官方或社区固件更新,修复漏洞和提升稳定性。在Web界面“系统”或“固件更新”部分可以操作。
- 看门狗与心跳:在HA中,可以监控
shelly1-light/online主题。如果设备离线,可以设置自动化尝试重启(通过MQTT发送命令到shelly1-light/command主题,内容为reboot,如果固件支持)。
6.3 电气安全与维护
- 防水处理:确保所有电缆入口的防水接头(Gland)已拧紧,盒盖密封圈完好。每年检查一次,防止老化进水。
- 负载检查:确认LED灯的实际功率未超过Shelly 1继电器的额定容量(16A,约3500W)。对于30W的LED灯,远远未达上限,非常安全。
- 定期测试:每隔几个月,测试一次自动化功能是否正常,包括PIR触发、平台远程控制、定时开关等。
6.4 常见问题排查速查表
| 问题现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 上电后Shelly指示灯不亮 | 电源未接通,接线错误(L/N接反或未接),设备损坏。 | 1. 用万用表检查进线是否有电。 2. 断电后重新检查L/N接线。 3. 单独给Shelly通电测试。 |
| Shelly WiFi热点未出现 | 设备已连接过网络并保存了配置,正在尝试连接旧网络。 | 长按Shelly 1上的物理按钮(如果有)5-10秒,恢复出厂设置。 |
| 能连热点但无法配置WiFi | 手机网络代理或DNS设置问题,浏览器缓存。 | 关闭手机代理,使用浏览器无痕模式访问192.168.33.1。 |
| MQTT连接失败 | Broker地址/端口错误,用户名密码错误,网络防火墙阻止。 | 1. 在Shelly Web界面检查MQTT配置。 2. 用MQTT客户端测试Broker是否可达。 3. 检查Broker日志。 |
| PIR触发但灯不亮 | PIR输出信号问题,Shelly SW接线错误,自动化未生效。 | 1. PIR触发时,用万用表测量其输出端是否有电压变化。 2. 检查Shelly的SW端子接线。 3. 在HA中手动控制开关实体,看灯是否响应,以区分是硬件问题还是自动化逻辑问题。 |
| 灯常亮或不规则闪烁 | Shelly继电器故障,接线松动,负载(灯)自身问题。 | 1. 断电后检查所有接线是否牢固。 2. 将灯直接接市电,排除灯本身故障。 3. 通过HA或MQTT命令观察Shelly继电器状态是否与实际一致。 |
| 自动化延迟高 | WiFi网络拥堵,MQTT Broker负载高,HA服务器性能不足。 | 1. 优化WiFi网络,确保信号强度。 2. 检查Broker和HA服务器资源使用情况。 3. 简化自动化条件,避免过于复杂的模板或查询。 |
这个基于Shelly 1的DIY智能安防灯项目,从硬件组装到软件集成,完整地走通了一个物联网设备的落地流程。它成本低廉,但带来的灵活性和可扩展性是许多成品无法比拟的。一旦你掌握了这个模式,就可以举一反三,用类似的思路去改造其他家电,比如用Shelly 2.5控制窗帘,用Shelly Plug监控能耗,真正打造一个贴合自己需求、完全自主可控的智能家居环境。动手的过程本身就是最大的乐趣,当你第一次看到灯光随着自己的自动化逻辑精准亮起时,那种成就感是直接购买产品无法替代的。
