Textsecure bzw. Signal aus FHEM nutzen

Begonnen von malted, 21 Dezember 2014, 01:13:04

Vorheriges Thema - Nächstes Thema

malted

Da ich whatsapp nicht mag, keine Lust auf jabber habe und trotzdem unterwegs ggf. mal ne Info von FHEM haben will, habe ich mit der nagelneuen textsecure-cli was gebaut. Funktioniert hier auf den ersten Blick astrein.

Ist bisher nur eine Richtung, d.h. FHEM an Handy. Die Software ist aber grundsätzlich bidirektional. Eventuell kann man zukünftig so auch Fotos von einer Webcam verschicken, wenn jemand an der Tür klingel etc.

Wer sich fragt, warum Textsecure, findet bei Wikipedia etliche Gründe. Kurzum ist es ein Programm wie Whatsapp, bloß OpenSource unter der GPL3 mit vernünftiger End-zu-End-Verschlüsselung. Textsecure verwendet unter Android GCM, weshalb die Nachrichten sofort auftauchen. Alles was an Heimautomation von außen erreichbar wird, sollte ziemlich wasserdicht sein, weshalb Textsecure eine naheliegende Lösung ist, um von unterwegs mit FHEM zu kommunizieren.

Ist etwas detailierter, da auf meinem Banana-pi unter Debian nur ein altes go 1.0.x vorhanden war, erstmal ein aktuelles bauen: siehe auch https://golang.org/doc/install/source
Kann hinterher alles wieder geloescht werden, da die go gebauten binaries static sind (d.h. sie laufen stand-alone ohne irgendwelche Libs).


root@fhem:~# apt-get install mercurial
root@fhem:~# hg clone -u release https://code.google.com/p/go
root@fhem:~# cd go/src
root@fhem:~/go/src# ./all.bash
# Building C bootstrap tool.
cmd/dist

# Building compilers and Go bootstrap tool for host, linux/arm.
lib9
libbio
...
ALL TESTS PASSED

---
Installed Go for linux/arm in /root/go
Installed commands in /root/go/bin
*** You need to add /root/go/bin to your PATH.


Nun das Textsecure holen und bauen:

root@fhem:~# mdir ~/gocode
root@fhem:~# export GOPATH=~/gocode
root@fhem:~# ./go/bin/go get github.com/janimo/textsecure/cmd/textsecure
root@fhem:~#

Wenn das oben ohne Fehler fertig ist, hat alles geklappt. Nun die Demo-Config holen und mal testeN.


root@fhem:~# cp -R gocode/src/github.com/janimo/textsecure/cmd/textsecure/.config/ ~
root@fhem:~# vim ~/.config/config.yml
# Telefonnummer eintragen, es gehen auch Festnetz-Nummern, dann aber logischerweise den verificationType auf voice stellen. Dann ruft da ein Roboter an und gibt einem den Code durch. Der ist relativ schnell und wiederholt nichts. Deswegen was zu schreiben bereitlegen.
root@fhem:~# ./gocode/bin/textsecure
Enter verification number (without the '-')>537723 # <- Das ist der vom Anruf oder von der SMS
2014/12/21 00:24:45 Registration done

Nun wird unter /root/.storage alles nötige angelegt (keys).

Jetzt kann man es direkt zu seinem Handy mal ausprobieren. Das ist eine session, wo man quasi chatten kann.
Wichtig ist, dass es aus dem Ordner aufgerufen wird, in dem die .config und .storage liegt. Man kann leider keinen Pfad zur Config angeben, zumindest habe ich da jetzt in den Parametern des Binarys nix gefunden.

root@fhem:~# ./gocode/bin/textsecure -to "+4915xxxxxx"
>test
                                               Works
>^Croot@fhem:~#


Nun das ganze für fhem verfügbar machen:

root@fhem:~# mkdir -p /opt/textsecure/bin
root@fhem:~# cp gocode/bin/textsecure /opt/textsecure/bin
root@fhem:~# mkdir /opt/fhem/ts
root@fhem:~# cp -R .config/ .storage/ /opt/fhem/ts
root@fhem:~# chown fhem:dialout -R /opt/fhem/ts
root@fhem:/opt/fhem/ts# sudo -u fhem /opt/textsecure/bin/textsecure -to="+4915xxxxx"
>adf
root@fhem:/opt/fhem/ts#


Last but not least, die helper-function einfügen. Muss leider kurzzeitig das working-directory ändern, damit das .config und .storage ordentlich gefunden wird.

root@fhem:/opt/fhem# cat FHEM/99_myUtils.pm
package main;
use strict;
use warnings;
use Cwd;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

######################################################
# Aufgabe    :Versenden von textsecure
# Parameter 1:Nummer Format +4917012345678
# Parameter 2:Message
#

sub sendTextsecure($$)
{
   my ($nr, $Message) = @_;
   my $dir = getcwd();
   chdir "/opt/fhem/ts/";
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -message=\"$Message\"");
   chdir "$dir";

}

1;
root@fhem:/opt/fhem#



Fast fertig, noch ein schlankes

reload 99_myUtils.pm

in FHEM

und dann kann man auch schon loslegen:

define test at *00:41 { sendTextsecure("+4915xxxxxxx", "test") }

malted

#1
Nachdem jetzt folgende Änderung Eingang gefunden hat Fix attachment sending and receiving., funktioniert nun auch der Versand von Attachments hervorragend.

Vorstellbar sind der Versand von Audio-Files (z.B. vom Anrufbeantworter der Fritzbox holen und per Textsecure verschicken oder ein Raummikro aktivieren, wenn Bewegung ausgelöst wurde),  Webcam-Fotos oder sogar Videos.
Beispiel, es klingelt an der Tür, direkt Foto oder Video machen und zurückschicken.


Hierzu einfach in der /opt/fhem/FHEM/99_myUtils.pm noch die folgende Subroutine ergänzen:


sub sendTextsecureAttachment($$)
{
   my ($nr, $Message) = @_;
   my $dir = getcwd();
   chdir "/opt/fhem/ts/";
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -attachment=\"$Message\"");
   chdir "$dir";
}


Wenn man nun eine IPCam wiefolgt hat:

define IPCam IPCAM 192.168.178.40:8080
attr IPCam snapshots 3
attr IPCam delay 3
attr IPCam path shot.jpg
attr IPCam event-on-update-reading snapshots
attr IPCam storage /opt/fhem/snapshots/


Kann man leicht bei z.B. Bewegung sich ein Bild aufs Handy schicken lassen.


define bewegungssensorSendFoto notify Bewegungsmelder1:motion ({ sendTextsecureAttachment("+491xxxxxxxxx","/opt/fhem/snapshots/IPCam_snapshot.jpg") })


Wenn man sich die schönen Graphiken zuschicken lassen will, geht so etwas leicht:
Zitat
system("wget -q -O -  'http://fhem:8083/fhem/SVG_showLog?dev=SVG_FileLog_t.wohnzimmer_Climate_1&logdev=FileLog_t.wohnzimmer_Climate&gplotfile=SVG_FileLog_t.wohnzimmer_Climate_1&logfile=CURRENT&pos=' | convert -density 1200  - /tmp/out.png);
Und

({ sendTextsecureAttachment("+491xxxxxxxxx","/tmp/out.png") })

malted

Da jetzt das Schicken von Bildern so gut klappt, habe ich bei dem Statusbild für Kindle-Reader etwas geklaut.

Wichtig ist, dass man am Ende den convert-Aufruf in der 99_myUtils.pm so ändert, dass er einen weißen statt transparenten Hintergrund baut:


system("convert $Ausgabedatei.svg -background white -flatten -type GrayScale -depth 8 $Ausgabedatei.png &");


Und dann am Ende noch ein zusätzliches:
Zitat
{ sendTextsecureAttachment("+491xxxxxxxxxx","/opt/fhem/snapshots/KindleDisplay.png") }
Ansonsten kommen da jetzt niedliche kleine Statusbilder.

otto

#3
Hallo habs mal installiert funkioniert recht gut ,
nun meine frage wie kann man ein *.txt versenden ?

{ sendTextsecureAttachment("+491xxxxxxxxxx","/opt/fhem/log/Seriell.txt") }
So bekomm ich Anwort :Doppelte Nachricht

{ sendTextsecure("+4917xxxxxxxxx","/opt/fhem/log/Seriell.txt") }
So bekomm ich Antwort :  "/opt/fhem/log/Seriell.txt"
kann mir einer helfen  ??

Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

malted

Bisher sind wohl nur Medien-Attachments vorgesehen.

Textfiles kann man aber einfach als Text direkt in Textsecure schicken.

Ich würde das umgekehrt einlesen und nur die letzten x Zeilen schicken. Dafür hab ich mal einen kurzen Proof of Concept geschrieben:

Das passende CPAN-Modul installieren:
sudo apt-get install libfile-readbackwards-perl

Dann oben in der 99_myUtils.pm das eintragen:
use File::ReadBackwards;

Folgende Sub schickt dann die letzten X Zeilen aus einem Logfile:

sub sendTextsecureLog($$$)
{
   my ($nr, $logfile,$numlines) = @_;
   my $dir = getcwd();
   my $Message="Sending last $numlines Lines from $logfile:\n";
   my $line;
   chdir "/opt/fhem/ts/";
   my $bw = File::ReadBackwards->new( $logfile ) or return "can't read 'log_file' $!" ;
   while ($numlines >0 and defined($line= $bw->readline ) ) {
     $numlines--;
     $Message.=$line;
   }
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -message=\"$Message\"");
   chdir "$dir";
}


