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

Gisbert

Hallo Adimarantis,

ich benötige 2 Java-Versionen, die aktuelle für Signal, welche auch die primäre Java-Installation ist, und Java 8 für den Unifi-Controller.

Soweit so gut, es läuft alles perfekt. Gelegentlich, vermutlich nach einem Serverstart - ist derzeit nur eine Vermutung, "vergisst" Debian, dass JAVA 17 die primäre Installation ist. Damit läuft dann Signal nicht. Alles weiter nicht schlimm, da es einfach gefixt werden kann, bis auf den Umstand, dass ich nicht mit bekomme, wenn der obige Fall eintritt.

Hast du eventuell eine Idee, wie ein notify oder DOIF in Fhem aussehen müsste, wenn Signal nicht verbunden ist? Das könnte man ggf. noch abhängig vom Serverstart machen (letzteres hab ich schon umgesetzt). Was mir fehlt ist ein Event bei Signal, welches die nicht vorhandene Verbindung anzeigt.

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

Also ich habe auf meinem Raspi (da noch unter "buster") standardmässig Java11.
D.h. wenn ich mich normal einlogge zeigt
java --version
openjdk 11.0.16 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Raspbian-1deb10u1)
OpenJDK Server VM (build 11.0.16+8-post-Raspbian-1deb10u1, mixed mode)

signal-cli geht aber trotzdem, da im /etc/systemd/system/signal.service das JAVA_HOME entsprechend auf /opt/java geändert wird, wo mein Java17 installiert ist.
Das sollte das Install Script eigentlich so einrichten. Wenn das so konfiguriert ist, sollte der Neustart eigentlich kein Problem mehr sein.
[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"
Environment="JAVA_HOME=/opt/java"
ExecStart=/opt/signal/bin/signal-cli --config /var/lib/signal-cli daemon --system
User=signal-cli
BusName=org.asamk.Signal

[Install]
WantedBy=multi-user.target
Alias=dbus-org.asamk.Signal.service
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Gisbert

Hallo Adimarantis,

interessant, danke dir für diesen Hinweis.
Ich werde versuchen das umzusetzen, bin mir nur noch nicht sicher, ob ich es auf Anhieb hinbekomme.

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

socram

ich bin gerade dabei alles von meinem Raspi auf mein Synology NAS umzuziehen, wobei das letzte, was nun noch fehlt, der Signalbot ist (USB-to-Serial etc. läuft und MQTT ist ja auch sehr problemlos).

Weil der Separate Docker-Container nicht in Frage kommt, weil das Skript auf meinem Synology nicht läuft, dachte ich nun, dass ich einfach den Signalbot in dem FHEM-Container installiere. "sudo cpan install Protocol::DBus" hat auch funktioniert, allerdings hat das dazu geführt, dass nun FHEM gar nicht mehr startet mit der folgenden Fehlermeldung
connect(unix:path=/var/run/dbus/system_bus_socket): No such file or directory at /usr/local/share/perl/5.28.1/Protocol/DBus/Client.pm line 144.


Ich habe dann mal versucht, den DBus von Hand zu starten, damit er den Socket anlegt, was auch nicht geklappt hat.

Nachdem ich nun so ziemlich alles zum Laufen gebracht habe, wäre es schade, wenn's am Signalbot scheitert, vielleicht hat hier jemand eine pfiffige Idee, wie ich den Signalbot in meinem Dockercontainer (oder anderweitig) auf dem Synology NAS 918+ zum Laufen kriege?

Flachzange

Liest sich als wenn eine Library fehlt. Dbus im Container nach installieren ist ja auch nur bedingt hilfreich. Es muss ja persistiert werden.

Hast Du mal die Variante mit diesem Docker-Image versucht? Das funktioniert bei mir gut.

Gisbert

Hallo Adimarantis,

ich hab in /etc/systemd/system/signal.service folgendes eingetragen (bei mir liegt Java 17 dort):
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"

Ich hab dann den Server auf dem Fhem, Signal und der Unifi-Controller (und noch einiges mehr) läuft, neu gestartet.
Es läuft erstaunlicherweise alles.

echo $JAVA_HOME
/usr/lib/jvm/java-8-openjdk-amd64/jre/


java -version
openjdk version "11.0.16" 2022-07-19
OpenJDK Runtime Environment (build 11.0.16+8-post-Debian-1deb11u1)
OpenJDK 64-Bit Server VM (build 11.0.16+8-post-Debian-1deb11u1, mixed mode, sharing)


dpkg -l | grep "oracle\|openjdk"
ii  openjdk-11-jre-headless:amd64        11.0.16+8-1~deb11u1            amd64        OpenJDK Java runtime, using Hotspot JIT (headless)
ii  openjdk-17-jdk:amd64                 17.0.4+8-1~deb11u1             amd64        OpenJDK Development Kit (JDK)
ii  openjdk-17-jdk-headless:amd64        17.0.4+8-1~deb11u1             amd64        OpenJDK Development Kit (JDK) (headless)
ii  openjdk-17-jre:amd64                 17.0.4+8-1~deb11u1             amd64        OpenJDK Java runtime, using Hotspot JIT
ii  openjdk-17-jre-headless:amd64        17.0.4+8-1~deb11u1             amd64        OpenJDK Java runtime, using Hotspot JIT (headless)
rc  openjdk-8-jre-headless:amd64         8u232-b09-1~deb9u1             amd64        OpenJDK Java runtime, using Hotspot JIT (headless)


Der Unifi-Controller lief erst nicht richtig und hat nach Java 11 verlangt, hab das dann installiert.

Anscheinend sind jetzt alle Services glücklich.

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

oelkanne

Posts vom 31.8 – 3.September: Umstieg von SISI nach Signalbot

Hallo,
Ich habe mich jetzt getraut.
Installation ging mit dem Skript problemlos  :)
Auch die erneute Registrierung der Festnetznummer über Capcha, ... klappte  :)

