Kategorien
Themenabend

Themenabend: Home Assistant

Langsam hat sich der Themenabend am ersten Chaostreff im Quartal als fester Bestandteil in unserem Kalender etabliert. In der dritten Iteration ging es heute um die Smarthomeplattform Home Assistant. Markus hat den Abend mit einem tiefgehenden Einblick in seine persönliche Instanz gefüllt.

Los ging es mit einem Überblick über die Dashboards, die Markus einsetzt. Das sind Unterseiten die ausgewählte Inhalte anschaulich darstellen. Viele sind direkt in Home Assistant eingebaut und erfordern nur wenig Anpassung, um auf einen Blick erkennen zu können, was sich im eigenen Heim gerade tut. Besonders beeindruckend war das Energie-Dashboard und so haben wir uns einige Zeit mit den zugehörigen Details beschäftigt. Welche Möglichkeiten es zum Beispiel gibt, Strom-, Wasser- und Gaszähler auszulesen und in Home Assistant sichtbar zu machen.

Weiter ging es mit Automationen, die wie auch die Dashboards über die Weboberfläche angelegt und verwaltet werden können. Die Zeiten in denen längliche YAML Dateien bearbeitet werden mussten, um ein halbwegs funktionierendes Smarthome zu bekommen sind eindeutig vorbei. Wobei die Option zum YAML hacken natürlich immer noch vorhanden ist, es ist nur nicht mehr notwendig.

Eine der Automationen die uns Markus zeigte, zielte auf die Anzeige eines Dashboards ab. Um Temperatur, Termine und andere Informationen unkompliziert sichtbar zu haben, hängt im Hausflur ein altes Android-Tablet mit Home Assistant App. Die meiste Zeit ist der Flur leer und das Tablet soll nicht unnötig Strom verschwenden, also ist das Display aus. Sobald der Bewegungsmelder im Flur auslöst, wird eine Automation ausgelöst, die über die Home Assistant App das Display einschaltet. Und wenn der Hausflur verlassen wird, der Bewegungsmelder also keine Bewegungen mehr registriert, wird das Display über die Timeout-Funktion wieder ausgeschaltet.

Gegen Ende gab es dann noch Diskussionen zu verschiedenen Protokollen und deren Implementierungen sowie ein paar Best Practices auf die man beim Aufbau seines Smarthomes achten sollte.

  • wenn man gewillt ist ein wenig zu basteln, kann man mit Hardware von AliExpress viel Geld sparen
  • ESPHome macht die Arbeit mit Mikrocontrollern und Sensoren einfach
  • ZigBee ist nicht ZigBee: mit Version 3.0 gibt es viele Neuerungen und eine Mischung unterschiedlicher ZigBee-Versionen funktioniert nicht immer gut
  • Matter ist zwar die Zukunft, aber reine Zigbee-Geräte sind oft günstiger
  • Frigate nimmt Videostreams von Kameras auf und erkennt Objekte und Bewegungen. Außerdem können Zonen für Erkennung oder Ausschluss definiert werden. So löst das Eichhörnchen im Baum nach entsprechender Konfiguration keine Benachrichtigung mehr aus, oder eben explizit doch.
  • Music Assistant ist eine App für Home Assistant, die alle Audioquellen (Spotify, Audible, Navidrome, Audiobookshelf, …) mit allen halbwegs smarten Lautsprechern (AirPlay, Sonos, DLNA, …) verbindet und Multiroomsetups einfach konfigurierbar macht

Nächster Themenabend: Balkonkraftwerke

Jan wird uns am 14. Juli über die kleinen und großen Probleme mit Solarbalkonkraftwerken berichten, wenn man als Mieter an eine unwillige Hausverwaltung gerät. Und mit etwas Glück läuft seine Anlage bis dahin und wir können auch Erfahrungen aus der Praxis austauschen.

Wenn ihr Ideen für unsere nächsten Themenabende habt, meldet euch gerne in unserem Matrix-Channel.

Kategorien
Themenabend

Themenabend: eBPF

