Neues Modul: Signalbot (Integration für den Signal Messenger) via signal-cli

Begonnen von Adimarantis, 31 Januar 2021, 19:16:19

Vorheriges Thema - Nächstes Thema

enno

Hallo Jörg,

habe jetzt alles noch mal per Konsole gemacht:

sudo service signal stop
sudo -u signal-cli ./signal-cli --config /var/lib/signal-cli -u +49...  register --voice --captcha signalcaptcha://03AGdB...
sudo -u signal-cli ./signal-cli --config /var/lib/signal-cli -u +49... verify 123457
sudo service signal start


und nun geht es wieder. Die Eingabe über FHEM und dein Modul des Captcha klappt bei mir warum auch immer nicht. Nach dem Verify war alles wieder im Lot. Jetzt hat das Reading "sentMsgTimestamp" auch einen richtigen Wert "11-11-2021 14:40:08"

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Kohle77

Hallo,
ich habe da mal ein problem. Ich verwende:
Signalbot:3.1 signal-cli:0.9.0 Protocol::DBus:0.19

Nun habe ich mir ein DOIF gebaut in dem ich mit Perl ein if , elseif und else benutze.
Der if und elseif zweig funktioniert da dort ja der Empfänger mit \@+491... angegeben wird.
Jetzt komme ich aber zu meinem Problem. In dem else Zweig möchte ich eine Nachricht an einer Gruppe schicken die ja mit #gruppenname angeschrieben wird aber ich möchte auch der Wert einer variable aus Perl $var in dem text mitschicken.

else {fhem ("set SigBot send #9-Eidenmuellers Morgen hat $val Geburtstag") }
bekomme aber den Fehler Specify either a message text or an attachment
Hab schon etliche variationen ausprobiert und bin jetzt einfach ratlos.

Gruß
Christian

Adimarantis

Hallo Christian,

ich habe bei mir testweise mal ein DOIF gebaut, das hoffentlich deinem Anwendungsfall entspricht:
(false) {
my $val="duda";
if ($val eq "ich") {
  fhem ("set SignalBot send #1-testgruppe Ich bins")
} else {
  fhem ("set SignalBot send #1-testgruppe Hallo $val")
  }
}


Dachte erst es liegt vielleicht an dem Gruppennamen (mit "9-....") aber wenn ich "set cmd_1" mache, dann kriege ich wie erwartet "Hallo duda" auf meinem Handy.
Überprüfe doch mal anhand des Beispiels ob wirklich alles korrekt ist und als nächstens mal verbose=5 und ins logfle schauen.

Jörg
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Kohle77

Hallo Jörg,
ich habe folgendes:
([09:00] and [Geburtstagsliste:t_001_daysleft] == 1)
( {my $val= ReadingsVal ('Geburtstagsliste','t_001_summary','');;
my $t= ReadingsVal ('Geburtstagsliste','t_001_description','');;
my $rec= substr("$t",0,1);;
if (($rec eq "m") || ($rec eq "M")) {fhem ("set SignalBot send \@+491........... Morgen hat $val Geburtstag") }
elsif (($rec eq "c") || ($rec eq "C")) {fhem ("set SignalBot send \@+491........ Morgen hat $val Geburtstag") }
else {fhem ("set SignalBot send #Gruppe Morgen hat $val Geburtstag") }
})
DOELSEIF ([06:00])


Im reading des DOIF erhalte ich:
{my $val= ReadingsVal ('Geburtstagsliste','t_001_summary','');; my $t= ReadingsVal ('Geburtstagsliste','t_001_description','');; my $rec= substr("$t",0,1);; if (($rec eq "m") || ($rec eq "M")) {fhem ("set SignalBot send \@+49.......... Morgen hat $val Geburtstag") } elsif (($rec eq "c") || ($rec eq "C")) {fhem ("set SignalBot send \@+491........... Morgen hat $val Geburtstag") } else {fhem ("set SignalBot send #Gruppe Morgen hat $val Geburtstag") } }: Specify either a message text or an attachment

Verbose 5 ist gesetzt im DOIF und das Log sagt:
2021.11.21 09:00:00 3: set SigBot send #Gruppe Morgen hat Heint Test '64 Geburtstag : Specify either a message text or an attachment
2021.11.21 09:00:00 2: diGeburtstag: {my $val= ReadingsVal ('Geburtstagsliste','t_001_summary','');; my $t= ReadingsVal ('Geburtstagsliste','t_001_description','');; my $rec= substr("$t",0,1);; if (($rec eq "m") || ($rec eq "M")) {fhem ("set SignalBot send \@+491............ Morgen hat $val Geburtstag") } elsif (($rec eq "c") || ($rec eq "C")) {fhem ("set SignalBot send \@+491....... Morgen hat $val Geburtstag") } else {fhem ("set SignalBot send #Gruppe Morgen hat $val Geburtstag") }  }: Specify either a message text or an attachment