Auf dem Telnet-Prompt dann einfach hiermit testen...
{ sendTextsecureLog("+4915xxxxxx", "/opt/fhem/log/fhem-2015-01.log", 10) }

otto

#5
Sorry meine Frage aber anscheinend liest ja dein Modul auch aus einem File oder ?
So könnte ich ja mit deiner Verson mein file Senden ?
oder versteh ich das falsch ?


Habs Versucht bekomm beim speichern der 99_myUtils.pm :

ERROR:
Undefined subroutine &main::myUtils_Initialize called at fhem.pl line 2019.

wenn ichs dan Teste bekomm ich wieder "doppelte Nachricht" aufs Handy
Ka was da fehtlt ?


Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

malted

Genau, damit kannst Du Textdateien verschicken.

Du hast irgendwas in Deiner 99_myUtils.pm falsch gemacht.

So sieht meine vollständig aus und damit geht es:


package main;
use strict;
use warnings;
use Cwd;
use File::ReadBackwards;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}

######################################################
# Aufgabe    :Versenden von textsecure
# Parameter 1:Nummer Format +4917012345678
# Parameter 2:Message
#

sub sendTextsecure($$)
{
   my ($nr, $Message) = @_;
   my $dir = getcwd();
   chdir "/opt/fhem/ts/";
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -message=\"$Message\"");
   chdir "$dir";
}

######################################################
# Aufgabe    :Versenden von Attachments via textsecure - derzeit gehen nur Audio, Video und Bilder
# Parameter 1:Nummer Format +4917012345678
# Parameter 2:Pfad+Dateiname zu Attachment
#

sub sendTextsecureAttachment($$)
{
   my ($nr, $Message) = @_;
   my $dir = getcwd();
   chdir "/opt/fhem/ts/";
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -attachment=\"$Message\"");
   chdir "$dir";
}

######################################################
# Aufgabe    :Versenden der letzten x Zeilen von Textdateien via textsecure
# Parameter 1:Nummer Format +4917012345678
# Parameter 2:Pfad+Dateiname zu Textdatei
# Parameter 3:Die letzten wieviel Zeilen gesendet werden sollen
#


sub sendTextsecureLog($$$)
{
   my ($nr, $logfile,$numlines) = @_;
   my $dir = getcwd();
   my $Message="Sending last $numlines Lines from $logfile:\n";
   my $line;
   chdir "/opt/fhem/ts/";
   my $bw = File::ReadBackwards->new( $logfile ) or return "can't read 'log_file' $!" ;
   while ($numlines >0 and defined($line= $bw->readline ) ) {
     $numlines--;
     $Message.=$line;
   }
   Log 3, "sendTextsecure  Nr: ". $nr . " Message:\x22" . $Message . "\x22 ";
   #Direkter Aufruf
   system("/opt/textsecure/bin/textsecure -to=\"$nr\" -message=\"$Message\"");
   chdir "$dir";
}

1;


otto

Hab das von dir reingeschrieben Bekomm ich den Fehler :
Can't locate File/ReadBackwards.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl . ./FHEM) at ./FHEM/99_myUtils.pm line 5. BEGIN failed--compilation aborted at ./FHEM/99_myUtils.pm line 5.

Was muß ich alles nachinstallieren, und wo bekomm ich das her?

Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

malted

Zitat von: otto am 13 Januar 2015, 18:24:16
Was muß ich alles nachinstallieren, und wo bekomm ich das her?


Steht doch oben:
sudo apt-get install libfile-readbackwards-perl

otto

Sorry hab ich überlesen ::)
Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

otto

Hallo noch eine Frage dazu der Text wird von unten nach oben gelesen und so Zeilenweise gesendet
So kommt er bei Fhem rein:

1.1.2015  12:02    Störung im
                  Netzteil
1.1.2015  12:03   Rücketzen
so wird gesendet
1.1.2015  12:03   Rücketzen
                 Netzteil
1.1.2015  12:02    Störung im
kann man das umkehren ?


Gruß otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

malted

Zitat von: otto am 15 Januar 2015, 22:54:45
der Text wird von unten nach oben gelesen und so Zeilenweise gesendet
kann man das umkehren ?

Streiche:
     $Message.=$line;
Setze:
     $Message=$line.$Message;

opa007

Hallo malted,

bin begeistert von Deiner Anleitung. Vielen Dank für Deine Mühe!


Der opa007

fu_zhou

#13
Hallo malted,

bei mir ist bei der Installation irgendetwas schief gelaufen auf dem RasPi. Ich habe versucht, alles zu löschen, um noch einmal von vorne beginnen zu können, das gelingt mir aber nicht.
Es hat alles zunächst geklappt und ich habe auch den Code per SMS bekommen.
...
real    26m50.363s
user    20m58.890s
sys     3m22.900s

# Checking API compatibility.
Go version is "go1.4", ignoring -next /root/go/api/next.txt

real    3m33.505s
user    2m54.520s
sys     0m11.930s

ALL TESTS PASSED

---
Installed Go for linux/arm in /root/go
Installed commands in /root/go/bin
*** You need to add /root/go/bin to your PATH.
root@raspi:~/go/src#

Den SMS code habe ich eingegeben und es kam die Rückmeldung "Registration done", nur kam kein prompt mehr, der RasPi war also beschäftigt. Ich habe die Session über Nacht offen gelassen und heute morgen war der Bildschirm mit einem "EOF" je Zeile voll. Ich habe die Session geschlossen und eine Neue aufgemacht. Wenn ich jetzt versuche, eine Nachricht zu schicken, kommt ein panic:
root@raspi:~# ./gocode/bin/textsecure -to "+4917xxxxxxxx"
>Duplicate message: expected 1, got 0
panic: runtime error: slice bounds out of range

Hast du eine Idee, wie ich das gefixt bekomme bzw. was ich alles löschen muss, um noch mal vor vorne anfangen zu können?
FHEM auf RasPi 2, S7-300 mit ET200S über ProfiNet

Hausautomat

Das gleiche Problem habe ich hier auf einem ganz normalen laptop mit ubuntu auch. Die "Registration Done" muss man mit CTRL-C beenden (sonst tut sich da nix) und bei jedem SEND kommt ein Panic.

malted

#15
Zitat von: fu_zhou am 30 Januar 2015, 10:12:40
Hallo malted,
Hast du eine Idee, wie ich das gefixt bekomme bzw. was ich alles löschen muss, um noch mal vor vorne anfangen zu können?

Sorry, da bin ich echt überfragt.
Neustarten kannst du mit einem

rm -r .storage .config/config.yml gocode
export GOPATH=~/gocode
./go/bin/go get github.com/janimo/textsecure/cmd/textsecure

den aktuellen Code bauen.
Ich schlage vor, du machst mal ein Issue auf:
https://github.com/janimo/textsecure/issues

tom_n

Hallo malted,
das ist eine nette Geschichte mit Textsecure. Ich wollte das selber mal ausprobieren, benutze aber textsecure schon auf dem Android-Telefon. Wenn ich bei der Registrierung die entsprechende Telefonnummer angeben, kommt aber kein Registration Code auf dem Telefon an. Das liegt möglicherweise daran, das die Nummer eben schon registriert ist? Hast Du eine Ahnung, ob man immer eine zusätzliche SIM-Karte mit einer neuen Nummer braucht zur Registrierung? Und nach der Registrierung braucht man die nicht mehr, da der Rechner dann ja per Internet kommuniziert?
VG TomNo

malted

