Mein IO-Broker soll mir Texte senden können – per Signal. Allerdings wollte ich keinen Adapter verwenden, bei dem ich in Abhängigkeit eines Dritten bin. Es musste also eine alternative Lösung her.
Zusammengefasst sollen einfache Textnachrichten per Signal versendet werden. Ich brauche dafür auch keine eigene Telefonnummer, ich verlinke die Instanz gegen meine eigene Nummer. Dass meine Waschmaschine fertig ist, darf gerne als Notiz an mich selbst ankommen. Mich interessiert die Nachricht, nicht von wem diese stammt.

Wenn Cloud-basierte Dienste in der Lage sind Signal-Nachrichten zu versenden, dann müsste das mein lokales System doch ebenfalls können. Gefunden habe ich bei meiner Suche ein kleines Projekt auf GitHub, welches genau dies ermöglicht: https://github.com/AsamK/signal-cli. Also genau das, was ich suchte um von der Kommandozeile aus Nachrichten zu versenden.

Mein IO-Broker läuft auf Ubuntu 24.04. Sinngemäß funktioniert diese Anleitung auch für andere Systeme sowie einer Raspberry Pi basierten Lösung oder was auch immer. Zusammengefasst: Irgendeine Linux-Anwendung soll Nachrichten per Signal versenden. In dem Fall, oder bei den kommenden Ubuntu-Versionen, müssen die entsprechenden Versionsnummern der eingesetzten Software geändert werden.

 

Installation

Im ersten Schritt wird die benötigte Software installiert. signal-cli installiere ich unter /opt – behalte aber die Versionsnummer im Pfad bei. /opt/signal-cli wird dann als Symlink auf die jeweils aktuelle Version gesetzt. Damit kann man bei Updates ohne Probleme zur aktuellen oder wieder zurück zur Vorgängerversion springen. signal-cli benötigt ein installiertes Java. Um einen QR-Code für die Verbindung zwischen Signal auf dem Smartphone und meinem IO-Broker zu erzeugen, wird an der CLI ein QR-Code erstellt und angezeigt. Dafür ist qrencode notwenig.
# Zum Benutzer iobroker wechseln
sudo -u iobroker bash

# Signal darüber informieren, sich zu verbinden
signal-cli link -n iobroker > /tmp/signal.txt &

# Kurz warten und den QR-Code erstellen
qrencode -t ANSI `cat /tmp/signal.txt`

 

# Natürlich sollte hier das jeweils aktuelle Release von der GitHub Seite ausgewählt werden ;-)
wget https://github.com/AsamK/signal-cli/releases/download/v0.13.9/signal-cli-0.13.9.tar.gz

# entpacken ...
tar xvfz signal-cli-0.13.9.tar.gz

# ... und nach /opt verschieben. Wie erklärt noch den SymLink setzen.
mv signal-cli-0.13.9 /opt/
ln -sv signal-cli-0.13.9/ signal-cli

# Falls noch nicht vorhanden: Java installieren
apt install openjdk-21-jre
# Und gleich noch qrencdoe
apt install qrencode
Nun kommt der eigentliche interessante Teil: signal-cli muss initial einmalig auf mein Signal verbunden werden. Da IO-Broker Nachrichten versenden können soll, wechsle ich im ersten Schritt per sudo zum Benutzer iobroker.

Hierbei wird via signal-cli der Link-Vorgang initiiert. Dies muss gestartet werden und läuft im Hintergrund weiter. Für den Fall, dass man zu langsam ist und die Sitzung beendet wird, beginnt man einfach nochmals von vorne. Sobald der Link-Vorgan im Hintergrund läuft, kann man den QR-Code erstellen. Damit dieser korrekt dargestellt wird, sollte die Konsole entsprechend groß genug sein. Sobald man den QR-Code hat wechselt man zum Smartphone, startet Signal und wählt Einstellungen/Gekoppelte Geräte/Neues Gerät und folgt den Anweisungen. Signal ist nun verbunden, in der Liste der vertrauten Geräte erscheint der IO-Broker.

Integration in IO-Broker

Eine erste Testnachricht wird wie folgt verschickt:

date | ./signal-cli -u +49177....24 send --notify-self --message-from-stdin +49177....24

Die Nummer ist natürlich gegen die eigene Handynummer zu tauschen. Es sollte eine Notiz an einen selbst ankommen.

Um aus IO-Broker heraus einfacher Nachrichten versenden zu können, habe ich den obigen Befehl in ein kurzes Shell-Skript gepackt. Auch hier ist die eigene Nummer entsprechend anzupassen.

#!/bin/sh
# Ein einfaches Hilfsskript um per Signal-Nachrichten zu versenden
NO="+49177....14"
cat | /opt/signal-cli/bin/signal-cli -u $NO send --notify-self --message-from-stdin $NO

Dieses Skript habe ich unter /usr/local/bin/signal-send abgelegt. Zeit, das Ganze im IO-Broker zu integrieren. Dafür habe ich ein einfaches Blockly-Skript erstellt. Die Variable Message dient hier nur als Platzhalter und kann natürlich um beliebige Objekte erweitert oder ausgetauscht werden.

Fertig

Die Testnachricht kam an, alles funktioniert wie es soll. Mein IO-Broker teilt mir nun das ein oder andere wichtige Ereignis via Signal mit: Die Waschmaschine im Keller, welche fertig ist und noch viele weitere, spannende Dinge.