Nun habe ich folgendes Problem:
Ich kann von meinen Handy auf FHEM (Festnetznummer) senden. Diese Nachrichten werden in FHEM angezeigt  :)
Aber es gehen keine Nachrichten aus FHEM raus. ☹

Habe ich etwas übersehen oder mache ich etwas grundsätzliches falsch?

Es gibt keine Fehlermeldung; hier meine raw definition und das log.

Ein
set Signal_MSG send @+49xxxx gesedet aus FHEM(Festnetz)

liefert im Logfile:
2022.09.25 18:31:40 3 : Signal_MSG: Before parse:@+49xxxx gesedet aus FHEM(Festnetz):

Das reading sentMsgTimestamp bleibt auf pending....

Raw definition:

defmod Signal_MSG Signalbot
attr Signal_MSG defaultPeer +49xxxx
attr Signal_MSG room Monitoring

setstate Signal_MSG Connected to /org/asamk/Signal/_49xx
setstate Signal_MSG 2022-09-25 18:11:53 account +49xx
setstate Signal_MSG 2022-09-25 18:11:53 accountName
setstate Signal_MSG 2022-09-25 14:49:25 joinedGroups
setstate Signal_MSG 2022-09-25 18:11:53 lastError ok
setstate Signal_MSG 2022-09-25 18:29:20 msgAttachment
setstate Signal_MSG 2022-09-25 18:29:20 msgAuth 0
setstate Signal_MSG 2022-09-25 18:29:20 msgGroupName
setstate Signal_MSG 2022-09-25 18:29:20 msgSender 5b79b958-2c00-4b9f-9676-cf92cc83075c
setstate Signal_MSG 2022-09-25 18:29:20 msgText Noch ne Nachricht von meinem Handy
setstate Signal_MSG 2022-09-25 18:29:20 msgTimestamp 25-09-2022 18:29:17
setstate Signal_MSG 2022-09-25 18:29:20 prevMsgAttachment
setstate Signal_MSG 2022-09-25 18:29:20 prevMsgGroupName
setstate Signal_MSG 2022-09-25 18:29:20 prevMsgSender 5b79b958-2c00-4b9f-9676-cf92cc83075c
setstate Signal_MSG 2022-09-25 18:29:20 prevMsgText Gesendet von meinem Handy
setstate Signal_MSG 2022-09-25 18:29:20 prevMsgTimestamp 25-09-2022 18:28:35
setstate Signal_MSG 2022-09-25 18:31:40 sentMsg gesedet aus FHEM(Festnetz)
setstate Signal_MSG 2022-09-25 18:19:22 sentMsgRecipient 5b79b958-2c00-4b9f-9676-cf92cc83075c
setstate Signal_MSG 2022-09-25 18:31:40 sentMsgTimestamp pending


