FHEM - Hausautomations-Systeme > Unterstützende Dienste

Neues Modul: 70_Jabber.pm

(1/60) > >>

BioS:
Hi Gemeinde,

kürzlich, so vor ca. einem halben Jahr, hat mich mein Kollege und FHEM'ler Predictor auf die Idee gebracht ein Jabber bzw. XMPP Modul für FHEM zu entwickeln, also hab ich die letzten eineinhalb Tage meines Urlaubs geopfert ;)

Grund ist dass wir im Jabber recht aktiv sind und es ganz nett ist wenn FHEM an unsre Chat-Accounts Infos schreiben kann - ähnlich wie z.B. mit Pushover.

Per Jabber hat man allerdings nicht nur einen Vorwärts-, sondern auch einen Rückwärtskanal - d.h. ich kann FHEM eine Message schicken und FHEM kann das als notify empfangen und reagieren.


Ihr braucht 2 Jabber Accounts um das zu testen, einen für euch, einen für FHEM.
Wer nicht bei einem offiziellen Jabber Server (siehe jabber.org) suchen möchte darf mir gerne eine PM schreiben, ich hab noch ein paar Testaccounts auf einem privaten Server.

Benötigt wird das perl Modul Net::Jabber damit es funktioniert. Wie man das auf einer FritzBox installiert oder ob das vielleicht schon drauf ist weis ich leider nicht. Da könnte ich die Infos von ein paar Fritz'lern gut gebrauchen.


Ansonsten hier eine kurze Beschreibung:

Define:

--- Code: ---define <name> Jabber <server> <port> <username> <password> <tls> <ssl>
--- Ende Code ---

Beispiel:

--- Code: ---define JabberClient1 Jabber jabber.org 5222 myusername mypassword 1 0
--- Ende Code ---

Damit verbindet sich FHEM schon mit dem Server und setzt sich selbst online.

dann kann man dem User schon Nachrichten schicken und diese sollten im Event-Monitor mit auftauchen.

Selbst kann man Nachrichten, geklaut von Pushover, in dieser Form senden:

--- Code: ---set JabberClient1 msg user@jabber.org meine Nachricht ohne Anführungszeichen
--- Ende Code ---

Über Notify's kann man auf eingehende Nachrichten reagieren.
Weitere Infos über die Attribs und ein Notify Beispiel stehen im Modul als englische Doku zur Verfügung.

Ich stelle euch das Modul hier jetzt mal zum Testen und Spielen zur Verfügung - Ideen, Vorschläge, Verbesserungsvorschläge natürlich erwünscht!
Viel Spaß damit ;)

Update 2014-04-10:
ich hab die File, die im Forum angehängt war gelöscht.
Das Modul lebt ab jetzt im SVN weiter und kommt mit den FHEM Updates entsprechend ;)


Grüße,
BioS

Predictor:
Dauerte etwas, aber hab den Post entdeckt.
Da ich leider gerade etwas unter Wasser bin (wie schon im Multimedia Bereich offenbart) konnte ich bisher nicht schauen wie ich Module auf eine Fritz bekomme.

Ich denke ein kurzer Post im Dev Bereich bringt da viele Antworten.

Ansonsten schon mal THX für die Mühe

mrmarbury:
Hey,

sehr feines Plugin. Leider schmiert fhem immer ab, wenn ich tls durch eine 1 ersetze.
Aktueller workaround: ich habe einen, nicht von außen erreichbaren, unverschlüsselten Port auf dem jabber server angelegt. Nun verbindet er sich und sendet Nachrichten.

Aber auf gesendete Nachrichten antwortet das plugin nicht. Auch nicht mit whitelist auf '.*' gesetzt.
Ich würde gerne z.B. Werte abfragen, z.B. würde ich gerne eine Nachricht ala "set HeizungWz getConfig" absetzen und er soll mir die gesamte config per jabber senden. Geht sowas?
Wenn ja, wie?

Generell aber mal fetten Dank für das Plugin!! So gehen Notifications auch ohne google als man in the middle ;)

Cheers,
Stefan

BioS:
Hi Stefan,

freut mich, dass das Plugin nicht umsonst war :)

zu deinem TLS Problem: Was für einen Jabber Server hast du? Ich benutze bei mir ejabberd und da geht die TLS funktion ohne Probleme.
Vielleicht kannst du mir per PM die Fehlermeldung schicken, wenn das Plugin bei dir abstürzt. Ist bestimmt nur eine SSL/TLS Sache.

Zu deiner anderen Frage mit dem Antworten:
Das Plugin schickt quasi Events die man per notify abfangen kann.
Wenn du ein notify wie folgt definierst, nimmt das Plugin deine Message als FHEM Kommando an und schickt dir den Output:
(Achtung, wenn du RecvWhitelist auf .* hast, kann jeder Jabber User dein FHEM steuern! ;) )

Wenn dein JabberClient "JabberClient" heißt:

--- Code: ---define jabber_test_notify notify JabberClient:Message.* {
  my $lastsender=ReadingsVal("JabberClient","LastSenderJID","0");
  my $lastmsg=ReadingsVal("JabberClient","LastMessage","0");
  my $fhem_output=fhem(ReadingsVal("JabberClient","LastMessage","0"));
  fhem("set JabberClient msg ". $lastsender . " FHEM: ".$fhem_output) ;
}

--- Ende Code ---

Ich habs eben noch getestet, damit kann man dann alles mögliche machen:

--- Code: ---list WohnzimmerLicht
set WohnzimmerLicht off
{ Value('WohnzimmerLicht') }

--- Ende Code ---

Wenn du denkst, dass die Nachrichten nicht ankommen kannst du das im Normalen Event Monitor prüfen, da sollte wie beim Licht schalten auch eine Zeile kommen in der deine Nachricht steht.


Have Phun :)

mrmarbury:
Hi,

cool, dass probiere ich heute oder morgen Abend mal aus.  Das mit der Whitelist ist mir klar.  Wollte nur verdeutlichen, dass es nicht daran liegt, dass meine regex falsch definiert ist ;)

Auf meinem Server läuft auch ejabberd. MIt self signed cert. Wenn ich mir die perl libraries aber so anschaue, dann sollten self signed certs eh automatisch akzeptiert werden. Ich muss wohl noch etwas rumspielen.
Aber da ejabberd und fhem auf dem gleichen BSD laufen, nur in unterschiedlichen jails, habe ich das routing so gebaut, dass nur fhem  über den nicht verschlüsselten port gehen kann. In sofern sollte es so auch erstmal passen.

Umsonst war es definitiv nicht. Da jabber mein Hauptkommunikationsmedium ist, ist eine Integration davon perfekt.

Cheers,
Stefan

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln