[Modul-Vorstellung] Matrix-Bridge zur Anbindung von Matrix-Chats

Begonnen von Basti-K, 15 März 2026, 23:08:37

Vorheriges Thema - Nächstes Thema

Basti-K

Hallo zusammen,

da ich mein Smart Home gerne über einen sicheren und dezentralen Messenger steuern möchte, habe ich eine Bridge für den Matrix-Messenger geschrieben und möchte diese hier mit euch teilen.

Das Modul ermöglicht es, Nachrichten aus FHEM heraus an Matrix-Räume zu senden und (über Readings) auch auf eingehende Nachrichten zu reagieren.

Was ist das Ziel?
Die Bridge dient als Bindeglied zwischen FHEM und dem Matrix-Netzwerk. Sie basiert auf der matrix-js-sdk und wird als kleiner Node.js-Service betrieben, mit dem FHEM kommuniziert.

Features
Senden von Nachrichten: Statusmeldungen, Alarme oder Bilder direkt in Matrix-Räume pushen.

Empfangen von Nachrichten: Befehle via Chat an FHEM senden.

Sicherheit: Läuft im eigenen Netzwerk, unterstützt Ende-zu-Ende-Verschlüsselung (E2EE) je nach Konfiguration des genutzten Clients.

Installation & Repository
Die genaue Anleitung zur Installation der Abhängigkeiten und die Einrichtung in FHEM findet ihr hier:

👉 https://github.com/Basti77/fhem-matrix-bridge

Kurzanleitung (Beispiel)
Nachdem der Node-Service läuft, wird das Device in FHEM wie folgt definiert:

define MatrixBridge Matrix 127.0.0.1:3000

Anschließend könnt ihr Nachrichten absetzen:
set MatrixBridge send @user:matrix.org Hallo aus dem Wohnzimmer!

Feedback willkommen!
Das Projekt ist noch in der Entwicklung. Schaut es euch gerne an, testet es und gebt mir hier oder via GitHub Issues Feedback. Wenn ihr Verbesserungsvorschläge für die Einbindung in FHEM habt – immer her damit!

Viel Spaß beim Ausprobieren!

robbork

Hallo Basti-K,
danke für das Modul. "Send" funktionierte auf Anhieb zu meinem Matrix-Homeserver (continuwuity). Mehr habe ich noch nicht getestet.
Ich hatte es vorher schon mit mBielemeiers Matrix-Modul versucht, dann mit der überarbeiteten Version von Cooltux, als auch mit der erweiterten Version von pseudex. Bei Allen funktionierte der Login, auch eingehende Nachrichten in Room von anderen Clienten sind als Reading in FHEM angekommen, nur das Senden von FHEM aus in den Room habe ich nie zum Laufen gebracht.
Hast Du auch noch vor, eine Empfangsrichtung einzubauen?
Grüße Robbork

Basti-K

Hi!
Vielen Dank für das Feedback! Freut mich zu hören, dass die Send-Funktion auf Anhieb stabil bei jemand anders läuft.
Das war genau das Ziel, hier mal etwas Ordnung reinzubringen im Vergleich zu den ganzen alten Forks.

Zu deiner Frage: Ja, eine Empfangsrichtung (Inbound) ist definitiv geplant!

Technisch werde ich das über die Matrix /sync API mit Long-Polling (HttpUtils_NonblockingGet) lösen. So bekommt FHEM die Nachrichten in Echtzeit mit, ohne dass das System dabei blockiert wird.

Damit das Ganze sicher und alltagstauglich ist (gerade wenn der Bot in Gruppenräumen sitzt), habe ich mir folgendes Konzept für die Syntax und Sicherheit überlegt. Mich würde sehr interessieren, ob das so in deinem Sinne ist:

1. Sicherheit & Spam-Schutz:

botKeyword: Der Bot reagiert nicht auf jeden Text im Raum, sondern nur, wenn die Nachricht mit einem definierten Keyword beginnt (z.B. @fhem oder !fhem).
allowedUsers: Ein Attribut, in dem man die Matrix-IDs (z.B. @user:homeserver.de) hinterlegt, die den Bot überhaupt steuern dürfen. Alles andere wird ignoriert.
2. Das Raum-Konzept (wie beim gassistant):
Damit nicht versehentlich das halbe Haus geschaltet wird oder Fremde rohe FHEM-Befehle injizieren können, würde ich ein Attribut exposeRoom einführen.
Man legt in FHEM einfach die gewünschten Geräte in diesen Raum (z.B. "MatrixControl"). Der Bot darf nur Geräte steuern, die in diesem Raum liegen. Im Optimalfall wertet der Bot dann das alias Attribut der Geräte aus.

3. Geplante Syntax im Matrix-Chat:

@fhem list -> Der Bot schaut in seinen freigegebenen Raum und postet eine Liste der steuerbaren Geräte inkl. aktuellem Status (z.B. "Wohnzimmerlampe (off), Kaffeemaschine (on)").
@fhem Wohnzimmerlampe on -> Schaltet das Gerät mit dem entsprechenden Alias.
Optional könnte man noch ein Attribut allowRawCmds 1 einbauen, mit dem man als Admin (und nur man selbst) via @fhem cmd setstate Dummy 1 rohe FHEM-Befehle durchreichen kann.

Wäre das ungefähr das, was du dir vorgestellt hast und für deinen Anwendungsfall brauchbar?

Viele Grüße!

Basti

robbork

Hi,
wie ich sehe, hast Du dir schon richtig Gedanken gemacht.  :)
Für mich sind deine Gedanken dazu schon mehr als ausreichend. Die Beschränkungen (Keywords, allowedUser...etc.) halte ich auch für notwendig.
Ich wünsche Dir viel Erfolg bei der Umsetzung und werde den Fortschritt neugierig im Auge behalten.
Ich habe noch einen Hinweis zum jetzigen Stand. Ich habe heute testweise einen SVG Plot gesendet. In Android 16 mit Element X wird nur ein Ausschnitt, ausgehend von der Bildmitte, angezeigt. Der Rest links und rechts ist weggeschnitten. Drehe ich den Bildschirm, wird das Bild zwar skaliert, der Bildausschnitt bleibt aber gleich klein. Wenn ich das Bild antippe, öffnet sich der Bildbetrachter, das Bild (Plot) wird in kompletter Größe angezeigt, aber leider ohne Achsenbezeichnungen und ohne Überschrift.
Im Element Desktop unter Arch Linux mit Gnome 50 fehlen die Achsenbezeichnungen und die Überschrift komplett, aber das Bild ist komplett zu sehen.
Ich vermute, daß die Lösung dieses Problems sehr aufwändig ist. Ich halte es auch nicht für wichtig, wollte nur ein Feedback geben. Lass Dich davon bitte nicht entmutigen.  ;)

Grüße
robbork