Zitat von: TomNo am 04 März 2015, 14:15:08
Das liegt möglicherweise daran, das die Nummer eben schon registriert ist?
Vermutlich...
Zitat
Hast Du eine Ahnung, ob man immer eine zusätzliche SIM-Karte mit einer neuen Nummer braucht zur Registrierung? Und nach der Registrierung braucht man die nicht mehr, da der Rechner dann ja per Internet kommuniziert?
Die Telefonnummer ist der Identifier innerhalb von Textsecure. Du brauchst eine eigene Telefonnummer. Das kann aber auch eine Festnetznummer sein. Einfach die Benachrichtung auf 'voice' stellen und die registrieren. Wenn Du keine festnetznummer hast, kannst Du dir bei sipgate kostenlos eine holen.

otto

Hallo gibt es eine möglichkeit verschiedene Wörter rauszufiltern bzw auch Leerzeilen?

das aus sowas :
2015-06-15_18:07:56 Seriell UNKNOWNCODE 000
2015-06-15_18:08:05 Seriell UNKNOWNCODE 83: Mon 15-Jun-15 17:55:50:   ZENTRALE ZUR�CKSETZEN


2015-06-15_18:10:14 Seriell UNKNOWNCODE 000
2015-06-15_18:10:22 Seriell UNKNOWNCODE 84: Mon 15-Jun-15 17:58:08:   ZENTRALE ZUR�CKSETZEN

so was wird:
2015-06-15_18:07:56
2015-06-15_18:08:05 83: Mon 15-Jun-15 17:55:50:   ZENTRALE ZUR�CKSETZEN
2015-06-15_18:10:22 Seriell UNKNOWNCODE 84: Mon 15-Jun-15 17:58:08:   ZENTRALE ZUR�CKSETZEN


Gruß Otto
Fhem 1 wire Adapter mit FT232RL&DS2480B Raspberry PI HMLAN HM485LAN HM-LC-Sw4-PCB   HMW-IO-12-SW7-DR Funkhandsender
FRITZ!Powerline 546E

Nick666

Tolle Anleitung. Vielen Dank!

In neueren Versionen kann man übrigens den Pfad zu .config über die Kommandozeile angeben!


Grüße
Nick

Thargor

Wie könnte man denn integrieren, dass FHEM auch Nachrichten empfangen kann?

malted

#21
du kannst einfach den textsecure auf einer Nummer laufen lassen und alle zeilen an fhem schicken. Geht bestimmt irgendwie eleganter, aber müßte so funktionieren.

einen dummy anlegen
define textsecure_incoming dummy

root@fhem:/opt/fhem/ts# sudo -u fhem /opt/textsecure/bin/textsecure -to="+49157xxxxxxxxx" | while read line; do mes=$(echo $line| sed -r "s/\x1B\[([0-9]{1,3}((;[0-9]{1,3})*)?)?[m|K]//g" | awk '{ print substr($0, index($0,$5)) }'); echo setreading textsecure_incoming message "$mes" | nc -q 1 fhem 7072 ; done

das sed löscht die Farb-Codes und das Awk zeigt Spalte 5 bis Zeilenende raus, damit wir nicht noch mal die Absendenummer und den Timestamp zusätzlich bekommen.

Mittels logging kann man dann alle Nachrichten wegschreiben. Und reagieren sollte auch mittels DOIF einfach sein. z.B.

define ts_react DOIF ([textsecure_incoming:message] eq "preheat") ({ sendTextsecure("+4915xxxxxxxx", "Heize vor") }, {set heater on})


Ansonsten kann man auch irgendwie die telnet-session von fhem per textsecure tunneln.

mkfifo ts
nc fhem 7072 < ts | sudo -u fhem /opt/textsecure/bin/textsecure -to="+4915xxxx"  > ts

Das geht zumindest so weit, dass man vom handy cmds schicken kann und die antworten vom fhem-server sieht. Das hakt noch wegen der Farbcodes ("[35"), wer das wirklich will, bekommt das aber wohl leicht gelöst.

Thargor

Supervielen Dank!

Klappt prinzipiell schonmal prima. Wie kann ich den Befehl denn absetzen, so dass die Shell nicht blockiert?

malted

Ich hab's in einem Screen laufen lassen (apt-get install screen).

§ screen -R textsecure
Dann öffnet sich eine neue Shell, die man mit ctrl+a  und dann 'd' detachen kann.

Thargor

Ich habe heute plötzlich nur noch "Fehlerhaft verschlüsselte Nachricht"en von meinem Textsecire/Signal ausf Handy bekommen. Also habe ich den Ordner .storage gelöscht und wollte textsecure/signal neu registrieren. Per Voice wurde mit der Code durchgegeben. Das Registrieren hat geklappt. Doch jetzt bekomme ich beim Aufruf von textsecure folgende Fehlermeldung:

Could not get contacts: status code 401
websocket.Dial wss://textsecure-service.whispersystems.org:443/v1/websocket/?login=%2BXXXXXX&password=XXXXXX: bad status

Ich vermute ja, dass der Client nicht mehr kompatibel ist. Anscheinend wurde da auch schon seit Jahren nix mehr geändert.
Hat jemand eine Alternative für linux?

malted

Zitat von: Thargor am 18 Oktober 2017, 22:23:01
Ich vermute ja, dass der Client nicht mehr kompatibel ist. Anscheinend wurde da auch schon seit Jahren nix mehr geändert.
Hat jemand eine Alternative für linux?

Also bei mir funktioniert das nach wie vor ohne Probleme. Das muss an Deiner Installation liegen.

Bubinator

Möglicherweise liegt es auch daran, dass Textsecure nun Signal ist und es eine eigene Signal-CLI https://github.com/AsamK/signal-cli  gibt, die etwas anders zu funktionieren scheint. Vielleicht hat sich da auch das Backend geändert.

Ich habe es mit Signal aber hinbekommen. Die Basis war der erste Post dieser Diskussion.

Falls gewünscht, kann ich gerne die Schritte posten, die ich vorgenommen habe. Vielleicht kann sich jemand daran orientieren.
Schlussendlich ist es aber schon recht gut auf der Github-Seite der Signal-CLI beschrieben.

Nur die Anpassung an 99_myUtils.pm ist dann eine leichte Adaption dessen, was hier im ersten Poste geschrieben worden ist.

klausw

Zitat von: Bubinator am 14 Januar 2018, 14:13:54
Falls gewünscht, kann ich gerne die Schritte posten, die ich vorgenommen habe. Vielleicht kann sich jemand daran orientieren.
nur zu  8)

Kannst du auch Nachrichten emfangen?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Wetterhexe


DarkT

Das klingt interessant, da werde ich doch mal einen Versuch wagen

Bubinator

#30
Hallo zusammen,

wie schon geschrieben, es ist nicht kompliziert. Ich habe es auf meine RaspberryPi, auf dem auch FHEM läuft wie folgt gemacht.
@KlausW - Laut der Beschreibung der Signal-CLI soll auch der Empfang gehen. Das habe ich aber nicht ausprobiert und entsprechend auch nichts implementiert.

