加热器智能开关
动机
我和家人在德国萨尔州的一栋独立住宅里住了大约二十年。除了燃气冷凝锅炉,我们还用太阳能热水系统加热热水。为了节省12瓦的待机功耗,夏天我会完全关闭供暖,因为太阳能热水系统的输出通常足以保持水温。有些年我在四月底关闭供暖,直到十一月初才重新开启。今年情况不同。多次恶劣天气迫使我不时开启加热器。问题是我有时忘记开机——只有当有人想洗澡而水不够热时我才注意到。有时也会忘记关机,即使太阳已经照耀很久。我觉得是时候把这一切自动化了。
前提条件
- 我已经使用了一些Shelly智能开关用于控制百叶窗和灯光,所以我在这个项目中也自然选择了Shelly设备。
- 我家已经有一个自制的建筑监控系统,大约有25个传感器,主要是温度传感器,还有一些其他环境传感器。
- 监控系统基于MQTT和一个免费的HiveMQ无服务器云代理,我也希望用它与Shelly设备进行通信。
- 我已经玩过Node-Red,觉得这可能是一个很好的第一个正式项目的用例。
安装Shelly智能开关
由于燃气冷凝锅炉的最大电流远低于8A,我选择了Shelly 1PM Mini Gen3,它还有一个额外好处,就是可以测量加热器开启时的功耗。安装非常简单,因为加热器机壳内有足够空间。加热器直接连接到主电源,就在隔壁房间的紧急开关后面。下面的照片展示了开关的安装。

一旦在 中配置了MQTT连接Shelly Smart Control应用,一切都为下一步做好了准备。我按照下面对话框中的配置(抱歉界面是德语),并且用HiveMQ提供的网页客户端进行了首次测试,立刻成功。
涉及的传感器
至少在初始设置中,我使用了三个传感器来实现开关逻辑:
- 位于房屋北侧的室外温度。我希望当温度降到某个阈值以下时加热器自动开启。
- 热水箱的温度。我在水箱上装了三个传感器,但这个用例只选了中间那个。同样,我希望当热水温度低于某个阈值时加热器开启,立即开始给水箱充热。
- 第三个是充热回路的回流温度。当该温度再次降到50°C以下时,充热结束。
第一个传感器是一个通过 Tinkerforge 硬件读取的无线温湿度传感器。最后两个传感器是连接到 Raspberry Pi Pico W 的 DS18B20 One-Wire 传感器。详细的逻辑将在 Node-Red 流程中对应的函数部分后续展示。
Node-Red
上述楼宇监控的所有传感器数据都由基于Raspberry Pi Zero的边缘设备收集,并输出一个压缩的JSON包。Shelly设备在特定的MQTT主题上广播和接收它们各自的负载。现在我们需要一个中间件来将所有内容整合在一起。我对Node-Red的第一印象是它正好可以做到这一点。Node-Red目前运行在Kubernetes上(见 NodeRed-On-Rancher),但生产环境我很可能会把它移到树莓派上。这是我创建的流程,用来消费传感器数据,应用开关逻辑,并发送命令到Shelly PM1 Mini Gen3:

说明
- 紫色节点红色节点 是MQTT连接器。所有连接器都连接到同一个代理,但左侧的连接器订阅家庭监控,右侧的两个连接器则向Shelly专用的命令主题发布消息。
- 是一个子流程,用来处理传入消息。原始数据是一个压缩并Base64编码的JSON结构。该节点输出原始JSON。黄色节点绿色节点
- 的唯一目的是在右侧生成调试输出。名为“加热器开关逻辑”的橙色节点是实际的工作节点,决定是否开启或关闭加热器。请参见下面的JavaScript函数! 只是将切换逻辑的输出(0/1)简单转换为Shelly开关可以接收的常规MQTT消息。实际上这可以简化为一个分支,但为了便于理解和调试,我保留了用于开和关的两个分支。
- 工作函数 主题:shelly1pmmini3-/command/switch:0
- 负载:开|关结论我所说的这套组件组合,即
、

Shelly指令消息
为了完整起见,我想进一步说明用于控制加热器电源开关的Shelly MQTT命令。你也可以在Node-Red流程旁边的调试窗口中看到它们。
Node-Red
设备,非常强大。
有关MQTT命令的更多信息,请参见 Shelly技术文档.
我多年来一直使用
- HiveMQMQTT的免费无服务器云代理,觉得它非常安全、可靠且方便。至于Node-RedShelly,我还是新手,但我认为它在这种连接性方面潜力巨大,而且使用起来很有趣。
- 同时,我已经成为了展望正如我之前提到的,我为这个项目使用的工具集非常强大,给了我很多自动化家庭的新想法。举几个例子:
- 某种地理围栏功能,当我开车到家时自动打开车库门。车库门已经配备了我可以用和一个附加的
- 以及几个传感器(风速、太阳辐射、降雨)来控制我们露台上的遮阳篷。Shelly设备。Shelly1PM MINI Gen3 我在这个项目中使用的设备非常小巧,但功能强大。你可以选择多种切换逻辑、调度器、电量计量、通过MQTT进行外部控制等功能,这些都是对我来说最重要的选项。
给
添加传感器也很有趣。
- 就当前项目而言,我肯定需要调整冬季供暖的开关逻辑。夏天可能够用,但我怀疑冬天需要更复杂的逻辑。Shelly 1 MINI Gen3.
- 我可以用一个遥控器控制我们露台上的遮阳篷 Shelly Plus 2PM 和一个附件 Shelly Plus 扩展模块 以及一些传感器(风速、太阳辐射、降雨量)。
- 还可以考虑在其上添加传感器,这也会很有趣 Shelly扩展模块 到我现有的楼宇监控系统。这应该可以通过MQTT实现。
就目前的项目而言,我肯定需要调整冬季供暖的切换逻辑。这个逻辑在夏季可能已经足够,但我怀疑冬季会需要更复杂的逻辑。