Autor Thema: Neues Modul: Signalbot (Integration für den Signal Messenger) via signal-cli  (Gelesen 38362 mal)

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Hallo,

Signalbot ist eine Neuentwicklung eines Signal Messenger Moduls sehr ähnlich zu SiSi. Es ist parallel dazu entstanden und verfolgt intern ein paar andere Implementierungsansätze, verwendet aber letztendlich die selbe Kommunikationsschnittstelle (über DBus nach signal-cli).
Inzwischen habe ich auch einiges an Code und Ideen von SiSi und Telegrambot (danke die jeweiligen Autoren) übernommen und es gibt eine direkte Integration mit Babble.
Es gibt auch ein Installationsscript für Ubuntu and Raspbian, was Einsteigern die Verwendung erleichtern soll (die Installation von signal-cli hat seine Tücken).

Da es inzwischen eine detaillierte Wiki Seite unter https://wiki.fhem.de/wiki/Signalbot dazu gibt. Kürze ich diesen Post auf das nötigste und werde hier hauptsächlich die neusten Versionen und Ankündigungen Verfügung stellen.

Update 7.2.2021:
- Verbesserte Handhabung von Anhängen, Umlauten
- Babble Unterstützung: Babble device wird sofern vorhanden automatisch gefunden, mehrere babblePeer Einträge möglich
- Installer V1.1: Zusätzlicher Test (aus Perl) im install script, Docker support
- Installer V1.2: Test auf SVG Perl Paket, "remove" Funktion verbessert und mit Archivierung der Konfiguration erweitert
Update 8.2.2021:
- Module V1.1: Mehrzeilige Nachrichten mit "\n", Englische inline Dokumentation vervollständigt, Bugfix im Errorhandling
Update 11.2:2021:
- Installer V1.3:
- Verwendet $PHONE aus environment (mit export $PHONE=... , sudo -E ...) oder als zweites Argument womit man das Script normalerweise nicht mehr editieren muss
- Ein paar Änderung in Vorbereitung meines Dockerscripts (noch WIP) - nicht relevant bei normaler Nutzung
- Bessere Benutzerführung und Info bei Registrierung/Link Device, SMS sollte jetzt gehen
- native Raspberry lib.so wird jetzt im .jar ersetzt statt nach /usr/lib kopiert
- WantedBy Parameter im signal.service für zuverlässigeren Start nach Reboot
Update 14.2.2021:
- Module V1.2: Neue Funktionen: createGroup, updateGroup, invite, block, unblock (Ddetails siehe inline Doku/Post) , Attribute: babbleExclude
- Installer V1.4: Update auf signal-cli 0.8.0 , Raspberry libraries werden im .jar upgedated (nicht mehr /usr/lib) und von svn.fhem.de geholt
Update 16.2.2021:
- Installer V1.5: "link" device verbessert. Wenn der Installer aus einem xterm (mit korrekt gesetzter DISPLAY variable und jpg viewer vorhanden) gestartet wird, dann wird der qrcode automatisch angezeigt (Variable VIEWER ggf. im Script anpassen - default "eog")
Update 22.2.2021:
- Installer V1.6: Fehler in "name" Option behoben und setzen eines Namens wird jetzt automatisch nach der Registrierung angestoßen, da sonst V2 Gruppen nicht funktionieren
Update 22.3.2021:
- Installer V2.1: Änderung des Dbus package von Net:DBus zu Protocol::DBus, Unterstützung signal-cli 0.8.1
- Signalbot V2.1: Änderung des Dbus package von Net:DBus zu Protocol::DBus, Unterstützung signal-cli 0.8.1 , neue "set" Befehle: quitGroup, joinGroup, updateProfile, neue "get" Befehle contacts, groups, experimentelle Unterstützung mehrerer Accounts (in verschiedenen Instanzen), Optimierung von Speicherverbrauch und Performance, bugfixes .....
Update 13.5.2021:
- Installer V2.2: Update auf signal-cli 0.8.3 und Protocol::DBus 0.17 (hauptsächlich Bugfixes - siehe Herstellerseiten)
Update 10.6.2021:
- Signalbot V2.2: Umlautanzeige Empfang/groupmessage korrigiert. Fehler beim autoJoin und quitGroup korrigiert.
Update 27.9.2021:
- Signalbot V3.0: Umstellung auf signal-cli 0.9.0 und Verlagerung der Registrierung in FHEM statt über Script. Offizielles Release, daher wird der Link hier entfernt. Bitte über FHEM UPDATE installieren. Installations script wird vom Modul nach www/signal geladen bzw. ist im Modul verlinkt.

