Neues Modul für "(Si)gnal - (Si)cherer Messenger" [32_SiSi.pm]

Begonnen von Quantum, 26 Februar 2018, 14:32:42

Vorheriges Thema - Nächstes Thema

oelkanne


Adimarantis

Hat bei SiSi das empfangen von Message schon mal funktioniert?
Ich bekomme zumindest keine Callbacks in SiSi - der geforkte Empfangsprocess hängt einfach und wartet auf der Filehandle.
Wenn man das add_read() weglässt, dann kehrt $reactor->run() sofort zurück. Das selbe Problem hatte ich in meinem Modulversuch.

Ein blankes Perl Programm ala
my $bus = Net::DBus->system;
my $service = $bus->get_service("org.asamk.Signal");
my $object = $service->get_object("/org/asamk/Signal");

my $sig1 = $object->connect_to_signal("ReceiptReceived", \&rec_callback);
my $sig2 = $object->connect_to_signal("SyncMessageReceived", \&sync_callback);
my $sig3 = $object->connect_to_signal("MessageReceived", \&msg_callback);
my $reactor = Net::DBus::Reactor->main();
$reactor->run();


Wartet brav auf Rückmeldungen und ruft die Callbacks auf, so dass man Nachrichten empfangen kann.
Selbst wenn ich diesen Code ganz genau so in einem geforkten FHEM process laufen lassen, dann kommt run() sofort zurück und keine Callbacks werden aufgerufen. Das passiert auch direkt in FHEM ohne fork - hat also mit dem forken eher nichts zu tun.

Ist das nur bei mir so? Hat jemand Ideen?

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)

phoenix-anasazi

Guten orgen,

keine Ahnung, ob dir das hilft, kenne mich damit zu wenig aus. Aber im Git zu signal-cli wird irgendwo erwähnt, dass signal-cli receive regelmäßig ausgeführt werden muss, dass die Nachrichten auch empfangen werden können.

Grüße
Sascha

Jamo

Hallo Adimarantis,
ZitatHat bei SiSi das empfangen von Message schon mal funktioniert?
Hast Du die signal-cli Version 0.7.4 installiert? Es gab wohl einen Bug in älteren Versionen,
https://forum.fhem.de/index.php/topic,84996.msg1123516.html#msg1123516
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Adimarantis

Hallo,

ja ich habe die aktuelle signal-cli Version laufen und mit einem kleinen Beispielprogramm in der Kommandozeile funktioniert auch alles - nur innerhalb von FHEM eben nicht.
Mit "verbose=3" müssten dann bei Messageempfang Meldungen wie
The message: '$logText' with timestamp: '$timestamp' was received from sender: '$sender' in group: ...
kommen.
Außerdem sollten die "prev" Reading wie "prevMsgText" befüllt sein. Kann jemand bestätigen, das das bei euch klappt? Wenn ja, muss irgendwas bei mir falsch konfiguriert sein.

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)

phoenix-anasazi

Hallo,

ich kann empfangen (inkl. prev...), habe es allerdings nur einmal ausprobiert, da ich das eigentlich nicht brauche. Außerdem war es kurz nach ausführen des signal-cli receive (s.o.).

Grüße
Sascha

Adimarantis

#186
Nach einem Neustart des Rapsi ging es plötzlich.

Ich habe just for fun, mal ein kleines Programmierprojekt gestartet und "from scratch" eine eigene Implementierung gestartet (hatte schon angefangen bevor ich SiSi gefunden hatte).
Habe weitgehend die Syntax und Namen von SiSi übernommen (und am Schluss auch etwas Code, z.B. für das parsing der "send" Zeile).
Die größten Unterschiede sind "unter der Haube", es gibt aber auch ein paar Verbesserungen:

- Callback Technik: select() Loop statt fork() (spart Speicher)
- Gruppen in Klarnamen statt kryptische base64 strings und nur mit "#" statt "#@"
- Kontakte in Klarnamen (sobald einmalig eine Nachricht gesendet/empfangen wurde - gibt leider keine Funktion das gleich aufzulösen)
- Timestamps lesbar

Nicht implementiert: Blocken von Kontakten oder Gruppen

Wer mag, darf das gerne Testen. Hat sicher noch Fehler (hoffentlich nichts gravierendes) würde mich also über Feedback freuen.

Edit: Update - es war aus Testgründen ein "reinit" nötig um den Nachrichtenempfang zu aktivieren. Wird jetzt sofort beim Start aktiviert

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

Mikka

Zitat von: Adimarantis am 26 Januar 2021, 20:36:05
Nach einem Neustart des Rapsi ging es plötzlich.

Ich habe just for fun, mal ein kleines Programmierprojekt gestartet und "from scratch" eine eigene Implementierung gestartet (hatte schon angefangen bevor ich SiSi gefunden hatte).
Habe weitgehend die Syntax und Namen von SiSi übernommen (und am Schluss auch etwas Code, z.B. für das parsing der "send" Zeile).
Die größten Unterschiede sind "unter der Haube", es gibt aber auch ein paar Verbesserungen:

- Callback Technik: select() Loop statt fork() (spart Speicher)
- Gruppen in Klarnamen statt kryptische base64 strings und nur mit "#" statt "#@"
- Kontakte in Klarnamen (sobald einmalig eine Nachricht gesendet/empfangen wurde - gibt leider keine Funktion das gleich aufzulösen)
- Timestamps lesbar

Nicht implementiert: Blocken von Kontakten oder Gruppen

Wer mag, darf das gerne Testen. Hat sicher noch Fehler (hoffentlich nichts gravierendes) würde mich also über Feedback freuen.

Jörg

Hi Jörg,

werde ich mal testen. Ist zwar kein Fehler aber unter Ubuntu 18.04 geht es nicht auf Anhieb:

Please install Net::DBus in version 1.2.0 or higher. Your version is: 1.1.0

VG,
Mikka

Jamo

Hallo Jörg,
also das ersetzt dann das Modul aus dem ersten post https://github.com/Quantum1337/32_SiSi.pm ?
Gleiche Voraussetzungen uns Software installation wie im SiSi Wiki beschrieben  https://wiki.fhem.de/wiki/SiSi ?

Dann muss man das 32_SiSi.pm erstmal loeschen/renamen, und eine neue DEF machen, oder?
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/ConbeeII, FB, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack

Adimarantis

Hallo Jamo,

ja ist 100% kompatibel bezüglich der Systemvorausetzungen. Aber nur mit signal-cli 0.7.4 und Net:DBus 1.2.0 getestet - kann also sein dass ich etwas von der API nutze, dass in älteren Versionen anders ist, also ggf. updaten.

Sollte sich eigentlich nichtmal mit SiSi beissen, will heissen, das man beides Parallel betreiben können sollte (ohne Gewähr) - es kriegen dann halt beide Module Messages.

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: Mikka am 26 Januar 2021, 20:47:10
Please install Net::DBus in version 1.2.0 or higher. Your version is: 1.1.0

Da ich ein wenig unsauber an die internas von Net::DBus muss, bestehe ich lieber auf der neusten Version.

Einfach:
sudo cpan install -f Net:DBus


Das "-f" brauche ich auf meinem Raspberry 4, weil einer der Tests mit einer ominösen Meldung fehl schlägt. Das steht auch schon als bugreport auf CPAN, aber ich befürchte das Modul wird nicht mehr so aktiv gewartet (letztes update 2019).

Jörg

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

heiko.ne

Hallo zusammen,

ich wollte erstmal in aller Kürze mein Lob für das Modul aussprechen.
Mir gelingt gerade sehr gut der Übergang von Telegram zu Signal ...

Aber eine Frage hätte ich:
Wie kann ich mit dem Sisi-Modul direkt von einem SVG-Plot ein PNG senden lassen?
Bei Telegram hatte ich das über folgenden Befehl gemacht:

fhem("set TelegramBot cmdSend \@$sender {plotAsPng('AussenTempHum_current_day')}");


So funktionierts leider nicht, da das "plotAsPng" als Funktionalität unbekannt scheint:

fhem("set SignalBot message \@$sender \&{plotAsPng('AussenTempHum_current_day')}");


Vielen Danke für Vorschläge und Hilfe!

Gruß
Heiko

enno

Moin Jörg,
da ich wegen Umzug in ein Proxmox Container mein FHEM gerade sowieso neu aufgesetzt habe, bin ich gleich auf dein Modul umgestiegen. Mit dem "Original" klapp es mit den neuen Gruppen-IDs nicht mehr. Dein Modul schluckt die neuen Gruppen IDs ohne Probleme. Soweit ich es bisher testen konnte, läuft es. Klappte sogar ohne die nicht vorhandene Dokumentation ;)

Bin mal auf die weitere Entwicklung gespannt.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

Adimarantis

Guten Abend,

@heiko.ne : Die von dir gesuchte Funktion gibt es unter SiSi nicht.

Nachdem ich mit meinem "Konkurrenzprodukt Signalbot" aber gerade in Programmierlaune war, habe ich das jetzt bei mir eingebaut:

Es sind jetzt solche Konstruktionen im "send" Befehl möglich:
set SignalBot send "@({my $var=\"Joerg\";; return $var;;})" "&( {plotAsPng('SVG_Anhebung')} )" Hallo, hier kommt dein Plot

Folgendes ist zu beachten:
- Zu interpretierende Befehlsketten müssen mit runden Klammern umgeben werden.
- Sofern Leerzeichen enthalten sind muss der ganze Teil-String (inklusive der @ # und & Markierungen in Anführungszeichen (double quotes) eingebettet werden
- Enhält dieser String wiederum selbst Anführungszeichen sind diese mit mit \" zu escapen
- Für Perl Befehlsketten muss das Semikolon doppelt verwendet werden
- Die Textnachricht selbst kann, aber muss nicht in Anführungszeichen eingebettet werden, wenn sie am Ende des Befehls kommt
- Die Fehlerbehandlung und Auswertung des "send" Befehls ist ziemlich komplex geworden. Bitte um Rückmeldung über Befehle die nicht wie beschrieben funktionieren oder sonstiges seltsames Verhalten
Zur Vollständigkeit:
- Individuelle Empfänger fangen mit @ an, es sind sowohl Telefonnummer (+49...) oder auch Klarnamen möglich (sofern sie FHEM bekannt sind) - Klarnamen mit Leerzeichen habe ich nicht getestet, sollten wie oben beschrieben mit Anführungszeichen aber gehen
- Gruppen fangen mit # an und sind immer im Klarnamen. Sie werden automatisch übersetzt - Leerzeichen wieder wie oben
- Anhänge fangen mit & an und müssen einen von FHEM lesbaren Dateinamen (möglichst mit Pfad) enthalten

Neu:
- Die Kontaktliste kann aus dem internen Speicher in ein reading kopiert werden  (set .. saveContacts) und steht dann auch nach einem FHEM Neustart wieder zur Verfügung
  (Dies ist ein Workaround, da signal-cli bisher keine Möglichkeit über DBus zur Verfügung stellt die Kontaktliste abzufragen, sondern diese nur durch
   empfangende Messages befüllt werden kann - ich denke das wird sich noch ändern, da die Funktion "listcontacts" auf der Kommandozeile bereits existiert)

@enno: Danke fürs Feedback, freut mich das es bei dir gleich geklappt hat.

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)

heiko.ne

Hallo Jörg,

Danke für Deine Ausführungen.
Ich habs probiert, scheitere aber leider  :( und kriege nicht raus, woran es liegt.

Zur Beschreibung, wie ich das einsetze:
In einem Per-Skript "99_mySignalBotUtils.pm" steht eine Variable "$sender" zur Verfügung, die die Telefonnummer des Absenders der Anfrage beinhaltet (z.B. +49151xxxxxxx).

In meinem "SignalBot" geschieht das Antworten mit Textnachricht nun z.B. so:


fhem("set SignalBot message \@$sender [TH_Sensor_1:temperature:r]°C ([TH_Sensor_1:humidity:r]% rel. Feuchte)");


Daher war meine Idee, Deinem Vorschlag nach das Versenden von SVGs als PNGs so umzusetzen:


fhem("set SignalBot send \@$sender \"&( {plotAsPng('SVG_Anhebung')} )\" Hallo, hier kommt dein Plot");


Ich habe dabei das Escapen der " mittels \" ergänzt, wie beschrieben.
Leider kommt als Ausgabe:
Zitat"&( {plotAsPng('AussenTempHum_current_day')} )" Hallo, hier kommt dein Plot

Vielleicht kannst Du mir noch ein hilfreichen Hinweis geben, was da nicht stimmt.

Danke und schönen Sonntag.
Gruß
Heiko