用树莓派构建家庭恒温器

ThermOS 项目旨在解决现成智能恒温器的诸多缺点。
121 位读者喜欢这篇文章。

我和我的妻子在 2020 年 10 月搬进了一个新家。一旦天气开始变冷,我们就意识到房屋老式供暖系统的一些缺点(包括一个始终开启的供暖区域)。我们在之前的家里使用过 Nest 恒温器,而目前的设置远不如以前方便。我们房子里有多个恒温器,有些设置了供暖时间表,有些设置了不同的时间表,有些根本没有设置。

Old thermostats

房屋的前任主人留下了说明,解释了一些恒温器的工作方式。(Joseph Truncale,CC BY-SA 4.0

是时候改变了,但房子有一些限制

  • 它建于 20 世纪 60 年代末,并在 90 年代进行了翻修。
  • 供暖是水暖式(热水踢脚线)。
  • 它有六个恒温器,对应六个供暖区域。
  • 每个恒温器只有两根电线用于供暖(红色和白色)。

Furnace valves

位于熔炉处的 Taco(发音为 TAY-KO)区域阀。(Joseph Truncale,CC BY-SA 4.0

购买还是构建?

我想要对所有供暖区域进行“智能”恒温器控制(时间表、自动化、在家/离家等)。如果我想购买现成的产品,我有很多选择,但所有这些都有缺点

选项 1:Nest 或 Ecobee

  • 它很贵:没有智能恒温器可以处理多个区域,所以我每个区域都需要一个(约 200 美元 * 6 = 1200 美元)。
  • 它很困难:我必须重新连接恒温器电线才能获得臭名昭著的 C 线,它能为恒温器提供持续的电力。每根电线长 20 到 100 英尺,位于墙内,可能用订书钉固定在立柱上。

选项 2:电池供电的恒温器,例如 Sensi WiFi 恒温器

  • 电池只能持续一两个月。
  • 在仅使用电池的模式下,它与 HomeKit 不兼容。

选项 3:商业现成的恒温器,但只有一个(某种程度上):Honeywell 的 TrueZONE 

  • 它很旧,而且支持不力(它于 2008 年发布)。
  • 它很贵——仅控制器就超过 300 美元,而且你需要一个 RedLINK 网关才能让一个糟糕的应用程序工作。

获胜者是… 

选项 4:构建我自己的!

我决定构建我自己的多区域智能恒温器,我将其命名为 ThermOS

  • 它集中在熔炉处(你只需要一个设备,而不是六个)。
  • 它使用现有的墙内恒温器电线。
  • 它与 HomeKit 兼容,包括自动化、时间表、在家/离家等。
  • 而且… 它很有趣?是的,有趣… 我想。

ThermOS 硬件

我知道我想使用树莓派。由于它们已经变得如此便宜,所以我决定使用 Raspberry Pi 4 Model B 2GB。我确信我可以使用 Raspberry Pi Zero W,但这将用于未来的修订。

以下是我使用的所有零件的完整列表

名称 数量 价格
Raspberry Pi 4 Model B 2GB 1 $29.99
Raspberry Pi 4 官方 15W 电源 1 $6.99
Inland 400 连接点面包板 1 $2.99
用于 Arduino 的 Inland 8 通道 5V 继电器模块 1 $8.99
Inland DuPont 跳线 20cm (3 根装) 1 $4.99
来自 Mouser.com 的 DS18B20 温度传感器(正品) 6 $6.00
3 针螺钉端子块(40 个装) 1 $7.99
用于 Raspberry Pi 的 RPi GPIO 端子块分线板模块 1 $17.99
鳄鱼夹测试线(10 根装) 1 $5.89
Southwire 18/2 恒温器电线(50 英尺) 1 $10.89
热缩管 1 $4.99
可焊接面包板(5 个装) 1 $11.99
PCB 安装支架(50 个装) 1 $7.99
塑料外壳/外罩 1 $27.92

我开始在 draw.io 上绘制硬件图,并意识到我缺乏一些关于熔炉的关键知识。我打开侧面板,找到了降压变压器,它将 120V 电源线转换为 24V 用于供暖系统。如果你的供暖系统和我的一样,你会看到 Taco 区域阀之间有很多跳线。Taco 上的端子 3 跳过了我的所有区域阀。这是因为有多少阀门开启/打开并不重要——它只是控制循环泵。如果一个到五个阀门的任何组合是打开的,它应该打开;如果没有阀门打开,它应该关闭……很简单!

Furnace wiring architecture

使用一个区域的 ThermOS 架构。(Joseph Truncale,CC BY-SA 4.0

从本质上讲,恒温器只是一种开关。一旦恒温器内部的热敏电阻(温度传感器)检测到较低的温度,开关就会闭合,并完成 24V 电路。这个项目不是在每个房间都有一个恒温器,而是将它们都放在熔炉旁边,以便可以使用八个继电器中的六个通过继电器模块控制所有六个区域阀。树莓派充当恒温器的大脑并独立控制每个继电器。

Manually setting relays using Raspberry Pi and Python

使用树莓派和 Python 手动设置继电器。(Joseph Truncale,CC BY-SA 4.0

下一个问题是如何从每个房间获取温度读数。我可以在每个房间里安装一个无线温度传感器,并在 Arduino 或 Raspberry Pi 上运行它,但这可能会变得昂贵和复杂。相反,我想重复使用墙内现有的恒温器电线,但仅用于温度传感器。

“1-wire” DS18B20 温度传感器似乎符合要求

  • 它的精度为 +/- 0.5°C 或 0.9°F。
  • 它使用“1-wire”协议进行数据传输。
  • 最重要的是,DS18B20 可以使用“寄生电源”模式,其中只需要两根电线用于电源和数据。请注意… 几乎所有 DS18B20 都是 假冒的。我购买了一些(希望它们是真的),但是当我尝试使用寄生电源时,它们无法工作。然后我从 Mouser.com 购买了真正的,它们工作得非常好!

Temperature sensors

使用寄生电源在同一 GPIO 总线上连接三个 DS18B20。(Joseph Truncale,CC BY-SA 4.0

从面包板和所有本地组件开始,我开始编写代码来与所有组件进行交互。一旦我证明了这个概念,我就将现有的墙内恒温器电线添加到混合中。我通过该设置获得了稳定的读数,因此我开始使它们更加完善。在我的 爸爸(自称“足够好”的焊接工)的帮助下,我们将引线焊接到三针螺钉端子上(以避免传感器过热),然后将传感器连接到端子中。现在,传感器可以用线螺母连接到现有的墙内布线。

Attaching temperature sensors

DS18B20 使用现有的电线连接到旧的恒温器位置。(Joseph Truncale,CC BY-SA 4.0

我仍在“美化”我的温度传感器墙壁安装座,但我已经经历了几个 3D 打印修订版,我认为我快完成了。

Wall mounts

我从 Nest 风格的安装座开始,然后改为齐平安装风格。(Joseph Truncale,CC BY-SA 4.0

ThermOS 软件

像往常一样,编写逻辑并不是难事。但是,决定应用程序架构和框架是一个令人困惑的多日过程。我首先评估了像 PiHome 这样的开源项目,但它依赖于特定的硬件而且是用 PHP 编写的。我是 Python 的粉丝,并决定从头开始编写我自己的 REST API。

由于 HomeKit 集成非常重要,我想我最终会编写一个 HomeBridge 插件来集成它。我没有意识到有一个名为 HAP-Python 的完整 Python HomeKit 框架,它实现了附件协议。它帮助我在 30 分钟内运行了一个概念验证,并通过我的 iPhone 的 Home 应用程序进行控制。

ThermOS HomeKit integration

Apple HomeKit 集成的初始版本,在 HAP-Python 框架的帮助下。(Joseph Truncale,CC BY-SA 4.0

ThermOS software architecture

ThermOS 软件架构(Joseph Truncale,CC BY-SA 4.0

其余的“温度”逻辑相对简单,但我想强调一个我最初错过的部分。我的代码运行了几天,我正在研究硬件,这时我注意到我的继电器每隔几秒钟就会打开和关闭。这种“短周期”不一定有害,但肯定效率不高。为了避免这种情况,我添加了一些阈值,以确保只有在 +/- 0.5C° 时才会切换供暖。

这是阈值逻辑(你可以在注释中看到橡皮鸭调试法

# check that we want heat
if self.target_state.value == 1:
    # if heat relay is already on, check if above threshold
    # if above, turn off .. if still below keep on
    if GPIO.input(self.relay_pin):
        if self.current_temp.value - self.target_temp.value >= 0.5:
            status = 'HEAT ON - TEMP IS ABOVE TOP THRESHOLD, TURNING OFF'
            GPIO.output(self.relay_pin, GPIO.LOW)
        else:
            status = 'HEAT ON - TEMP IS BELOW TOP THRESHOLD, KEEPING ON'
            GPIO.output(self.relay_pin, GPIO.HIGH)
    # if heat relay is not already on, check if below threshold
    elif not GPIO.input(self.relay_pin):
        if self.current_temp.value - self.target_temp.value <= -0.5:
            status = 'HEAT OFF - TEMP IS BELOW BOTTOM THRESHOLD, TURNING ON'
            GPIO.output(self.relay_pin, GPIO.HIGH)
        else:
          status = 'HEAT OFF - KEEPING OFF'

Thresholding

阈值允许更长时间的热源关闭。(Joseph Truncale, CC BY-SA 4.0

我实现了最终目标——能够通过手机控制所有功能。

ThermOS as a HomeKit Hub

ThermOS 作为 HomeKit 集线器(Joseph Truncale, CC BY-SA 4.0

将我的 ThermOS 放入午餐盒

我的概念验证非常混乱。

Initial ThermOS setup

ThermOS 控制单个区域(之前)(Joseph Truncale, CC BY-SA 4.0

在软件和通用硬件设计就位后,我开始考虑如何将所有组件封装成更永久和更精致的形式。对于永久安装,我的主要考虑因素之一是不使用带杜邦跳线的面包板。我订购了一些可焊接的面包板和一个螺钉端子排扩展板(感谢 @arduima 提供的 Raspberry Pi GPIO 引脚)。

这是正在进行中的带有支架和外壳的可焊接面包板的样子。

这是安装在锅炉房中的样子。

ThermOS mounted

ThermOS 已安装(Joseph Truncale, CC BY-SA 4.0

现在我只需要整理和标记电线,然后就可以开始将剩余的恒温器切换到 ThermOS。接下来我将开始我的下一个项目:用于中央空调的 ThermOS。


这最初出现在 Medium 上,并经许可重新发布。

接下来要读什么
标签
User profile image.
Joe Truncale 是一名软件工程师,也是一位全能的修补匠。他目前是 Red Hat 的云解决方案架构师,专注于 Kubernetes 和 OpenShift。他把大量时间用于为非常简单的问题制作过于复杂的解决方案。

13 条评论

非常了不起的黑客!!!
非常感谢这个循序渐进的指南,可以跟随这个项目!!!

问候!

请务必向你的房屋保险公司核实,他们是否同意使用 DIY 恒温器。

在美国大多数司法管辖区,如果未经保险公司明确书面同意而使用 DIY 恒温器,则允许保险公司拒绝支付冻裂管道和其他供暖故障索赔。

这是一个很棒的项目,我希望在某个时候复制它。但我可能有假冒的 DS18B20 探头!(感谢你提供的链接。)

我有点担心你似乎没有任何故障保护机制。当我摆弄 DIY 恒温器时,我总是在实验恒温器上并联一个设置为 40-45 华氏度的机械恒温器。这样,如果项目出现故障而我不在家,加热仍然会启动并防止管道冻结。

对于你的项目,我建议在房子里最冷的房间安装一个机械恒温器(低温范围),设置为 40-45 华氏度,并连接到至少激活一个加热回路阀和泵。我还将添加一个外部看门狗定时器,如果 Pi 停止每隔几分钟发送一次心跳信号,则重新启动它。

我很感激!如果你最终追求一个项目,请告诉我。

我一直在考虑实施一些警报/故障保护机制,我喜欢你采用的实用方法,即在发生故障时保持系统以最低限度运行。我一直在考虑的正是这一点……死亡开关/心跳,或者可能是一个外部 IOT 传感器来提醒我。

回复 ,作者是 Digitalis

这是一个很棒的项目,但我有点担心两件事
1. 缺少故障保护机制
2. 保险问题。
DIY 真的能省钱吗? 我简单地计算了你花费的钱。我不认为你真的省了钱。
看看 Homematic IP 系统。
几乎相同的价格,你可以拥有一个经过验证的解决方案,它运行在外观漂亮的无线恒温器上,可以通过手机访问,并拥有一个随时可用的 Homematic up 服务器托管在家中。
Homematic up 服务器基于 raspberry pi。有两个版本,一个随时可用,另一个你可以使用你自己的 raspberry pi 和他们的 SW。
.
你可以用更多的 Homematic ip 设备扩展 Homematic ip 系统,例如连接器、安全设备、浇水系统、天气传感器、指纹锁等。
在 Homematic ip 服务器上,每个注册的设备都可以编程,既可以通过点击块进行可视化编程,也可以供更高级的程序员使用脚本语言。
.

感谢你的提问! 上述情况并非 ThermOS 项目独有。 如果恒温器的电池没电或发生电源故障,家庭供暖系统将已经失效。 我目前也在为该项目开发一些警报/故障保护支持,但它可以远程监控和控制,这一事实提供了比现有供暖解决方案更高的稳定性。

我调查了 Homematic,这就是我没有使用它们的原因
– 它们在美国不易获得
– 它们由电池供电
– 它们与 Apple HomeKit 不兼容(没有 homebridge)
– Homematic 每个恒温器的成本为 60 美元(我的情况下为 x7 = 420 美元),基本站为 180 美元 =~ 600 美元,而我的 DIY 设置为 150 美元

如果我误解了其中的任何内容,我很乐意学习!

加上... DIY 构建起来很有趣 :)

回复 ,作者是 KoK

几年前我也构建了一个类似的恒温器,也是基于 Raspberry Pi 和多个 ds18B20 传感器。(它没有一个漂亮的界面。)
我的工作原理是在房子恒温器之外,当房间里出现很大的不平衡时,例如当我们使用壁炉时,要求加热或冷却。

我学到了一些东西
1) 继电器既要关闭也要打开,因为 rPi 的输出在崩溃和重启期间会保持不变。(即,不需要加热,无论如何都要关闭继电器)
2) ds18B20 可能会卡在初始化状态,返回 85000,该值不得用作有效温度
3) dht11 不值得购买,湿度值不是很准确。 bme280 工作得更好

同意这些经验教训。

1. 我可能应该添加一些终止/信号处理来关闭继电器,因为它们确实保持在它们设置的任何状态。

2. 一旦我添加了我的第 4 个 ds18b20,我就经常遇到 85000 状态。我最终将电阻从 4.7kOhm 降低到 1.0kOhm,因为我认为阻力太大了(到每个房间的长电线),导致了 85000 个错误涌入。一旦我更换了电阻,错误率降低了 90%,我意识到大约 0.05% 的错误率似乎是正常的。

回复 ,作者是 Guy at Home

你好,很棒的项目,我的赞美。我有一个关于寄生连接的问题:在你的原理图中,你将 vcc 引脚连接到数据引脚,但在你提供的链接中,他们说要连接 vcc 和 gnd
https://learn.openenergymonitor.org/electricity-monitoring/temperature/DS18B20-temperature-sensing

此外,数据表还在第 7 页图 6 中说明了 vcc-gnd 连接
https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
还有一个 DS18B20-PAR 版本,它只是断开了 vcc 引脚:https://datasheets.maximintegrated.com/en/ds/DS18B20-PAR.pdf
这只是你的原理图中的一个错误吗?
谢谢!

太棒了! 你是对的。 在 ds18b20 处,VCC/地线已连接,而其数据引脚连接到 Pi 处连接的 VCC/数据引脚。

感谢你发现了这个错误!

回复 ,作者是 peppeg85

不确定你是否已经研究过 PID 控制。 我曾经在一家工业烤箱制造商工作,你描述的扩大温度容差以使阀门不会一直打开和关闭的方式让我想起了它。 也许有助于平滑你的加热循环。

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.