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

Adimarantis

Habe mich heute mal an die Dokumentation gemacht und die Wiki Seite aktualisiert:
https://wiki.fhem.de/wiki/Signalbot

Wer selbst Zugriff hat, darf gerne mithelfen/korrigieren. Sonst auch Vorschläge auch hier im Threads.

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)

Adimarantis

Liebe Docker-Freunde,

Anbei jetzt ein Install Script, welches auch im Docker laufen sollte.
Das kann jetzt ein mit docker-compose neu erzeugter sein, wie im vorangegangenen Post beschrieben, sollte aber auch mit bestehenden FHEM containern funktionieren.

Einfach interaktiv als root laufen lassen. Sofern bereits eine Registry besteht, für alle Fälle je mit den Argumenten install, system und test ausführen.
Danach laufen im Hintergrund sowohl der dbus-daemon als auch der signal-cli daemon.
Logfiles und Fehler landen in /var/log/dbus.log bzw. dbus.err und signal.log/signal.err

@Thorben: In deiner letzten Nachricht war eine Fehlermeldung drin. Die sollte jetzt durch ein geändertes Config File verschwinden. Wegen deinem zkgroup Fehler, bitte nochmal das /opt/signal-cli Verzeichnis löschen damit eine Neuinstallation erfolgt. Da ging bei dir ja mal wegen fehlendem "zip" Tool schief - vielleicht ist der Wurm immer noch drin.

Das Script hat jetzt auch den Perl Test eingebaut - sendet also jetzt auf 3 Arten (auch ohne Docker) - wenn die alle passen, dann sollte FHEM auch gehen.

Falls der fertig installierte Container neu gestartet wird, dann einfach
./signal_install.sh start
aufrufen. Damit werden die beiden Daemons bei Bedarf (und nur dann) nachgestartet.

Bitte mal durchtesten (wenn jemand kann/mag auch die normale Installation), damit ich es sicher in den ersten Post verschieben kann.

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)

enno

Zitat von: Adimarantis am 06 Februar 2021, 19:28:45
Bitte mal durchtesten (wenn jemand kann/mag auch die normale Installation), damit ich es sicher in den ersten Post verschieben kann.

Moin Jörg,

ich bekomme folgende Meldung:
signal_install.sh: 372: Syntax error: "(" unexpected (expecting "fi")

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Jamo

Hallo Jörg,
wegen den umlauten:
Wenn ich aus fhem die folgende Message an mein iPhone schicke, bekomme ich im reading "sentMsg" folgendes, obwohl in Signal selber (also auf dem iPhone) die Umlaute alle OK sind:
set Signal send ae=ä, ue=ü, oe=ö, sz=ß
sentMsg ae=�, ue=�, oe=�, sz=�
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Adimarantis

Zitat von: enno am 06 Februar 2021, 20:11:01
ich bekomme folgende Meldung:
signal_install.sh: 372: Syntax error: "(" unexpected (expecting "fi")
Probiers mal jetzt.

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 von: Jamo am 06 Februar 2021, 20:23:34
sentMsg ae=�, ue=�, oe=�, sz=�

Alles klar. Hab ich gefixed, ist dann beim nächsten Update dabei.

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

enno

Zitat von: Adimarantis am 06 Februar 2021, 22:01:27
Probiers mal jetzt.

signal_install.sh: 375: Syntax error: "(" unexpected (expecting "fi")

... so muss Schneeschaufelngehen am Tag 1 der Schneekatastrophe in Niedersachsen 8) Wenn ich mich nicht mehr melde, bin ich in einer Schneewehe versackt... oder Signal läuft nicht mehr...

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

betateilchen

Zitat von: enno am 07 Februar 2021, 09:27:34
... so muss Schneeschaufelngehen am Tag 1 der Schneekatastrophe in Niedersachsen

Hier (auch in Niedersachsen) ist es -4°C, windig, aber von Niederschlag seit Freitag, 17 Uhr,  weit und breit keine Spur.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Papaloewe

Wenn ich diesen Pull-Request richtig verstehe, wäre es möglich (demnächst, oder jetzt?) via tcp-sockets mit dem cli-service mithilfe von json-strings zu kommunizieren.

https://github.com/AsamK/signal-cli/pull/419/commits

Das hätte dann auch den Charme, dass man den signal-cli Teil extern, oder auch in einem separaten Container laufen lassen kann.
Denn ich möchte eigentlich mein FHEM im "geschützten" Docker belassen und nicht den Host-Modus verwenden.

Wäre das eine interessante Variante?

Papaloewe

oder gibt es das schon?
Habe noch das dazu gefunden:

https://github.com/Matteljay/signal-cli/wiki/Socket-IPC

Adimarantis

Die Socket Variante scheint ein fork zu sein der aktuell als Pull request ansteht.
Im aktuellen main (den habe ich mir testweise schon mal übersetzt, daher weiss ich auch das ab der nächsten Version zwei native libraries benötigt werden) ist anscheinend noch nichts drin.

Wir sollten das auf jeden Fall beobachten. Der Socket Branch unterstützt ein "getContacts", dass mir beim Dbus fehlt - dafür fehlen wieder ein paar andere Services. Da braucht denke ich noch etwas Reife und sollte erst voll im main etabliert sein, bevor wir da was machen.