Ergänzungen:
root@rpi3-fhem:~# java -version
openjdk version "11.0.12" 2021-07-20
OpenJDK Runtime Environment (build 11.0.12+7-post-Raspbian-2deb10u1)
OpenJDK Server VM (build 11.0.12+7-post-Raspbian-2deb10u1, mixed mode)


INTERNALS
STATE Connected to /org/asamk/Signal/_49xx
VERSION         Signalbot:3.10 signal-cli:0.9.2 Protocol::DBus:0.22
Model Raspbian GNU/Linux 10 (buster)



socram

Zitat von: Flachzange am 25 September 2022, 13:55:34
Liest sich als wenn eine Library fehlt. Dbus im Container nach installieren ist ja auch nur bedingt hilfreich. Es muss ja persistiert werden.

Hast Du mal die Variante mit diesem Docker-Image versucht? Das funktioniert bei mir gut.

Das hatte ich nicht gefunden. Sehr hiflreich, vielen Dank!

edit: Ich habe zwischenzeitlich einmal das Git-Projekt geklont, die Dockerfile.x86 in Dockerfile umbenannt und Verzeichnisse angelegt, die in der docker-compose.yml verlinkt werden. Das bauen klappt auch soweit, es geht aber bei dem Image nicht weiter als "Starting signal_cli" und "Waiting for signal-cli to become read".

Um dem auf den Grund zu gehen, habe ich einmal den Befehl für den Start von signal-cli abgesetzt:
sudo -u fhem /opt/signal/bin/signal-cli --config /var/lib/signal-cli/data daemon --system

Dabei kommt dann die Fehlermeldung
"Failed to read local accounts list"
heraus, mit der ich nicht so viel anfangen kann. Klar, es gibt noch keine Accounts, weil das Ding gerade sauber neu aufgesetzt wurde. Ich weiß leider nicht wirklich weiter, wie ich das Teil zum Laufen bekommen soll und wäre dementsprechend sehr für noch ein wenig Hilfe dankbar!

Adimarantis

Eventuell ein Zugriffsproblem auf /var/lib/signal-cli/data ?
Verzeichnis nicht lesbar/schreibbar für signal-cli oder gar nicht existent?
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

@oelkanne: kannst du mal verbose=5 einstellen und sehen ob was interessantes im Log steht?
Außerdem schreibt signal-cli in /var/log/syslog evtl. noch logs.

Versenden von Nachrichten ohne FHEM wie im Wiki beschrieben geht?
https://wiki.fhem.de/wiki/Signalbot#Versenden_von_Nachrichten_ohne_FHEM

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

oelkanne

@Adimarantis: Ersteinmal vielen Dank für deine Unterstützung!

Versenden von Nachrichten ohne FHEM (geht nicht)
root@rpi3-fhem:~# dbus-send --system --type=method_call --print-reply --dest=org.asamk.Signal /org/asamk/Signal/_49xx org.asamk.Signal.sendMessage string:Hallo array:string: string:+49xxxx
Error org.freedesktop.DBus.Error.NoReply: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.



syslog:
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: Exception in thread "DBus Worker Thread-2" java.lang.NullPointerException
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.messages.Message.appendone(Message.java:569)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.messages.Message.append(Message.java:841)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.errors.Error.<init>(Error.java:87)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.errors.Error.<init>(Error.java:27)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.errors.Error.<init>(Error.java:98)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.connections.AbstractConnection.handleException(AbstractConnection.java:703)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at org.freedesktop.dbus.connections.AbstractConnection$2.run(AbstractConnection.java:843)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
Sep 27 19:04:33 rpi3-fhem signal-cli[446]: #011at java.base/java.lang.Thread.run(Thread.java:829)



fhemlog mit verbose 5:
2022.09.27 19:16:26 3 : Signal_MSG: Before parse:@+49xxxx gesedet aus FHEM(Festnetz):
2022.09.27 19:16:26 4 : Signal_MSG: sendMessage called for +49xxxx::gesedet aus FHEM(Festnetz)
2022.09.27 19:16:26 5 : Signal_MSG: Dbus Call sync:0 sendMessage(sasas) /org/asamk/Signal/_49xx Args:gesedet aus FHEM(Festnetz),ARRAY(0x6439120),ARRAY(0x5eeb0e8)

