Neues Modul: 70_Jabber.pm

Begonnen von BioS, 18 Januar 2014, 11:51:20

Vorheriges Thema - Nächstes Thema

alpha1974

#180
EDIT: Noch etwas erfolgreich ausprobiert: Wenn ich den Empfänger mit XMPP-Ressource angebe (also z.B. user@domain.net/phone) kommt eine Nachricht via "set msgotr" auf dem Handy an. Unverschlüsselte Nachrichten via "set msg" brauchen den Zusatz allerdings nicht.
[EDIT ENDE]

Hallo liebe Jabber-Fans,

OTR läuft bei mir nur einseitig vom Handy (Android mit Conversations) zu FHEM. Umgekehrt, also FHEM als Absender via "set msgotr", kommt leider nichts an. "set msg" an denselben Client läuft hingegen problemlos. Als XMPP-Server läuft hier Prosody. Grundsätzlich haben andere Clients, die sich über den Server anmelden, keine Probleme mit OTR (geht in beiden Richtungen).

Ich habe im Modul debug aktiviert. Das Logfile schreibt bei "set msgotr" folgendes:
2016.08.21 18:15:23.912 0: jabber No secure connection to xxxx@xxxxxx.xxx - establishing and sending message later...
2016.08.21 18:15:23.913 0: jabber [OTR Inject] Inject called: ?OTRv2?
<b>jabber</b> has requested an <a href="http://otr.cypherpunks.ca/">Off-the-Record private conversation</a>.  However, you do not have a plugin to support that.
See <a href="http://otr.cypherpunks.ca/">http://otr.cypherpunks.ca/</a> for more information.


list device sagt:
CONNINFO   Connected to xxxxxx.xxx with username xxxxxusernamexxxxxxx
   DEF        xxxxxxx.xxx 5222 xxxxxusernamexxxxxxx xxxxxpasswortxxxxxx 1 0
   NAME       jabber
   NR         79
   OTR_STATE  OTR enabled and active
   STATE      Connected
   TYPE       Jabber


Die nicht versandten OTR-Nachrichten scheinen noch irgendwo zu "hängen", jedenfalls gibt im Device-Listing mehrere Hash-Einträge unter "waitingMsgs".

FHEM läuft in der aktuellsten Version auf einem Raspi2 unter Debian Jessie. libotr2 habe ich aus den Wheezy-Quellen kompiliert und erfolgreich installiert. Crypt::OTR ist auch installiert. In der Richtung Handy -> FHEM klappt OTR ja auch problemlos.

Mit der obigen Meldung (fehlendes Plugin) konnte ich leider nichts anfangen. Vielleicht hat ja jemand einen hilfreichen Tipp, ob noch ein Modul nachzuinstallieren ist? Oder könnte das Problem auf der Empfängersseite liegen (z.B. an der Android-App conversations)?

Gruß
alpha1974
FHEM/Z-Wave USB-Dongle + div. Devices

BioS

Hi alpha1974,

ich glaube du hast dir die Antwort schon selber gegeben :)

OTR ist ja eine Ende zu Ende Verbindung und jabber bzw. XMPP definiert ein Ende als komplette JID: user@domain/ressource.
Wenn du nun mehrere Devices mit demselben User und unterschiedlichen Ressourcen hast, muss OTR das korrekte Ende wissen, also mit Ressource.

Andersherum hat dein fhem-server wahrscheinlich einen eigenen User und ist auch die einzige Ressource auf dem Username, also weiß der Jabber-Server genau wohin er mit dem halben JID Eintrag (user@domain) schicken muss.

"set msg" läuft ein bisschen anders als "set msgotr" - bei set msg sendet FHEM einfach die Nachricht an den Server und überlässt ihm das Routing an die korrekte Ressource.
"set msgotr" hingegen sucht ob er bereits eine bestehende Verbindung mit der JID hat (was bei user@domain nicht der Fall ist) und versucht eine aufzubauen wahrscheinlich dann mit einer anderen Ressource, kommt aufs Routing vom Server an.

Für was brauchst du es denn?

Wenn du immer dein Handy gezielt mit OTR ansprechen möchtest, kannst du ja die JID direkt nehmen.
Wenn du allerdings die Ressource, die im Moment online ist ansprechen möchtest wird das ziemlich komplex werden ;)

Willst jedoch nur auf eine Nachricht, zum vom Handy per OTR in einem Notify kam, benutze einfach die komplette JID, die im Notify mitgeliefert wird, als Antwortkanal.

Grüße,
BioS
FHEM auf Debian in ESXi5 VM
Homematic mit HMLAN
Raspi mit Pilight für Relais der Heizung

alpha1974

Hallo BioS,

