SiSi: Unterschied zwischen den Versionen

Aus FHEMWiki
Keine Bearbeitungszusammenfassung
K (veraltete "source"-Angaben in "syntaxhighlight" geändert)
 
(21 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Diese Seite beschreibt, wie man das Signal Messenger Command Line Interface (CLI) unter Raspbian installiert und mit FHEM benutzt.
{{Infobox Modul
|ModPurpose=Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messenger Signal
|ModType=x
|ModForumArea=Codeschnipsel
|ModFTopic=84996
|ModTechName=32_SiSi.pm
|ModOwner=Quantum ({{Link2FU|35410|Forum}})}}
Das Modul [[SiSi]] ermöglicht den Versand von Nachrichten über den Instant-Messaging-Dienst [https://signal.org Signal] aus FHEM heraus.


Wir lassen '''signal-cli''' unter dem Benutzer '''fhem''' laufen, abweichend von der Dokumentation auf GitHub. Das Home-Verzeichnis dieses Users ist bei mir '''/opt/fhem/home'''. Dies muss im Folgenden angepasst werden, wenn Du ein anderes Home-Verzeichnis für den Benutzer '''fhem''' hast.
{{Randnotiz|RNTyp=r|RNText=Dieses Modul wird derzeit (letzte Änderung: August 2018) nicht mehr aktiv gepflegt. Es entsteht jedoch (ab Januar 2021) mit [[Signalbot]] ein weiteres Modul zur Unterstützung des Signal Messenger Protokolls.}}


Was man alles mit dem Signal Messenger CLI machen kann, ist auf der o.g. Github-Seite beschrieben.
Um dies zu ermöglichen, sind mehrere Schritte notwendig:
#Installation des [https://github.com/AsamK/signal-cli Signal Messenger Command Line Interface (signal-cli)].
#Registrierung einer Rufnummer bei Signal
#Einrichtung der [https://de.wikipedia.org/wiki/D-Bus D-Bus]-Schnittstelle
#Inbetriebnahme des FHEM-Moduls


== Installation von signal-cli ==


Es werden die Pakete '''haveged''' und '''openjdk-9-jre-headless''' benötigt.
Diese Anleitung geht davon aus, dass
*als Betriebssystem Debian oder Raspbian verwendet wird
*FHEM im Verzeichnis ''/opt/fhem'' installiert wurde (ansonsten müssen die Pfade in der Anleitung angepasst werden)


haveged dient dazu, genügend Entropie für den Zufallszahlengenerator zu erzeugen. Das Java-9-Runtime-Environment bringt schon die unbeschränkten kryptographischen Funktionen vorkonfiguriert mit, die in älteren Version mühsam nachinstalliert werden müssten. Ältere Java-Versionen müssen zuvor deinstalliert werden.


Als nächstes lädt man '''signal-cli-0.6.0.tar.gz''' von https://github.com/AsamK/signal-cli herunter. Im Abschnitt Installation der Beschreibung findet man einen Link zu den Binaries. Zum Zeitpunkt, an dem dieser Text verfasst wurde (12.11.2018) ist die aktuelle Version 0.6.0. Das Archiv wird ins Home-Verzeichnis von FHEM entpackt.
Alle in dieser Anleitung vorkommenden Textstellen in spitzen Klammern (z.B. <ErsetzMich>) sind durch eigene Werte zu ersetzen, sofern es sich nicht um Auszüge aus Konfigurationsdateien handelt.


Das folgende wird als Benutzer '''fhem''' ausgeführt, damit die Konfiguration im Home-Verzeichnis von '''fhem''' landet, und zwar in '''/opt/fhem/home/.config/signal'''.
==Voraussetzungen==
Um sowohl das ''signal-cli'' als auch das Modul verwenden zu können, müssen bestimmmte Linux-Pakete installiert sein. Im Folgenden eine Liste der Pakete für Debian/Raspbian:
*'''''libunixsocket-java'''''
*'''''dbus'''''
*'''''libnet-dbus-perl'''''
*'''''haveged''''' (Dient dazu, genügend Entropie für den Zufallszahlengenerator zu erzeugen.)
*'''''openjdk-11-jre-headless''''' (Es sollte eine Version >= 11 installiert werden. Welche genau, hängt von Betriebssystem und dem Installationszeitpunkt ab. Diese ist als Default JRE mit Debian Stretch verfügbar. Installationen, die auf einer früheren Debian Version aufsetzen, müssen gegebenfalls auf Stretch geupgraded werden). Die aktuellsten Informationen über das benötigte JRE findest du [https://github.com/AsamK/signal-cli#installation hier].


Man registriert man seine Festnetznummer (im Beispiel: +49xxxxxxxxxx) mittels '''signal-cli''' in einer Shell, um davon Signal-Nachrichten zu versenden:
Optional kann noch das Paket '''''shared-mime-info''''' installiert werden wenn ein gesendeter Anhang nicht direkt im Chatverlauf angezeigt werden soll, sondern erst durch einen Klick auf das Datei-Icon.


<source lang="bash">signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx register --voice</source>
Installation der Pakete in einem Rutsch:
sudo apt-get update
sudo apt-get install libunixsocket-java dbus libnet-dbus-perl shared-mime-info haveged openjdk-11-jre-headless


Wenn alles in Ordnung ist, erhält man keine Rückmeldung. Wenn es lange dauert, hat man nicht genug Entropie.  
==Installation des signal-cli==
Kurz darauf erhält man einen Sprachanruf auf Englisch, mit dem einem der sechsstellige Registrierungscode yyyyyy mitgeteilt wird. Um die Registrierung abzuschließen, führt man
[https://github.com/AsamK/signal-cli signal-cli] ist ein Kommandozeilen-Interface für [https://github.com/signalapp/libsignal-service-java libsignal-service-java]<ref>libsignal-service-java ist eine Java/Android Bibliothek zur Kommunikation mit dem Signal Messaging Service</ref>. Es unterstützt das Registrieren und Verifizieren einer Rufnummer sowie das Senden und Empfangen von Nachrichten.
 
Der erste Schritt zur Installation von ''signal-cli'' ist, die aktuellste Versionsnummer auf der GitHub-Seite des Projektes unter "[https://github.com/AsamK/signal-cli/releases Releases]" zu finden. Zum Zeitpunkt der Erstfassung dieser Anleitung war das die Version 0.6.0.
 
Anschließend wird die Release heruntergeladen und als Benutzer '''''fhem''''' in den Wurzelordner von FHEM (z.B. ''/opt/fhem'') entpackt.
<syntaxhighlight lang="text">
export VERSION=0.6.0
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
sudo -u fhem tar xf signal-cli-"${VERSION}".tar.gz -C /opt/fhem
</syntaxhighlight>
 
Zur einfacheren Handhabung kann der neu erstellte Ordner umbenannt und ein symbolischer Link in ''/usr/local/bin/'' erstellt werden.
<syntaxhighlight lang="text">
sudo mv /opt/fhem/signal-cli-"${VERSION}" /opt/fhem/signal-cli
sudo ln -sf /opt/fhem/signal-cli/bin/signal-cli /usr/local/bin/
</syntaxhighlight>
 
==Registrierung einer Rufnummer==
Um Signal nutzen zu können, ist eine Rufnummer zwingend erforderlich. Für diesen Fall empfiehlt es sich, eine Nummer zu verwenden, die nicht schon für die Kommunikation mit Signal verwendet wird. Zum Beispiel eine Festnetznummer.  
 
'''Alternativ''' kannst du den Signal Bot auch mit deiner eigenen Rufnummer verknüpfen, analog zum Verknüpfen deiner Rufnummer mit z.B. der Desktop Installation von Signal. Siehe dazu den Abschnitt "Verknüpfen mehrerer Accounts" weiter unten.


<source lang="bash">signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx verify yyyyyy</source>
=== Registrierung mit neuer Nummer ===


in der Shell aus. Wenn alles in Ordnung ist, erhält man keine Rückmeldung.
Die Registrierung einer Nummer läuft wie folgt ab:
#Registrierung der Nummer mittels ''signal-cli''
#Erhalt einer Textnachricht mit dem Verifizierungscode an angegebene Nummer. Wenn an der Rufnummer keine Textnachrichten empfangen werden können, kann - wie in diesem Beispiel - mit dem Parameter ''--voice'' ein Sprachanruf erzwungen werden. In beiden Fällen kann es durchaus etwas länger dauern, bis man den Verifizierungscode erhält.
#Verifizierung der Nummer mittels ''signal-cli''


Dann kann man Nachrichten an einen Signal Messenger auf dem Mobiltelefon mit der Nummer 49170zzzzzzzz mittels


<source lang="bash">signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx send -m "Greetings from FHEM!" +49170zzzzzzzz</source>
{{Hinweis|Alle der folgenden Befehle werden als Benutzer '''''fhem''''' ausgeführt, damit die Konfigurationsdateien im Home-Verzeichnis des Benutzers (z.B. ''~/.local/share/signal-cli'') landen.}}


senden. Wenn die Schlüssellänge bemängelt wird, hat man nicht die Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files installiert oder konfiguriert. Das sollte bei Java 9 aber nicht vorkommen.
Im ersten Schritt registriert man eine Nummer mittels ''signal-cli''.
<syntaxhighlight lang="text">sudo -u fhem signal-cli -u <Telefonnummer> register --voice</syntaxhighlight>
Wenn alles in Ordnung ist, erhält man keine Rückmeldung. Wenn es lange dauert, hat man nicht genug Entropie.  
Kurz darauf erhält man einen Sprachanruf auf Englisch, mit dem einem der sechsstellige Verifizierungscode yyyyyy mitgeteilt wird.


Ich hatte das Problem, dass die Sprachanrufe erst mit Stunden oder Tagen Verzögerung kamen (siehe [https://community.signalusers.org/t/call-verification-takes-forever/4479/11 Thread im Signal-Forum]). Dabei handelte es sich um einen vorübergehenden serverseitigen Fehler, der einige Tage bestand.
Im zweiten Schritt wird diese Nummer mit Hilfe des erhaltenen Codes verifiziert.
<syntaxhighlight lang="text">sudo -u fhem signal-cli -u <Telefonnummer> verify <VerificationCode></syntaxhighlight>
Auch hier gibt es keine Rückmeldung, solange alles funktioniert hat.


Um bei Updates von '''signal-cli''' nicht die Pfade anpassen zu müssen, kann man noch im Home-Verzeichnis von '''fhem''' einen symbolischen Link anlegen:


<source lang="bash">ln -s signal-cli-0.6.0 signal-cli</source>
War die Registrierung erfolgreich, können nun Nachrichten via ''signal-cli'' versendet werden:
<syntaxhighlight lang="text">sudo -u fhem signal-cli -u <RegistrierteNummer> send -m "Greetings from FHEM!" <Empfängernummer></syntaxhighlight>


== Einrichten der Kommunikation über DBus ==
=== Verknüpfen mehrerer Accounts ===
Das Verknüpfen mehrerer Devices / Installationen / Bots unter der selben Rufnummer nennt sich Provisioning und ist [https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning) hier] beschrieben. Es ist ähnlich dem Vorgehen der Registrierung einer neuen Telefonnummer, nur dass du hier deine eigene Nummer wiederverwenden kannst. ACHTUNG: Das bedeutet allerdings, dass alle Nachrichten, die über den Bot verschickt werden, unter deiner Nummer und somit unter deinem Account und Namen verschickt werden. Empfänger deiner Nachrichten sehen diese also als Teil deines Chats mit jenen Empfängern. Für den Empfänger ist daher nicht ersichtlich, dass die Nachrichten automatisiert von einem Bot verschickt wurden. Schickst du eine Nachricht an dich selbst, taucht diese in deinem Signal Messenger im Chat "Notiz an mich" auf.


Es werden die Pakete '''libunixsocket-java''', '''dbus''' und '''dbus-x11''' benötigt.
Um den Signal Bot mit deinem Account zu verknüpfen gehst du wie [https://github.com/AsamK/signal-cli/wiki/Linking-other-devices-(Provisioning) hier] beschrieben vor. Installiere am besten noch das Paket [https://fukuchi.org/works/qrencode/ qrencode].<syntaxhighlight lang="bash">
sudo apt-get install qrencode
</syntaxhighlight>Danach führst du diesen Befehl aus:<syntaxhighlight lang="bash">
sudo signal-cli link -n "optional device name" | tee >(xargs -L 1 qrencode -t utf8)
</syntaxhighlight>Dieser Befehl generiert einen QR Code im Terminal, den du mit deinem Hauptgerät (vermutlich dein Handy) scannst und somit das neue "Gerät" hinzufügst. Navigate in Signal dazu in die Einstellungen > Gekoppelte Geräte und wähle "Neues Gerät koppeln". Danach ist das Gerät erfolgreich verknüpft und du kannst wie unten beschrieben mit der Einrichtung fortfahren.


Es müssen als Benutzer '''root''' die folgenden Dateien angelegt werden:
== Einrichten der Kommunikation über D-Bus ==
Damit das FHEM-Modul über die D-Bus Schnittstelle mit ''signal-cli'' kommunizieren kann, ist die Einrichtung von D-Bus sowie die Erstellung eines [https://de.wikipedia.org/wiki/Systemd systemd]-Scripts notwendig.


'''/etc/dbus-1/system.d/org.asamk.Signal.conf'''
{{Hinweis|Alle der folgenden drei Dateien müssen als Benutzer '''''root''''' angelegt und editiert werden.}}


<pre>
;/etc/dbus-1/system.d/org.asamk.Signal.conf
Die Datei in einem Editor öffnen
sudo nano /etc/dbus-1/system.d/org.asamk.Signal.conf
und mit folgendem Inhalt befüllen
<syntaxhighlight lang="xml">
<?xml version="1.0"?> <!--*-nxml-*-->
<?xml version="1.0"?> <!--*-nxml-*-->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
Zeile 63: Zeile 119:
         </policy>
         </policy>
</busconfig>
</busconfig>
</pre>
</syntaxhighlight>


'''/usr/share/dbus-1/system-services/org.asamk.Signal.service'''


<pre>
;/usr/share/dbus-1/system-services/org.asamk.Signal.service
Die Datei in einem Editor öffnen
sudo nano /usr/share/dbus-1/system-services/org.asamk.Signal.service
und mit folgendem Inhalt befüllen
<syntaxhighlight lang="ini">
[D-BUS Service]
[D-BUS Service]
Name=org.asamk.Signal
Name=org.asamk.Signal
Exec=/bin/false
Exec=/bin/false
SystemdService=dbus-org.asamk.Signal.service
SystemdService=dbus-org.asamk.Signal.service
</pre>
</syntaxhighlight>
 


'''/etc/systemd/system/signal.service'''
;/etc/systemd/system/signal.service
Die Datei in einem Editor öffnen
sudo nano /etc/systemd/system/signal.service
und mit folgendem Inhalt befüllen.


<pre>
<syntaxhighlight lang="ini">
[Unit]
[Unit]
Description=Send secure messages to Signal clients
Description=Send secure messages to Signal clients
Zeile 87: Zeile 150:
Type=dbus
Type=dbus
Environment="SIGNAL_CLI_OPTS=-Xms2m"
Environment="SIGNAL_CLI_OPTS=-Xms2m"
ExecStart=/opt/fhem/signal-cli/bin/signal-cli -u +49xxxxxxxxxx --config /opt/fhem/home/.config/signal daemon --system
ExecStart=/opt/fhem/signal-cli/bin/signal-cli -u +49xxxxxxxxxxx --config /opt/fhem/.local/share/signal-cli daemon --system
User=fhem
User=fhem
BusName=org.asamk.Signal
BusName=org.asamk.Signal
Zeile 93: Zeile 156:
[Install]
[Install]
Alias=dbus-org.asamk.Signal.service
Alias=dbus-org.asamk.Signal.service
</pre>
</syntaxhighlight>
 
'''Achtung!'''
* Die Rufnummer im Script muss durch die in den vorigen Schritten registrierte ersetzt werden.
* Außerdem muss unter Umständen der Pfad des FHEM-Wurzelverzeichnisses angepasst werden.
* Der Pfad zur Konfigurationsdatei ist je nach signal-cli Version anders:
 
;<0.6.1:
$HOME/.config/signal/data/
oder
$HOME/.config/textsecure/data/
 
;>=0.6.1
$HOME/.local/share/signal-cli/data/
 
Sind alle Dateien angelegt, können die Services mit diesen Befehlen aktiviert und gestartet werden.
<syntaxhighlight lang="text">
sudo systemctl daemon-reload
sudo systemctl reload dbus.service
sudo systemctl enable signal.service
sudo systemctl start signal.service
</syntaxhighlight>
 
Ob alles funktioniert, kann wie folgt getestet werden:
*D-Bus:
sudo -u fhem dbus-send --system --type=method_call --print-reply --dest="org.asamk.Signal" /org/asamk/Signal org.asamk.Signal.sendMessage string:<Nachricht> array:string: string:<EmpfängerNummer>
*signal-cli über D-Bus:
sudo -u fhem signal-cli --dbus-system  send -m "<Nachricht>" <EmpfängerNummer>
 
== Einbindung des FHEM-Moduls ==
Solange das Modul '''32_SiSi.pm''' noch nicht via FHEM-Update verteilt wird, ist eine manuelle Installation notwendig. Das geschieht, in dem es von der [https://github.com/Quantum1337/32_SiSi.pm GitHub-Seite] des Modul-Autors heruntergeladen und in den FHEM-Ordner kopiert wird.
 
Der Befehl
wget https://raw.githubusercontent.com/Quantum1337/32_SiSi.pm/master/FHEM/32_SiSi.pm
speichert das Modul im aktuellen Verzeichnis.
 
Mit den folgenden Befehlen wird das Modul ins das FHEM-Verzeichnis verschoben und anschließend die Datei-Rechte angepasst.
sudo mv 32_SiSi.pm /opt/fhem/FHEM/
sudo chown fhem:dialout /opt/fhem/FHEM/32_SiSi.pm


Aktiviert wird das alles mit
Anschließend wird noch die lokale CommandRef aktualisiert:
cd /opt/fhem
sudo /usr/bin/perl contrib/commandref_join.pl


<source lang="bash">
Zum Abschluss wird das Modul noch FHEM bekannt gemacht. Dazu in der FHEM-Kommandozeile folgenden Befehl eingeben:
systemctl daemon-reload
reload 32_SiSi.pm
systemctl enable signal.service
systemctl reload dbus.service
</source>


Ob es funktioniert, kann man mit
==Verwendung des FHEM-Moduls==
<source lang="bash">signal-cli/bin/signal-cli --dbus-system  send -m "dbus working" +49170zzzzzzzz</source>
Die genaue Verwendung des Moduls 32_SiSi.pm ist in der CommandRef beschrieben. Hier deshalb nur ein kleines Beispiel.
austesten.


== Verwendung mit FHEM ==
SiSi-Device definieren:
define Signal SiSi


Es wird das Paket '''libnet-dbus-perl''' benötigt.
Dem Device mitteilen, dass es eine Verbindung zum signal-cli D-Bus Service herstellen soll:
attr Signal enable yes


Es wird das Modul '''32_SiSi.pm'' von https://github.com/Quantum1337/32_SiSi.pm verwendet. Am einfachsten wechselt man als Benutzer '''fhem''' ins Verzeichnis '''FHEM''' mit den Modulen und führt
Eine Standard-Empfängernummer definieren, falls im Befehlsaufruf keine angegeben ist:
attr Signal defaultPeer +49170zzzzzzzz


<source lang="bash">wget https://raw.githubusercontent.com/Quantum1337/32_SiSi.pm/master/FHEM/32_SiSi.pm</source>


aus. Die Datei sollte den richtigen Eigentümer haben. Bei mir sieht das so aus:
Anschließend kann aus FHEM heraus eine Nachricht gesendet werden:
set Signal msg Hurra, es funktioniert!


<source>-rw-r--r-- 1 fhem dialout 29375 Nov 24 22:09 FHEM/32_SiSi.pm</source>
===Zusammenspiel mit den Modulen Msg und Roommate===
Um mithilfe des Moduls [[Msg]] Signal-Nachrichten versenden zu können, ist im Device ''globalMsg'' das Attribut '''msgCmdPush''' zu setzen.
attr globalMsg msgCmdPush set %DEVICE% msg @%RECIPIENT% %MSG%


Idealerweise führt man jetzt noch <source lang="bash">/opt/fhem/contrib/commandref_join.pl</source> aus, um die Commandref zu regenerieren.
Optional kann ein Standard-Empfänger gesetzt werden der die Nachricht erhält, wenn beim Aufruf von ''Msg'' kein Empfänger angegeben wurde:
attr globalMsg msgContactPush <Signal-Device>:<Empfängernummer>
Danach kann mit <code>msg Testnachricht</code> eine Signal-Nachricht versendet werden.


Eine simple Definition in FHEM sieht so aus:


<source>
Werden {{Link2CmdRef|Anker=ROOMMATE|Lang=de|Label=ROOMMATE-Devices}} verwendet, kann jedem eine Kontaktadresse hinterlegt werden, damit beim Aufruf von ''Msg'' einfach der Device-Name anstatt der Nummer angegeben werden kann. (Funktioniert natürlich  bei jedem anderen Device auch. Aber ein ROOMMATE-Device macht das ganze anschaulicher.)
define sisi SiSi
<syntaxhighlight lang="text">
attr sisi enable yes
attr <ROOMMATE-Device> msgContactPush <Signal-Device>:<Empfängernummer>
attr sisi defaultPeer +49170zzzzzzzz
</source>


Du schickst eine Nachricht aus FHEM mit
z.B.:
attr rr_Max msgContactPush Signal:+49...
</syntaxhighlight>
Anschließend kann mit <code>msg @rr_Max Testnachricht</code> eine Nachricht an Max gesendet werden.


<source>set sisi msg Hurra, es funktioniert!</source>
==Hinweise==
Derzeit ist es aufgrund von Einschränkungen in der D-Bus-API noch nicht möglich, mit dem SiSi-Modul neue Fingerprints von Kontakten hinzuzufügen oder aus Gruppen auszutreten. Daher muss beides noch manuell auf der Linux-Kommandozeile erfolgen.


;Neuer Fingerprint
:Mit folgendem Befehl wird dieser Nummer wieder vertraut und ''signal-cli'' fügt den geänderten Fingerprint dann automatisch zu seiner Liste hinzu.
:<syntaxhighlight lang="text">sudo -u fhem signal-cli -u <FHEM-NUMMER> trust -a <Nummer mit geänderten Fingerprint></syntaxhighlight>


;Aus einer Gruppe austreten
:Soll die "FHEM-Signal-Rufnummer" aus einer bestehende Gruppe entfernt werden, kann dieser Aufruf von ''signal-cli'' verwendet werden.
:<syntaxhighlight lang="text">sudo -u fhem signal-cli -u <FHEM-NUMMER> quitGroup -g <GroupID></syntaxhighlight>


==Querverweise==
<references />


[[Kategorie:Signal]]
[[Kategorie:Signal]]

Aktuelle Version vom 9. November 2023, 11:54 Uhr

SiSi
Zweck / Funktion
Senden und Empfangen von Nachrichten (Text und Fotos) mit dem freien Messenger Signal
Allgemein
Typ Inoffiziell
Details
Dokumentation Thema
Support (Forum) Codeschnipsel
Modulname 32_SiSi.pm
Ersteller Quantum (Forum )
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Das Modul SiSi ermöglicht den Versand von Nachrichten über den Instant-Messaging-Dienst Signal aus FHEM heraus.

X mark.svgDieses Modul wird derzeit (letzte Änderung: August 2018) nicht mehr aktiv gepflegt. Es entsteht jedoch (ab Januar 2021) mit Signalbot ein weiteres Modul zur Unterstützung des Signal Messenger Protokolls.


Um dies zu ermöglichen, sind mehrere Schritte notwendig:

  1. Installation des Signal Messenger Command Line Interface (signal-cli).
  2. Registrierung einer Rufnummer bei Signal
  3. Einrichtung der D-Bus-Schnittstelle
  4. Inbetriebnahme des FHEM-Moduls


Diese Anleitung geht davon aus, dass

  • als Betriebssystem Debian oder Raspbian verwendet wird
  • FHEM im Verzeichnis /opt/fhem installiert wurde (ansonsten müssen die Pfade in der Anleitung angepasst werden)


Alle in dieser Anleitung vorkommenden Textstellen in spitzen Klammern (z.B. <ErsetzMich>) sind durch eigene Werte zu ersetzen, sofern es sich nicht um Auszüge aus Konfigurationsdateien handelt.

Voraussetzungen

Um sowohl das signal-cli als auch das Modul verwenden zu können, müssen bestimmmte Linux-Pakete installiert sein. Im Folgenden eine Liste der Pakete für Debian/Raspbian:

  • libunixsocket-java
  • dbus
  • libnet-dbus-perl
  • haveged (Dient dazu, genügend Entropie für den Zufallszahlengenerator zu erzeugen.)
  • openjdk-11-jre-headless (Es sollte eine Version >= 11 installiert werden. Welche genau, hängt von Betriebssystem und dem Installationszeitpunkt ab. Diese ist als Default JRE mit Debian Stretch verfügbar. Installationen, die auf einer früheren Debian Version aufsetzen, müssen gegebenfalls auf Stretch geupgraded werden). Die aktuellsten Informationen über das benötigte JRE findest du hier.

Optional kann noch das Paket shared-mime-info installiert werden wenn ein gesendeter Anhang nicht direkt im Chatverlauf angezeigt werden soll, sondern erst durch einen Klick auf das Datei-Icon.

Installation der Pakete in einem Rutsch:

sudo apt-get update
sudo apt-get install libunixsocket-java dbus libnet-dbus-perl shared-mime-info haveged openjdk-11-jre-headless

Installation des signal-cli

signal-cli ist ein Kommandozeilen-Interface für libsignal-service-java[1]. Es unterstützt das Registrieren und Verifizieren einer Rufnummer sowie das Senden und Empfangen von Nachrichten.

Der erste Schritt zur Installation von signal-cli ist, die aktuellste Versionsnummer auf der GitHub-Seite des Projektes unter "Releases" zu finden. Zum Zeitpunkt der Erstfassung dieser Anleitung war das die Version 0.6.0.

Anschließend wird die Release heruntergeladen und als Benutzer fhem in den Wurzelordner von FHEM (z.B. /opt/fhem) entpackt.

export VERSION=0.6.0
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
sudo -u fhem tar xf signal-cli-"${VERSION}".tar.gz -C /opt/fhem

Zur einfacheren Handhabung kann der neu erstellte Ordner umbenannt und ein symbolischer Link in /usr/local/bin/ erstellt werden.

sudo mv /opt/fhem/signal-cli-"${VERSION}" /opt/fhem/signal-cli
sudo ln -sf /opt/fhem/signal-cli/bin/signal-cli /usr/local/bin/

Registrierung einer Rufnummer

Um Signal nutzen zu können, ist eine Rufnummer zwingend erforderlich. Für diesen Fall empfiehlt es sich, eine Nummer zu verwenden, die nicht schon für die Kommunikation mit Signal verwendet wird. Zum Beispiel eine Festnetznummer.

Alternativ kannst du den Signal Bot auch mit deiner eigenen Rufnummer verknüpfen, analog zum Verknüpfen deiner Rufnummer mit z.B. der Desktop Installation von Signal. Siehe dazu den Abschnitt "Verknüpfen mehrerer Accounts" weiter unten.

Registrierung mit neuer Nummer

Die Registrierung einer Nummer läuft wie folgt ab:

  1. Registrierung der Nummer mittels signal-cli
  2. Erhalt einer Textnachricht mit dem Verifizierungscode an angegebene Nummer. Wenn an der Rufnummer keine Textnachrichten empfangen werden können, kann - wie in diesem Beispiel - mit dem Parameter --voice ein Sprachanruf erzwungen werden. In beiden Fällen kann es durchaus etwas länger dauern, bis man den Verifizierungscode erhält.
  3. Verifizierung der Nummer mittels signal-cli


Info blue.png
Alle der folgenden Befehle werden als Benutzer fhem ausgeführt, damit die Konfigurationsdateien im Home-Verzeichnis des Benutzers (z.B. ~/.local/share/signal-cli) landen.


Im ersten Schritt registriert man eine Nummer mittels signal-cli.

sudo -u fhem signal-cli -u <Telefonnummer> register --voice

Wenn alles in Ordnung ist, erhält man keine Rückmeldung. Wenn es lange dauert, hat man nicht genug Entropie. Kurz darauf erhält man einen Sprachanruf auf Englisch, mit dem einem der sechsstellige Verifizierungscode yyyyyy mitgeteilt wird.

Im zweiten Schritt wird diese Nummer mit Hilfe des erhaltenen Codes verifiziert.

sudo -u fhem signal-cli -u <Telefonnummer> verify <VerificationCode>

Auch hier gibt es keine Rückmeldung, solange alles funktioniert hat.


War die Registrierung erfolgreich, können nun Nachrichten via signal-cli versendet werden:

sudo -u fhem signal-cli -u <RegistrierteNummer> send -m "Greetings from FHEM!" <Empfängernummer>

Verknüpfen mehrerer Accounts

Das Verknüpfen mehrerer Devices / Installationen / Bots unter der selben Rufnummer nennt sich Provisioning und ist hier beschrieben. Es ist ähnlich dem Vorgehen der Registrierung einer neuen Telefonnummer, nur dass du hier deine eigene Nummer wiederverwenden kannst. ACHTUNG: Das bedeutet allerdings, dass alle Nachrichten, die über den Bot verschickt werden, unter deiner Nummer und somit unter deinem Account und Namen verschickt werden. Empfänger deiner Nachrichten sehen diese also als Teil deines Chats mit jenen Empfängern. Für den Empfänger ist daher nicht ersichtlich, dass die Nachrichten automatisiert von einem Bot verschickt wurden. Schickst du eine Nachricht an dich selbst, taucht diese in deinem Signal Messenger im Chat "Notiz an mich" auf.

Um den Signal Bot mit deinem Account zu verknüpfen gehst du wie hier beschrieben vor. Installiere am besten noch das Paket qrencode.

sudo apt-get install qrencode

Danach führst du diesen Befehl aus:

sudo signal-cli link -n "optional device name" | tee >(xargs -L 1 qrencode -t utf8)

Dieser Befehl generiert einen QR Code im Terminal, den du mit deinem Hauptgerät (vermutlich dein Handy) scannst und somit das neue "Gerät" hinzufügst. Navigate in Signal dazu in die Einstellungen > Gekoppelte Geräte und wähle "Neues Gerät koppeln". Danach ist das Gerät erfolgreich verknüpft und du kannst wie unten beschrieben mit der Einrichtung fortfahren.

Einrichten der Kommunikation über D-Bus

Damit das FHEM-Modul über die D-Bus Schnittstelle mit signal-cli kommunizieren kann, ist die Einrichtung von D-Bus sowie die Erstellung eines systemd-Scripts notwendig.


Info blue.png
Alle der folgenden drei Dateien müssen als Benutzer root angelegt und editiert werden.


/etc/dbus-1/system.d/org.asamk.Signal.conf

Die Datei in einem Editor öffnen

sudo nano /etc/dbus-1/system.d/org.asamk.Signal.conf

und mit folgendem Inhalt befüllen

<?xml version="1.0"?> <!--*-nxml-*-->
<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
        "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">

<busconfig>
        <policy user="fhem">
                <allow own="org.asamk.Signal"/>
                <allow send_destination="org.asamk.Signal"/>
                <allow receive_sender="org.asamk.Signal"/>
        </policy>

        <policy context="default">
                <allow send_destination="org.asamk.Signal"/>
                <allow receive_sender="org.asamk.Signal"/>
        </policy>
</busconfig>


/usr/share/dbus-1/system-services/org.asamk.Signal.service

Die Datei in einem Editor öffnen

sudo nano /usr/share/dbus-1/system-services/org.asamk.Signal.service

und mit folgendem Inhalt befüllen

[D-BUS Service]
Name=org.asamk.Signal
Exec=/bin/false
SystemdService=dbus-org.asamk.Signal.service


/etc/systemd/system/signal.service

Die Datei in einem Editor öffnen

sudo nano /etc/systemd/system/signal.service

und mit folgendem Inhalt befüllen.

[Unit]
Description=Send secure messages to Signal clients
Requires=dbus.socket
After=dbus.socket
Wants=network-online.target
After=network-online.target

[Service]
Type=dbus
Environment="SIGNAL_CLI_OPTS=-Xms2m"
ExecStart=/opt/fhem/signal-cli/bin/signal-cli -u +49xxxxxxxxxxx --config /opt/fhem/.local/share/signal-cli daemon --system
User=fhem
BusName=org.asamk.Signal

[Install]
Alias=dbus-org.asamk.Signal.service

Achtung!

  • Die Rufnummer im Script muss durch die in den vorigen Schritten registrierte ersetzt werden.
  • Außerdem muss unter Umständen der Pfad des FHEM-Wurzelverzeichnisses angepasst werden.
  • Der Pfad zur Konfigurationsdatei ist je nach signal-cli Version anders:
<0.6.1
$HOME/.config/signal/data/
oder
$HOME/.config/textsecure/data/
>=0.6.1
$HOME/.local/share/signal-cli/data/

Sind alle Dateien angelegt, können die Services mit diesen Befehlen aktiviert und gestartet werden.

sudo systemctl daemon-reload
sudo systemctl reload dbus.service
sudo systemctl enable signal.service
sudo systemctl start signal.service

Ob alles funktioniert, kann wie folgt getestet werden:

  • D-Bus:
sudo -u fhem dbus-send --system --type=method_call --print-reply --dest="org.asamk.Signal" /org/asamk/Signal org.asamk.Signal.sendMessage string:<Nachricht> array:string: string:<EmpfängerNummer>
  • signal-cli über D-Bus:
sudo -u fhem signal-cli --dbus-system  send -m "<Nachricht>" <EmpfängerNummer>

Einbindung des FHEM-Moduls

Solange das Modul 32_SiSi.pm noch nicht via FHEM-Update verteilt wird, ist eine manuelle Installation notwendig. Das geschieht, in dem es von der GitHub-Seite des Modul-Autors heruntergeladen und in den FHEM-Ordner kopiert wird.

Der Befehl

wget https://raw.githubusercontent.com/Quantum1337/32_SiSi.pm/master/FHEM/32_SiSi.pm

speichert das Modul im aktuellen Verzeichnis.

Mit den folgenden Befehlen wird das Modul ins das FHEM-Verzeichnis verschoben und anschließend die Datei-Rechte angepasst.

sudo mv 32_SiSi.pm /opt/fhem/FHEM/
sudo chown fhem:dialout /opt/fhem/FHEM/32_SiSi.pm

Anschließend wird noch die lokale CommandRef aktualisiert:

cd /opt/fhem
sudo /usr/bin/perl contrib/commandref_join.pl

Zum Abschluss wird das Modul noch FHEM bekannt gemacht. Dazu in der FHEM-Kommandozeile folgenden Befehl eingeben:

reload 32_SiSi.pm

Verwendung des FHEM-Moduls

Die genaue Verwendung des Moduls 32_SiSi.pm ist in der CommandRef beschrieben. Hier deshalb nur ein kleines Beispiel.

SiSi-Device definieren:

define Signal SiSi

Dem Device mitteilen, dass es eine Verbindung zum signal-cli D-Bus Service herstellen soll:

attr Signal enable yes

Eine Standard-Empfängernummer definieren, falls im Befehlsaufruf keine angegeben ist:

attr Signal defaultPeer +49170zzzzzzzz


Anschließend kann aus FHEM heraus eine Nachricht gesendet werden:

set Signal msg Hurra, es funktioniert!

Zusammenspiel mit den Modulen Msg und Roommate

Um mithilfe des Moduls Msg Signal-Nachrichten versenden zu können, ist im Device globalMsg das Attribut msgCmdPush zu setzen.

attr globalMsg msgCmdPush set %DEVICE% msg @%RECIPIENT% %MSG%

Optional kann ein Standard-Empfänger gesetzt werden der die Nachricht erhält, wenn beim Aufruf von Msg kein Empfänger angegeben wurde:

attr globalMsg msgContactPush <Signal-Device>:<Empfängernummer>

Danach kann mit msg Testnachricht eine Signal-Nachricht versendet werden.


Werden ROOMMATE-Devices verwendet, kann jedem eine Kontaktadresse hinterlegt werden, damit beim Aufruf von Msg einfach der Device-Name anstatt der Nummer angegeben werden kann. (Funktioniert natürlich bei jedem anderen Device auch. Aber ein ROOMMATE-Device macht das ganze anschaulicher.)

attr <ROOMMATE-Device> msgContactPush <Signal-Device>:<Empfängernummer>

z.B.:
attr rr_Max msgContactPush Signal:+49...

Anschließend kann mit msg @rr_Max Testnachricht eine Nachricht an Max gesendet werden.

Hinweise

Derzeit ist es aufgrund von Einschränkungen in der D-Bus-API noch nicht möglich, mit dem SiSi-Modul neue Fingerprints von Kontakten hinzuzufügen oder aus Gruppen auszutreten. Daher muss beides noch manuell auf der Linux-Kommandozeile erfolgen.

Neuer Fingerprint
Mit folgendem Befehl wird dieser Nummer wieder vertraut und signal-cli fügt den geänderten Fingerprint dann automatisch zu seiner Liste hinzu.
sudo -u fhem signal-cli -u <FHEM-NUMMER> trust -a <Nummer mit geänderten Fingerprint>
Aus einer Gruppe austreten
Soll die "FHEM-Signal-Rufnummer" aus einer bestehende Gruppe entfernt werden, kann dieser Aufruf von signal-cli verwendet werden.
sudo -u fhem signal-cli -u <FHEM-NUMMER> quitGroup -g <GroupID>

Querverweise

  1. libsignal-service-java ist eine Java/Android Bibliothek zur Kommunikation mit dem Signal Messaging Service