Homematic und XMPP/Jabber
Moderator: Co-Administratoren
- BCS2005
- Beiträge: 5
- Registriert: 07.12.2015, 18:06
- Wohnort: Hannover
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Homematic und XMPP/Jabber
Ich möchte an dieser Stelle einmal beschreiben, wie man die Homematic CCU dazu bringt, Nachrichten an einen XMPP/Jabber-Server weiterzuleiten
Nachdem ich tagelang auf der Suche nach einer Lösung für meinen Wunsch war, Nachrichten der CCU an meinen XMPP-Server und an einen darauf registrierten Client zu senden, musste ich mir doch selbst eine Lösung zu diesem Thema einfallen lassen.
Grund für diesen Wunsch war, möglichst alle Dienste nur noch über eigene Server laufen zu lassen und auf Drittanbieter (wie z.B. NMA) zu verzichten. Natürlich funktioniert das Ganze auch mit XMPP-Servern von Drittanbietern (z.B. jabber.org).
Was brauchen wir:
- Homematic CCU
- Installiertes CUxD-Addon
- einen XMPP/Jabber-Server
- ein oder zwei Benutzerzugänge (JID) auf diesem Server
- eine Zeile Script
- aktiviertes mod_post_msg Modul (Prosody) oder mod_http_message (ejabberd) auf dem XMPP/Jabber-Server (Serverbetreiber fragen)
Jetzt geht es los:
Zuerst wird im CUx-Daemon unter dem Punkt "Geräte" ein neues Gerät angelegt.
Hierzu wählt man unter CUxD-Geräte verwalten in der Zeile "CUxD Gerätetyp" den Gerätetyp "System" aus. Unter Funktion stellt man "EXEC" ein. Als Geräte-Icon sollte die "Fernbedienung 19 Tasten" eingestellt sein und unter Control "Taster".
Dann drückt man auf "Gerät auf CCU erzeugen!" und wartet, bis das Gerät angelegt ist.
Jetzt wechselt man zur CCU-WebUI (Homematic-WebUI). Dort geht man zum Geräte-Posteingang und legt das Gerät auch noch an, damit die CCU weiß, daß es mit dem Gerät 'sprechen' soll. Hierbei sollte man sich die Geräteadresse merken (bei mir CUX2801002).
Um nun eine Nachricht an den XMPP-Server zu senden benötigen wir noch im entsprechenden Programm ein Script mit folgendem Inhalt:
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d 'test' ");
Folgende Angaben sind zu ändern:
xmpp-server = Die Adresse des XMPP-Server (also z.B. jabber.org)
empfaenger@xmpp-server = die Empfängeradresse (JID)
absender@xmpp-server:passwort = die Absenderadresse (JID) mit entsprechendem Passwort für den Zugang
'test' = die Nachricht, die verschickt werden soll (die ' ' nicht vergessen)
Fertig!
Nachdem ich tagelang auf der Suche nach einer Lösung für meinen Wunsch war, Nachrichten der CCU an meinen XMPP-Server und an einen darauf registrierten Client zu senden, musste ich mir doch selbst eine Lösung zu diesem Thema einfallen lassen.
Grund für diesen Wunsch war, möglichst alle Dienste nur noch über eigene Server laufen zu lassen und auf Drittanbieter (wie z.B. NMA) zu verzichten. Natürlich funktioniert das Ganze auch mit XMPP-Servern von Drittanbietern (z.B. jabber.org).
Was brauchen wir:
- Homematic CCU
- Installiertes CUxD-Addon
- einen XMPP/Jabber-Server
- ein oder zwei Benutzerzugänge (JID) auf diesem Server
- eine Zeile Script
- aktiviertes mod_post_msg Modul (Prosody) oder mod_http_message (ejabberd) auf dem XMPP/Jabber-Server (Serverbetreiber fragen)
Jetzt geht es los:
Zuerst wird im CUx-Daemon unter dem Punkt "Geräte" ein neues Gerät angelegt.
Hierzu wählt man unter CUxD-Geräte verwalten in der Zeile "CUxD Gerätetyp" den Gerätetyp "System" aus. Unter Funktion stellt man "EXEC" ein. Als Geräte-Icon sollte die "Fernbedienung 19 Tasten" eingestellt sein und unter Control "Taster".
Dann drückt man auf "Gerät auf CCU erzeugen!" und wartet, bis das Gerät angelegt ist.
Jetzt wechselt man zur CCU-WebUI (Homematic-WebUI). Dort geht man zum Geräte-Posteingang und legt das Gerät auch noch an, damit die CCU weiß, daß es mit dem Gerät 'sprechen' soll. Hierbei sollte man sich die Geräteadresse merken (bei mir CUX2801002).
Um nun eine Nachricht an den XMPP-Server zu senden benötigen wir noch im entsprechenden Programm ein Script mit folgendem Inhalt:
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d 'test' ");
Folgende Angaben sind zu ändern:
xmpp-server = Die Adresse des XMPP-Server (also z.B. jabber.org)
empfaenger@xmpp-server = die Empfängeradresse (JID)
absender@xmpp-server:passwort = die Absenderadresse (JID) mit entsprechendem Passwort für den Zugang
'test' = die Nachricht, die verschickt werden soll (die ' ' nicht vergessen)
Fertig!
Zuletzt geändert von BCS2005 am 07.12.2015, 20:02, insgesamt 1-mal geändert.
cacatum non est pictum...
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: Homematic und XMPP/Jabber
Vielen Dank BCS2005. Hat mit deiner Anleitung super funktioniert.
Ich verwende Debian 8 mit Prosody und das "mod_post_msg" Modul.
Würde sich hier auch der Wert einer Variable übergeben lassen? So wie bei Telegram?
Besten Dank im Voraus
kafisc
Ich verwende Debian 8 mit Prosody und das "mod_post_msg" Modul.
Würde sich hier auch der Wert einer Variable übergeben lassen? So wie bei Telegram?
Besten Dank im Voraus
kafisc
- BCS2005
- Beiträge: 5
- Registriert: 07.12.2015, 18:06
- Wohnort: Hannover
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Homematic und XMPP/Jabber
Hallo Kafisc,
ja, das geht.
Hier ein Beispiel für eine Systemvariable "Außentemperatur":
var xyaussen = dom.GetObject("Außentemperatur").State();
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d '" # xyaussen #"'");
Ich hoffe Dir damit geholfen zu haben.
ja, das geht.
Hier ein Beispiel für eine Systemvariable "Außentemperatur":
var xyaussen = dom.GetObject("Außentemperatur").State();
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d '" # xyaussen #"'");
Ich hoffe Dir damit geholfen zu haben.
cacatum non est pictum...
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: Homematic und XMPP/Jabber
Hallo BCS2005,
besten Dank. Das ist genau was ich gesucht habe. Funktioniert 1A. Ich habe aktuell noch Probleme mit Umlauten.
Hast du zufällig eine Idee, wie der ich den folgenden Fehler beheben kann (siehe Anhang)?
Beste Grüße & vielen Dank im Voraus
kafisc
besten Dank. Das ist genau was ich gesucht habe. Funktioniert 1A. Ich habe aktuell noch Probleme mit Umlauten.
Hast du zufällig eine Idee, wie der ich den folgenden Fehler beheben kann (siehe Anhang)?
Beste Grüße & vielen Dank im Voraus
kafisc
- BCS2005
- Beiträge: 5
- Registriert: 07.12.2015, 18:06
- Wohnort: Hannover
- Danksagung erhalten: 1 Mal
- Kontaktdaten:
Re: Homematic und XMPP/Jabber
Hallo Kafisc,
das Problem konnte ich auch noch nicht (ohne größeren Aufwand) lösen.
Grund für die Nichtdarstellung der Umlaute ist Curl. Leider kann man dort auch keinen Zeichensatz (mit charset) übergeben. Curl selbst nutzt scheinbar nur die UTF-8-Codierung. Dort sind Umlaute anders codiert als in einer ISO-Codierung. Ich habe mir damit geholfen, daß ich alle Meldungen statt mit ÄÖÜ mit AE, OE und UE ausgebe.
Schöne Grüße....
BCS2005
P.S.: Solltest Du noch einen XMPP-Server suchen, um Deine Meldungen zu versenden, kannst Du gern meinen nutzen. Zu finden unter: http://bcs2005.net/
Kannst Dir dort direkt aus Conversations oder jedem anderen Programm einen JID anlegen.
Habe dort auch verschiedene Transports angelegt (z.B. zu ICQ & AIM).
das Problem konnte ich auch noch nicht (ohne größeren Aufwand) lösen.
Grund für die Nichtdarstellung der Umlaute ist Curl. Leider kann man dort auch keinen Zeichensatz (mit charset) übergeben. Curl selbst nutzt scheinbar nur die UTF-8-Codierung. Dort sind Umlaute anders codiert als in einer ISO-Codierung. Ich habe mir damit geholfen, daß ich alle Meldungen statt mit ÄÖÜ mit AE, OE und UE ausgebe.
Schöne Grüße....
BCS2005
P.S.: Solltest Du noch einen XMPP-Server suchen, um Deine Meldungen zu versenden, kannst Du gern meinen nutzen. Zu finden unter: http://bcs2005.net/
Kannst Dir dort direkt aus Conversations oder jedem anderen Programm einen JID anlegen.
Habe dort auch verschiedene Transports angelegt (z.B. zu ICQ & AIM).
Zuletzt geändert von BCS2005 am 17.11.2016, 06:44, insgesamt 2-mal geändert.
cacatum non est pictum...
-
- Beiträge: 131
- Registriert: 08.09.2015, 15:14
- Hat sich bedankt: 18 Mal
- Danksagung erhalten: 4 Mal
Re: Homematic und XMPP/Jabber
Hallo BCS2005,
vielen Dank für Rückmeldung und das Angebot. Ich habe bereits selbst Prosody auf einer viertuellen Maschine laufen.
Für's Erste reicht mir das. Eine Idee wäre evtl. den curl-Aufruf in ein tcl- oder sh-Skript zu packen (zu kapseln). Die Idee habe ich zufällig in einem anderen Beitrag aufgeschnappt.
Viele Grüße
kafisc
vielen Dank für Rückmeldung und das Angebot. Ich habe bereits selbst Prosody auf einer viertuellen Maschine laufen.
Für's Erste reicht mir das. Eine Idee wäre evtl. den curl-Aufruf in ein tcl- oder sh-Skript zu packen (zu kapseln). Die Idee habe ich zufällig in einem anderen Beitrag aufgeschnappt.
Viele Grüße
kafisc
Re: Homematic und XMPP/Jabber
Bitte gestattet mir eine Anfängerfrage, vermutlich trivial.
Ich bin bis zum Code gekommen:
und danach sehe ich:
Nun geht es um den angepassten Code:
Die Anpassung ist klar, aber wie teste ich in einem einfachen Beispiel ob es funktioniert?
Zur Verfügung steht zB ein Fenstersenso zum testen,
Testszenario:
Fenster offen, sende an jabber-Adresse1, wenn zu and Adresse2.
Muss ich da beim Web-UI der ccu3 unter Programme und Verknüpfungen was anlegen?
Ich bin bis zum Code gekommen:
und danach sehe ich:
Nun geht es um den angepassten Code:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d 'test' ");
Zur Verfügung steht zB ein Fenstersenso zum testen,
Testszenario:
Fenster offen, sende an jabber-Adresse1, wenn zu and Adresse2.
Muss ich da beim Web-UI der ccu3 unter Programme und Verknüpfungen was anlegen?
-
- Beiträge: 2393
- Registriert: 19.09.2012, 10:53
- System: CCU
- Wohnort: Jottweedee
- Hat sich bedankt: 251 Mal
- Danksagung erhalten: 352 Mal
Re: Homematic und XMPP/Jabber
Unter "Programme und Verknüpfungen" gibt es unten den Button "Skript testen". Dort dein Skript eintragen und auf "Ausführen" klicken. Dann siehst du ob das Skript manuell ausgeführt richtig funktioniert.Die Anpassung ist klar, aber wie teste ich in einem einfachen Beispiel ob es funktioniert?
Es kann leider nicht ganz ausgeschlossen werden, dass ich mich irre.
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!
HmIP muss leider draussen bleiben. in Ausnahmefällen erlaubt
ACHTUNG! Per Portweiterleitung aus dem Internet erreichbare CCU-WebUI ist unsicher! AUCH MIT PASSWORTSCHUTZ! Daher: Portweiterleitung deaktivieren!
Re: Homematic und XMPP/Jabber
Hmmh, da kommt gar nichts.
Ich gebe da zb bei Eingabe das ein
und die Ausgabe wird angezeigt:
Gebe ich genau das ein:
natürlich auf die persönlichen Daten geändert, passiert bei Ausgabe gar nichts und es gibt auch keine Nachricht am Handy.
Ich gehe davon aus, dass ich nichts weiter vorher unternehmen muss, bevor idh den Code absende.
Ich gebe da zb bei Eingabe das ein
Code: Alles auswählen
WriteLine("Hallo Welt!");
Gebe ich genau das ein:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801002:1.CMD_EXEC").State("LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl http://xmpp-server:5280/msg/empfaenger@xmpp-server -u absender@xmpp-server:passwort -H 'Content-Type: text/plain' -d 'test' ");
Ich gehe davon aus, dass ich nichts weiter vorher unternehmen muss, bevor idh den Code absende.