Heute hat sich Markus daran versucht uns innerhalb von etwa 2 Stunden das Thema eBPF zu erklären. Das Thema ist durchaus komplex, aber versuchen wir, uns dem Ganzen langsam zu nähern.

Was ist eBPF?

Grob gesagt ermöglicht eBPF das Verhalten des Linux-Kernels zur Laufzeit zu beeinflussen, zu beobachten und zu erweitern, ohne eigene Kernelmodule zu schreiben oder den Kernel neu kompilieren zu müssen.

Ursprünglich stammt BPF aus dem Jahr 1997 und wurde als Packet Filter für BSD entwickelt, später dann in den Linux-Kernel übernommen.

Seit 2014 wurde BPF massiv erweitert – daraus entstand eBPF, das heute weit mehr kann als nur Netzwerkpakete filtern.

Heutzutage werden die Begriffe BPF und eBPF meist synonym verwendet.

Grundsätzlich ist eBPF eine virtuelle Maschine im Kernel, in der kleine Programme sicher ausgeführt werden können.

Diese Programme können sich z.B. an folgende Ereignisse hängen:

  • Systemaufrufe (syscalls)
  • Netzwerk-Events
  • Tracepoints
  • XDP (sehr frühe Paketverarbeitung, teils direkt auf der Netzwerkkarte)

Wichtig dabei: eBPF-Programme werden vor dem Laden verifiziert. Der Kernel stellt sicher, dass sie nicht abstürzen, keine Endlosschleifen enthalten und nur erlaubte Operationen ausführen.

„Compile once, run everywhere“ (CO-RE)

Ein zentrales Konzept moderner eBPF-Entwicklung ist CO-RE (Compile Once, Run Everywhere).

Das bedeutet:

  • eBPF-Programme müssen nicht für jeden einzelnen Kernel neu gebaut werden
  • sie laufen – einmal kompiliert – auf sehr vielen Kernel-Versionen
  • kein Reboot nötig
  • deutlich portabler als Kernel-Module
  • Änderungen müssen nicht upstream in den Kernel gebracht werden (was oft Jahre dauert bis die Änderungen in der Distribution der Wahl verfügbar sind)

Auf praktisch allen heutigen Linux-Kerneln ist eBPF bereits standardmäßig aktiviert.

Aufbau: Kernelspace & Userspace

Ein eBPF-Setup besteht fast immer aus zwei Teilen:

1. eBPF-Programm (Kernelspace)

  • läuft in der eBPF-VM im Kernel
  • meist: 1 Programm = 1 Funktion
    • denn Funktionsaufrufe sind nur sehr eingeschränkt möglich (oder müssen durch Inlining umgangen werden)
  • sollte schnell und leichtgewichtig sein
    • langsamer Code könnte sonst das ganze System ausbremsen

2. Userspace-Programm

  • lädt das eBPF-Programm in den Kernel
  • hängt es an Events (z.B. syscalls, Netzwerk-Events, Tracepoints)
  • kommuniziert über BPF-Maps (z.B. Ringbuffer) mit dem Kernel-Code
  • hier findet das „Heavy Lifting“ statt (Auswertung, Visualisierung, Logging, …)

Typischer Ablauf

  • Code zu eBPF-Bytecode kompilieren
  • eBPF-Programm in den Kernel laden
    • z.B. mit eigenem Userspace-Tool oder
    • bpftool prog load ...
  • und an Events hängen auf die es lauschen soll
    • auch wieder entweder mit eigenem Userspace-Programm, oder
    • bpftool prog attach ...
  • Kommunikation zwischen eBPF-Programm und Userspace-Programm über BPF-Maps

Welche BPF-Programme gerade auf dem eigenen System laufen kann man mit folgendem Befehl herausfinden:

bpftool prog

eBPF-Programme bleiben so lange geladen, wie noch etwas auf sie referenziert, z.B.:

  • das Userspace-Programm läuft noch
  • ein Netzwerk-Interface ist noch verbunden