1. Signal-CLI installieren (Beschreibung stammt von https://github.com/AsamK/signal-cli

export VERSION=<latest version, format "x.y.z">
wget https://github.com/AsamK/signal-cli/releases/download/v"${VERSION}"/signal-cli-"${VERSION}".tar.gz
sudo tar xf signal-cli-"${VERSION}".tar.gz -C /opt
sudo ln -sf /opt/signal-cli-"${VERSION}"/bin/signal-cli /usr/local/bin/


2. Nummer (USERNAME ist die Telefonnummer im Format +49171...) für Signal registrieren (Parameter --voice optional, wenn keine SMS empfangen werden kann)

signal-cli -u USERNAME register


3. Den erhaltenen Verifikationscode eingeben

signal-cli -u USERNAME verify CODE


4. Grundsätzliche Funktionalität über die Bash testen (RECIPIENT ist die Telefonnummer des Empfängers, der auch Signal haben muss im Format +49172...):

signal-cli -u USERNAME send -m "This is a message" RECIPIENT


5. Signal-Konfigurationsdatei aus Homeverzeichns nach FHEM kopieren/verschieben

cp ~/.config /opt/fhem/


6. Als FHEM-User testen (sicherstellen, dass die Berechtigungen passen)

sudo -u fhem signal-cli -u USERNAME send -m "Test aus FHEM-Verzeichnis" RECIPIENT


Das waren nun die Schritte für die Installation und den Test der Signal-CLI. Nun kommt noch meine Anpassungen an den 99_myUtils.pm. Ich bin kein Perl-Entwickler und ich habe als Basis den Code aus dem ersten Posting in diesem Threat genommen. Verbesserungen sind natürlich immer willkommen.

7. 99_myUtils.pm anpassen

package main;
use strict;
use warnings;
use Cwd;
use POSIX;
sub
myUtils_Initialize($$)
{
          my ($hash) = @_;
  }

  ######################################################
  ## Aufgabe    :Versenden von Signal-Nachrichten
  ## Parameter 1:Nummer des Absenders im Format +491701234567
  ## Parameter 2:Nummer des Empfängers im Format +491711234567
  ## Parameter 3:Nachricht
  ##
 
  sub sendSignalMessage($$$)
  {
        my ($nrAbs, $nr, $Message) = @_;
        my $dir = getcwd();
        #chdir "/opt/fhem/ts/";
        Log 3, "sendSignal  Nr: ". $nr . " Absender-Nr: ". $nrAbs . " Message:\x22" . $Message . "\x22 ";
        #Direkter Aufruf
        system("signal-cli -u \"$nrAbs\" send  -m \"$Message\" \"$nr\"");
        chdir "$dir";
 
  }
 
  1;


8. Nachricht aus FHEM versenden:

{ sendSignalMessage("+491701234567", "+491719876543210", "Nachricht aus der FHEM-Oberflaeche") }


Das war es dann auch. Über sendSignalMessage kann man nun zu diversen Events eine Nachricht versenden. Ich nutze es zur Warnung vor zu hoher Luftfeuchtigkeit in dem Raum, wo die Waschmaschine steht.

Viele Grüße & Glück Auf!

Quantum

#31
Hallo FHEM-Gemeinde,

da ich auch Nachrichten empfangen wollte und ich das ganze auf einem Raspberry Pi mache (das senden einer Nachricht kann mit der o.g. Methode u.u. 5 minuten dauern), habe ich mich für den daemon Modus des signal-cli und dbus entschieden. Ich habe auf Github unter

https://github.com/Quantum1337/signal2fhem

einen kleinen daemon abgelegt, der auf dbus signale reagiert und bei eintreffen einer Nachricht readings über Telnet setzt.

Wenn mir jemand sagen kann wie ich mit der FHEM API auf dbus signale reagiere, kann ich anbieten ein FHEM Modul zu schreiben. Diese Frage habe ich hier:
https://forum.fhem.de/index.php/topic,84166.0.html auch schon gestellt. Bekam aber leider keine antwort.


EDIT:
Siehe:
https://github.com/Quantum1337/32_SiSi.pm
https://forum.fhem.de/index.php/topic,84996.0.html

Grüße und Viel Erfolg

vic

Guten Tag Gemeinde

Ich versuche seit geraumer Zeit Signal zu installieren. Unter Linux kann ich als root Problemlos Nachrichten senden. Als fhem kommt die folgende Meldung:
User is not registered
Folgende Schritte hatte ich durchgeführt:
cp -r ~/.config /opt/fhem/
chown -R fhem:dialout /opt/fhem/.config
chmod 666 /opt/fhem/.config -r

sudo -u fhem signal-cli -u +4156xxxxxxx  send -m "Test aus FHEM-Verzeichnis" +4179xxxxxxx


Vielen Dank für eure Hilfe
Raspberry Pi 4
RFXTRX 868MHz und 433MHz
FS20, Intertechno, Homematic, Shelly
MAX!-Cube, Philips HUE-Bridge

malted

Zitat von: vic am 09 September 2018, 09:46:24
Guten Tag Gemeinde

Ich versuche seit geraumer Zeit Signal zu installieren. Unter Linux kann ich als root Problemlos Nachrichten senden. Als fhem kommt die folgende Meldung:
User is not registered
Folgende Schritte hatte ich durchgeführt:
cp -r ~/.config /opt/fhem/
chown -R fhem:dialout /opt/fhem/.config
chmod 666 /opt/fhem/.config -r

sudo -u fhem signal-cli -u +4156xxxxxxx  send -m "Test aus FHEM-Verzeichnis" +4179xxxxxxx


Vielen Dank für eure Hilfe

Was ist denn dein home-Verzeichnis für den User fhem? die signal-cli guckt in dort nach der config. Ggf. mal den Pfad zur Config per cmdline-argument mitgeben.
Ansonsten ist doch .config ein Ordner? da ist natürlich 666 eine blöde Permission für, probier mal 755 ;-)
Achja, ~/.storage brauchst Du auch...

vic

Hallo malted und danke für die prompte Antwort

Das home-Verzeichnis von fhem lautet /opt/fhem (fhem:x:999:20::/opt/fhem:/bin/false)
Der chmod ist rekursiv auf 755 gesetzt.
Ein Verzeichnis ~/.storage ist bei mir nicht vorhanden