Gruß,
Jörg
« Letzte Änderung: 27 September 2021, 16:03:12 von Adimarantis »
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , (50_SPI_MAX31865)
Gefällt mir Gefällt mir x 7 Liste anzeigen

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 763
Moin Jörg,

bei einen Neustart kommt FHEM bei mir nicht mehr hoch. Es bricht mit dieser Zeile ab:

Can't use string ("") as a HASH ref while "strict refs" in use at ./FHEM/50_Signalbot.pm line 463.
Wenn ich in der fhem.cfg das Device auskommentiere, starte FHEM wieder. Wenn ich das Device dann mit defmod SIGNAL Signalbot
attr SIGNAL DbLogExclude .*
attr SIGNAL defaultPeer #Smarthome
attr SIGNAL devStateIcon .*Connected:ios-on-green .*Disconnected:ios-NACK
attr SIGNAL group 00 Adapter
attr SIGNAL room 75 SIGNAL,SYSTEM

setstate SIGNAL Connected
anlege läuft FHEM normal und alles ist gut. Wenn ich neu starte hängt es wieder. Hast du eine Idee, woran das liegen könnte?

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Hallo Enno,

Den Effekt kann ich bei mir nicht nachvollziehen. Eventuell eine race condition weil dein System schneller ist.
Ich habe jetzt noch einen Test eingebaut der verhindert, dass die entsprechende Funktion aufgerufen wird, falls FHEM noch nicht vollständig oben ist (wobei das eigentlich gar nicht passieren sollte). Probier mal das update im ersten Post.

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

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Habs gefunden. Mich hatte irritiert dass der Fehler bei dir beim Startup kam. Du scheinst da sofort eine Gruppen Message rauszuballern.
Das Problem trat auf wenn eine Gruppennachricht an eine unbekannte Gruppe (nach einem Neustart erstmal alle) verschickt wird.
Update oben.

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

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Ich hatte gestern noch ein wenig mit Babble herumexperimentiert und mal testweise einen direkten Support dafür eingebaut.

Vorgehensweise:
Attribut babblePeer: Nur wenn die Message von diesem Sender kam wird Babble angeworfen
Attribut babbleDev: Der Name der definierten babble Device (nicht babbleDevice, weil es sonst einen Konflikt mit dem Babble Attribut gibt) - Todo: da es normalerweise nur ein Device gibt, könnte Signalbot das evtl. sogar selbst finden

Beispiel Config:
Device "out_temp" mit babbleDevice="Temperatur", room="Draußen", verb="Sagen", Ziel="Status", Aktion="set SignalBot send @$PARM0 Die Temperatur draußen ist [out_temp:temperature] Grad"

Frage: "Wie ist die Temperatur Draußen"
Antwort: "Die Temperatur draußen ist 1.0 Grad"