Das Userspace-Programm kann man relativ einfach beenden, das hat man ja im Normalfall auch selbst gestartet. Netzwerk-Interfaces lassen sich aber z.B. wie folgt detachen:

bpftool net detach xdp dev eth0

Show me the Code!

Als erstes Beispiel haben wir dann folgenden Python-Code angeschaut. In diesem vereinfachten Beispiel wird der eBPF-Code als Text innerhalb einer Variablen gespeichert und über das Python-Modul bcc in den Kernel geladen und an den syscall execve gehängt.

Somit wird jedes Mal, wenn ein Programm gestartet wird „Hello World!“ in den Trace-Buffer geschrieben.

#!/usr/bin/python3
from bcc import BPF
import sys

program = r"""
int hello(void *ctx) {
    bpf_trace_printk("Hello World!");
    return 0;
}
"""

b = BPF(text=program)
syscall = b.get_syscall_fnname("execve")
b.attach_kprobe(event=syscall, fn_name="hello")

try:
    b.trace_print()
except KeyboardInterrupt:
    sys.exit(0)

Wenn ich das auf meinem System ausführe und in einer anderen Shell ein ls ausführe sieht die Ausgabe z.B. so aus:

$ sudo python3 helloworld.py 
b'           <...>-363432  [019] ...21 183556.882255: bpf_trace_printk: Hello World!'
b'           <...>-363434  [012] ...21 183556.894724: bpf_trace_printk: Hello World!'

In diesem Beispiel wird der globale Trace-Buffer genutzt. In der Praxis verwendet man meist eigene Ringbuffer, um sauber nur mit dem eigenen eBPF-Programm zu kommunizieren.

Weitere Anwendungsfälle

Wie schon angesprochen kann man damit auch Netzwerkpakete analysieren/filtern etc. Hierzu haben wir uns das Beispiel aus learning ebpf – chapter 8 angesehen. Das würde hier allerdings jetzt den Rahmen sprengen. Markus konnte das Buch dazu allerdings empfehlen, falls ihr euch näher damit beschäftigen wollt.

Auch nftables verwendet intern teilweise eBPF und wenn man richtig tief einsteigen will kann man mit dem Tool pwru (Packet, where are you?) den Weg von Paketen durch den Kernel nachvollziehen.

Weitere Infos zu eBPF gibt’s in deren Dokumentation und wie gesagt hat uns Markus auch die Beispiele aus https://github.com/lizrice/learning-ebpf und das dazugehörige Buch empfohlen.

Fazit

eBPF ist eines der mächtigsten Werkzeuge im Linux-Umfeld geworden, wenn es um:

  • Observability
  • Netzwerk
  • Security
  • Tracing
  • Performance-Analyse

geht. Und das alles, ohne den Kernel patchen oder neu starten zu müssen.

Next up: Themenabend Heimautomatisierung mit HomeAssistant

Bei der Themenwahl für den nächsten Themenabend waren wir uns zunächst unschlüssig. In der anschließenden Diskussion wurde jedoch schnell klar, dass aktuell viele von uns an Projekten rund um Heimautomatisierung arbeiten.

Um nur ein paar der Themen anzuteasern, die aufkamen:

  • Balkonkraftwerk
  • Auslesen von Stromzählern per IR-Diode und ESP
  • Heizungen automatisch beim Lüften abdrehen inkl. Benachrichtigungen aufs Handy, wenn die Fenster zu lange offen sind
  • und das Ganze dann natürlich idealerweise komplett lokal und ohne Cloud-Zwangsanbindung

Wir werden wir uns also beim nächsten Themenabend am 7. April zusammen das Thema Heimautomatisierung (vmtl. mit Fokus auf HomeAssistant) ansehen.

Wenn ihr Ideen für unsere nächsten Themenabende habt meldet euch gerne in unserem Matrix-Channel.

Kategorien
Themenabend

Themenabend: Typst, besseres LaTeX?

