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

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).

Bitte alles weitere der dem Wiki unter https://wiki.fhem.de/wiki/Signalbot entnehmen oder in die Commandref (nur englisch) schauen.

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

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

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)

ph1959de

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"

enno

Zitat von: Adimarantis am 01 Februar 2021, 00:06:10
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

enno

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

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)

enno

Zitat von: Adimarantis am 01 Februar 2021, 20:18:52
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

Adimarantis

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.sh
Das 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 , 58_RPI_1Wire, (50_SPI_MAX31865)

Deckoffizier

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,2 1Wire USB Busmaster, diverse 1 Wire Sensoren,Landroid,Aeotec USB Dongle Z-Wave Plus

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)

enno

Zitat von: Adimarantis am 02 Februar 2021, 23:04:52
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

Adimarantis

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 , 58_RPI_1Wire, (50_SPI_MAX31865)