Die Antwort (in $PARM0) geht wahrscheinlich immer an den babblePeer (eigentlich an den Absender in der Prio Gruppe,Sender,babblePeer , aber das dürfte am Ende immer der babblePeer sein).
Damit Gruppen und Kontakte hier redundant verwendet werden können, akzeptiert Signalbot jetzt auch @#Gruppe als Gruppenamen (also wie bei SiSi). Ein einzelnes "#" geht natürlich immer noch.
Bekannte Probleme: Sonderzeichen (hier das "ß" gehen auf dem Weg über Babble irgendwie kaputt. Das ist evtl. noch eine Umwandlung notwendig.

Viel Spass bei Testen. Anregungen von erfahrenen Babble Nutzern willkommen.

Jörg

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

Offline ph1959de

  • Hero Member
  • *****
  • Beiträge: 1058
Zur Info: ich habe eine/die FHEM-Wiki Seite für Signalbot angelegt.

Zunächst mal nur Basisinformationen; werde das spätestens dann erweitern, wenn ich  (für demnächst geplant) beginne, das Modul aktiv zu benutzen. Darf aber gern (-> Wiki) gern auch von anderen erweitert (korrigiert sowieso) werden.

Peter
Aktives Mitglied des FHEM e.V. | Moderator im Forenbereich "Wiki"
[Fhem auf BeagleBone Black (Debian) | FS20, FHT (CUL) | HomeMatic (HMLAN+HMUART) | PCA301 (JeeLink)...]

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 763
Habs gefunden.
Habe die Version von 17:00 Uhr heute eingespielt. Reboot und FHEM startet wieder. Fehler scheint behoben :) Super!

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 763
Moin

ich habe Babble wie folgt eingebunden:
Ein DOIF reagiert auf alle reinkommende Nachrichten. als letztes DOELSEIF  steht:
DOELSEIF ([SIGNAL:msgText] and [?SIGNAL:msgGroupName] eq "Smarthome")(setreading SIGNAL myGroup Smarthome,set Babble doit [SIGNAL:msgText])Im Babble Device habe ich folgende Atribute gesetzt:
attr Babble confirmFunc {fhem('set SIGNAL send #'.ReadingsVal('SIGNAL','myGroup',0).' '.('OK'))}
attr Babble helpFunc {fhem('set SIGNAL send #'.ReadingsVal('SIGNAL','myGroup',0).' '.('$HELP'))}

Beispiel Config:
Device "out_temp" mit babbleDevice="Temperatur", room="Draußen", verb="Sagen", Ziel="Status",
Aktion="{fhem('set SIGNAL send #'.ReadingsVal('SIGNAL','myGroup',0).(' Die Temperatur im Garten beträgt '.ReadingsVal('out_temp','temperature',0).' Grad'))}"

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Hi Enno,

Das DOIF könntest du dir halt jetzt evtl. sparen

Babble Config:
draußen:
           sagen:
             status     set SignalBot send @$PARM0 Die Temperatur draußen ist [out_temp:temperature] Grad

confirmFunc  {fhem("set SignalBot send \@$PARM0 Ok!")}
helpFunc {fhem("set SignalBot send \@$PARM0 $HELP")}

und im Signalbot eben entsprechend babblePeer und babbleDev setzen. Vorallem auch den Umweg über Readingsval und myGroup.

Zu diskutieren wäre hier evtl. was in PARM0 (und PARM1, PARM2 ...) an Infos mitgeliefert werden soll.

Aktuell kann halt babblePeer nur einen Wert enthalten - ich denke das müsste für eine flexible Nutzung eher eine Liste werden.

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

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 763
Das DOIF könntest du dir halt jetzt evtl. sparen

Rom und die vielen Wege. Deshalb liebe ich FHEM 8)

Jetzt werde ich mir erst einmal die formatierte Ausgabe der Nachrichten in Signal vorknöpfen. Zeilenumbrüche z.B. Stand glaube ich im alten SiSi Faden eine Lösung.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Neu:

Nachdem die Installation nicht gerade einfach ist, habe ich ein bash script geschrieben, dass diesen Vorgang weitgehend automatisieren sollte (sollte für aktuelle Ubuntu x86 und Rasberry armv71 Versionen funktionieren - möglicherweise auch für andere Debian basierte Systeme).
sudo ./signal_install.shDas Script bietet eine Reihe von Optionen die im Script erläutert werden (Doku folgt wenn es besser getestet ist) und fragt üblicherweise nach bevor es etwas tut. Wichtig ist am Anfang bei PHONE= die Nummer einzutragen mit der das System verknüpft werden soll, da es auch durch den Registrierungs- bzw. Linkprozess führt.

Ich hab es erfolgreich auf meinem X86 Ubuntu System laufen lassen (mit link Option) und meine bestehende Raspberry Config hat es wie geplant nicht verändert.

