<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BioS</id>
	<title>FHEMWiki - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.fhem.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=BioS"/>
	<link rel="alternate" type="text/html" href="http://wiki.fhem.de/wiki/Spezial:Beitr%C3%A4ge/BioS"/>
	<updated>2026-04-30T21:16:54Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.43.6</generator>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21680</id>
		<title>Jabber</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21680"/>
		<updated>2017-06-08T20:27:35Z</updated>

		<summary type="html">&lt;p&gt;BioS: libgpg-error-dev hinzugefügt (thx Ralf W)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|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.&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=18967&lt;br /&gt;
|ModTechName=70_Jabber.pm&lt;br /&gt;
|ModOwner=BioS ({{Link2FU|2021|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[Jabber]] ist eine andere Beschreibung für &amp;quot;XMPP&amp;quot;, ein Kommunikationsprotokoll für Nachrichtenorientierte &amp;quot;middleware&amp;quot;, basierend auf XML.&lt;br /&gt;
Fester bestandteil des Protokolls ist die Verschlüsselung zwischen Client und Server.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server müssen folgende Perl-Module installiert sein:&lt;br /&gt;
*Net::Jabber&lt;br /&gt;
*Net::XMPP&lt;br /&gt;
*Authen::SASL&lt;br /&gt;
*XML::Stream&lt;br /&gt;
*Net::SSLeay&lt;br /&gt;
*Crypt::OTR (wenn OTR verwendet werden soll)&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
===define===&lt;br /&gt;
&lt;br /&gt;
;*define &amp;lt;name&amp;gt; Jabber &amp;lt;server&amp;gt; &amp;lt;port&amp;gt; &amp;lt;username&amp;gt; &amp;lt;password&amp;gt; &amp;lt;TLS&amp;gt; &amp;lt;SSL&amp;gt;&lt;br /&gt;
:Du benötigst natürlich echte Accountdaten.&lt;br /&gt;
&lt;br /&gt;
;Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msg &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an den Jabberuser &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msg myname@jabber.org It is working!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgmuc &amp;lt;channel&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an dieJabber-MUC-Gruppe &#039;&#039;&#039;&#039;&#039;channel&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:Dabei wird ein eventuell mitgegebener Nickname von &amp;quot;channel&amp;quot; entfernt, so kann man direkt das Reading LastMessageJID benutzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgmuc roomname@jabber.org Woot!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgotr &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine OTR verschlüsselte Nachricht an den &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;. Wenn keine aktive OTR Sitzung aufgebaut ist, wird versucht eine aufzubauen.&lt;br /&gt;
:Wenn der Empfänger OTR nicht versteht, wird die Nachricht verworfen, d.h. sie wird auf keinen Fall im Klartext übertragen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; subscribe &amp;lt;username&amp;gt;&lt;br /&gt;
:Frägt eine Authorisierung beim &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039; an (normalerweise wird das nicht benötigt)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 subscribe myname@jabber.org&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
;*OnlineStatus available|unavailable&lt;br /&gt;
:Setzt den Online-status, ob der Client anderen gegenüber Online ist (available) oder Offline erscheint (unavailable)&lt;br /&gt;
:Es ist möglich dass einige Server eingehende Nachrichten trotzdem FHEM zustellen obwohl er &amp;quot;unavailable&amp;quot; ist&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*ResourceName &amp;lt;name&amp;gt;&lt;br /&gt;
:In der Jabber-Welt kann ein Client mit einem Usernamen öfter mit einem Server verbunden sein (z.b. Handy, Computer, FHEM).&lt;br /&gt;
:Der &#039;&#039;&#039;resource name&#039;&#039;&#039; ergibt die finale Jabber-ID und macht die verschiedenen Verbindungen einzigartig (z.B. bios@jabber.org/FHEM).&lt;br /&gt;
:Hier kannst du den &#039;&#039;&#039;resource name&#039;&#039;&#039; setzen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;FHEM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*PollTimer &amp;lt;&#039;&#039;seconds&#039;&#039;&amp;gt;&lt;br /&gt;
:Dies ist der Intervall in der überprüft wird ob neue Nachrichten zur Verarbeitung beim Jabber Server anstehen.&lt;br /&gt;
:Ebenfalls wird hiermit die Verbindung zum Server überprüft (Timeouts, DSL Disconnects etc.).&lt;br /&gt;
:Setze es nicht über 10 Sekunden, die Verbindung kann sonst die ganze Zeit getrennt werden, Sie wird zwar wieder aufgebaut, aber nach 10 Sekunden brechen die meisten Server die Verbindung automatisch ab.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*RecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Nur wenn die Jabber-ID einer privaten empfangenen Nachricht auf diese Regex zutrifft, akzeptiert FHEM die Nachricht und gibt sie an Notifys weiter. Alles andere wird verworfen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*&amp;lt;code&amp;gt;myname@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*&amp;lt;code&amp;gt;(myname1@jabber.org|myname2@xmpp.de)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucJoin&lt;br /&gt;
:Tritt dem MUC mit dem spezifizierten Nickname und dem optionalem Passwort bei.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Einen Raum betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Mehrere Räume betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick,channel2@server.com/myothernick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Einen Raum mit Passwort betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick:password&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucRecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Selbe funktion wie RecvWhitelist, aber für Gruppenräume: Nur wenn die Regex zutrifft, wird die Nachricht verarbeitet. Alles andere wird ignoriert.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (keine Nachricht wird akzeptiert)&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Alle Nachrichten aller betretenen Räume erlauben: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Alle Nachrichten bestimmter betretenen Räume erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Nur bestimmte User in bestimmten betretenen Räumen erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org/NickOfFriend&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*OTREnable 1|0&lt;br /&gt;
:Schaltet die Verschlüsselungsfunktionen von Crypt::OTR für sichere Ende-zu-Ende Kummunikation in FHEM an oder aus.&lt;br /&gt;
:Es muss zwangsläufig dafür Crypt::OTR installiert sein.&lt;br /&gt;
:Ein Privater Schlüssel wird bei Erstbenutzung generiert, das kann mehr als 2 Stunden dauern! Dafür ist das eine einmalige Sache und FHEM wird dadurch nicht blockiert. Im Device sieht man im OTR_STATE wenn der Private Schlüssel fertig ist. Erst danach ist OTR aktiv.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (OTR deaktiviert)&lt;br /&gt;
&lt;br /&gt;
;*OTRSharedSecret aSecretKeyiOnlyKnow@@*&lt;br /&gt;
:Optionales geheimes Passwort, dass man vom Endgerät an FHEM schicken kann um zu beweisen, dass es sich tatsächlich um FHEM handelt und nicht um einen Hacker der sich (z.b. bei dem Internetprovider) zwischengeschaltet hat. Normalerweise bekommt das Endgerät eine Warnung wenn sich an einer bereits verifizierten Verbindung etwas geändert hat.&lt;br /&gt;
:Diese Warnung sollte man dann sehr ernst nehmen.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert, setze hier dein geheimes Passwort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generierte Readings/Events===&lt;br /&gt;
&lt;br /&gt;
*Privat Nachrichten&lt;br /&gt;
**Message - Komplette Nachricht inkl. JID und Text&lt;br /&gt;
**LastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**LastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*Verschlüsselte Private Nachrichten (wenn OTREnable=1)&lt;br /&gt;
**OTRMessage - Komplette entschlüsselte Nachricht inkl. JID und Text&lt;br /&gt;
**OTRLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**OTRLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*MUC Raum Nachrichten (wenn MUCJoin gesetzt ist)&lt;br /&gt;
**MucMessage - Komplette Nachricht (Raumname/Nickname und Text)&lt;br /&gt;
**MucLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**MucLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.&lt;br /&gt;
&lt;br /&gt;
Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:&lt;br /&gt;
*XML::Stream 1.23&lt;br /&gt;
*Net::XMPP 1.02&lt;br /&gt;
&lt;br /&gt;
Seine Modulversionen kann mit mit diesen Kommandos überprüfen, dabei auf den &amp;quot;Installed:&amp;quot; Eintrag achten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan -D XML::Stream&lt;br /&gt;
cpan -D Net::XMPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.&lt;br /&gt;
&lt;br /&gt;
Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get remove libnet-xmpp-perl&lt;br /&gt;
apt-get remove libxml-stream-perl&lt;br /&gt;
apt-get remove libotr5 libotr5-dev&lt;br /&gt;
&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
apt-get install libnet-jabber-perl&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für OTR ist noch folgendes notwendig (64bit Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install libgpg-error-dev&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OTR bei 32 bit (Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install libgpg-error-dev&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer keine Stunden auf die Keygenerierung warten will, kann noch das Programm &amp;quot;haveged&amp;quot; installieren, das kümmert sich um die entrophy generation, die OTR dringend braucht für seinen Privaten Schlüssel:&lt;br /&gt;
* haveged&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install haveged&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading &amp;quot;Temperatur&amp;quot; des Sensors &amp;quot;BU_Temperatur&amp;quot; bei jeder ankommenden Nachricht an den Sender zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:Message.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msg &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:MucMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgmuc &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:OTRMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgotr &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele und HowTos im Wiki==&lt;br /&gt;
*[[FHEM_spricht_jabber]]&lt;br /&gt;
*[[Prosody|Installieren eines eigenen XMPP-Servers]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP]&lt;br /&gt;
*[https://jabber.org jabber.org]&lt;br /&gt;
*[https://prosody.im/ Prosody Jabber Server]&lt;br /&gt;
*[https://pidgin.im/ pidgin Jabber Client]&lt;/div&gt;</summary>
		<author><name>BioS</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21667</id>
		<title>Jabber</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21667"/>
		<updated>2017-06-03T20:31:26Z</updated>

		<summary type="html">&lt;p&gt;BioS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|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.&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=18967&lt;br /&gt;
|ModTechName=70_Jabber.pm&lt;br /&gt;
|ModOwner=BioS ({{Link2FU|2021|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[Jabber]] ist eine andere Beschreibung für &amp;quot;XMPP&amp;quot;, ein Kommunikationsprotokoll für Nachrichtenorientierte &amp;quot;middleware&amp;quot;, basierend auf XML.&lt;br /&gt;
Fester bestandteil des Protokolls ist die Verschlüsselung zwischen Client und Server.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server müssen folgende Perl-Module installiert sein:&lt;br /&gt;
*Net::Jabber&lt;br /&gt;
*Net::XMPP&lt;br /&gt;
*Authen::SASL&lt;br /&gt;
*XML::Stream&lt;br /&gt;
*Net::SSLeay&lt;br /&gt;
*Crypt::OTR (wenn OTR verwendet werden soll)&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
===define===&lt;br /&gt;
&lt;br /&gt;
;*define &amp;lt;name&amp;gt; Jabber &amp;lt;server&amp;gt; &amp;lt;port&amp;gt; &amp;lt;username&amp;gt; &amp;lt;password&amp;gt; &amp;lt;TLS&amp;gt; &amp;lt;SSL&amp;gt;&lt;br /&gt;
:Du benötigst natürlich echte Accountdaten.&lt;br /&gt;
&lt;br /&gt;
;Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msg &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an den Jabberuser &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msg myname@jabber.org It is working!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgmuc &amp;lt;channel&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an dieJabber-MUC-Gruppe &#039;&#039;&#039;&#039;&#039;channel&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:Dabei wird ein eventuell mitgegebener Nickname von &amp;quot;channel&amp;quot; entfernt, so kann man direkt das Reading LastMessageJID benutzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgmuc roomname@jabber.org Woot!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgotr &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine OTR verschlüsselte Nachricht an den &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;. Wenn keine aktive OTR Sitzung aufgebaut ist, wird versucht eine aufzubauen.&lt;br /&gt;
:Wenn der Empfänger OTR nicht versteht, wird die Nachricht verworfen, d.h. sie wird auf keinen Fall im Klartext übertragen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; subscribe &amp;lt;username&amp;gt;&lt;br /&gt;
:Frägt eine Authorisierung beim &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039; an (normalerweise wird das nicht benötigt)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 subscribe myname@jabber.org&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
;*OnlineStatus available|unavailable&lt;br /&gt;
:Setzt den Online-status, ob der Client anderen gegenüber Online ist (available) oder Offline erscheint (unavailable)&lt;br /&gt;
:Es ist möglich dass einige Server eingehende Nachrichten trotzdem FHEM zustellen obwohl er &amp;quot;unavailable&amp;quot; ist&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*ResourceName &amp;lt;name&amp;gt;&lt;br /&gt;
:In der Jabber-Welt kann ein Client mit einem Usernamen öfter mit einem Server verbunden sein (z.b. Handy, Computer, FHEM).&lt;br /&gt;
:Der &#039;&#039;&#039;resource name&#039;&#039;&#039; ergibt die finale Jabber-ID und macht die verschiedenen Verbindungen einzigartig (z.B. bios@jabber.org/FHEM).&lt;br /&gt;
:Hier kannst du den &#039;&#039;&#039;resource name&#039;&#039;&#039; setzen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;FHEM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*PollTimer &amp;lt;&#039;&#039;seconds&#039;&#039;&amp;gt;&lt;br /&gt;
:Dies ist der Intervall in der überprüft wird ob neue Nachrichten zur Verarbeitung beim Jabber Server anstehen.&lt;br /&gt;
:Ebenfalls wird hiermit die Verbindung zum Server überprüft (Timeouts, DSL Disconnects etc.).&lt;br /&gt;
:Setze es nicht über 10 Sekunden, die Verbindung kann sonst die ganze Zeit getrennt werden, Sie wird zwar wieder aufgebaut, aber nach 10 Sekunden brechen die meisten Server die Verbindung automatisch ab.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*RecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Nur wenn die Jabber-ID einer privaten empfangenen Nachricht auf diese Regex zutrifft, akzeptiert FHEM die Nachricht und gibt sie an Notifys weiter. Alles andere wird verworfen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*&amp;lt;code&amp;gt;myname@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*&amp;lt;code&amp;gt;(myname1@jabber.org|myname2@xmpp.de)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucJoin&lt;br /&gt;
:Tritt dem MUC mit dem spezifizierten Nickname und dem optionalem Passwort bei.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Einen Raum betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Mehrere Räume betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick,channel2@server.com/myothernick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Einen Raum mit Passwort betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick:password&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucRecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Selbe funktion wie RecvWhitelist, aber für Gruppenräume: Nur wenn die Regex zutrifft, wird die Nachricht verarbeitet. Alles andere wird ignoriert.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (keine Nachricht wird akzeptiert)&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Alle Nachrichten aller betretenen Räume erlauben: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Alle Nachrichten bestimmter betretenen Räume erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Nur bestimmte User in bestimmten betretenen Räumen erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org/NickOfFriend&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*OTREnable 1|0&lt;br /&gt;
:Schaltet die Verschlüsselungsfunktionen von Crypt::OTR für sichere Ende-zu-Ende Kummunikation in FHEM an oder aus.&lt;br /&gt;
:Es muss zwangsläufig dafür Crypt::OTR installiert sein.&lt;br /&gt;
:Ein Privater Schlüssel wird bei Erstbenutzung generiert, das kann mehr als 2 Stunden dauern! Dafür ist das eine einmalige Sache und FHEM wird dadurch nicht blockiert. Im Device sieht man im OTR_STATE wenn der Private Schlüssel fertig ist. Erst danach ist OTR aktiv.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (OTR deaktiviert)&lt;br /&gt;
&lt;br /&gt;
;*OTRSharedSecret aSecretKeyiOnlyKnow@@*&lt;br /&gt;
:Optionales geheimes Passwort, dass man vom Endgerät an FHEM schicken kann um zu beweisen, dass es sich tatsächlich um FHEM handelt und nicht um einen Hacker der sich (z.b. bei dem Internetprovider) zwischengeschaltet hat. Normalerweise bekommt das Endgerät eine Warnung wenn sich an einer bereits verifizierten Verbindung etwas geändert hat.&lt;br /&gt;
:Diese Warnung sollte man dann sehr ernst nehmen.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert, setze hier dein geheimes Passwort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generierte Readings/Events===&lt;br /&gt;
&lt;br /&gt;
*Privat Nachrichten&lt;br /&gt;
**Message - Komplette Nachricht inkl. JID und Text&lt;br /&gt;
**LastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**LastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*Verschlüsselte Private Nachrichten (wenn OTREnable=1)&lt;br /&gt;
**OTRMessage - Komplette entschlüsselte Nachricht inkl. JID und Text&lt;br /&gt;
**OTRLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**OTRLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*MUC Raum Nachrichten (wenn MUCJoin gesetzt ist)&lt;br /&gt;
**MucMessage - Komplette Nachricht (Raumname/Nickname und Text)&lt;br /&gt;
**MucLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**MucLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.&lt;br /&gt;
&lt;br /&gt;
Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:&lt;br /&gt;
*XML::Stream 1.23&lt;br /&gt;
*Net::XMPP 1.02&lt;br /&gt;
&lt;br /&gt;
Seine Modulversionen kann mit mit diesen Kommandos überprüfen, dabei auf den &amp;quot;Installed:&amp;quot; Eintrag achten:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan -D XML::Stream&lt;br /&gt;
cpan -D Net::XMPP&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.&lt;br /&gt;
&lt;br /&gt;
Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get remove libnet-xmpp-perl&lt;br /&gt;
apt-get remove libxml-stream-perl&lt;br /&gt;
apt-get remove libotr5 libotr5-dev&lt;br /&gt;
&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
apt-get install libnet-jabber-perl&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für OTR ist noch folgendes notwendig (64bit Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OTR bei 32 bit (Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer keine Stunden auf die Keygenerierung warten will, kann noch das Programm &amp;quot;haveged&amp;quot; installieren, das kümmert sich um die entrophy generation, die OTR dringend braucht für seinen Privaten Schlüssel:&lt;br /&gt;
* haveged&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install haveged&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading &amp;quot;Temperatur&amp;quot; des Sensors &amp;quot;BU_Temperatur&amp;quot; bei jeder ankommenden Nachricht an den Sender zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:Message.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msg &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:MucMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgmuc &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:OTRMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgotr &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele und HowTos im Wiki==&lt;br /&gt;
*[[FHEM_spricht_jabber]]&lt;br /&gt;
*[[Prosody|Installieren eines eigenen XMPP-Servers]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP]&lt;br /&gt;
*[https://jabber.org jabber.org]&lt;br /&gt;
*[https://prosody.im/ Prosody Jabber Server]&lt;br /&gt;
*[https://pidgin.im/ pidgin Jabber Client]&lt;/div&gt;</summary>
		<author><name>BioS</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21664</id>
		<title>Jabber</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21664"/>
		<updated>2017-06-03T20:12:48Z</updated>

		<summary type="html">&lt;p&gt;BioS: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|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.&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=18967&lt;br /&gt;
|ModTechName=70_Jabber.pm&lt;br /&gt;
|ModOwner=BioS ({{Link2FU|2021|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[Jabber]] ist eine andere Beschreibung für &amp;quot;XMPP&amp;quot;, ein Kommunikationsprotokoll für Nachrichtenorientierte &amp;quot;middleware&amp;quot;, basierend auf XML.&lt;br /&gt;
Fester bestandteil des Protokolls ist die Verschlüsselung zwischen Client und Server.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server müssen folgende Perl-Module installiert sein:&lt;br /&gt;
*Net::Jabber&lt;br /&gt;
*Net::XMPP&lt;br /&gt;
*Authen::SASL&lt;br /&gt;
*XML::Stream&lt;br /&gt;
*Net::SSLeay&lt;br /&gt;
*Crypt::OTR (wenn OTR verwendet werden soll)&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
===define===&lt;br /&gt;
&lt;br /&gt;
;*define &amp;lt;name&amp;gt; Jabber &amp;lt;server&amp;gt; &amp;lt;port&amp;gt; &amp;lt;username&amp;gt; &amp;lt;password&amp;gt; &amp;lt;TLS&amp;gt; &amp;lt;SSL&amp;gt;&lt;br /&gt;
:Du benötigst natürlich echte Accountdaten.&lt;br /&gt;
&lt;br /&gt;
;Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msg &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an den Jabberuser &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msg myname@jabber.org It is working!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgmuc &amp;lt;channel&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an dieJabber-MUC-Gruppe &#039;&#039;&#039;&#039;&#039;channel&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:Dabei wird ein eventuell mitgegebener Nickname von &amp;quot;channel&amp;quot; entfernt, so kann man direkt das Reading LastMessageJID benutzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgmuc roomname@jabber.org Woot!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgotr &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine OTR verschlüsselte Nachricht an den &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;. Wenn keine aktive OTR Sitzung aufgebaut ist, wird versucht eine aufzubauen.&lt;br /&gt;
:Wenn der Empfänger OTR nicht versteht, wird die Nachricht verworfen, d.h. sie wird auf keinen Fall im Klartext übertragen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; subscribe &amp;lt;username&amp;gt;&lt;br /&gt;
:Frägt eine Authorisierung beim &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039; an (normalerweise wird das nicht benötigt)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 subscribe myname@jabber.org&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
;*OnlineStatus available|unavailable&lt;br /&gt;
:Setzt den Online-status, ob der Client anderen gegenüber Online ist (available) oder Offline erscheint (unavailable)&lt;br /&gt;
:Es ist möglich dass einige Server eingehende Nachrichten trotzdem FHEM zustellen obwohl er &amp;quot;unavailable&amp;quot; ist&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*ResourceName &amp;lt;name&amp;gt;&lt;br /&gt;
:In der Jabber-Welt kann ein Client mit einem Usernamen öfter mit einem Server verbunden sein (z.b. Handy, Computer, FHEM).&lt;br /&gt;
:Der &#039;&#039;&#039;resource name&#039;&#039;&#039; ergibt die finale Jabber-ID und macht die verschiedenen Verbindungen einzigartig (z.B. bios@jabber.org/FHEM).&lt;br /&gt;
:Hier kannst du den &#039;&#039;&#039;resource name&#039;&#039;&#039; setzen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;FHEM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*PollTimer &amp;lt;&#039;&#039;seconds&#039;&#039;&amp;gt;&lt;br /&gt;
:Dies ist der Intervall in der überprüft wird ob neue Nachrichten zur Verarbeitung beim Jabber Server anstehen.&lt;br /&gt;
:Ebenfalls wird hiermit die Verbindung zum Server überprüft (Timeouts, DSL Disconnects etc.).&lt;br /&gt;
:Setze es nicht über 10 Sekunden, die Verbindung kann sonst die ganze Zeit getrennt werden, Sie wird zwar wieder aufgebaut, aber nach 10 Sekunden brechen die meisten Server die Verbindung automatisch ab.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*RecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Nur wenn die Jabber-ID einer privaten empfangenen Nachricht auf diese Regex zutrifft, akzeptiert FHEM die Nachricht und gibt sie an Notifys weiter. Alles andere wird verworfen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*&amp;lt;code&amp;gt;myname@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*&amp;lt;code&amp;gt;(myname1@jabber.org|myname2@xmpp.de)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucJoin&lt;br /&gt;
:Tritt dem MUC mit dem spezifizierten Nickname und dem optionalem Passwort bei.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Einen Raum betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Mehrere Räume betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick,channel2@server.com/myothernick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Einen Raum mit Passwort betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick:password&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucRecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Selbe funktion wie RecvWhitelist, aber für Gruppenräume: Nur wenn die Regex zutrifft, wird die Nachricht verarbeitet. Alles andere wird ignoriert.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (keine Nachricht wird akzeptiert)&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Alle Nachrichten aller betretenen Räume erlauben: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Alle Nachrichten bestimmter betretenen Räume erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Nur bestimmte User in bestimmten betretenen Räumen erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org/NickOfFriend&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*OTREnable 1|0&lt;br /&gt;
:Schaltet die Verschlüsselungsfunktionen von Crypt::OTR für sichere Ende-zu-Ende Kummunikation in FHEM an oder aus.&lt;br /&gt;
:Es muss zwangsläufig dafür Crypt::OTR installiert sein.&lt;br /&gt;
:Ein Privater Schlüssel wird bei Erstbenutzung generiert, das kann mehr als 2 Stunden dauern! Dafür ist das eine einmalige Sache und FHEM wird dadurch nicht blockiert. Im Device sieht man im OTR_STATE wenn der Private Schlüssel fertig ist. Erst danach ist OTR aktiv.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (OTR deaktiviert)&lt;br /&gt;
&lt;br /&gt;
;*OTRSharedSecret aSecretKeyiOnlyKnow@@*&lt;br /&gt;
:Optionales geheimes Passwort, dass man vom Endgerät an FHEM schicken kann um zu beweisen, dass es sich tatsächlich um FHEM handelt und nicht um einen Hacker der sich (z.b. bei dem Internetprovider) zwischengeschaltet hat. Normalerweise bekommt das Endgerät eine Warnung wenn sich an einer bereits verifizierten Verbindung etwas geändert hat.&lt;br /&gt;
:Diese Warnung sollte man dann sehr ernst nehmen.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert, setze hier dein geheimes Passwort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generierte Readings/Events===&lt;br /&gt;
&lt;br /&gt;
*Privat Nachrichten&lt;br /&gt;
**Message - Komplette Nachricht inkl. JID und Text&lt;br /&gt;
**LastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**LastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*Verschlüsselte Private Nachrichten (wenn OTREnable=1)&lt;br /&gt;
**OTRMessage - Komplette entschlüsselte Nachricht inkl. JID und Text&lt;br /&gt;
**OTRLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**OTRLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*MUC Raum Nachrichten (wenn MUCJoin gesetzt ist)&lt;br /&gt;
**MucMessage - Komplette Nachricht (Raumname/Nickname und Text)&lt;br /&gt;
**MucLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**MucLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.&lt;br /&gt;
&lt;br /&gt;
Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:&lt;br /&gt;
*XML::Stream 1.23&lt;br /&gt;
*Net::XMPP 1.02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.&lt;br /&gt;
&lt;br /&gt;
Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get remove libnet-xmpp-perl&lt;br /&gt;
apt-get remove libxml-stream-perl&lt;br /&gt;
apt-get remove libotr5 libotr5-dev&lt;br /&gt;
&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
apt-get install libnet-jabber-perl&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für OTR ist noch folgendes notwendig (64bit Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OTR bei 32 bit (Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wer keine Stunden auf die Keygenerierung warten will, kann noch das Programm &amp;quot;haveged&amp;quot; installieren, das kümmert sich um die entrophy generation, die OTR dringend braucht für seinen Privaten Schlüssel:&lt;br /&gt;
* haveged&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get install haveged&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading &amp;quot;Temperatur&amp;quot; des Sensors &amp;quot;BU_Temperatur&amp;quot; bei jeder ankommenden Nachricht an den Sender zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:Message.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msg &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:MucMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgmuc &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:OTRMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgotr &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele und HowTos im Wiki==&lt;br /&gt;
*[[FHEM_spricht_jabber]]&lt;br /&gt;
*[[Prosody|Installieren eines eigenen XMPP-Servers]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP]&lt;br /&gt;
*[https://jabber.org jabber.org]&lt;br /&gt;
*[https://prosody.im/ Prosody Jabber Server]&lt;br /&gt;
*[https://pidgin.im/ pidgin Jabber Client]&lt;/div&gt;</summary>
		<author><name>BioS</name></author>
	</entry>
	<entry>
		<id>http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21663</id>
		<title>Jabber</title>
		<link rel="alternate" type="text/html" href="http://wiki.fhem.de/w/index.php?title=Jabber&amp;diff=21663"/>
		<updated>2017-06-03T20:04:23Z</updated>

		<summary type="html">&lt;p&gt;BioS: Installationsinfos zu neueren Linux Systemen hinzugefügt&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Modul&lt;br /&gt;
|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.&lt;br /&gt;
|ModType=d&lt;br /&gt;
|ModCmdRef= &lt;br /&gt;
|ModForumArea=Unterstuetzende Dienste&lt;br /&gt;
|ModFTopic=18967&lt;br /&gt;
|ModTechName=70_Jabber.pm&lt;br /&gt;
|ModOwner=BioS ({{Link2FU|2021|Forum}})&lt;br /&gt;
}}&lt;br /&gt;
[[Jabber]] ist eine andere Beschreibung für &amp;quot;XMPP&amp;quot;, ein Kommunikationsprotokoll für Nachrichtenorientierte &amp;quot;middleware&amp;quot;, basierend auf XML.&lt;br /&gt;
Fester bestandteil des Protokolls ist die Verschlüsselung zwischen Client und Server.&lt;br /&gt;
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).&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
==Voraussetzungen==&lt;br /&gt;
Für dieses Modul brauchst du einen Account auf einem Jabber Server. Kostenlose Accounts und Server findet man unter [https://jabber.org jabber.org]&lt;br /&gt;
&lt;br /&gt;
Auf dem FHEM-Server müssen folgende Perl-Module installiert sein:&lt;br /&gt;
*Net::Jabber&lt;br /&gt;
*Net::XMPP&lt;br /&gt;
*Authen::SASL&lt;br /&gt;
*XML::Stream&lt;br /&gt;
*Net::SSLeay&lt;br /&gt;
*Crypt::OTR (wenn OTR verwendet werden soll)&lt;br /&gt;
&lt;br /&gt;
==Definition==&lt;br /&gt;
===define===&lt;br /&gt;
&lt;br /&gt;
;*define &amp;lt;name&amp;gt; Jabber &amp;lt;server&amp;gt; &amp;lt;port&amp;gt; &amp;lt;username&amp;gt; &amp;lt;password&amp;gt; &amp;lt;TLS&amp;gt; &amp;lt;SSL&amp;gt;&lt;br /&gt;
:Du benötigst natürlich echte Accountdaten.&lt;br /&gt;
&lt;br /&gt;
;Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===set===&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msg &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an den Jabberuser &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msg myname@jabber.org It is working!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgmuc &amp;lt;channel&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine Nachricht &#039;&#039;&#039;&#039;&#039;msg&#039;&#039;&#039;&#039;&#039; an dieJabber-MUC-Gruppe &#039;&#039;&#039;&#039;&#039;channel&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
:Dabei wird ein eventuell mitgegebener Nickname von &amp;quot;channel&amp;quot; entfernt, so kann man direkt das Reading LastMessageJID benutzen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgmuc roomname@jabber.org Woot!&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; msgotr &amp;lt;username&amp;gt; &amp;lt;msg&amp;gt;&lt;br /&gt;
:Sendet eine OTR verschlüsselte Nachricht an den &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039;. Wenn keine aktive OTR Sitzung aufgebaut ist, wird versucht eine aufzubauen.&lt;br /&gt;
:Wenn der Empfänger OTR nicht versteht, wird die Nachricht verworfen, d.h. sie wird auf keinen Fall im Klartext übertragen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 msgotr myname@jabber.org Wir sehen uns heute um 18:00 Uhr :*&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;*set &amp;lt;name&amp;gt; subscribe &amp;lt;username&amp;gt;&lt;br /&gt;
:Frägt eine Authorisierung beim &#039;&#039;&#039;&#039;&#039;username&#039;&#039;&#039;&#039;&#039; an (normalerweise wird das nicht benötigt)&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;set JabberClient1 subscribe myname@jabber.org&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Attribute===&lt;br /&gt;
&lt;br /&gt;
;*OnlineStatus available|unavailable&lt;br /&gt;
:Setzt den Online-status, ob der Client anderen gegenüber Online ist (available) oder Offline erscheint (unavailable)&lt;br /&gt;
:Es ist möglich dass einige Server eingehende Nachrichten trotzdem FHEM zustellen obwohl er &amp;quot;unavailable&amp;quot; ist&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;available&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*ResourceName &amp;lt;name&amp;gt;&lt;br /&gt;
:In der Jabber-Welt kann ein Client mit einem Usernamen öfter mit einem Server verbunden sein (z.b. Handy, Computer, FHEM).&lt;br /&gt;
:Der &#039;&#039;&#039;resource name&#039;&#039;&#039; ergibt die finale Jabber-ID und macht die verschiedenen Verbindungen einzigartig (z.B. bios@jabber.org/FHEM).&lt;br /&gt;
:Hier kannst du den &#039;&#039;&#039;resource name&#039;&#039;&#039; setzen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;FHEM&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*PollTimer &amp;lt;&#039;&#039;seconds&#039;&#039;&amp;gt;&lt;br /&gt;
:Dies ist der Intervall in der überprüft wird ob neue Nachrichten zur Verarbeitung beim Jabber Server anstehen.&lt;br /&gt;
:Ebenfalls wird hiermit die Verbindung zum Server überprüft (Timeouts, DSL Disconnects etc.).&lt;br /&gt;
:Setze es nicht über 10 Sekunden, die Verbindung kann sonst die ganze Zeit getrennt werden, Sie wird zwar wieder aufgebaut, aber nach 10 Sekunden brechen die meisten Server die Verbindung automatisch ab.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*RecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Nur wenn die Jabber-ID einer privaten empfangenen Nachricht auf diese Regex zutrifft, akzeptiert FHEM die Nachricht und gibt sie an Notifys weiter. Alles andere wird verworfen.&lt;br /&gt;
&lt;br /&gt;
:Standard: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*&amp;lt;code&amp;gt;myname@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*&amp;lt;code&amp;gt;(myname1@jabber.org|myname2@xmpp.de)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucJoin&lt;br /&gt;
:Tritt dem MUC mit dem spezifizierten Nickname und dem optionalem Passwort bei.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Einen Raum betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Mehrere Räume betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick,channel2@server.com/myothernick&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Einen Raum mit Passwort betreten: &amp;lt;code&amp;gt;channel1@server.com/mynick:password&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*MucRecvWhitelist &amp;lt;Regex&amp;gt;&lt;br /&gt;
:Selbe funktion wie RecvWhitelist, aber für Gruppenräume: Nur wenn die Regex zutrifft, wird die Nachricht verarbeitet. Alles andere wird ignoriert.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (keine Nachricht wird akzeptiert)&lt;br /&gt;
&lt;br /&gt;
:Beispiele:&lt;br /&gt;
:*Alle Nachrichten aller betretenen Räume erlauben: &amp;lt;code&amp;gt;.*&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Alle Nachrichten bestimmter betretenen Räume erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org&amp;lt;/code&amp;gt;&lt;br /&gt;
:*Nur bestimmte User in bestimmten betretenen Räumen erlauben: &amp;lt;code&amp;gt;mychannel@jabber.org/NickOfFriend&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;*OTREnable 1|0&lt;br /&gt;
:Schaltet die Verschlüsselungsfunktionen von Crypt::OTR für sichere Ende-zu-Ende Kummunikation in FHEM an oder aus.&lt;br /&gt;
:Es muss zwangsläufig dafür Crypt::OTR installiert sein.&lt;br /&gt;
:Ein Privater Schlüssel wird bei Erstbenutzung generiert, das kann mehr als 2 Stunden dauern! Dafür ist das eine einmalige Sache und FHEM wird dadurch nicht blockiert. Im Device sieht man im OTR_STATE wenn der Private Schlüssel fertig ist. Erst danach ist OTR aktiv.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert (OTR deaktiviert)&lt;br /&gt;
&lt;br /&gt;
;*OTRSharedSecret aSecretKeyiOnlyKnow@@*&lt;br /&gt;
:Optionales geheimes Passwort, dass man vom Endgerät an FHEM schicken kann um zu beweisen, dass es sich tatsächlich um FHEM handelt und nicht um einen Hacker der sich (z.b. bei dem Internetprovider) zwischengeschaltet hat. Normalerweise bekommt das Endgerät eine Warnung wenn sich an einer bereits verifizierten Verbindung etwas geändert hat.&lt;br /&gt;
:Diese Warnung sollte man dann sehr ernst nehmen.&lt;br /&gt;
&lt;br /&gt;
:Standard: nicht definiert, setze hier dein geheimes Passwort.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Generierte Readings/Events===&lt;br /&gt;
&lt;br /&gt;
*Privat Nachrichten&lt;br /&gt;
**Message - Komplette Nachricht inkl. JID und Text&lt;br /&gt;
**LastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**LastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*Verschlüsselte Private Nachrichten (wenn OTREnable=1)&lt;br /&gt;
**OTRMessage - Komplette entschlüsselte Nachricht inkl. JID und Text&lt;br /&gt;
**OTRLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**OTRLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
&lt;br /&gt;
*MUC Raum Nachrichten (wenn MUCJoin gesetzt ist)&lt;br /&gt;
**MucMessage - Komplette Nachricht (Raumname/Nickname und Text)&lt;br /&gt;
**MucLastMessage - Nur der Textteil der Nachricht&lt;br /&gt;
**MucLastSenderJID - Nur die Sender-JID der Nachricht&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Auf aktuellen Systemen gibt es leider Probleme mit den verwendeten XMPP Perl Modulen.&lt;br /&gt;
&lt;br /&gt;
Im speziellen benötigt man zwingend die folgende Perl-Modul Kombination, damit das Jabber Modul richtig funktionieren kann:&lt;br /&gt;
*XML::Stream 1.23&lt;br /&gt;
*Net::XMPP 1.02&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Wenn man OTR benutzen möchte sollte zusätzlich noch das Perl Modul Crypt::OTR installiert sein.&lt;br /&gt;
&lt;br /&gt;
Auf einem frisch installieren Ubuntu 16.04.02 LTS bedeutet das folgende Kommandos:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
apt-get remove libnet-xmpp-perl&lt;br /&gt;
apt-get remove libxml-stream-perl&lt;br /&gt;
apt-get remove libotr5 libotr5-dev&lt;br /&gt;
&lt;br /&gt;
apt-get install build-essential&lt;br /&gt;
apt-get install libnet-jabber-perl&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libn/libnet-xmpp-perl/libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libx/libxml-stream-perl/libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libxml-stream-perl_1.23-2_all.deb&lt;br /&gt;
dpkg -i libnet-xmpp-perl_1.02-3_all.deb&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Für OTR ist noch folgendes notwendig (64bit Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_amd64.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_amd64.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
OTR bei 32 bit (Intel Platform):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cpan install Digest::SHA1&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libo/libotr/libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
wget http://ftp.de.debian.org/debian/pool/main/libg/libgcrypt11/libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libgcrypt11_1.5.0-5+deb7u4_i386.deb&lt;br /&gt;
dpkg -i libotr2_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-bin_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
dpkg -i libotr2-dev_3.2.1-1+deb7u2_i386.deb&lt;br /&gt;
&lt;br /&gt;
cpan&lt;br /&gt;
cpan&amp;gt; notest install Crypt::OTR&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
Mit folgendem [[Notify]]-Beispiel kannst du auf eingehende Nachrichten reagieren, dieses Beispiel schickt das Reading &amp;quot;Temperatur&amp;quot; des Sensors &amp;quot;BU_Temperatur&amp;quot; bei jeder ankommenden Nachricht an den Sender zurück:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:Message.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msg &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:MucMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgmuc &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
            &lt;br /&gt;
&lt;br /&gt;
Auf OTR Nachrichten wird reagiert, wie auf normale private Nachrichten auch, jedoch wird mit der msgotr Funktion geantwortet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;perl&amp;quot;&amp;gt;&lt;br /&gt;
define Jabber_Notify notify JabberClient1:OTRMessage.* {&lt;br /&gt;
      my $lastsender=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastSenderJID&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $lastmsg=ReadingsVal(&amp;quot;JabberClient1&amp;quot;,&amp;quot;LastMessage&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      my $temperature=ReadingsVal(&amp;quot;BU_Temperatur&amp;quot;,&amp;quot;temperature&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
      fhem(&amp;quot;set JabberClient1 msgotr &amp;quot;. $lastsender . &amp;quot; Temp: &amp;quot;.$temperature);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Weitere Beispiele und HowTos im Wiki==&lt;br /&gt;
*[[FHEM_spricht_jabber]]&lt;br /&gt;
*[[Prosody|Installieren eines eigenen XMPP-Servers]]&lt;br /&gt;
&lt;br /&gt;
==Weblinks==&lt;br /&gt;
*[https://de.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol XMPP]&lt;br /&gt;
*[https://jabber.org jabber.org]&lt;br /&gt;
*[https://prosody.im/ Prosody Jabber Server]&lt;br /&gt;
*[https://pidgin.im/ pidgin Jabber Client]&lt;/div&gt;</summary>
		<author><name>BioS</name></author>
	</entry>
</feed>