Ich denke es muss irgendwie mit dem # zusammenhängen da dies in Perl ja als Kommentar gilt.
Die anderen beiden IF und ELSEIF funktionieren da dort ja kein # darin vorkommt. Musste aber das @ dort auch maskieren (so nennt man das glaube ich).
Das maskieren des # hilft aber nicht.
Habe im else also im ELSE ...set SignalBot send \#Gruppe ....

Der Fehler ist aber der gleiche.

Mache ich " in den ELSE zweig:
([09:20] and [Geburtstagsliste:t_001_daysleft] == 1)
( {my $val= ReadingsVal ('Geburtstagsliste','t_001_summary','');;
my $t= ReadingsVal ('Geburtstagsliste','t_001_description','');;
my $rec= substr("$t",0,1);;
if (($rec eq "m") || ($rec eq "M")) {fhem ("set SignalBot send \@+4917xxxxxxxx Morgen hat $val Geburtstag") }
elsif (($rec eq "c") || ($rec eq "C")) {fhem ("set SignalBot send \@+4916xxxxxxx Morgen hat $val Geburtstag") }
else {fhem ("set SignalBot send \#Gruppe Morgen hat  $val Geburtstag") }
})
DOELSEIF ([06:00])


bekomme ich die Meldung Morgen hat $val Geburtstag. d.h. statt dem Wert der variable $val bekomme ich den Namen $val geschickt.

Habe aber jetzt dein Beispiel mal erstellt.
{
my $val="duda";
if ($val eq "ich") {
  fhem ("set SignalBot send #9-Gruppe Ich bins")
} else {
  fhem ("set SignalBot send #9-Gruppe Hallo $val")
  }
}


Was mir dabei aufgefallen ist das du nur einfache ; verwendest und ich immer ;;
Dein Beispiel funktioniert und ich bekomme die Nachricht Hallo duda.

Ich verstehe es einfach nicht.

Gruß
Christian



Adimarantis

Zitat von: Kohle77 am 21 November 2021, 09:32:12
Verbose 5 ist gesetzt im DOIF und das Log sagt:
2021.11.21 09:00:00 3: set SigBot send #Gruppe Morgen hat Heint Test '64 Geburtstag : Specify either a message text or an attachment
Es scheint das '64 zu sein - das führt zu unausgeglichenen Quotes.
Hab das mal in mein Beispiel eingebaut und kriege es mit normalen Quotes plus Escape zum Laufen:
(false) {
my $val="'duda";
if ($val eq "ich") {
  fhem ("set SignalBot send #1-testgruppe Ich bins")
} else {
  fhem ("set SignalBot send #1-testgruppe \"Hallo $val\"")
  }
}
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Kohle77

Hallo,
daran habe ich noch die Gedacht. Nur damit ich es richtig verstehe.
Wenn also in dem reading t_001_summary steht Vorname Nachname 'xx wobei das xx das Jahr ist steht dann in der Variable $val eben "Vorname Nachname 'xx" und das ' könnte probleme machen. Wenn ich das 'xx einfach auf 19xx ändere sollte es auch kein Problem geben da es eben keine ' zeichen mehr gibt. Muss ich mal Probieren. Melde mich wenn ich es testen konnte.

Gruß
Christian

Kohle77

