Deconz-rest-plugin: Verbesserung der Headless-Unterstützung unter Linux (GUI-Abhängigkeiten)

Erstellt am 30. Sept. 2020  ·  4Kommentare  ·  Quelle: dresden-elektronik/deconz-rest-plugin

Funktionsanfragetyp

Ich betreibe einen Heimautomatisierungsserver (eigentlich den gleichen Linux-Computer, den ich als NAS verwende), mit dem ich meine ConnBee zum Lesen von Sensoren verbinden möchte.

Ich finde es sehr seltsam, dass deconz nur eine Binärdatei mit Qt unter seinen Abhängigkeiten hat. Ich weiß, dass es über deconz.service im Headless-Modus ausgeführt werden kann, aber das Paket selbst zieht so viele X11- (und Wayland-) bezogene Pakete ein, was für ein Headless- (Server-) System dumm ist.

Beschreibung

Meine vorgeschlagene Lösung dafür wäre, deconz in mehrere Binärdateien (oder sogar Pakete) aufzuteilen, damit Sie es als Daemon ausführen können, ohne alle Abhängigkeiten für die GUI zu installieren.

Ich bin mir nicht sicher, wie viel von QtNetwork und dergleichen Sie im Headless-Codepfad der Binärdatei verwenden. Sie können meinen Vorschlag also gerne verwerfen, wenn der Headless-Betrieb immer noch viel davon erfordert.

Überlegte Alternativen

Die einzige Alternative (die ich derzeit nehme) besteht darin, einen Debian/Ubuntu-Container einzurichten, der alle X11-Pakete enthält, nur um deconz auszuführen . Das ist in meinen Augen ziemlich übertrieben, aber zumindest hält es das "Host-System" (NAS) minimal.

Zusätzlicher Kontext

Ich möchte diesen Abschnitt nutzen, um Ihnen für all die Arbeit und Mühe zu danken, die Sie in Ihre Zigbee-bezogenen Projekte gesteckt haben! Ich schätze es sehr, dass Sie einen offenen Entwicklungsstil gewählt haben, der Synergien mit der Community ermöglicht.

Feature Request

Hilfreichster Kommentar

Ich stimme absolut zu, dass die GUI- und Headless-Teile in zwei Pakete getrennt werden müssen. Das ist eigentlich schon seit geraumer Zeit ein laufender Prozess intern. deCONZ wurde in den Anfangsjahren nicht mit Headless-Gedanken entwickelt und hat jetzt viele miteinander vermischte Klassen, die nicht einfach getrennt werden können. Dieses Refactoring findet statt, aber in einem langsamen Tempo ohne ETA.

Qt selbst bleibt als Abhängigkeit erhalten, aber die X11/Wayland-bezogenen Teile werden für das Headless-Setup nicht benötigt.

Ein langfristiges Ziel ist es, die Teile des GUI-Knotens über die REST-API verfügbar zu machen, sodass ein Remote-Client auch für Headless-Installationen interaktive Knoten mit allen Funktionen der deCONZ-GUI anzeigen kann, beispielsweise in einem Browser.

Die vorgeschlagene Alternative ist tatsächlich der einzige Workaround, um das Host-System X11 bis zum Eintreffen der schlanken Headless-Version freizuhalten.

Alle 4 Kommentare

@manup

Ich stimme absolut zu, dass die GUI- und Headless-Teile in zwei Pakete getrennt werden müssen. Das ist eigentlich schon seit geraumer Zeit ein laufender Prozess intern. deCONZ wurde in den Anfangsjahren nicht mit Headless-Gedanken entwickelt und hat jetzt viele miteinander vermischte Klassen, die nicht einfach getrennt werden können. Dieses Refactoring findet statt, aber in einem langsamen Tempo ohne ETA.

Qt selbst bleibt als Abhängigkeit erhalten, aber die X11/Wayland-bezogenen Teile werden für das Headless-Setup nicht benötigt.

Ein langfristiges Ziel ist es, die Teile des GUI-Knotens über die REST-API verfügbar zu machen, sodass ein Remote-Client auch für Headless-Installationen interaktive Knoten mit allen Funktionen der deCONZ-GUI anzeigen kann, beispielsweise in einem Browser.

