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

darkness

Guten Morgen,

ich habe gerade das Script auf einer frischen FHEM-Installation getestet. Die Installation endet mit folgender Fehlermeldung:

Checking for /etc/systemd/system/signal.service.../etc/systemd/system/signal.service installed
Created symlink /etc/systemd/system/dbus-org.asamk.Signal.service -> /etc/systemd/system/signal.service.
Created symlink /etc/systemd/system/multi-user.target.wants/signal.service -> /etc/systemd/system/signal.service.
Start signal-cli service
Checking installation via dbus-send command...Error org.freedesktop.dbus.errors.UnknownMethod: The method `org.asamk.Signal.isRegistered' does not exist on this object.
Sending a message via perl Protocol::DBus...Error getting reply


Jedoch scheint danach alles zu laufen:
Internals:
   CFGFN     
   FD         4
   FUUID      614182f1-f33f-df6c-5561-a013bf20afb00d4a
   NAME       mySignalbot
   NOTIFYDEV  global
   NR         20
   NTFY_ORDER 50-mySignalbot
   STATE      Connected to /org/asamk/Signal/_49XXX
   TYPE       Signalbot
   VERSION    Signalbot:3.0beta signal-cli:0.9.0 Protocol::DBus:0.19
   READINGS:
     2021-09-15 05:26:46   account         +49XXX
     2021-09-15 05:21:54   joinedGroups   
     2021-09-15 05:26:46   lastError       ok
     2021-09-15 05:27:25   sentMsg         Testnachricht
     2021-09-15 05:27:31   sentMsgRecipient +49XXXX
     2021-09-15 05:27:31   sentMsgTimestamp 15-09-2021 05:27:25
   helper:
     accounts   1
     captcha    03AGdBq25E6cM1xMWWUjx606UtWg-zTIotfkfVhhiK6C-ecHDU22b2xmx-s3HKMrZXc-S9brXQO7JOPPwSk9tdnpw-UWchtsQcYyPkgtd8XF54cMqeIHms79zJjQ1J0-Imwwxun_j2cu8Ap8TA7tljLxunHowQP7Lq1HiukUXST6x8jxph7PBRv0eA3YDcrfqkxFPwVzcd-_XVRvLgFLfZeZxxQ1cnA7Z1dYAv2PUCWWY4PQVzNMPzgKaO9UEXDIlUdql7Z69NMy5I9ok7vU5CRZk09IcuP3-tkmRsaZ7L6wlCTbylTiLfr3xJ2D9_YxAHoSFzOrPOTlYzYhVCofjHyimW688koDh1Vqsxm0L2IQpVS4r-w3eZSs_yDk4qix8_L31SgND4B3k8kfIQ3mJrUTwuUDzlN37M696P1c_Vo_zg0qRfAgyzd3JIWwqTsj5_HpRb3o9nHJh-
     init       :1.34
     multi      1
     qr         
     register   
     signalpath /org/asamk/Signal/_49XXX
     verification
     version    900
     contacts:
       +49XXX
       +49XXX
Attributes:
   registerMethod Voice


Edit:
Übrigens funktioniert die Captcha-Abfrage über den Browser nicht, da ich ein csrf-Error erhalte:

2021.09.15 05:24:54 3: FHEMWEB WEB CSRF error:  ne csrf_YYYYYYYYYYYYYY for client WEB_172.16.40.10_46764 / command set mySignalbot captcha signalcaptcha://03AGdBq26R30L-rSsjsYpeD-aLGiODeDZYVlwwtcDhcyLpik916fUwIZoKhcZJ2QirST2eQzxV7-rIm95qF0Y4l1HEO5zrFfoHV6pSRqQrRWuiiPNeKs2TmH5Exsp5WnUSshrkIH65ZnJ5S8ag_0MQu9nrDNhSi1VqkjjkQMFJ4riV0eszG96xdnB7BN8gyfgdHiqmgQdnrFtpbiNUBxxgu-srnoXYO5dn43whg5XmjMLpXjYLKb8Ckbu1sz18JqzQg9TvXqUuUdy0z422KelQl_85VhiOkSeX9d85fj83K49YdPoqIQ94QB0eHHjaTYERlYsl7XhAC-sbdJaeZQCpnar-ww8GAZG1Sx5B8Q7GR0C3NGxHwNnwKM-UO_I39EYx_Uv4Z6uvEp07-e3GE7T0ZEbKjTuH3M0GR7R-iONfmXJIv5Fi78bVw81ElNjDGJjOi9yV6oGwVGD_. For details see the csrfToken FHEMWEB attribute.

Adimarantis

ZitatChecking installation via dbus-send command...Error org.freedesktop.dbus.errors.UnknownMethod: The method `org.asamk.Signal.isRegistered' does not exist on this object.
Sending a message via perl Protocol::DBus...Error getting reply