Hi,
Juhu ich konnte es schon testen. Wenn ich statt dem 'xx eben 19xx benutze dann funktioniert es.
Hab das else auch mal in:
else {fhem ("set SigBot send \#9-Gruppe Morgen hat $val\" Geburtstag") was aber das Problem nicht löst da das ' Zeichen mitten in $val steht.
Vielen Dank nochmal für die Hilfe.
Gruß
Christian

memento_10

Hallo in die Runde!

Ich habe auf meinen beiden FHEM-Installationen Signalbot und signal-cli auf die aktuellen Versionen gezogen:

Signalbot:3.1 signal-cli:0.9.0 Protocol::DBus:0.19

Senden funktioniert einwandfrei und superschnell.

Jedoch habe ich beim Empfang Probleme. Entweder die Nachrichten kommen extrem spät (> 15 min.) in FHEM an, oder gar nicht.

signal-cli schreibt jedoch alle 3-4 Sekunden folgenden Eintrag in /var/log/syslog:


Nov 22 21:01:14 rpi4SSD signal-cli[26337]:   - 1637509531464 (2021-11-21T15:45:31.464Z)
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Envelope from: unknown source
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Timestamp: 1637526532740 (2021-11-21T20:28:52.740Z)
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Sent by unidentified/sealed sender
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Sender: +43XXXXXXXXXXX (device: 1)
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Server timestamps: received: 1637526532932 (2021-11-21T20:28:52.932Z) delivered: 1637611258989 (2021-11-22T20:00:58.989Z)
Nov 22 21:01:17 rpi4SSD signal-cli[26337]: Received a receipt message
Nov 22 21:01:17 rpi4SSD signal-cli[26337]:   When: 1637526532740 (2021-11-21T20:28:52.740Z)
Nov 22 21:01:17 rpi4SSD signal-cli[26337]:   Is delivery receipt
Nov 22 21:01:17 rpi4SSD signal-cli[26337]:   Timestamps:
Nov 22 21:01:17 rpi4SSD signal-cli[26337]:   - 1637509394221 (2021-11-21T15:43:14.221Z)



Ich hab' signal-cli bereits mehrmals entfernt und den ganzen Prozess (signal_install.sh & Registrierung) neu durchgeführt, Ergebnis ist leider immer dasselbe.  :(

Hat eventuell jemand eine Idee, wo ich noch nach Fehlern suchen könnte?

Vielen Dank und liebe Grüße!
Simon
FHEM auf Rpi4, OpenWRT auf Netgear Nighthawk, CUL868, FHT80, Tradfri, CUL433, tbot, alexa-fhem, ESP8266, Shelly 1+2, homebridge, Klingelerkennung über ESP, Anwesenheit per OpenWRT

Adimarantis

hi Simon,

Dass er ständig ins syslog schreibt ist schon mal nicht normal (wenn keine Nachrichten kommen).
Wenn du signal-cli neu installiert hast, hast du dann auch mal /var/lib/signal-cli/ komplett gelöscht, bevor du neu installiert hast?
Wenn der Wurm in der Config ist, dann hilft die Neuinstallation (und ggf. Neuregistrierung) eventuell nichts.

Weitere debug versuche wären dann, das Problem einzugrenzen, als erstmal den Service beenden und nur mit der signal-cli Kommandozeile verschiedene Tests( senden/empfangen) zu machen.
Dann mit laufendem Service, aber ohne FHEM mit dbus-send etc. von der Kommandozeile, dann mit Perl ohne FHEM.
Aber eins nach dem anderen. Wenn du da nicht weiter kommst, müsste ich auch erstmal die Befehle raussuchen.

Jörg

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Kohle77

Hi,
Befehle zum senden aus der command line habe ich z.B. hier gefunden:
https://wiki.fhem.de/wiki/SiSi
z.B. sudo -u fhem signal-cli -u <RegistrierteNummer> send -m "Greetings from FHEM!" <Empfängernummer>
dbus senden 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>
Denke es gibt auch befehle im messages zu empfangen.
Gruß
Christian

memento_10

Hi!

Erstmals danke für Eure Antworten!

ZitatWenn du signal-cli neu installiert hast, hast du dann auch mal /var/lib/signal-cli/ komplett gelöscht, bevor du neu installiert hast?
Ja, das Verzeichnis habe ich vor der Neuinstallation gelöscht.

Ich habe jetzt nochmal installiert, dabei kam es zu folgendem Fehler:
Job for signal.service failed because a timeout was exceeded.


signal.service - Send secure messages to Signal clients
   Loaded: loaded (/etc/systemd/system/signal.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Tue 2021-11-23 09:11:29 CET; 16s ago
  Process: 7913 ExecStart=/opt/signal/bin/signal-cli --config /var/lib/signal-cli daemon --system (code=exited, status=143)
Main PID: 7913 (code=exited, status=143)

Nov 23 09:09:59 rpi4 systemd[1]: Starting Send secure messages to Signal clients...
Nov 23 09:11:29 rpi4 systemd[1]: signal.service: Start operation timed out. Terminating.
Nov 23 09:11:29 rpi4 systemd[1]: signal.service: Main process exited, code=exited, status=143/n/a
Nov 23 09:11:29 rpi4 systemd[1]: signal.service: Failed with result 'timeout'.
Nov 23 09:11:29 rpi4 systemd[1]: Failed to start Send secure messages to Signal clients.



Ich habe die Registrierung manuell durchgeführt, das lief ohne Probleme:

sudo  ./signal-cli --config /var/lib/signal/ -u +43XXXXXXXX  register --voice --captcha signalcaptcha://03AGd...
sudo  ./signal-cli --config /var/lib/signal/ -u +43XXXXXXXX verify XXXXXX


Danach:

sudo ./signal-cli --config /var/lib/signal -u +43XXXXX send -m "Test" +43XXXXXX
INFO Manager - The Signal protocol expects that incoming messages are regularly received.
1637656517378


Die Nachricht ist auch angekommen.

Beim Senden über dbus, folgende Fehlermeldung:


sudo ./signal-cli --dbus-system send -m "Hallo" +43XXXXXXX
Failed to send message: Failed to activate service 'org.asamk.Signal': timed out (service_start_timeout=25000ms) (DBusExecutionException)


Ich befürchte fast, dass ich durch die ganzen Neu-Installationen mehr zerschossen, als gerettet habe...  :-\



Liebe Grüße!
Simon
FHEM auf Rpi4, OpenWRT auf Netgear Nighthawk, CUL868, FHT80, Tradfri, CUL433, tbot, alexa-fhem, ESP8266, Shelly 1+2, homebridge, Klingelerkennung über ESP, Anwesenheit per OpenWRT

Adimarantis

Das mit dem timeout hatten wir schon mal bei sehr langsamen Systemen.
Siehe hier:
https://forum.fhem.de/index.php/topic,118370.msg1182313/topicseen.html#msg1182313

Versuch mal wie beschrieben den timeout zu erhöhen.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

memento_10

Hallo Jörg,

Du hattest Recht, mit erhöhtem Timeout startet der Service, jedoch benötigt er wirklich sehr lange dafür. In der Zeit lastet java auch den Prozessor zu 100% aus:


time sudo service signal restart

real    2m35.914s
user    0m0.028s
sys     0m0.085s


Jetzt hätte ich erneut eine komplette Neu-Installation versucht, aber scheitere am Captcha. Weder über den Registry-Hack noch direkt über die cli wird der Token angenommen. Eventuell habe ich's heute übertrieben.

Ich versuch's dann morgen nochmal und suche weiter.

Vielen Dank einstweilen.

LG
Simon
FHEM auf Rpi4, OpenWRT auf Netgear Nighthawk, CUL868, FHT80, Tradfri, CUL433, tbot, alexa-fhem, ESP8266, Shelly 1+2, homebridge, Klingelerkennung über ESP, Anwesenheit per OpenWRT

memento_10

Hallo zusammen!

Kleines Update:

Auf beiden FHEM-Instanzen nochmal alles komplett neu gemacht, inkl. der Tipps aus der Fehlerbehandlung im Wiki.
Die Konten von beiden Rufnummern bei Signal gelöscht und neu erstellt.

Nur habe ich dieses Mal beide Nummern verlinkt, statt über signal-cli oder fhem registriert.
Hilft aber leider auch nichts. Kurz nach der Neuinstallation hat es zwar funktioniert, aber nach ein paar Minuten ging es nicht mehr.

Ich habe soeben nochmal den service neu gestartet, jetzt schreibt er innerhalb von 1 Sekunden > 500 Zeilen ins syslog, immer mit demselben Inhalt (man beachte auch die total abweichenden Timestamps!):


Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Envelope from: unknown source
Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Timestamp: 1637771944834 (2021-11-24T16:39:04.834Z)
Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Sent by unidentified/sealed sender
Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Sender: "XXXXXXXXX" +43XXXXXXXXXXX (device: 2)
Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Server timestamps: received: 1637771945043 (2021-11-24T16:39:05.043Z) delivered: 1637776740730 (2021-11-24T17:59:00.730Z)
Nov 24 18:59:00 rpi4SSD signal-cli[5422]: Received a receipt message
Nov 24 18:59:00 rpi4SSD signal-cli[5422]:   When: 1637771944834 (2021-11-24T16:39:04.834Z)
Nov 24 18:59:00 rpi4SSD signal-cli[5422]:   Is delivery receipt
Nov 24 18:59:00 rpi4SSD signal-cli[5422]:   Timestamps:
Nov 24 18:59:00 rpi4SSD signal-cli[5422]:   - 1637766524727 (2021-11-24T15:08:44.727Z)


Jetzt habe ich eigentlich alles versucht, was mir eingefallen ist.

Hat vielleicht noch jemand einen Tipp für mich?

Vielen Dank und liebe Grüße!
Simon

FHEM auf Rpi4, OpenWRT auf Netgear Nighthawk, CUL868, FHT80, Tradfri, CUL433, tbot, alexa-fhem, ESP8266, Shelly 1+2, homebridge, Klingelerkennung über ESP, Anwesenheit per OpenWRT

Adimarantis

Das läuft auf einem Raspi4, korrekt?
Welche OS/Kernel Version? Alle Pakete aktuell?
Welche Java Version wird verwendet?
java --version
openjdk 11.0.12 2021-07-20


Du kannst auch mal probieren auf signal-cli 0.9.2. zu updaten (nicht das ich mir viel davon verspreche, aber mir fällt sonst nicht mehr viel ein) - dazu einfach im Installer script
SIGNALVERSION="0.9.2"
und nochmal drüberinstallieren lassen.

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)