socram

Zitat von: Adimarantis am 27 September 2022, 16:59:05
Eventuell ein Zugriffsproblem auf /var/lib/signal-cli/data ?
Verzeichnis nicht lesbar/schreibbar für signal-cli oder gar nicht existent?

oh man, das ist etwas peinlich. chown fhem:fhem hatte ich zwar gemacht, aber nicht mehr an die Permissions gedacht, die ich nun mal auf angepasst habe. Danke, dass du mir die Augen geöffnet hast :)

Adimarantis

@oelkanne:
Ok, dann ist der FHEM/Signalbot Teil schon mal nicht die Ursache.
Nächster Test wäre dann, ob signal-cli von der Kommandozeile direkt funktioniert.

Ich habe dazu eine Beschreibung ins Wiki eingefügt (wo auch das mit Dbus steht).
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

oelkanne

@Adimarantis
der sysntax scheint nicht zu passen


root@rpi3-fhem:~# sudo service signal status
● signal.service - Send secure messages to Signal clients
   Loaded: loaded (/etc/systemd/system/signal.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-09-28 18:33:05 CEST; 4s ago
Main PID: 1673 (java)
    Tasks: 32 (limit: 2200)
   Memory: 89.9M
   CGroup: /system.slice/signal.service
           └─1673 java -Xms2m -classpath /opt/signal/lib/signal-cli-0.9.2.jar:/opt/signal/lib/lib.jar:/opt/signal/lib/bcprov-jdk15on-1.69.ja

Sep 28 18:31:47 rpi3-fhem systemd[1]: Starting Send secure messages to Signal clients...
Sep 28 18:33:05 rpi3-fhem signal-cli[1673]: INFO DaemonCommand - Exported dbus object: /org/asamk/Signal/_49xx
Sep 28 18:33:05 rpi3-fhem systemd[1]: Started Send secure messages to Signal clients.


root@rpi3-fhem:~# sudo service signal stop
root@rpi3-fhem:~# sudo -u signal-cli /opt/signal/bin/signal-cli -c /var/lib/signal-cli -u +49xx send -m "testmessage" +49xxxx
Benutzung: signal-cli [-h] [-v] [--verbose] [--config CONFIG] [-u USERNAME] [-o {plain-text,json}]
                      [--service-environment {live,sandbox}] [--trust-new-identities {always,on-first-use,never}] [--dbus |
                      --dbus-system]
                      {addDevice,block,daemon,getUserStatus,joinGroup,jsonRpc,link,listContacts,listDevices,listGroups,listIdentities,quitGroup,receive,register,remoteDelete,removeDevice,removePin,send,sendContacts,sendReaction,sendReceipt,sendSyncRequest,sendTyping,setPin,submitRateLimitChallenge,trust,unblock,unregister,updateAccount,updateConfiguration,updateContact,updateGroup,updateProfile,uploadStickerPack,verify}
                      ...
signal-cli: Fehler: nicht berücksichtigte Argumente: '-c'
root@rpi3-fhem:~#



verändert liefert:
root@rpi3-fhem:~# sudo -u signal-cli /opt/signal/bin/signal-cli -u +49xx send -m "testmessage" +49xxxx
User +49xx is not registered.

und
root@rpi3-fhem:~# sudo -u fhem /opt/signal/bin/signal-cli -u +49xx send -m "testmessage" +49xxxx
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.fasterxml.jackson.databind.util.ClassUtil (file:/opt/signal/lib/jackson-databind-2.9.9.2.jar) to constructor java.util.Optional()
WARNING: Please consider reporting this to the maintainers of com.fasterxml.jackson.databind.util.ClassUtil
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
INFO ManagerImpl - The Signal protocol expects that incoming messages are regularly received.
Error while checking account +49xx: [401] Authorization failed!
root@rpi3-fhem:~#


Adimarantis

Du verwendest noch 0.9.2. richtig?
Vielleicht ging da "-c" noch nicht - probier mal "--config"

Wenn es allerdings ein signal-cli Problem sein sollte, dann wirst du mit der alten Version sowieso Pech haben. Da kannst du kein Bug Ticket mehr aufmachen.
Du solltest dir überlegen Java17 und signal-cli 0.10+ zu installieren.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)