SiSi: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Zusammenspiel mit Msg und Roommate ergänzt)
K (Paket-Vorraussetzungen zusammen geschrieben)
Zeile 7: Zeile 7:
|ModOwner=Quantum ({{Link2FU|35410|Forum}})}}
|ModOwner=Quantum ({{Link2FU|35410|Forum}})}}
Das Modul [[SiSi]] ermöglicht den Versand von Nachrichten mittels des Instant-Messenging-Dienstes [https://signal.org Signal] aus FHEM heraus. Grundvoraussetzung dafür ist die Installation des '''Signal Messenger Command Line Interface (signal-cli)'''.
Das Modul [[SiSi]] ermöglicht den Versand von Nachrichten mittels des Instant-Messenging-Dienstes [https://signal.org Signal] aus FHEM heraus. Grundvoraussetzung dafür ist die Installation des '''Signal Messenger Command Line Interface (signal-cli)'''.
==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/Raspian:
*libunixsocket-java
*dbus
*libnet-dbus-perl
*haveged (Dient dazu, genügend Entropie für den Zufallszahlengenerator zu erzeugen.)
*openjdk-8-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 Signal Messenger Command Line Interface==
==Installation Signal Messenger Command Line Interface==
Zeile 15: Zeile 25:


Was man alles mit dem Signal Messenger CLI machen kann, ist auf der [https://github.com/Quantum1337/32_SiSi.pm Github-Seite] des Modul-Autors beschrieben.  
Was man alles mit dem Signal Messenger CLI machen kann, ist auf der [https://github.com/Quantum1337/32_SiSi.pm Github-Seite] des Modul-Autors beschrieben.  
Es werden die Pakete '''haveged''' und '''openjdk-9-jre-headless''' benötigt.
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.
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.
Zeile 48: Zeile 54:


== Einrichten der Kommunikation über DBus ==
== Einrichten der Kommunikation über DBus ==
Es werden die Pakete '''libunixsocket-java''', '''dbus''' und '''dbus-x11''' benötigt.


Es müssen als Benutzer '''root''' die folgenden Dateien angelegt werden:
Es müssen als Benutzer '''root''' die folgenden Dateien angelegt werden:
Zeile 117: Zeile 121:


== Verwendung mit FHEM ==
== Verwendung mit FHEM ==
Es wird das Paket '''libnet-dbus-perl''' benötigt.


Es wird das Modul '''32_SiSi.pm''' von [https://github.com/Quantum1337/32_SiSi.pm Quantum1337] verwendet. Am einfachsten wechselt man als Benutzer '''fhem''' ins Verzeichnis '''FHEM''' mit den Modulen und führt
Es wird das Modul '''32_SiSi.pm''' von [https://github.com/Quantum1337/32_SiSi.pm Quantum1337] verwendet. Am einfachsten wechselt man als Benutzer '''fhem''' ins Verzeichnis '''FHEM''' mit den Modulen und führt

Version vom 27. November 2018, 16:56 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 mittels des Instant-Messenging-Dienstes Signal aus FHEM heraus. Grundvoraussetzung dafür ist die Installation des Signal Messenger Command Line Interface (signal-cli).

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/Raspian:

  • libunixsocket-java
  • dbus
  • libnet-dbus-perl
  • haveged (Dient dazu, genügend Entropie für den Zufallszahlengenerator zu erzeugen.)
  • openjdk-8-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 Signal Messenger Command Line Interface

Folgendes beschreibt die Installation des signal-cli unter Raspbian und die anschließende Verwendung in FHEM.

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.

Was man alles mit dem Signal Messenger CLI machen kann, ist auf der Github-Seite des Modul-Autors beschrieben.

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.

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.

Man registriert man seine Festnetznummer (im Beispiel: +49xxxxxxxxxx) mittels signal-cli in einer Shell, um davon Signal-Nachrichten zu versenden:

signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx 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 Registrierungscode yyyyyy mitgeteilt wird. Um die Registrierung abzuschließen, führt man

signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx verify yyyyyy

in der Shell aus. Wenn alles in Ordnung ist, erhält man keine Rückmeldung.

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

signal-cli-0.6.0/bin/signal-cli -u +49xxxxxxxxxx send -m "Greetings from FHEM!" +49170zzzzzzzz

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.

Ich hatte das Problem, dass die Sprachanrufe erst mit Stunden oder Tagen Verzögerung kamen (siehe Thread im Signal-Forum). Dabei handelte es sich um einen vorübergehenden serverseitigen Fehler, der einige Tage bestand.

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:

ln -s signal-cli-0.6.0 signal-cli

Einrichten der Kommunikation über DBus

Es müssen als Benutzer root die folgenden Dateien angelegt werden:

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

<?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

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

/etc/systemd/system/signal.service

[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 +49xxxxxxxxxx --config /opt/fhem/home/.config/signal daemon --system
User=fhem
BusName=org.asamk.Signal

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

Aktiviert wird das alles mit

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

Ob es funktioniert, kann man mit

signal-cli/bin/signal-cli --dbus-system  send -m "dbus working" +49170zzzzzzzz

austesten.

Verwendung mit FHEM

Es wird das Modul 32_SiSi.pm von Quantum1337 verwendet. Am einfachsten wechselt man als Benutzer fhem ins Verzeichnis FHEM mit den Modulen und führt

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

aus. Die Datei sollte den richtigen Eigentümer haben. Bei mir sieht das so aus:

-rw-r--r-- 1 fhem dialout 29375 Nov 24 22:09 FHEM/32_SiSi.pm

Idealerweise führt man jetzt noch

/opt/fhem/contrib/commandref_join.pl

aus, um die Commandref zu regenerieren.

Eine simple Definition in FHEM sieht so aus:

define sisi SiSi
attr sisi enable yes
attr sisi defaultPeer +49170zzzzzzzz

Du schickst eine Nachricht aus FHEM mit

set sisi 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 dBus-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.
signal-cli -u <FHEM-NUMMER> --config /var/lib/signal-cli 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.
signal-cli -u <FHEM-NUMMER> --config /var/lib/signal-cli quitGroup -g <GroupID>