Das kann ignoriert werden. Da habe ich im Rahmen des workaround (weil meine Änderung in signal-cli noch nicht akzeptiert wurden) vergessen auf eine andere test-funktion umzustellen.

Zitat...ab hier geht es nicht mehr weiter. Das Docker Protokoll sagt: "connect(unix:path=/var/run/dbus/system_bus_socket): Connection refused at /usr/local/share/perl/5.28.1/Protocol/DBus/Client.pm line 144."
Hmm.. ok - den Docker-spezifischen Teil habe ich nicht getestet, muss ich mir ansehen. Danke.

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

KuhKai

Hi Jörg,

sudo -u $SIGNALUSER ./signal-cli --config $SIGNALVAR -u $PHONE daemon --system >/var/log/signal.log 2>/var/log/signal.err &

Liefert
./signal-cli: 39: cd: can't cd to ./..                                                                                                                                                                                                       
./signal-cli: 41: cd: can't cd to /opt/fhem/signal/bin                                                                                                                                                                                       
Error: Could not find or load main class org.asamk.signal.Main                                                                                                                                                                               
Caused by: java.lang.ClassNotFoundException: org.asamk.signal.Main


Ich verstehe leider nicht, warum der Verzeichniswechsel nicht von statten gehen kann.
$PHONE ist ein Überbleibsel von der Vorversion?

Adimarantis

Meine Dockerinstallation (extra script) installiert signal-cli unterhalb vom fhem in /opt/fhem/signal
Die Standardinstallation unter /opt/signal
Einfach so funktioniert das ist.
Das "-u" ist zwar wirklich ein Überbleibsel, würde aber erstmal nichts ausmachen solange $PHONE die korrekte Telefonnummer enthält.

Wenn du unter Docker eine Standardinstallation machen willst, dann musst die am Anfang vom Script die Dockererkennung entfernen. Das ist aber alles nicht supported.
Docker würde ich mir in einem weiteren Schritt ansehen, wenn ich weiss, dass die normale Installation sauber läuft.

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

Adimarantis

ZitatÜbrigens funktioniert die Captcha-Abfrage über den Browser nicht, da ich ein csrf-Error erhalte:
Ok, das habe ich bei mir deaktiviert (ich glaube das hat mit IFTTT damals Probleme gemacht - aber das verwende ich inzwischen nicht mehr)
Sollte eigentlich möglich sein das Token in die generierten .reg bzw. mime Files zu integrieren. Nachteil ist natürlich, das man nach jeden FHEM Neustart diese Files neu installieren muss.
Muss ich mir ansehen.

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

Adimarantis

Um die Installation zu vereinfachen experimentiere ich gerade mit Debian packages.

Letztendlich ist dann das Installer Script nicht mehr notwendig sondern es muss nur Protocol::DBus von cpan installiert werden:
sudo cpan install Protocol::DBus

Sowie der signal-cli service über apt für Ubuntu (20.04+ , für 18.04 passt die glibc version nicht)
sudo apt-get install -f ~/signal-cli-dbus_0.9.0-1_amd64.deb
bzw. für Raspberry (Buster)
sudo apt-get install -f ~/signal-cli-dbus_0.9.0-1_armhf.deb

Die Packages liegen jetzt erstmal testweise auf meinem Google Drive. Evtl. lege ich die dann zukünftig auf das FHEM SVN oder es hat jemand eine bessere Idee.

amd64:
https://drive.google.com/file/d/1R3H8lghA452kevxbhu7q8O492gc7LmMc/view?usp=sharing

Armhf:
https://drive.google.com/file/d/1s-ykv5LCtlol9mMJf9SWX32orld8HDOT/view?usp=sharing

Damit sollte es auch recht einfach sein ein bestehendes FHEM Docker Installationsscript zu erweitern:
RUN cpan install -f Protocol::DBus
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y -f ~/signal-cli-dbus_0.9.0-1_amd64.deb


Im Docker hab ich das jetzt noch nicht getestet aber auf meinem Raspberry bzw. meiner Ubuntu VM läuft das soweit.
Die Abhängigkeiten zu Dbus and Java sollten eigentlich von apt-get aufgelöst werden, aber es ist möglich, das ich noch nicht alle Abhängigkeiten erfasst habe.

Jörg


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

Adimarantis