vielen Dank für die Erläuterung! Mir reicht es schon aus, das Handy mit der entsprechenden JID zu adressieren. Tatsächlich hat der User, der auf dem Handy genutzt wird, verschiedene Ressourcen, da er auch auf einem Client am PC genutzt wird bzw. wurde.

Für was ich es brauche: Ich möchte mir Statusmeldungen aus der FHEM-Welt aufs Handy schicken lasssen und wenn OTR ohnehin schon möglich ist, möchte ich es auch nutzen (was ja jetzt auch gut klappt).  ;)

Gruß
alpha1974
FHEM/Z-Wave USB-Dongle + div. Devices

ThomasMagnum

Hallo zusammen,

vor einigen Monaten habe ich bei mir das Jabber Modul eingerichtet und nutze es zum Versand verschiedener Meldungen. Das klappt alles wunderbar. Nun wollte ich mal das Thema "interaktivität" angehen und versuche mich am in der WIKI hinterlegten Beispiel. Leider scheitere ich.  :-[

Ich habe die Angaben befolgt und den Code in angepasster Form in die 99_myUtils.pm eingefügt:

# Enter you functions below _this_ line.

######################################################
# Meldung per Jabber senden
######################################################
sub
sendJabberMessage($$)
{
  my($rcp, $msg) = @_;
  fhem("set jabber msg $rcp $msg");
}

######################################################
# Meldung an mich per Jabber senden
######################################################
sub
sendMeJabberMessage($)
{
my($msg) = @_;
sendJabberMessage('user@domain', $msg);
}

######################################################
# Statusdaten an mein Handy per Jabber senden
######################################################
sub
sendMeStatusMsg()
{
  # Hier ist der Text fuer die Statusmeldung. Z.B. Werte von Sensoren.
my $msg = "Status";
$msg=$msg."Status: ";
$msg=$msg."Antwort";

sendMeJabberMessage($msg);
}

### Ende ###

Die Angaben "user@domain" sind natürlich angepasst.

In der fhem.cfg habe ich folgendes hinzugefügt:
define Jabber_Notify notify jabber:Message.* {sendJabberAnswer();;}

Im Log erscheint nur die Info das eie Nachricht angekommen ist:
2016-08-29 11:47:20 Jabber FHEM_nnnn Message: user@domain/xt1092: Status
2016-08-29 11:47:20 Jabber FHEM_nnnn LastSenderJID: user@domain/xt1092
2016-08-29 11:47:20 Jabber FHEM_nnnn LastMessage: Status


Leider finde ich keinen Ansatz wo der Fehler liegt und wo ich ansetzen könnte.
Eventuell kann mir ja hier jemand einen Tip geben.

Gruß, Thomas

darkness

Im deinen Notify rufst du die Funktion sendJabberAnswer() auf.
Diese scheint es aber in deiner myUtils nicht zu geben.

Versuch mal die Funktion sendMeStatusMsg() aufzurufen.

Es sollte eigentlich auch entsprechende Fehler in deiner Logdatei geben.


Gruß



ThomasMagnum

Hallo darkness,

vielen Dank für den Hinweis.
Das war zwar ein Fehler meinerseits, ändert aber leider nichts am Verhalten.

Ergebniss:
Nach wie vor keine Reaktion und keine (zusätzlichen) Infos im Log / Eventmonitor.

Gruß Thomas

Devender

hallo Thomas,

Du hast bei deinem DEF ein doppeltes Semikolon. Ich habe dort nur eins und es klappt alles wunderbar mit der Interaktion

define Jabber_Notify notify jabber:Message.* {sendJabberAnswer();}

Viele Gruesse,
Dirk
FHEM 5.8 auf RasPi mit Jessy - CUL868, JeeLink Lacrosse
Komponenten: HM, IT, ELV, FB7390, FritzPL543,Sonos Play3
Mehrere Wandtablets sowie einen Smart Mirror
https://wiki.fhem.de/wiki/Anwesenheitserkennung#PRESENCE-Modul

ThomasMagnum

Hallo Devender ,

vielen Dank für deine Rückmeldung. Der Unterschied kommt daher das ich die Zeile direkt aus der fhem.cfg genommen habe und du diese direkt aus der fhem Oberfläche.  ;)

