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

klausw

Hallo Quantum,

Zitat von: Quantum am 14 August 2018, 11:23:51
...
Wenn du wissen willst wie ich das gemacht habe, kann ich es gerne veröffentlichen.

bin zwar nicht angesprochen, aber es würde mich trotzdem interessieren.
besonders msgdialog.

Klaus
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

Quantum

Hallo klausw,

ich hoffe ich krieg alles zusammen:

1) Das Modul msg und alles was dazugehört, ist eingerichtet (ROOMMATE etc..). in msgConfig mindestens dieses Attribut setzen:
attr globalMsg msgCmdPush set %DEVICE% msg @%RECIPIENT% %MSG%

2) Beim entsprechenden ROOMMATE folgendes Attribut setzen:

attr <ROOMMATE> msgContactPush <SIGNAL_DEVICENAME>:<SIGNAL_NUMBER>
Beispiel:
attr rr_Max msgContactPush Signal:+49123456789

3) Wenn die Einrichtung soweit fehlerfrei war, sollte mit
msg push @rr_Max Testnachricht
eine Nachricht an Max gesendet werden können.

4) msgDialog wie im entsprechenden Thread beschreiben einrichten. Anpassung am Gerät "msgPushReceived".
Der Code des Notify sieht bei mir wie folgt aus:


.*(msgText|queryData|(OTR)?LastMessage|message):(\n|.)* {
  my ($recipient, $recipientMask, $received);
  my $TYPE = InternalVal($NAME, "TYPE", "");

  if($TYPE eq "SiSi" && $EVENT =~ m/^msgText/){
    $recipient = ReadingsVal($NAME, "msgSender", undef);
if($recipient =~ /^\+.*$/){
$recipientMask = "\\" . $recipient;
}
    $received = ReadingsVal($NAME, "msgText", undef);
  }

  return unless($recipient && $received ne "");
 
  my @contacts = devspec2array("TYPE=(ROOMMATE|GUEST):FILTER=msgContactPush=.*$recipientMask.*");
 
  if(@contacts){
    foreach (@contacts){
      my $dev_hash = $defs{$_};

      readingsBeginUpdate($dev_hash);
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceived", $received);
      readingsBulkUpdate($dev_hash, "fhemMsgPushReceivedContact", $NAME);
      readingsEndUpdate($dev_hash, 1);
    }
  }
  else{
    fhem("msg push Unbekannter Kontaktversuch über $NAME von $recipient:\n$received");
  }
}


Hauptunterschied ist, dass das + nocheinmal maskiert wird, ansonsten wird es falsch interpretiert.

Hoffe konnte helfen, bei Fragen gerne melden.

Freundliche Grüße
Quantum

subseven

#77
Mir sind noch zwei Dinge in den Sinn gekommen, weil ich heute mein Handy mal neu aufgesetzt hab.
Sobald sich durch eine Neuinstallation von Signal der Fingerprint ändert, kommen Nachrichten nicht mehr an. Auf der Signal-CLI wird das auch entsprechend quittiert. Man kann nun den neuen Fingerprint hinzufügen oder mit
signal-cli -u <FHEM-NUMMER> --config /var/lib/signal-cli trust -a <Nummer mit geänderten Fingerprint>
der Nummer ohne den Fingerprint einzeln hinzuzufügen wieder vertrauen (signal-cli fügt den Fingerprint dann hinzu)

Praktisch wäre auch wenn man auf Gruppen austreten kann. Letzt endlich hab ich es dann doch nicht gebraucht, aber leider kann man bei Signal keine Teilnehmer aus Gruppen werfen, das müssen die Teilnehmer immer selbst tun.
Mit:
signal-cli -u <FHEM-NUMMER> --config /var/lib/signal-cli quitGroup -g <GroupID>

verlässt man Gruppen.
Wenn diese beiden Funktionen noch hinzukommen würden und auch die Meldungen mit dem Fingerprint vom FHEM-Modul erkannt/interpretiert würden, wäre echt toll :-)

Bei Bedarf kann ich Log und CLI-Ausgabe zur Verfügung stellen.

Grüße

Quantum

Hallo subseven,

ja, auf diese Probleme bin ich selbst auch schon gestoßen. Aber: Weder der Befehl trust noch quitGroup sind Bestandteil der DBus-API.
Was diese alles kann, kann hier nachvollzogen werden: https://github.com/AsamK/signal-cli/blob/master/src/main/java/org/asamk/Signal.java

Klar kann es gelöst werden, indem das Module Systembefehle ausführt. Halte ich aber für den falschen Weg. Eher soll bestrebt werden, dass
fehlende Befehle in die DBus-API aufgenommen werden. Wenn diese dort zur Verfügung stehen, kann ich diese gerne integrieren.
Bin mit Java leider noch nicht so vertraut um hierfür Upstream Pull-Requests aufzumachen. Aber vielleicht jemand anderes ?

Freundliche Grüße
Quantum

drhirn

Wollte nur schnell vermelden, dass ich jetzt auch zu den glücklichen Modul-Benutzern gehöre. Und soweit keine Probleme feststellen kann. Hab's aber noch nicht wirklich ausführlich getestet. User Neubert und ich sind auch schon mit einem Wiki-Artikel beschäftigt: https://wiki.fhem.de/wiki/SiSi

Danke Quantum!

Quantum

