我正在运行一个家庭自动化服务器(实际上是我用作 NAS 的同一台 Linux 机器),我想将我的 ConnBee 连接到它以读取传感器。
我觉得很奇怪deconz在其依赖项中只有一个带有 Qt 的二进制文件。 我知道它可以通过deconz.service
在无头模式下运行,但是包本身引入了很多 X11(和 Wayland)相关的包,这对于无头(服务器)系统来说是愚蠢的。
我建议的解决方案是将deconz
拆分为多个二进制文件(甚至包),以便您可以将其作为守护程序运行,而无需安装 GUI 的所有依赖项。
我不确定你在二进制文件的无头代码路径中使用了多少QtNetwork之类的东西,所以如果无头操作仍然需要很多,请随意放弃我的建议。
唯一的选择(我目前正在使用)是设置一个包含所有 X11 包的 Debian/Ubuntu 容器,仅用于运行deconz 。 在我看来,这太过分了,但至少它使“主机系统”(NAS)最小化。
我想在本节中感谢您为 Zigbee 相关项目所做的所有工作和努力! 我非常感谢您选择了一种开放的开发风格,可以与社区产生协同效应。
@manup
我绝对同意 GUI 和无头部分需要分成两个包。 这实际上已经在内部进行了相当长的一段时间。 deCONZ 早期并没有以无头思想开发,现在有许多无法轻易分离的混合类。 这种重构正在发生,但速度很慢,没有 ETA。
Qt 本身将作为依赖项保留,但无头设置不需要 X11/Wayland 相关部分。
一个长期目标是通过 REST-API 公开 GUI 节点部分,以便即使对于无头安装,远程客户端也可以显示具有 deCONZ GUI 的所有功能的交互式节点,例如在浏览器中。
建议的替代方案实际上是在超薄无头版本到来之前保持主机系统 X11 空闲的唯一解决方法。
我知道这有点离题,但我想快速报告一下我使用容器化解决此 GUI 依赖项的尝试。
我知道有一个官方的 Docker 镜像可用,但老实说,我更喜欢 LXC 或普通的 systemd-nspawn 容器而不是 Docker,并且我的 NAS 上已经有其他 LXC 容器,所以我尝试使用它。 毕竟,这些技术依赖于相同的内核隔离机制,因此它们应该给出可比较的结果——或者至少我是这么认为的。
我设置了一个 Ubuntu 18.04 容器,并严格按照ConnBee 安装指南安装 deCONZ。 然后我不得不跳几圈才能让应用程序运行:
lxc.cgroup.devices.allow
和lxc.mount.entry
用于设备节点)plugdev
组可以访问设备lxc.cap.keep
修复)(OT:我认为那里的打包还有改进的空间。与其依赖硬编码的 UID 1000,不如在包安装期间创建一个专门的用户,最好是 UID<1000 并且它的主目录低于/var/lib
以匹配许多其他守护进程的设置方式。很乐意为此发送拉取请求。)
然后该应用程序似乎工作了,即它没有吐出任何错误,我可以在 Phoscon 应用程序中设置基本网关配置。 但是,与实际 ConnBee 硬件相关的一切都不起作用。 Phoscon 显示设备版本,但不显示固件版本,所有 ZigBee 属性(通道等)都归零。 我无法绑定任何传感器。
所以我最终用官方的_stable_镜像刷了一个剩余的Raspberry Pi 3。 有了它,现在一切正常,我将所有传感器都集成到了一个漂亮的 Grafana 仪表板中。
(OT:Pi 映像有其自身的故障,例如,在其默认配置中,它试图在一个无限循环中启动hostapd
,该循环在一周内产生了大约 700 MiB 的日志(可怜的 SD 卡!)和一吨不必要的负载。我很乐意发送拉取请求以改进设置(我碰巧为嵌入式设备制作图像作为我的日常工作),但还没有找到合适的存储库。)
一个长期目标是通过 REST-API 公开 GUI 节点部分,以便即使对于无头安装,远程客户端也可以显示具有 deCONZ GUI 的所有功能的交互式节点,例如在浏览器中。
那将是梦想成真
最有用的评论
我绝对同意 GUI 和无头部分需要分成两个包。 这实际上已经在内部进行了相当长的一段时间。 deCONZ 早期并没有以无头思想开发,现在有许多无法轻易分离的混合类。 这种重构正在发生,但速度很慢,没有 ETA。
Qt 本身将作为依赖项保留,但无头设置不需要 X11/Wayland 相关部分。
一个长期目标是通过 REST-API 公开 GUI 节点部分,以便即使对于无头安装,远程客户端也可以显示具有 deCONZ GUI 的所有功能的交互式节点,例如在浏览器中。
建议的替代方案实际上是在超薄无头版本到来之前保持主机系统 X11 空闲的唯一解决方法。