Wegen signal-cli im extra Container war ich schon am überlegen, ob es da Optionen gibt. Letztendlich muss man aus dem Container irgendwie eine Verbindung mit dem streaming socket /var/run/dbus/system_bus_socket aufbauen. Dann darf aber wahrscheinlich auch der dbus-daemon nicht im Container laufen. Das müsste sich jemand mit deutlich mehr Linux System und Container Know How ansehen, als ich mitbringe.
Netstat:
unix  2      [ ACC ]     STREAM     HÖRT         12185    -                    /var/run/dbus/system_bus_socket


Ich finde ja die signal-cli Installation etwas tricky aber eigentlich nicht sehr invasiv. Die lässt sich sowohl native als auch im Container sehr einfach wieder entfernen, sofern einen die abhängigen Pakete nicht stören, aber das sind ja auch offizielle Installer (apt, cpan) - sollte man auch wegbekommen.

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

Hi Enno,

kann es sein, das du das Script unter "sh" statt "bash" laufen hast?
Den Fehler kriege ich nur wenn ich das Konstrukt unter "sh" laufen lasse.

Wahrscheinlich sollte ich noch eine "bash" Abhängigkeit einbauen und beenden, wenn das Script nicht in der bash läuft.

EDIT: Einfacher check auf bash inkl. Nachinstallation eingebaut.

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

enno

Zitat von: Adimarantis am 07 Februar 2021, 11:01:32
kann es sein, das du das Script unter "sh" statt "bash" laufen hast?
Richtig vermutet! Bisher ging es immer mit sh. Ok, ich teste noch mal als bash.... und geht.

Gruss vom DAU ::)
Einfacher FHEM Anwender auf Intel®NUC

sinus61

Hallo zusammen. Ich habe hier die Installation mit dem Skript auch mal durchgezogen, ganz normal auf einem Pi. Senden und Empfangen mit normalen Usern funktioniert auch gut.

Probleme gibt es aber noch mit Gruppen. Ich hab mal eine Gruppe FHEM eingerichtet, da kann ich auch normale User hinzufügen. Bei meinem fhem User hat Singal zuerst gemeckert, wegen angeblich nicht aktueller Version V2 bei signal-cli. Nach Löschung und nochmaliger Neueinrichtung auf dem Pi mit dem neuesten Version von hier meckert Signal nicht mehr und schickt eine Einladung raus wenn ich meinen fhem User zu der Gruppe hizufügen will, im SignalBot sehe ich dann auch "joinedGroups FHEM".

Wenn ich aber eine Nachricht an die Gruppe senden will kommt:
Error sending message:org.asamk.Signal.Error.GroupNotFound: User is not a member in group: FHEM (...)
im Logfile

2021.02.07 12:23:47 3: SignalBot: Before parse:#FHEM Teststring:

2021.02.07 12:23:47 5: SignalBot: sendGroupMessage called for FHEM::Teststring


Also hab ich mal versucht unter signal-cli die Einladung anzunehmen:
sudo -u fhem signal-cli updateGroup -n FHEM
Soll jedenfalls laut Doku so gehen.

Dort kommt dann:

OpenJDK Server VM warning: You have loaded library /tmp/resource17792002454964883349.so which might have disabled stack guard. The VM will try to fix the stack guard now.
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'.
WARN App - WARNING: Support for new group V2 is disabled, because the required native library dependency is missing: libzkgroup
ERROR App - User +49xxxxxxxxxx is not registered.



Die Telefonummer funbktioniert ja, daher wundert mich die letzte Meldung. Und die lbzkgroup Dateien liegen in /usr/lib
Irgendwie fällt mir gerade da nichts mehr ein.

Papaloewe

Zitat von: Adimarantis am 07 Februar 2021, 10:56:27
Die Socket Variante scheint ein fork zu sein der aktuell als Pull request ansteht.
Im aktuellen main (den habe ich mir testweise schon mal übersetzt, daher weiss ich auch das ab der nächsten Version zwei native libraries benötigt werden) ist anscheinend noch nichts drin.

Wir sollten das auf jeden Fall beobachten. Der Socket Branch unterstützt ein "getContacts", dass mir beim Dbus fehlt - dafür fehlen wieder ein paar andere Services. Da braucht denke ich noch etwas Reife und sollte erst voll im main etabliert sein, bevor wir da was machen.

Wegen signal-cli im extra Container war ich schon am überlegen, ob es da Optionen gibt. Letztendlich muss man aus dem Container irgendwie eine Verbindung mit dem streaming socket /var/run/dbus/system_bus_socket aufbauen. Dann darf aber wahrscheinlich auch der dbus-daemon nicht im Container laufen. Das müsste sich jemand mit deutlich mehr Linux System und Container Know How ansehen, als ich mitbringe.
Netstat:
unix  2      [ ACC ]     STREAM     HÖRT         12185    -                    /var/run/dbus/system_bus_socket


Ich finde ja die signal-cli Installation etwas tricky aber eigentlich nicht sehr invasiv. Die lässt sich sowohl native als auch im Container sehr einfach wieder entfernen, sofern einen die abhängigen Pakete nicht stören, aber das sind ja auch offizielle Installer (apt, cpan) - sollte man auch wegbekommen.

Jörg

Hier hat auch schon jemand eine REST API für den signal-cli gebaut und es gibt einen "fertigen" Docker Container dazu.
https://github.com/bbernhard/signal-cli-rest-api
Das wäre natürlich jetzt ein völlig anderer Ansatz bei der Kommunikation zwischen signal-cli und FHEM.