用树莓派建造一个家庭恒温器

ThermOS项目是现成智能恒温器诸多缺点的答案。

我和妻子于2020年10月搬进了新家。天一冷,我们就意识到家里旧的供暖系统(包括一个一直开着的供暖区)的一些缺点。我们之前家里有Nest恒温器,目前的设置远没有那么方便。我们家有多个恒温器,有些有计划供暖时间表,有些有不同的时间表,有些根本没有。

旧恒温器

是时候该换一换了,但房子有一些限制:

  • 它建于 20 世纪 60 年代末,在 90 年代进行了翻修。
  • 热量是水暖的(热水)。
  • 它有六个加热区的六个恒温器。
  • 每个恒温器(红色和白色)只有两根电线加热。
炉子阀门

购买还是建造?

我想要对所有热区(时间表、自动化、家/客场等)进行“智能”恒温器控制。如果我想买现货,我有几种选择,但它们都有缺点:

选项1:Nest 或 Ecobee

  • 很贵:没有智能恒温器可以处理多个区域,所以我每个区域都需要一个(~200美元*6 = 1200美元)。
  • 这很难:我必须重新运行恒温器线才能获得臭名昭著的C wire,这使恒温器能够连续供电。电线每根在墙上长20到100英尺,可能会钉在螺柱上。

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

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

选项3:商用现成的恒温器,但只有一家提供(有点过分了):霍尼韦尔的TrueZONE 

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

最后我的选择是…

选项4:我自己来做!
我决定建造自己的多区智能恒温器,我把它命名为ThermOS

  • 它集中在一块电路板里(你需要一个设备,而不是六个设备)。
  • 它使用现有的墙内恒温器线。
  • 它兼容HomeKit,具有自动化、调度、家/场景等。
  • 等等等等,这…有趣吗?是的,有趣……我想。

ThermOS硬件

我知道我想用树莓派。由于它们变得如此便宜,我决定使用树莓派4型号B 2GB。我相信我可以用树莓派Zero W,但那是未来的修订。

以下是我使用的部件的完整列表:

姓名数量价格
树莓派4型号B 2GB129.99 美元
树莓派4官方15W电源16.99 美元
内陆400系点面包板12.99 美元
Arduino的内陆8通道5V继电器模块18.99 美元
内陆杜邦跳线20厘米(3包)14.99 美元
Mouser.com的DS18B20温度传感器(正品)66.00 美元
3 针螺丝接线板(40 件装)17.99 美元
用于树莓派的RPi GPIO终端块突破板模块117.99 美元
鳄鱼夹测试线索(10包)15.89美元
Southwire 18/2恒温器线(50英尺)110.89美元
收缩包装14.99 美元
可焊面包板(5包)111.99 美元
PCB安装支架(50包)17.99 美元
塑料外壳/外壳127.92美元

我开始在draw.io上绘制硬件图表,并意识到我缺乏一些关于电路板的关键知识。我打开侧板,找到了拆卸变压器,该变压器采用120V电线,使其成为加热系统的24V。如果您的加热系统与我的系统相似,您将在塔可区阀门之间看到许多跳线。Taco上的3号端口跳过了我所有的区域阀门。这是因为无论打开/打开多少阀门,它只是控制循环泵。如果一到五个阀门的任何组合是打开的,它应该打开;如果没有阀门打开,它应该关闭……很简单!

炉子布线建筑

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

使用树莓派和Python手动设置继电器

下一个问题是如何从每个房间获得温度读数。我可以在每个房间有一个无线温度传感器,在Arduino或树莓派上运行,但这可能会变得昂贵和复杂。相反,我想重复使用墙上现有的恒温器线,但纯粹是为了温度传感器。

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

  • 它的准确度为+/- 0.5°C或0.9°F。
  • 它使用“1线”协议进行数据处理。
  • 最重要的是,DS18B20可以使用“parasitic power”模式,只需两根电线即可获得电力和数据。提醒一下……几乎所有的DS18B20都是假冒的。我买了一些(希望它们是真的),但当我尝试使用电源时,它们不会起作用。然后我从Mouser.com上买了真品,它们就像一个符咒一样!
温度传感器