Kommandozeilen Optionen:
system   : prepare required system package (except signal-cli) - make sure you ran this before you do anything else!
install  : install signal-cli and setup as dbus system service
register : register a NEW number with Signal
link     : link an EXISTING number with Signal (e.g. you Smartphone)
test     : run a basic test if everything is installed and registered correctly
remove   : Remove signal-cli and all configurations
join     : Join current number to an existing group (invite by group link)

Das Script prüft auch auf fehlende Pakete und installiert diese mit "apt-get install" und erzeugt Verzeichnisse und User.
Mein Ubuntu war ziemlich "vanilla", also hoffe ich die meisten Abhängigkeiten gefunden zu haben, wenn was fehlen sollte, bitte Bescheid geben - natürlich auch bei sonstigen Fehlern und Verbesserungsvorschlägen

Die nativen arm libraries (schon für die nächste signal-cli version vorbereitet) werden aktuell von meiner Homepage nachgeladen. Vielleicht haben die FHEM admins hier eine Möglichkeit diese auf einen geeigneten Platz zu legen.

Ich hoffe dies ist hilfreich für alle die bisher vor einer Installation zurückgeschreckt sind.

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

Offline Deckoffizier

  • Sr. Member
  • ****
  • Beiträge: 575
Hallo Jörg,

erst mal DANKE für Deine tolle "Modernisierung" von Signal
als Laie gesprochen.

Hatte meine vor langer Zeit installierte SiSi gelöscht und Dein Modul
neu aufgesetzt.
Einige Stunden hat mich aus dem Wiki die richtige Lösung für die Pfade
zur Konfigurationsdatei gekostet....

>=0.6.1

$HOME/.local/share/signal-cli/data/

hierbei musste ich /data/ weg lassen, bin halt Laie  :(

Später hat zwar der Empfang in FHEM geklappt aber nicht das raus senden.
Kam leider nicht um einen Neustart des Rechners umhin trotz reload und start der Module.
Nur mal so als Stolperfallen.

Toll das DU jetzt ein script geschrieben hast, hätte ich mal noch einen Tag gewartet  ;) aber
eben nebenbei noch was gelernt.

Traue mich jetzt aber erst mal nicht nochmal neu anzufangen.
Dein Modul wertet für mich die Funktionalität von FHEM nochmal stark auf!

Viele Grüße
Hans-Jürgen
FHEM 5.8 auf "yakkaroo Emu A1FL.1" mit CUL 868MHz, SIGNALduino,1 Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Trau dich :)

Falls das Script noch nicht 100% läuft, dann funktioniert schlimmstenfalls signal-cli hinterher immer noch nicht. Ein Risiko fürs restliche System würde ich ausschließen.

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

Offline enno

  • Sr. Member
  • ****
  • Beiträge: 763
Trau dich :)

Moin Jörg,

ich teste es nachher mal. Als "root" das Script starten nehme ich an als User "fhem" und der Pfad bei mir "/opt/fhem"...

Ich werde berichten.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Offline Adimarantis

  • Developer
  • Full Member
  • ****
  • Beiträge: 438
Hi Enno,

das Script muss halt mit einem "sudo"-berechtigten User gestartet werden (und läuft dann unter root).
Die Voreinstellung im Script zielen auf eine Systeminstallation mit eigenem user, directory etc. und können gefahrlos beibehalten werden (oder natürlich auf deine aktuelle Installation angepasst werden). Startverzeichnis ist sonst irrelevant.

Eine bereits bestehende Registrierung müsste man ggf. in das neue Verzeichnis umkopieren (Rechte/Owner setzen nicht vergessen), aber am saubersten wäre wohl eine Neu-Registrierung - besonders weil ich das noch nicht richtig getestet habe :)

Falls bei der Registrierung eine Meldung kommt von wegen "locked" und "waiting", dann in einer anderen shell parallel "sudo service signal stop" ausführen, da der Systemprozess die config blockiert. Falls das Problem tatsächlich besteht sollte das wohl noch ins Script.
Danach dann wieder "sudo service signal start"

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

 

decade-submarginal