Unterdessen sind andere Fehlermeldungen erschienen die auf Zugriffsprobleme bei den Dateien local_policy.jar (Permission denied) und US_export_policy.jar (Permission denied) hinweisen.
Habe die Dateien auf 555 gesetzt.

Als Folge erscheint keine Fehlermeldung mehr jedoch kommt auch keine Nachricht an,.

Nun habe ich die Dateien zusätzlich mit chown fhem:dialout versehen.


ES FUNKTIONIERT NUN!!!!

Ganz herzlichen Dank für deine Hilfe malted. :)

Wünsche dir noch eine tollen Sonntag
Raspberry Pi 4
RFXTRX 868MHz und 433MHz
FS20, Intertechno, Homematic, Shelly
MAX!-Cube, Philips HUE-Bridge

Carsten K.

Hallo Ihr Wissenden :)

ich setze aktuell telegram ein, würde aber gerne etwas mit Verschlüsselung verwenden.
Ich habe das Topic Signal/textsecure bis jetzt so verstanden, dass SMS versendet werden.

Liege ich da falsch? Dann habe ich die Anleitungen nicht genug durchgelesen...

Ich möchte Meldungen von FHEM senden und mit FHEM von einer App empfangen (geht alles mit Telegram).

Vielen Dank für eure Hinweise ...
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

vic

Guten Tag

Gemäss meiner Kenntnisse besitzt Signal eine Ende-zu-Ende-Verschlüsselung.

Signal ist ein freier verschlüsselter Messenger. (Wikipedia)
https://de.wikipedia.org/wiki/Signal_(Messenger)
Raspberry Pi 4
RFXTRX 868MHz und 433MHz
FS20, Intertechno, Homematic, Shelly
MAX!-Cube, Philips HUE-Bridge

delMar

Zitat von: Carsten K. am 07 November 2018, 14:35:30
ich setze aktuell telegram ein, würde aber gerne etwas mit Verschlüsselung verwenden.
Also meiner Meinung nach ist Telegram auch sicher.
Es gibt sogar 300.000 Dollar Bonus wenns jemand schafft, eine Nachricht zu entschlüsseln
Maintainer von: ZoneMinder, TA_CMI_JSON, ONKYO_AVR, DENON_AVR, CanOverEthernet, IPCAM.

Vielgenutzte Module sind die größte Motivation für Entwickler.
Bitte zumindest 'attr global sendStatistics onUpdate' setzen.
Denn: ohne 'sendStatistics' keine Zahlen.

Carsten K.

Zitat von: delmar am 08 November 2018, 21:02:12
Also meiner Meinung nach ist Telegram auch sicher.
Es gibt sogar 300.000 Dollar Bonus wenns jemand schafft, eine Nachricht zu entschlüsseln

Das hört sich gut an  ;D
NUC FHEM on Debian, CC1101-USB-Lite 868MHz;
HM_HM_CC_RT_DN, HM-LC-SW1-PL2, HM_HM_TC_IT_WM_W_EU, HM-SEC-SC-2, HM-ES-TX-WM
FRITZ!DECT 200
Philips TV (Android), VuDuo2, VU Ultimo4k

abc2006

Zitat von: delmar am 08 November 2018, 21:02:12
Also meiner Meinung nach ist Telegram auch sicher.
Es gibt sogar 300.000 Dollar Bonus wenns jemand schafft, eine Nachricht zu entschlüsseln

Bei Telegram ist eine Schwachstelle die Handhabung der Authentifikation auf dem Handy. So kann z.B. ein zusätzlicher Client angemeldet werden, der alle! Nachrichten mitlesen kann...

Ich löse dieses Problem so, dass ich nur "unkritische" Sachen über telegram steuere.. (Licht an, Licht aus, "sende mir ein Bild", "sende mir die Temperatur") und NICHT "öffne mir die Haustüre" ...

Dafür habe ich auf dem Handy ein VPN eingerichtet (was übrigens ziemlich einfach zu handhaben ist), mit dem ich mich auf meine FritzBox connecte ...

Grüße,
Stephan
FHEM nightly auf Intel Atom (lubuntu) mit VDSL 50000 ;-)
Nutze zur Zeit OneWire und KNX

Bubinator

Hallo zusammen,

es ging hier um Signal und die FHEM-Anbindung und nicht um Telegram oder irgendwelche "Glaubenskriege" der Messanger-Apps.  ;)

Glück Auf!

Stefan