从面包板和本地所有组件开始,我开始编写代码来与所有组件交互。一旦我证明了这个概念,我就在混合物中添加了现有的壁内恒温器线。我得到了与那个设置一致的读数,所以我开始让他们更精致一点。在我父亲的帮助下,我们焊接了自称“足够好”的焊料,我们焊接了三针螺丝端子(以避免传感器过热),然后将传感器连接到终端上。现在传感器可以用线螺母连接到现有的壁内布线。

附加温度传感器

我仍在“美化”我的温度传感器壁挂装置,但我经历了一些3D打印修订,我想我快到了。

壁挂

ThermOS软件

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

由于HomeKit集成如此重要,我想我最终会写一个HomeBridge插件来集成它。我没有意识到有一个名为HAP-Python的Python HomeKit框架来实现配件协议。它帮助我在30分钟内通过iPhone的“家庭”应用程序运行和控制概念验证。

ThermOS HomeKit集成
ThermOS软件架构

其余的“临时”逻辑相对简单,但我确实想强调一下我最初错过的一块。我的代码运行了几天,我正在处理硬件,这时我注意到我的继电器每隔几秒钟就会打开和关闭一次。这种“短循环”不一定有害,但它肯定没有效率。为了避免这种情况,我添加了一些阈值,以确保热开关仅在+/- 0.5°时切换。

以下是阈值逻辑(你可以参考rubber-duck debugging):

# 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'
门槛

我实现了我的最终目标——能够从手机上控制所有这一切。

ThermOS作为HomeKit Hub

把我的ThermOS放在午餐盒里

我的概念证明相当混乱。

初始ThermOS设置

随着软件和一般硬件设计的到位,我开始想出如何以更持久和更精致的形式打包所有组件。我对永久安装的主要担忧之一是使用带有杜邦跳线的面包板。我订购了一些可焊接面包板和一个螺丝终端突破板(感谢@arduima的树莓派GPIO销)。

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

正在打包的ThermOS硬件

在这里,安装在锅炉房里。

安装的热操作系统

现在我只需要整理电线并贴上标签,然后我就可以开始将恒温器的剩余部分交换到ThermOS上。我将开始我的下一个项目:用于中央空调的ThermOS。

树莓派bullseye的国内镜像源

使用说明Debian 11 (bullseye)

  • 官方源
    /etc/apt/sources.list
    deb http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
  • #Uncomment line below then ‘apt-get update’ to enable ‘apt-get source’
  • #deb-src http://raspbian.raspberrypi.org/raspbian/ bullseye main contrib non-free rpi
  • /etc/apt/sources.list.d/raspi.list
    deb http://archive.raspberrypi.org/debian/ bullseye main
  • #Uncomment line below then ‘apt-get update’ to enable ‘apt-get source’
  • #deb-src http://archive.raspberrypi.org/debian/ bullseye main

1、 清华源

# 编辑 `/etc/apt/sources.list` 文件,删除原文件所有内容,用以下内容取代:
deb [arch=armhf] http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
# 如果需要 arm64 软件源,在 `/etc/apt/sources.list` 中加上
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/raspbian/multiarch/ bullseye main
# 编辑 `/etc/apt/sources.list.d/raspi.list` 文件,删除原文件所有内容,用以下内容取代:
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main

注意:网址末尾的raspbian重复两次是必须的。因为 Raspbian 的仓库中除了APT软件源还包含其他代码。APT软件源不在仓库的根目录,而在raspbian/子目录下。

编辑镜像站后,请使用sudo apt-get update命令,更新软件源列表,同时检查您的编辑是否正确。

2、阿里源

sudo nano /etc/apt/sources.list

编辑 /etc/apt/sources.list 文件,删除原文件所有内容,用以下内容取代:

deb http://mirrors.aliyun.com/raspbian/raspbian/ bullseye main non-free contrib
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ bullseye main non-free contrib

sudo nano /etc/apt/sources.list.d/raspi.list

编辑 /etc/apt/sources.list.d/raspi.list 文件,删除原文件所有内容,用以下内容取代:

deb http://mirrors.aliyun.com/raspberrypi/ bullseye main

树莓派安装cURL和XMLReader的简单方式

