Jabber: Unterschied zwischen den Versionen

Aus FHEMWiki
K (Link zu "Prosody" hinzugefügt)
(kat)
 
(7 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Infobox Modul
{{Infobox Modul
|ModPurpose=Dieses Modul ermöglicht Fhem, sich mit dem Jabber-Netzwerk zu verbinden, um Nachrichten zu einem Jabber-Server zu senden oder von diesem zu empfangen.
|ModPurpose=Dieses Modul ermöglicht FHEM, sich mit dem Jabber-Netzwerk zu verbinden, um Nachrichten zu einem Jabber-Server zu senden oder von diesem zu empfangen.
|ModType=d
|ModType=d
|ModCmdRef=  
|ModCmdRef=  
Zeile 19: Zeile 19:
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]


Auf dem Fhem-Server müssen folgende Perl-Module installiert sein:
Auf dem FHEM-Server müssen folgende Perl-Module installiert sein:
*Net::Jabber
*Net::Jabber
*Net::XMPP
*Net::XMPP
Zeile 34: Zeile 34:


;Beispiel:
;Beispiel:
<source lang="perl">define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0</source>
<syntaxhighlight lang="perl">define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0</syntaxhighlight>




Zeile 43: Zeile 43:


Beispiel:
Beispiel:
<source lang="perl">set JabberClient1 msg myname@jabber.org It is working!</source>
<syntaxhighlight lang="perl">set JabberClient1 msg myname@jabber.org It is working!</syntaxhighlight>




Zeile 51: Zeile 51:


Beispiel:
Beispiel:
<source lang="perl">set JabberClient1 msgmuc roomname@jabber.org Woot!</source>
<syntaxhighlight lang="perl">set JabberClient1 msgmuc roomname@jabber.org Woot!</syntaxhighlight>




Zeile 59: Zeile 59:


Beispiel:
Beispiel:
<source lang="perl">set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*</source>
<syntaxhighlight lang="perl">set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*</syntaxhighlight>




Zeile 66: Zeile 66:


Beispiel:
Beispiel:
<source lang="perl">set JabberClient1 subscribe myname@jabber.org</source>
<syntaxhighlight lang="perl">set JabberClient1 subscribe myname@jabber.org</syntaxhighlight>




Zeile 151: Zeile 151:
**MucLastSenderJID - Nur die Sender-JID der Nachricht
**MucLastSenderJID - Nur die Sender-JID der Nachricht
-->
-->
==Installation==
Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.
Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:
*XML::Stream 1.23
*Net::XMPP 1.02
Seine Modulversionen kann mit mit diesen Kommandos überprüfen, dabei auf den "Installed:" Eintrag achten:
<syntaxhighlight lang="bash">
cpan -D XML::Stream
cpan -D Net::XMPP
</syntaxhighlight>
Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.
Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:
<syntaxhighlight lang="bash">
apt-get remove libnet-xmpp-perl
apt-get remove libxml-stream-perl
apt-get remove libotr5 libotr5-dev
apt-get install build-essential
apt-get install libnet-jabber-perl
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb
dpkg -i libxml-stream-perl_1.23-2_all.deb
dpkg -i libnet-xmpp-perl_1.02-3_all.deb
</syntaxhighlight>
Für OTR ist noch folgendes notwendig (64bit Intel Platform):
<syntaxhighlight lang="bash">
apt-get install libgpg-error-dev
cpan install Digest::SHA1
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb
cpan
cpan> notest install Crypt::OTR
</syntaxhighlight>
OTR bei 32 bit (Intel Platform):
<syntaxhighlight lang="bash">
apt-get install libgpg-error-dev
cpan install Digest::SHA1
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb
cpan
cpan> notest install Crypt::OTR
</syntaxhighlight>
Wer keine Stunden auf die Keygenerierung warten will, kann noch das Programm "haveged" installieren, das kümmert sich um die entrophy generation, die OTR dringend braucht für seinen Privaten Schlüssel:
* haveged
<syntaxhighlight lang="bash">
apt-get install haveged
</syntaxhighlight>
==Beispiele==
==Beispiele==
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading "Temperatur" des Sensors "BU_Temperatur" bei jeder ankommenden Nachricht an den Sender zurück:
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading "Temperatur" des Sensors "BU_Temperatur" bei jeder ankommenden Nachricht an den Sender zurück:


<source lang="perl">
<syntaxhighlight lang="perl">
define Jabber_Notify notify JabberClient1:Message.* {
define Jabber_Notify notify JabberClient1:Message.* {
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
Zeile 161: Zeile 231:
       fhem("set JabberClient1 msg ". $lastsender . " Temp: ".$temperature);
       fhem("set JabberClient1 msg ". $lastsender . " Temp: ".$temperature);
}
}
</source>
</syntaxhighlight>
              
              


Auf MUC Nachrichten lässt sich folgend reagieren, Augenmerk darauf legen dass der Nickname aus $lastsender in der msgmuc Funktion entfernt wird, damit die Nachricht an den Raum geht
Auf MUC Nachrichten lässt sich folgend reagieren, Augenmerk darauf legen dass der Nickname aus $lastsender in der msgmuc Funktion entfernt wird, damit die Nachricht an den Raum geht


<source lang="perl">
<syntaxhighlight lang="perl">
define Jabber_Notify notify JabberClient1:MucMessage.* {
define Jabber_Notify notify JabberClient1:MucMessage.* {
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
Zeile 173: Zeile 243:
       fhem("set JabberClient1 msgmuc ". $lastsender . " Temp: ".$temperature);
       fhem("set JabberClient1 msgmuc ". $lastsender . " Temp: ".$temperature);
}
}
</source>
</syntaxhighlight>
              
              


Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:
Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:


<source lang="perl">
<syntaxhighlight lang="perl">
define Jabber_Notify notify JabberClient1:OTRMessage.* {
define Jabber_Notify notify JabberClient1:OTRMessage.* {
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
       my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
Zeile 185: Zeile 255:
       fhem("set JabberClient1 msgotr ". $lastsender . " Temp: ".$temperature);
       fhem("set JabberClient1 msgotr ". $lastsender . " Temp: ".$temperature);
}
}
</source>
</syntaxhighlight>


==Weitere Beispiele und HowTos im Wiki==
==Weitere Beispiele und HowTos im Wiki==
*[[FHEM_spricht_jabber]]
*[[FHEM_spricht_jabber]]
*[[Prosody|Installieren eines eigenen XMPP-Servers]]
*[[Prosody|Installieren eines eigenen XMPP-Servers]]
*[[Msg#Jabber|Nachrichten über das msg-Modul senden]]


==Weblinks==
==Weblinks==
Zeile 196: Zeile 267:
*[https://prosody.im/ Prosody Jabber Server]
*[https://prosody.im/ Prosody Jabber Server]
*[https://pidgin.im/ pidgin Jabber Client]
*[https://pidgin.im/ pidgin Jabber Client]
[[Kategorie:Jabber]]

Aktuelle Version vom 14. November 2018, 12:19 Uhr

Jabber
Zweck / Funktion
Dieses Modul ermöglicht FHEM, sich mit dem Jabber-Netzwerk zu verbinden, um Nachrichten zu einem Jabber-Server zu senden oder von diesem zu empfangen.
Allgemein
Typ Gerätemodul
Details
Dokumentation EN / DE
Thema
Support (Forum) Unterstuetzende Dienste
Modulname 70_Jabber.pm
Ersteller BioS (Forum )
Wichtig: sofern vorhanden, gilt im Zweifel immer die (englische) Beschreibung in der commandref!

Jabber ist eine andere Beschreibung für "XMPP", ein Kommunikationsprotokoll für Nachrichtenorientierte "middleware", basierend auf XML. Fester bestandteil des Protokolls ist die Verschlüsselung zwischen Client und Server. Für den Benutzer ist es ähnlich anderer Chat-Plattformen wie zum Beispiel dem facebook Chat, ICQ oder Google Hangouts - jedoch frei Verfügbar, open Source und normalerweise Verschlüsselt (was Serverabhängig ist).

Seit Version 1.5 kann dieses Modul in Multi-User-Channel (sogenannte MUC) beitreten und Off-the-Record (OTR) Ende-zu-Ende Verschlüsselung benutzen. OTR ist nochmal ein zusätzlicher Sicherheitsrelevater Punkt, da die Kommunikation wirklich von Endgerät zu FHEM verschlüsselt wird und man sich nicht auf die Jabber Server Transportverschlüsselung verlassen muss.


Installation

Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.

Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:

  • XML::Stream 1.23
  • Net::XMPP 1.02

Seine Modulversionen kann mit mit diesen Kommandos überprüfen, dabei auf den "Installed:" Eintrag achten:

cpan -D XML::Stream
cpan -D Net::XMPP

Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.

Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:

apt-get remove libnet-xmpp-perl
apt-get remove libxml-stream-perl
apt-get remove libotr5 libotr5-dev

apt-get install build-essential
apt-get install libnet-jabber-perl
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb
dpkg -i libxml-stream-perl_1.23-2_all.deb
dpkg -i libnet-xmpp-perl_1.02-3_all.deb

Für OTR ist noch folgendes notwendig (64bit Intel Platform):

apt-get install libgpg-error-dev
cpan install Digest::SHA1
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb

cpan
cpan> notest install Crypt::OTR

OTR bei 32 bit (Intel Platform):

apt-get install libgpg-error-dev
cpan install Digest::SHA1
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb

cpan
cpan> notest install Crypt::OTR

Wer keine Stunden auf die Keygenerierung warten will, kann noch das Programm "haveged" installieren, das kümmert sich um die entrophy generation, die OTR dringend braucht für seinen Privaten Schlüssel:

  • haveged
apt-get install haveged

Beispiele

Mit folgendem Notify-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading "Temperatur" des Sensors "BU_Temperatur" bei jeder ankommenden Nachricht an den Sender zurück:

define Jabber_Notify notify JabberClient1:Message.* {
      my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
      my $lastmsg=ReadingsVal("JabberClient1","LastMessage","0");
      my $temperature=ReadingsVal("BU_Temperatur","temperature","0");
      fhem("set JabberClient1 msg ". $lastsender . " Temp: ".$temperature);
}


Auf MUC Nachrichten lässt sich folgend reagieren, Augenmerk darauf legen dass der Nickname aus $lastsender in der msgmuc Funktion entfernt wird, damit die Nachricht an den Raum geht

define Jabber_Notify notify JabberClient1:MucMessage.* {
      my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
      my $lastmsg=ReadingsVal("JabberClient1","LastMessage","0");
      my $temperature=ReadingsVal("BU_Temperatur","temperature","0");
      fhem("set JabberClient1 msgmuc ". $lastsender . " Temp: ".$temperature);
}


Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:

define Jabber_Notify notify JabberClient1:OTRMessage.* {
      my $lastsender=ReadingsVal("JabberClient1","LastSenderJID","0");
      my $lastmsg=ReadingsVal("JabberClient1","LastMessage","0");
      my $temperature=ReadingsVal("BU_Temperatur","temperature","0");
      fhem("set JabberClient1 msgotr ". $lastsender . " Temp: ".$temperature);
}

Weitere Beispiele und HowTos im Wiki

Weblinks