In der Zwischenzeit habe ich das Ganze nochmal rückgängig gemacht und Schritt für Schritt neu aufgebaut. Nun geht es auch bei mir und die entsprechenden Nachrichten werden versendet. Wo letztlich der Fehler lag, das vermag ich nicht zu sagen, sicher ein Tippfehler oder ein "copy" / "paste" Problem.  :-[

Vielen Dank an alle!

Gruß, Thomas

ThomasMagnum

Hallo BioS,

vor knapp einem Jahr wurde im Verlaufe dieses Threats mal gefragt ob das Versenden von Bildern unterstützt wird.
Ist das bei dir noch immer noch auf der Liste oder hast du das aufgegeben?

Ich wäre, ähnlich wie alpha1974, nämlich an dieser Funktion interessiert.

Beste Grüße
Thomas

BioS

Hi Thomas,

ja ich hatte das auf der Liste und auch mal ein paar Wochen immer wieder versucht, aber entweder hat's das ganze connection handling von dem Modul so verhagelt und blockiert, dass FHEM quasi nicht mehr benutzbar war oder die Libraries haben von vornherein die Verbindung zu dem SOCKS Proxy mangels implementation nicht aufbauen können.

Alles in allem hab ich es aufgegeben die Bytestreams Extension zu implementieren, das hat zu immer mehr Problemen geführt..

Sorry, ich hab bestimmt 2-3 Wochen damit zugebracht, aber es wollte nicht klappen :(

FHEM auf Debian in ESXi5 VM
Homematic mit HMLAN
Raspi mit Pilight für Relais der Heizung

Turbokid

@BioS hattest du schon die Möglichkeit das Attribut für meinen Vorschlag einzubauen? Ich zerlege mir zur Zeit bei jedem Update meine Änderung. Danke

BioS

Ich hab die ünderungen schon eingebaut, allerdings haben sich mittlerweile neue Entwicklungsrichtlinien ergeben auf die ich das Modul erst noch anpassen muss. Das dauert noch ein bisschen..
FHEM auf Debian in ESXi5 VM
Homematic mit HMLAN
Raspi mit Pilight für Relais der Heizung

kmatthias

Danke für dieses Modul. Hervorragend!

Ich habe einige Zeit damit verbracht, den "Authentication error" aufzuspüren. Habe mir bei jaber-hosting.de einen Account registriert. Die Server sind allerdings nur unter jabber.hot-chilli.net zu erreichen und genau das war das Problem. Serverdomain und Domain im Benutzernamen müssen übereinstimmen. Also noch einen weiteren Benutzer unter jabber.hot-chilli.net registriert und siehe da, es geht.

farion

Bezüglich des Bilduploads kann man die alte Lösung getrost ignorieren, da furchtbar.

Man sollte XEP-0363 verwenden: http://xmpp.org/extensions/xep-0363.html
Der Witz dabei ist, dass der eigentliche Bild-Up-und-Download über HTTP geschieht. Per XMPP werden nur die Links ausgehandelt.
Ist halt die Frage ob das schon jemand für Perl implementiert hat. So auf Anhieb hab ich nix gefunden. Aber das ist auf jeden Fall einfacher implementiert als die "alte" Lösung.

Auf Serverseite kann das der Ejabberd und für Prosody gibt es auch ein Modul.

Unter Android kann das Conversations, unter Win/Mac/Linux kann das Gajim und unter iOS wird Eloquence das können.
Da mache ich mal ganze nebenbei Werbung für mein OpenSource-Projekt: www.eloquence-im.org :).

Das Tolle ist: Clients, die das nicht unterstützen bekommen einfach einen Link geschickt.

Gruss farion

PS: Und Danke für dieses Modul, ohne Jabber wäre FHEM nix für mich.
Fhem5.8@Raspi3|~70xHomematic|KM271|1Wire|DoorPi mit DoorPiBoard|GarageDoorSingleButton|Graphite

thunder1902

#194
Hallo!

Ich habe ein Problem mit der STARTTLS Option. Habe einen Ejabberd Server auf'm Raspberry laufen. Dort wurde die STARTTLS Funktion aktiviert:

{listen,                                                                                                                                                                                                           
[                                                                                                                                                                                                                 
  {5222, ejabberd_c2s, [                                                                                                                                                                                           
                        {access, c2s},                                                                                                                                                                             
                        {shaper, c2s_shaper},                                                                                                                                                                     
                        {max_stanza_size, 65536},                                                                                                                                                                 
                        %%zlib,                                                                                                                                                                                   
                        starttls_required, {certfile, "/etc/ejabberd/ejabberd.pem"}                                                                                                                               
                       ]},                               


Das Modul meldet immer beim Verbinden : "Jabber authentication error: Cannot Authenticate for an unknown reason. Connectionstatus is: 1"
Im Debug-Modus sagt das LogFile: Jabber connection error (Previous XMPP Process() error!)

Meine Implementierung lautet:

www.kai***.de 5222 fhem PW 1 0

Ohne tls oder startls funktioniert die Verbindung reibungslos.

Kann mir jemand sagen, was ich falsch mache??