Update für das csrf Token Problem.
Wenn FHEM ein csrf Token verwendet, wird dieses jetzt im jeweiligen .reg / .desktop file mitgeneriert.
Wichtig: Sofern ein zufälliges Token verwendet wird, muss dieses dann neu geholt und installiert werden, wenn FHEM neu gestartet wurde.

Getestet habe ich das bisher aus Zeitgründen nur für zufälliges Token (=Attribut in FHEMWEB nicht gesetzt) und Windows.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Gisbert

Hallo Jörg,

ZitatEvtl. lege ich die dann zukünftig auf das FHEM SVN oder es hat jemand eine bessere Idee.

D.h. derzeit kommen Updates noch nicht per Fhem update, sehe ich das richtig?

Für mich ist jeder Updateprozess in Ordnung, solange ich ihn nachvollziehen und mit meinem beschränkten Wissen ausführen kann.

Wenn du soweit bist, dass Updates per Fhem oder sonstwie eingespielt werden können, wäre es schön, wenn du einen Fahrplan für die Anwender bereithalten könntest, die dein nützliches Modul jetzt schon nutzen.

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Adimarantis

Hallo Gisbert,

richtig, bisher geht noch nichts über FHEM Update - da möchte ich erst noch etwas mehr Test Feedback und ein paar Kleinigkeiten bezüglich der Ablage der Files sind auch noch zu klären.

Es wird auf jeden Fall so ablaufen, dass du als "alter" Anwender keine Probleme bekommst. Das dann verteilte Modul ist rückwärtskompatibel mit deiner jetzigen Umgebung.
Es wird dich aber "nerven" auf die neuere signal-cli Version zu gehen - welche aber nur zwingend für die neuen Features erforderlich ist. Alle Hinweise erscheinen in FHEM, so dass auch Anwender die hier nicht ständig mitlesen die notwendigen Infos haben.

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

Adimarantis

Release Candidate: Signalbot V3

Sofern keine signifikanten Bugs gefunden werden, plane ich diese Version demnächst per Update zur Verfügung zu stellen.

Zur Installation einfach das Modul ersetzen und entweder "shutdown restart" oder "reload 50_Signalbot" (dann aber bitte "set reinit").
Das Modul funktioniert weiter mit älteren signal-cli Versionen, wird sich aber beschweren, dass ihr ein Update auf 0.9.0 machen sollt. Der Update Prozess ist im Modul beschrieben.

Das Modul lädt selbstständig das aktuelle Installer script nach ~fhem/www/signal von https://svn.fhem.de/fhem/trunk/fhem/contrib/signal/ oder per Download link im Modul.
Dieses dann wie gewohnt mit
sudo ./signal_install.sh
ausführen. Ist aber einiges schlanker und benötigt keine Angabe der Telefonnummer mehr. Diese wird übernommen bzw. im Modul konfiguriert und registriert.

Alternativ findet ihr unter https://svn.fhem.de/fhem/trunk/fhem/thirdparty/signal-cli-packages/ auch Debian packages (siehe README).
Diese installieren aber nur signal-cli - d.h. fehlende Perl Module oder andere FHEM spezifische Abhängigkeiten müssen ggf. nachinstalliert werden.

Docker wird für signal-cli nicht unterstützt. Ein im Docker installiertes FHEM wird wahrscheinlich Probleme haben mit dem DBus zu kommunizieren. Dazu muss man denke ich /run/dbus/system_bus_socket im FHEM container sichtbar machen und eben signal-cli mit apt (außerhalb vom Docker) installieren. Wer das Modul bereits in einem Container betreibt, sollte dieses aber auch nach dem Update weiter betreiben können. Sofern auch signal-cli geupdated werden soll muss das manuell erfolgen (bin und lib austauschen, signal-service script ohne -u )

Neue Funktionen sind mit älteren signal-cli Versionen ausgeblendet und ohnehin hauptsächlich für die Registrierung interessant.
Englische Anleitung im Modul ist angepasst. Wiki folgt wenn ich Zeit habe (das möchte ich noch aktualisieren, bevor ich das Modul per Update verteile).

Dann bin ich mal gespannt auf Rückmeldungen.

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

Flachzange

Ich habe es gerade mal schnell gemacht. Zwei Anmerkungen:

1) Das Skript muss in der Regel noch ausführbar gemacht werden "chmod +x"
2) Ich musste nach dem Beenden des Skripts signal.service einmal neustarten, damit Version 0.90 geladen wird.

Ansonsten keine Auffälligkeiten wahrgenommen.

Grundsätzlich: Vielen Dank!

Adimarantis

Danke für die Rückmeldung.

