用 Cockpit 管理你的树莓派

用 Cockpit 建立你的树莓派的控制中心。

去年,我写了关于使用 Cockpit 管理我的 Linux 服务器的文章。它是一个基于 Web 的工具,为管理多个服务器及其相关的服务和应用提供了一个简洁、强大的界面。它还简化了日常的管理任务。

在这篇文章中,我将会介绍如何在树莓派基金会提供的标准操作系统树莓派 OS 上安装用于 Linux 服务器的 Cockpit Web 控制台。我还会简要介绍它的特性。

在树莓派 OS 上安装 Cockpit

在 sudo 权限下使用一个账户通过 SSH 登录你的树莓派系统。如果你还没有建立一个账户:

$ ssh pibox
alan@pibox's password:
Linux pibox.someplace.org 5.10.17-v7+ #1403 SMP Mon Feb 22 11:29:51 GMT 2021 armv7l
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May  4 09:55:57 2021 from 172.1.4.5
alan@pibox:~ $

在树莓派 OS 上安装 Cockpit Web 控制台和在 Linux 服务器上一样简单:

$ sudo apt install cockpit

Cockpit 只需要 60.4 KB 的磁盘空间。加上它的几个包依赖项,总使用量是 115MB。

安装过程将负责设置和启动服务。你可以使用 systemctl 命令来验证状态:

$ systemctl status cockpit.socket
● cockpit.socket - Cockpit Web Service Socket
   Loaded: loaded (/lib/systemd/system/cockpit.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Tue 2021-05-04 10:24:43 EDT; 35s ago
     Docs: man:cockpit-ws(8)
   Listen: 0.0.0.0:9090 (Stream)
  Process: 6563 ExecStartPost=/usr/share/cockpit/motd/update-motd  localhost (code=exited, status=0/SUCCESS)
  Process: 6570 ExecStartPost=/bin/ln -snf active.motd /run/cockpit/motd (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 2181)
   CGroup: /system.slice/cockpit.socket

使用 Cockpit

连接

默认的监听端口号是 9090。打开你最喜欢的 Web 浏览器并输入地址,如果是本机就输入: http://127.0.0.1:9090。如果远程登录就输入:http://192.168.0.100:9090,(这里假设IP地址为192.168.0.100)。


你现在可以使用你的普通账户登录。同样,这个账户上需要有使用 sudo 的权限 —— 很可能就是你用来 SSH 和运行 Apt 的那个账户。一定要勾选“为特权任务重用我的密码”。

管理你的树莓派

Cockpit 的初始屏幕以 “System” 页开始,提供当前 CPU 和内存使用的详细信息和图表。你可以从这个屏幕看到硬件细节。

通过点击每一项来展开左边的列(例如,日志、存储、服务等)。这些是标准的 Cockpit 部分,不言自明。让我快速描述一下每个部分。

日志

这部分展示了日志。它们可以根据日期和严重程度来过滤。

存储

存储部分展示了已经安装的物理驱动器和 RAID 设备。例如大小、序列号等细节都被展示了出来。还展示了读/写活动和实际空间使用的图表。存储的具体日志显示在底部。

网络

这部分展示了发送和接收活动、IP 地址以及网络特定的日志。你还可以使用相应的按钮添加更多的网络设备,如绑定、网桥和 VLAN。

账户

这里展示了已有的账户。点击每个账户来管理,或使用创建新账户按钮来添加用户。账户也可以被删除。

服务

这部分可以让管理员查看系统所有服务的状态。点击任何服务都会转到一个包含启动、重启和禁用的标准任务的屏幕。

应用程序

通常,这个屏幕提供了各种用于管理功能的应用程序,例如 389 目录服务器或创建 Podman 容器。但在我的树莓派 OS 上,这个屏幕只显示“没有安装或可用的应用程序”。在写这篇文章的时候,这个或许还没有实现。虽然,你可能会怀疑这类型的程序对于树莓派硬件来说是否太过沉重。

软件更新

对任何系统管理员来说,保持软件最新是最重要的任务之一。Cockpit 的软件更新部分可以检查并进行更新。

终端

Cockpit 最方便的特点之一是终端。你可以使用它,而不是打开一个单独的终端模拟器并使用 SSH。我使用终端来安装 ScreenFetch:

$ sudo apt install screenfetch

使用 ScreenFetch 生成了这张截图:

使用 Cockpit 的中心控制

Cockpit 在树莓派上的表现就像它在其他 Linux 系统上一样。你可以将它添加到仪表盘上进行集中控制。它允许企业在 Cockpit 作为管理仪表盘解决方案的任何地方,将基于树莓派的服务和系统整合到他们的整体 Linux 基础设施中。因为树莓派经常在高密度机架数据中心以无外接控制headless方式运行,而这些数据中心通常会缺乏 KVM 访问方式,这是非常方便的。

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

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系统的图片预览工具使用高清放大能力。

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