在树莓派上安装WordPress,如果需要SSL安全链接或Astra这样的经典主题,这时就需要cURL和XMLReader环境支持,这两个环境如何建立,网上有大量资料可供参考,但都比较复杂而且容易安装失败,本站之前也提供了类似方法。为方便大家越过这些非关键但必要的步骤,这里总结一下简单易用的环境搭建方法(我用的是php7.4,各位根据自己的版本修改即可):

1、安装cURL

sudo apt-get install php7.4-curl

2、安装XMLReader

sudo apt install php7.4-xml

安装完成后需要重启apache

sudo service apache2 restart

WordPress人气主题Astra去掉底部版权信息的方法

Astra是WordPress非常有名的主题,深受广大网管喜爱,但在安装好Astra主题后,默认它会在网站底部添加一个指向Astra官网的链接,大多数情况下大家并不希望出现这些信息,此时可用Astra自带的功能将其去掉,具体如下:

打开主题自定义,选择页脚选项

然后选择 页脚栏,找到区域1的自定义文本框,这里就是我们在页脚看到的所有文字,其中[theme_author]短代码表示的就是Astra主题链接

这里我们选择将其修改成需要的信息,当然你也可以使用html代码添加链接等其他格式的内容

最后点击 发布 即可

真正的智能家庭中心Home Assiatant

智能家居也是家庭服务器的重头戏。有人问那些智能设备厂家不是都有服务器吗?为什么还要大费周章去自己搭建服务器。原因有两个:一是因为每家智能家居平台都各自封闭,要想打通不同平台的智能家居解决方案就需要自己搭建服务器;二是国内互联网企业窃取用户隐私的行为有目共睹,已经是行业顽疾,自己搭建服务器至少没有那么受制于平台。

文章图片1

homeassistant是一个很完善的开源智能家居解决方案,我目前用的也是homeassistant。

一、docker安装homeassistant

homeassistant可以直接安装,也可以基于docker安装,理论上直接安装更好一点。但是我习惯了用docker搭建服务:

sudo docker run -d--name homeassistant--privileged--restart=unless-stopped-p 8123:8123-e TZ=Asia/Shanghai-v /home/hass/config:/configghcr.io/home-assistant/home-assistant:stable

安装之后通过http://IP:8123访问控制中心

二、安装HACS

homeassistant一大门槛就是通过yaml配置智能家居,但是现在的homeassistant已经有了很多插件让大家可以零基础上手,无需配置yaml也能使用。这就需要用到HACS,这个插件管理工具:

HACS 基于github安装,所以安装之前需要进行如下操作

1.到ipaddress查询github和githubusercontent的ip地址,并设置docker的host文件,接下来就按照我的操作进行安装即可:

sudo docker exec -i homeassistant bash#设置GitHub的IP地址echo 真实IP raw.githubusercontent.com >> /etc/hostsecho 真实IP github.com >> /etc/hosts#下载HACS一键安装脚本wget -O - https://raw.githubusercontent.com/hacs/install/main/install | bash -

安装完毕之后,需要用GitHub账户进行授权登陆:

如果你嫌上面的操作太麻烦,可以用下面的一键安装脚本,地址已经替换成国内源:

#一键安装脚本wget -q -O - https://cdn.jsdelivr.net/gh/al-one/hass-xiaomi-miot/install.sh | bash -

三、安装Xiaomi Miot Auto

接下来我们基于HACS安装一个Xiaomi Miot Auto的插件,这个插件的功能就是通过登陆小米账户,无需配置可以全部控制你的米家智能产品(目前这个插件适配的米家智能家居还是很多的)

文章图片2

安装插件之后,进入集成里搜索Xiaomi Miot Auto,添加集成并登陆你的米家账户,就可以调用其中的智能家居了。

四、配置仪表盘

当你的homeassistant接入智能家居之后,你就可以通过编辑仪表盘对智能家居进行操作和展示。

仪表盘的编辑并不复杂,第一步是选择仪表盘的类型:

文章图片3

然后就是将卡片添加实体(智能家居)这样就可以通过卡片展示或者操作智能家居了。

文章图片4

四、配置configuration.yaml

上面的方法是走了使用插件的捷径,实际上homeassistant可以通过编辑config的yaml文件实现更强大的功能。我举两个例子,第一个例子是通过编辑config添加onvif摄像头,关于摄像头的内容我之前在搭建家用安防的文章中已经有了介绍。大家可以看到我的homeassistant界面里有摄像头画面,不过homeassistant直接接入摄像头会有卡顿,建议通过zoneminder再接入homeassistant会流畅不少。

#摄像头camera:- platform: ffmpegname: mycaminput: -rtsp_transport tcp -i rtsp://admin:@192.168.1.107:10554/tcp/av0_0extra_arguments: -pred 1 -q:v 2 -s 1280x720ffmpeg:ffmpeg_bin: /usr/bin/ffmpeg

我们还可以通过homeassistant的传感器检测功能,把服务器的CPU、内存、硬盘等情况展示出来:

#传感器sensor:- platform: systemmonitorresources:- type: disk_use_percent- type: memory_use_percent- type: processor_use- type: last_boot

效果就是:

文章图片5

五、安装安卓客户端

手机端还可以通过F-Drorid安装HomeAssistant手机APP,通过智能手机对家里的智能家居进行操控。

另外homeassistant还可以接入prometheus,已经进行各种智能家居联动(甚至是不同平台的智能家居联动)和进行警报。

最新电视源

最新网络电视播放链接,对于喜欢自己diy机顶盒的朋友是好资源,其实用树莓派 zero 做一个机顶盒也就几十块钱,频道多到眼花缭乱。当然对于不喜欢捣鼓技术的也可以电脑直接播放。下面放出链接(直接下载TV.txt文件即可):

GIMP给图片重新着色和抠图

打开图片
在工具菜单中选择“按颜色选择”
删除选择的颜色区块
删除后的效果
在编辑菜单中选择“以前景色填充”
填充后的效果
修改剩下的区域
按同样方式去掉背景后的最终效果

如果是给文字描边、抠图,方法类似。

如果想达到更好的效果,可以搭配MAC系统的图片预览工具使用高清放大能力。

经过上述处理过的图片锯齿小,图片清晰

树莓派安装WordPress总结

树莓派上安装wordpress主要包括以下几个步骤和注意点:

1、烧录树莓派系统到sd卡或emmc

2、更新系统

apt-get update

apt-get upgrade

3、安装php、mysql、wordpress

修改上传文件大小限制

php.ini

sudo nano /etc/php/7.4/apache2/php.ini
修改upload_max_filesize和post_max_size这两处
upload_max_filesize = 50M, 将后面的50M修改为自己想要的大小。
post_max_size = 20M, 将这个20M修改为自己想要的大小
sudo service apache2 restart

创建数据库

wordpress

修改版权信息

footer.php

4、安装cpolar(用于远程访问)

5、安装wordpress ssl 插件

6、修改rc.local设置开机启动

sudo nano /etc/rc.local

7、配置看门狗(非必要,但强烈建议,可以大幅减少不必要的维护)

以上步骤完成后就可以通过wordpress发博客了

附录:

WordPress修改php.ini的方法:首先找到并打开php.ini文件;然后将内容配置为“file _ uploads=onupload _ tmp _ dir等等。最后,保存更改。

wordpressphp . ini修改PHP上传文件大小限制方法详解

打开php.ini,先找到它

file _ uploads=on是否允许通过HTTP上传文件的开关。默认值为开,这意味着开

upload _ tmp _ dir文件将被上传到临时文件在服务器的存储位置。如果未指定,将使用系统默认的临时文件夹

upload _ max _ filesize=8m看文本业务,也就是最大允许文件大小。默认为2M

post _ max _ size=8m指PHP通过表单POST可以接收的最大值,包括表单中的所有值。默认值为8M

一般设置好以上四个参数后,上传一个=8M的文件不是问题,网络正常的时候。

但是如果你想上传8M大的文件,只设置以上四项当然可以。

进一步配置以下参数

max _ execution _ time=600每个PHP页面运行的最大时间值(秒),默认值为30秒

max _ input _ time=600默认情况下,每个PHP页面接收数据所需的最长时间是60秒

memory _ limit=8m默认情况下,每个PHP页面消耗的最大内存是8M。修改以上参数后,在网络允许的正常情况下,可以上传大容量文件

最大执行时间=600

最大输入时间=600

memory_limit=32m

file_uploads=on

upload_tmp_dir=/tmp

upload_max_filesize=32m