Das Installerscript hat beim "upgrade" den Service nur gestartet (aber nicht neu gestartet - ist wohl versehentlich bei den Aufräumarbeiten rausgefallen). Sollte jetzt wieder der Fall sein.
Wenn signal_install.sh nach www/signal geladen wird, werde ich jetzt das +x setzen. Beim normalen "Download" funktioniert das natürlich nicht, daher hab ich den Hinweis jetzt im Wiki https://wiki.fhem.de/wiki/Signalbot ergänzt. Dort habe ich übrigens jetzt schon die V3 updates weitgehend eingepflegt.
Wer mag, darf gerne mal Querlesen und Verbesserungsvorschläge geben.

Auf meiner TODO liste steht noch die Docker Installation zu reparieren und zu testen..... (steht momentan überall als "unsupported")
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Jamo

Hallo Adimarantis,
ich benutze gerade noch die folgenden Versionen:  Signalbot:2.2      signal-cli:0.8.1       Protocol::DBus:0.19

Jetzt moechte ich auf die Signalbot:3.0 Version updaten, aber ich bekomme die 0.9.0 von signal-cli nicht installiert,
Die Ubuntu versionen mit dem .deb package installieren nicht (der signal service started nicht), für Buster habe ich die falsche Architekur.
Wie kann ich die 0.9.0 von signal-cli installieren?


jamo@inuc:~$ uname -r
4.19.0-17-amd64
jamo@inuc:~$ cat /etc/debian_version
10.10
jamo@inuc:~$ cat /proc/version
Linux version 4.19.0-17-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.194-3 (2021-07-18)


Ich habe gesucht und gelesen das man sich bestimmte libraries selber compilieren muss, aber die vorgehensweise ist unterschiedlich und ich traue mir nicht zu das zu machen ohne mir mein System zu zerschiessen.

Kannst Du oder jemand anderes helfen? Danke!
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Adimarantis

Debian 10.10 scheint glibc-2-28 zu verwenden,das hab ich tatsächlich leider nicht im Programm.

Im Prinzip ist es kein Hexenwerk die beiden Libraries selber zu übersetzen.
Ich gehe jetzt davon, dass signal-cli per install script oder apt installiert wurde (egal welches).

Erstmal brauchst du "rust":

sudo curl https://sh.rustup.rs -sSf | sh

Dann die zkgroup libs übersetzen:
git clone git@github.com:signalapp/zkgroup.git
cd ffi/java
make


Da kommt am Schluss ein Fehler, den kann man aber ignorieren, wenn die library erfolgreich erzeugt wurde.
libzkgroup.so aus target/release/ nach /opt/signal/lib kopieren

Die libsignal-client übersetzen:
git clone git@github.com:signalapp/libsignal-client.git
cd java
./build_jni.sh desktop


libsignal_jni.so aus target/release/ nach /opt/signal/lib kopieren

Libraries ersetzen:

cd /opt/signal/lib
sudo -u signal-cli zip -u signal-client-java-*.jar libsignal_jni.so
sudo -u signal-cli zip -u zkgroup-java-*.jar libzkgroup.so


Dann service neu starten
sudo service signal start

Und dann läuft die Sache hoffentlich.

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

Jamo

Hallo Joerg,
danke erstmal, sehr hilfreich. Die Dateien sind soweit compiliert nach deiner Anleitung, aber jetzt bekomme ich:

signal.service - Send secure messages to Signal clients
   Loaded: loaded (/etc/systemd/system/signal.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Wed 2021-09-22 22:32:41 CEST; 9s ago
  Process: 24416 ExecStart=/opt/fhem/signal/bin/signal-cli --config /var/lib/signal-cli -u +491234567890 daemon --system (code=exited, status=1/FAILURE)
Main PID: 24416 (code=exited, status=1/FAILURE)

Sep 22 22:32:41 inuc systemd[1]: Starting Send secure messages to Signal clients...
Sep 22 22:32:41 inuc signal-cli[24416]: WARN ServiceConfig - Failed to call libsignal-client: /tmp/resource1448454141144256459.so: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by /tmp/resource1448454141144256459.so)
Sep 22 22:32:41 inuc signal-cli[24416]: Missing required native library dependency: libsignal-client
Sep 22 22:32:41 inuc systemd[1]: signal.service: Main process exited, code=exited, status=1/FAILURE
Sep 22 22:32:41 inuc systemd[1]: signal.service: Failed with result 'exit-code'.
Sep 22 22:32:41 inuc systemd[1]: Failed to start Send secure messages to Signal clients.


Das sieht nach unlösbarem Problem aus, oder? Was ich gegoogled habe muss ich noch was kompilieren, oder gcc upgraden....
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack