SiSi
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.
Um dies zu ermöglichen, sind mehrere Schritte notwendig:
- Installation des Signal Messenger Command Line Interface (signal-cli).
- Registrierung einer Rufnummer bei Signal
- Einrichtung der D-Bus-Schnittstelle
- 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-9-jre-headless (Es sollte eine Version > 7 installiert werden. Welche genau, hängt von Betriebssystem und dem Installationszeitpunkt ab.)
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-9-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.
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
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:
signal-cli -u <RegistrierteNummer> send -m "Greetings from FHEM!" <Empfängernummer>
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.
- /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
- ↑ libsignal-service-java ist eine Java/Android Bibliothek zur Kommunikation mit dem Signal Messaging Service