Überarbeitung vom 6.12.2019 18.03.2021
* Es wird für die Registrierung ReCAPTCHA benötigt
* Debian 10.8.x
* Java
Hallo,
Alles was ich hier schreibe ist eine Zusammenfassung aus vielen Beiträge bei „https://github.com/AsamK/signal-cli“.
Die DBUS-API ist in den Untiefen von signal-cli "beschrieben"
https://github.com/AsamK/signal-cli/...mk/Signal.java
Getestet mit Java8 und Debian 6.3.0-18, andere Java Versionen und Systeme sollen auch funktionieren.
NEU: mit openjdk-8-jre-headless und Debian 9.3.
Die Anleitung ist inklusive DBUS Einbindung.
DBUS hat den Vorteil das der Signal-Client nur einmal initialisiert wird. Der Initialisierungsvorgang kann bis zu 1 Minute dauern. Bei Embedet System kann der reine Client Betrieb dazu führen, das jedes Senden oder empfangen bis zu 1 Minute dauert. Wenn ich das richtig verstanden habe, liegt das an der Generierung eine Zufallszahl für eine sichere Verschlüsselung.
Vorbereitung:
__________________________________________________ _____________
erster Start (Registrierung einer Tel-Nummer für den Signal Client)
Damit DBUS funktioniert, muss dies alles als User signal-cli ausgeführt werden.
Ich beschreibe die Registrierung einer Tel-Nummer mit dem VOICE Dienst. (Ein Sprachcomputer ruf zurück und liest eine sechs stellige Nummer vor)
Dadurch kann jede Tel-Nummer, auch ohne SMS Empfangsmöglichkeit, benutzen werden.
Ich nutze z.B. eine Festnetznummer.
Inzwischen muss man zuerst ein "Token" generieren.
Ich habe dies mit dem Firefox erstellt. Im Firefox muss man mit F12 in die Entwicklerkonsole öffnen.
In dieser Konsole sieht man den Token. Sucht nach dem "signalcaptcha://" alles was danach kommt ist der Token (superlange)
token.png
Kann sehr lange dauern, wenn man keine "Entropie" für die Verschlüsselung hat (installieren von haveged)
__________________________________________________ __________________
erster Test (ohne DBUS)
senden:
Mit PIPE senden
empfangen
Jeder Vorgang kann bis zu einer Minute dauern!
__________________________________________________ ____________
Dbus starten (als user root)
Bei Probleme mit dem Dbus kann ein "dpkg-reconfigure dbus" helfen. Danke FlyingEaglE für den Tipp.
Test mit Dbus
__________________________________________________ ______________________
Einfach Script mit PERL (Danke an Quantum aus dem FHEM Forum)
__________________________________________________ _______________________
Einbindung in openHAB
Nun kommt noch ein Beispiel wie das ganze unter openHA mit dem exec-Binding genutzt werden kann.
- Ein kleine Script erstellen
- Things anlegen (es wird das Exec-Binding benötigt)
Auswahl_163.png
ITEMS anlegen
Einbinding in die RULES (Sobald das Item "Signal-Schalter" in den Zustand "ON" geht, wird eine Nachricht versendet
Bis jetzt ist es mir nicht geglückt, das ich SPACE mit übergeben kann. Die " werden immer ignoriert. Vielleicht gibt es dafür eine Lösung.
SITEMAP anlegen
* Es wird für die Registrierung ReCAPTCHA benötigt
* Debian 10.8.x
* Java
Hallo,
Alles was ich hier schreibe ist eine Zusammenfassung aus vielen Beiträge bei „https://github.com/AsamK/signal-cli“.
Die DBUS-API ist in den Untiefen von signal-cli "beschrieben"
https://github.com/AsamK/signal-cli/...mk/Signal.java
Getestet mit Java8 und Debian 6.3.0-18, andere Java Versionen und Systeme sollen auch funktionieren.
NEU: mit openjdk-8-jre-headless und Debian 9.3.
Die Anleitung ist inklusive DBUS Einbindung.
DBUS hat den Vorteil das der Signal-Client nur einmal initialisiert wird. Der Initialisierungsvorgang kann bis zu 1 Minute dauern. Bei Embedet System kann der reine Client Betrieb dazu führen, das jedes Senden oder empfangen bis zu 1 Minute dauert. Wenn ich das richtig verstanden habe, liegt das an der Generierung eine Zufallszahl für eine sichere Verschlüsselung.
Vorbereitung:
- Java Installieren (wird für openHab benötigt und ist wahrscheinlich schon erledigt
Code:apt-get install default-jre
- libunixsocket-java installieren (wird für DBUS benötigt)
Code:apt install libunixsocket-java #(DEBIAN)
- User signal-cli anlegen (wird für dbus benötigt)
Code:adduser signal-cli
- Verzeichnisstrucktur vorbereiten.
Code:mkdir /var/lib/signal-cli chown -R signal-cli: /var/lib/signal-cli (wegen DBus)
- Download vom Java Signal-Client
- neuste Version
(https://github.com/AsamK/signal-cli/releases)
Code:cd /tmp/ wget https://github.com/AsamK/signal-cli/releases/download/v0.8.1/signal-cli-0.8.1.tar.gz
- haveged installieren. Hilft den Zufallszahlen auf die Sprünge (Entropie)
Code:apt install haveged #(DEBIAN)
- Java Installieren (wenn nicht schon installiert)
Code:apt install default-jre #(DEBIAN)
- Client installieren
Code:cd /tmp/ tar xf signal-cli-0.8.1.tar.gz -C /opt ln -sf /opt/signal-cli-0.8.1/bin/signal-cli /usr/local/bin/
- Dbus Vorbereitung, es werden drei Dateien benötigt.
1:1 aus https://github.com/AsamK/signal-cli/tree/master/data übernommen.
- org.asamk.Signal.conf
Code:<?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="signal-cli"> <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>
Code:[D-BUS Service] Name=org.asamk.Signal Exec=/bin/false SystemdService=dbus-org.asamk.Signal.service
Code:[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=%dir%/bin/signal-cli -u %I --config /var/lib/signal-cli daemon --system User=signal-cli BusName=org.asamk.Signal [Install] Alias=dbus-org.asamk.Signal.service[*]
- signal.service
Code:[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/signal-cli-0.6.5/bin/signal-cli -u %number% --config /var/lib/signal-cli daemon --system User=signal-cli BusName=org.asamk.Signal [Install] Alias=dbus-org.asamk.Signal.service
Speicherort:
Code:cp org.asamk.Signal.conf /etc/dbus-1/system.d/ cp org.asamk.Signal.service /usr/share/dbus-1/system-services/ cp signal.service /etc/systemd/system/
Die Rufnummer für den Client einrichten:
Code:sed -i -e "s|%dir%|/opt/signal-cli-0.6.5/|" -e "s|%number%|+49xxxxxxx|" /etc/systemd/system/signal.service
- Rechte für DBUS anpassen (kann man auch zwischen durch widerholen ;-))
Code:chown -R signal-cli: /var/lib/signal-cli
__________________________________________________ _____________
erster Start (Registrierung einer Tel-Nummer für den Signal Client)
Damit DBUS funktioniert, muss dies alles als User signal-cli ausgeführt werden.
Ich beschreibe die Registrierung einer Tel-Nummer mit dem VOICE Dienst. (Ein Sprachcomputer ruf zurück und liest eine sechs stellige Nummer vor)
Dadurch kann jede Tel-Nummer, auch ohne SMS Empfangsmöglichkeit, benutzen werden.
Ich nutze z.B. eine Festnetznummer.
Inzwischen muss man zuerst ein "Token" generieren.
Ich habe dies mit dem Firefox erstellt. Im Firefox muss man mit F12 in die Entwicklerkonsole öffnen.
In dieser Konsole sieht man den Token. Sucht nach dem "signalcaptcha://" alles was danach kommt ist der Token (superlange)
token.png
Code:
su signal-cli - #User "signal-cli" werden signal-cli --config /var/lib/signal-cli -u +49xxxxxxx register - -voice --captcha 03AGdBq ....EJCA #(ohne - -voice wird eine SMS versendet) #auf den Ruck ruf warten signal-cli --config /var/lib/signal-cli -u +49xxxxxxx verify xxx-yyy
__________________________________________________ __________________
erster Test (ohne DBUS)
senden:
Code:
signal-cli --config /var/lib/signal-cli -u +49xxxxxxx send -m "Hallo Signal ;-)" +49aaaa #Signal Ziel Rufnummer
Code:
uname -a | signal-cli --config /var/lib/signal-cli -u +49xxxxxxx send +49aaaa
Code:
signal-cli --config /var/lib/signal-cli -u +49aaaa receive
__________________________________________________ ____________
Dbus starten (als user root)
Code:
systemctl daemon-reload systemctl enable signal.service systemctl reload dbus.service
Code:
dpkg-reconfigure dbus
Code:
signal-cli --dbus-system send +49aaaaaaaaaa -m "Signal-CLI funktioniert mit DBus"
Einfach Script mit PERL (Danke an Quantum aus dem FHEM Forum)
Code:
#!/usr/bin/perl -w use strict; use warnings; use Net::DBus; #use Net::DBus::Reactor; #wird zum Empfangen benötigt #use Net::DBus::Callback; #wird zum Empfangen benötigt my $dbuserror="OK"; my $list; my @attachment =(); @attachment =("/home/ls/dbus-test/<Anhang>"); #es gehen Bilder z.B. GIF,PNG, JPEG, ... oder auch andere Dokumente my $text="Hallo Signal\n\-- \n\tes hat funktioniert\n".localtime; my @recipients = ("+49<nummer1>","+49<numer2>"); # ACHTUNG funktioniert nur ohne Anhang @recipients = ("+49<nummer>"; #NET DBus Versiob Prüfen $Net::DBus::VERSION =~ /^([0-9]+)\.([0-9]+)\.([0-9]+)$/; if(($1*100+$2*10+$3) < 110){ return "Please install Net::DBus in version 1.1.0 or higher. Your version is: $Net::DBus::VERSION" } print "Vor Signal\n"; #### Aufruf von signal als SUB &senden; ##### print "Nach Signal\n"; print "Error:".$dbuserror."\n"; sub senden{ my $bus = Net::DBus->system; my $service = $bus->get_service("org.asamk.Signal"); my $object = $service->get_object("/org/asamk/Signal"); eval { $object->sendMessage($text,\@attachment,\@recipients) } if($@ =~ /^org\.freedesktop\.dbus\.exceptions\.DBusExecutionException:.*: (.+)$/){ chomp ($dbuserror = $@); #$dbuserror enthält die gesamte Fehlermeldung print "Error: $1 - $dbuserror\n"; # $1 enthält nur den Grund } } exit 0;
Einbindung in openHAB
Nun kommt noch ein Beispiel wie das ganze unter openHA mit dem exec-Binding genutzt werden kann.
- Ein kleine Script erstellen
Code:
editor /etc/openhab2/scripts/signal.sh
Code:
#!/bin/bash ZEIT=`date +%H":"%M":"%S` DATUM=`date +%d"."%m"."%Y` printf "Signal vom $DATUM um $ZEIT\nNachricht: $*"|/usr/local/bin/signal-cli --dbus-system send $1
- Things anlegen (es wird das Exec-Binding benötigt)
Auswahl_163.png
ITEMS anlegen
Code:
editor /etc/openhab2/items/signal.items
Code:
String Sende_Nachricht_Signal "SIGNAL" <switch> { channel="exec:command:Signal-CLI:input", autoupdate="false"}
Code:
rule "Nachricht über Signal versenden" when Item Signal-Schalter received command ON then Sende_Nachricht_Signal.sendCommand("+49aaZIELaa Besch._Ein:_Mess:_" + OW_Temp_DACH_ausen.state.toString() + "_°C_:_Vorher_" + ((WU_Temp_Max_Heute.state as DecimalType).intValue) + "_°C") end
SITEMAP anlegen
Code:
... Switch item=Sende_Nachricht_Signal mappings=[ "+49aaZIELaa Eine_Signal_vom_openHAB_eingeschaltet"="Nachricht 1", "+49bbZIELbb Eine_zweites_Signal_vom_openHAB"="Nachricht 2" ] ...
Kommentar