Heute gab es den ersten Themenabend. Seinem Talk zum Thema Typst hat Jan den Untertitel „besseres LaTeX?“ gegeben. Eine steile These könnte man meinen, aber schauen wir uns mal an was Typst zu bieten hat.

Und warum will ich das verwenden?

Typst beschreibt sich selbst als „markup-based typesetting system“ ähnilch zu LaTeX. Jan hat zunächst einige Vorteile aufgezeigt, u.a. ist die Syntax sehr ähnlich zu Markdown und damit natürlich grundsätzlich Nerd-tauglich, da viele von uns tagtäglich mit Markdown arbeiten. Auch UTF-8 und Emoji lassen sich ohne Probleme verwenden 🥳 (was wohl in LaTeX nicht ganz so einfach ist).

Den Quelltext kann Typst dann wahlweise nach PDF, PNG, SVG, oder auch HTML exportieren.

Zahlreiche Formatierungsmöglichkeiten, automatisches Inhaltsverzeichnis, via Code aus CSV-Dateien befüllbare Tabellen/Grafiken sind alles Features die sich in wenigen Zeilen zeigen und erklären ließen. Auch Code-Blocks mit Syntax-Highlighting für verschiedenste Sprachen sind möglich und das ist erst der Anfang.

Bin dabei, wie fange ich am besten an?

Ein paar dieser Features könnt ihr in diesem Git-Repo in Verwendung sehen. Dort liegt u.a. auch der Vortrag selbst. Im folgenden Bild seht ihr die outline.typ links im Quelltext und rechts in der gerenderten Variante:

Auf den ersten Blick mag die Homepage nicht den Anschein machen, aber Typst ist Open Source, auf GitHub verfügbar und auch in den Paketquellen einiger Linux-Distributionen.

Um das Potential voll auszuschöpfen gibt es mit dem Typst Universe ein Verzeichnis mit Templates und Paketen die man sich einfach in sein Projekt ziehen kann z.B. im Beispiel von diesem Vortrag via

#import "@preview/minimal-presentation:0.7.0": *

Typst installiert die Pakete dann automatisch beim Export, man muss sich um nichts weiter kümmern.

Wenn man sich ansehen möchte wie das ganze gerendert aussieht kann man sich hiermit ein PDF generieren und öffnen lassen:

typst compile meine-tolle-präsentation.typ --open

Es gibt auch einen „watch“-Mode, falls man das nicht manuell bei jeder Änderung ausführen möchte, aber quasi live Änderungen sehen möchte:

typst watch meine-tolle-präsentation.typ

VIM oder Emacs?

Nachdem man sich bei Typst an die vorgegebene Syntax halten muss ist es selbstverständlich hilfreich, wenn einem der Editor dabei hilft, z.B. mit Syntax-Highlighting und Auto-Completion. Jan hat sich dazu in NeoVim den Language-Server Tinymist installiert, wie sich rausstellt gibt es auch für JetBrains IDEs ein Typst-Plugin, welches auf den ersten Blick auch gut funktioniert und sogar eine Live-Preview mitbringt.

Save The Date: Themenabend eBPF

Nach dem Themenabend ist vor dem Themenabend. Wir haben uns vorgenommen dieses Format nun quartalsweise anzubieten.

Der nächste Themenabend findet statt am 13.01.2026. Markus wird uns eine kurze Einführung zum Thema eBPF geben und wir werden zusammen versuchen anhand eines kleinen Beispiels in den Kernel einzutauchen.

Kategorien
Themenabend

Ankündigung Themenabend: Typst, oder LaTeX in gut

Nach unseren Erfahrungen mit dem Selfhosting-Camp wollen wir regelmäßige Themenabende veranstalten. Daher laden wir zum ersten Themenabend am 7. Oktober um 19 Uhr ins FabLab ein.

Das erste Thema ist Typst, ein Markup basiertes Textsatzsystem, ähnlich zu LaTeX, aber mit einfacherer Syntax.

Jan wird einen kurzen Einstieg geben und anschließend können wir uns verschiedene Einsatzmöglichkeiten ansehen und Fragen klären.