Hallo drhirn,

der Wiki-Artikel liest sich gut. Hätte ich nicht besser hinbekommen. Danke für deine/eure Mühen!

Freundliche Grüße
Quantum

enno

Zitat von: drhirn am 27 November 2018, 16:06:26
Wollte nur schnell vermelden, dass ich jetzt auch zu den glücklichen Modul-Benutzern gehöre. Und soweit keine Probleme feststellen kann. Hab's aber noch nicht wirklich ausführlich getestet. User Neubert

Vielen Dank für Modul und Wiki. Mit dem Wiki hat es gut geklappt, bis auf den Punkt Außerdem muss unter Umständen der Pfad des FHEM-Wurzelverzeichnisses angepasst werden.

Bei mir hat sich die Datei unter folgenden Pfad "versteckt". ExecStart=/usr/local/bin/signal-cli -u +49xxxxxxxxxx --config /opt/fhem/.local/share/signal-cli daemon --system

Der Rest war dann wieder einfach :)

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC

kunze

#82
Hallo,

erstmal ein Danke an den Ersteller des Moduls.
Leider funktioniert bei mir das senden an Telefonnummern nicht.

ich bekomme immer:

sentMsgError
Error Executing Method org.asamk.Signal.sendMessage: org.whispersystems.signalservice.api.push.exceptions.NotFoundException: Not found - Maybe wrong Number?
sentMsgRecipient
+4917xxxxxxxx
sentMsgResult
FAILED
sentMsgText
test


Senden an Gruppen über eine Gruppen ID und empfangen von Nachrichten funktioniert hingegen.
Senden an Telefonnummern über DBus mit dem beiden Kommandos aus dem Wiki funktioniert auch.

Wo kann ich weiter Logs finden um das Problem zu analysieren?

Einrichtung hab ich nach dem Wiki gemacht.

Danke,
Michael

Quantum

Hallo,

da das senden von Gruppennachrichten funktioniert, hat die prinzipielle Einrichtung geklappt.
Den Fehler den du beschreibst ist eine NotFound Exception, die eigentlich nur dann auftritt, wenn dem Signal-Server die Nummer an die du senden willst, nicht bekannt ist. Dafür kann das Modul erstmal nichts.

Freundliche Grüße
Quantum

kunze

#84
Hallo Quantum,

ich hab jetzt ein wenig weiter gesucht.
Im dbus-monitor sehe ich folgendes:

method call time=1546696417.808746 sender=:1.22 -> destination=org.asamk.Signal serial=15 path=/org/asamk/Signal; interface=org.asamk.Signal; member=sendMessage
   string "testnachricht_global"
   array [
   ]
   string "ARRAY(0x55cbef974d18)"
error time=1546696418.647312 sender=:1.14 -> destination=:1.22 error_name=org.freedesktop.dbus.exceptions.DBusExecutionException reply_serial=15
   string "Error Executing Method org.asamk.Signal.sendMessage: org.whispersystems.signalservice.api.push.exceptions.NotFoundException: Not found"


Es wird also der Empfänger nicht richtig weiter gereicht.
Ich hab dann im code in Zeile  589;
$hash->{DBUS}->{OBJECT}->sendMessage($text,\@attachment,\@recipients); 1
den \ vor @recipients entfernt. Jetzt wird der Empfänger als String übergeben und das senden funktioniert.

Schöne Grüße
Michael

Quantum

#85
Welche Version von signal-cli verwendest du? Evtl hat sich etwas in der DBus Api geändert.

Freundliche Grüße
Quantum

kunze

Verwende die aktuellste, 0.6.2.
Laut Interface auf GitHub erwartet die entweder einen String oder ein Array von strings.

In meinem Fall wurde aber was ganz anderes übergeben, zumindest sieht es aus wie eine Referenz auf ein Array das in einen string umgewandelt wurde.
Bin allerdings in Perl nicht wirklich gut.

string "ARRAY(0x55cbef974d18)"

So sieht es mit einem Attachment aus (nach meiner Änderung):


method call time=1546700703.486987 sender=:1.31 -> destination=org.asamk.Signal serial=12 path=/org/asamk/Signal; interface=org.asamk.Signal; member=sendMessage
   string ""
   array [
      string "/opt/fhem/www/images/default/icoKLIMA.png"
   ]
   string "+49xxxxxxxxxx"


Ohne meine Änderung hätte ich sowas erwartet:


method call time=1546700703.486987 sender=:1.31 -> destination=org.asamk.Signal serial=12 path=/org/asamk/Signal; interface=org.asamk.Signal; member=sendMessage
   string "message text"
   array [
      string "/opt/fhem/www/images/default/icoKLIMA.png"
   ]
   array [
      string "+49xxxxxxxx"
   ]

Quantum

würdest du bei dir kurz die 0.6.0 testen und deine Änderung rückgängig machen? Und kurz schreiben wie es sich dann verhält?
Danke

kunze

Die 0.6.0 startet leider nicht mit der config der 0.6.2.

Muss morgen mal schauen ob ich das ohne Neuregistierung hinbekomme.

Quantum

okay schade. Ich komm erst im Laufe der nächsten Woche dazu selbst Tests durchzuführen. Ich hab bei mir noch die 0.5.6 im Einsatz mit der ich das damals entwickelt hab. Können andere das Problem mit der 0.6.2 bestätigen?