Die vorgeschlagene Alternative ist tatsächlich der einzige Workaround, um das Host-System X11 bis zum Eintreffen der schlanken Headless-Version freizuhalten.

Ich weiß, dass dies hier etwas vom Thema abweicht, aber ich möchte einen kurzen Bericht über meine Versuche geben, diese GUI-Abhängigkeit mithilfe der Containerisierung zu umgehen.

Mir ist bewusst, dass ein offizielles Docker-Image verfügbar ist, aber um ehrlich zu sein, bevorzuge ich LXC oder einfache systemd-nspawn-Container gegenüber Docker und hatte bereits andere LXC-Container auf meinem NAS, also habe ich versucht, damit zu arbeiten. Schließlich verlassen sich diese Technologien auf die gleichen Kernel-Isolationsmechanismen, sodass sie vergleichbare Ergebnisse liefern sollten - oder zumindest dachte ich das.

Ich habe einen Ubuntu 18.04-Container eingerichtet und mich strikt an die ConnBee- Installationsanleitung bezüglich der Installation von deCONZ gehalten. Dann musste ich mehrere Reifen springen, um die Anwendung zum Laufen zu bringen:

  • das USB-Gerät an den LXC-Container weiterleiten ( lxc.cgroup.devices.allow und lxc.mount.entry für den Geräteknoten)
  • GIDs synchronisieren, damit die udev-Regeln des Hosts das Gerät für die plugdev -Gruppe innerhalb des Containers zugänglich machen
  • Funktionen aus der systemd-Einheit entfernen, da ich nicht wollte, dass die Binärdatei sie hat (in meiner Konfiguration sind sie sowieso nicht erforderlich) und LXC sie blockiert hat (reparierbar mit lxc.cap.keep )

(OT: Ich sehe dort Verbesserungspotenzial in Bezug auf die Paketierung. Anstatt sich auf die fest codierte UID 1000 zu verlassen, wäre es viel besser, während der Paketinstallation einen dedizierten Benutzer zu erstellen, vorzugsweise mit UID<1000 und seinem Home-Verzeichnis unter /var/lib , um der Art und Weise zu entsprechen, wie viele andere Daemons eingerichtet sind. Würde gerne Pull-Anforderungen dafür senden.)

Die Anwendung schien dann zu funktionieren, dh sie hat keinen Fehler ausgespuckt und ich konnte die Grundkonfiguration des Gateways in der Phoscon App einrichten. Alles, was mit der eigentlichen ConnBee-Hardware zu tun hatte, funktionierte jedoch nicht. Phoscon zeigte die Geräteversion, aber nicht die Firmwareversion und alle ZigBee-Eigenschaften (Kanal usw.) wurden auf Null gesetzt. Ich konnte keine Sensoren binden.

Also habe ich einen übrig gebliebenen Raspberry Pi 3 mit dem offiziellen _stable_ Image geflasht. Damit funktioniert jetzt alles einwandfrei und ich habe alle meine Sensoren in ein schönes Grafana-Dashboard integriert.

(OT: Das Pi-Image hat seine eigenen Glitches, z. B. hat es in seiner Standardkonfiguration versucht, hostapd in einer Endlosschleife zu starten, was innerhalb einer Woche etwa 700 MiB an Protokollen produzierte (schlechte SD-Karte!) und eine Tonne von unnötiger Last. Ich würde gerne Pull-Requests zur Verbesserung des Setups senden (ich erstelle zufällig Images für eingebettete Geräte als meine Tagesbeschäftigung), habe aber kein geeignetes Repo gefunden.)

Ein langfristiges Ziel ist es, die Teile des GUI-Knotens über die REST-API verfügbar zu machen, sodass ein Remote-Client auch für Headless-Installationen interaktive Knoten mit allen Funktionen der deCONZ-GUI anzeigen kann, beispielsweise in einem Browser.

Das wäre ein wahr gewordener Traum

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

jan666 picture jan666  ·  4Kommentare

horchi picture horchi  ·  5Kommentare

7wells picture 7wells  ·  4Kommentare

qm3ster picture qm3ster  ·  3Kommentare

Thomas-Vos picture Thomas-Vos  ·  4Kommentare