Nach dem Verkauf von WhatsApp an Facebook im Jahr 2014 hat der Telegram Messenger an Beliebtheit gewonnen. So verspricht der Messenger den Schutz der Privatsphäre durch verschlüsselte Kommunikation, allerdings wird die von der NSA entwickelte Hashfunktion SHA-1 verwendet. Durch eigene Forschung und Hilfe der Open-Source-Community wird versucht, Angriffe auf die App und das verwendete Protokoll abzuwehren. Der Telegram Messanger ist somit eine echte Alternative zu WhatsApp, SnapChat oder PushOver.
Immer wieder wurde ich in Kommentaren auf den Push-Dienst Telegram angesprochen, bisher habe ich für den Versand von CCU2-Meldungen ausschließlich PushOver genutzt.
Also habe ich mich mal mit Telegram beschäftigt und meine Erkenntnisse ein einer Schritt für Schritt Anleitung für euch festgehalten.
App laden – Account einrichten
Zunächst benötigst du einen Telegram Account, diesen kannst du dir auf dein SmartPhone in der Telegram App einrichten. Nachdem Laden und dem Aufrufen der App, musst du die Rufnummer deines SmartPhones angeben. Anschliessend wirst du noch nach deinem Vor- und Nachnamen gefragt. Zum Abschluss vergibst du noch einen Benutzernamen.
BotFather aufrufen & Bot anlegen
Zum Versenden von Nachrichten aus Anwendungen benötigt Telegram einen Bot. Du kannst mehrere Bots für verschiede Anwendungen anlegen und diese sogar Chat-Gruppen zuordnen.
Um einen Bot anzulegen, suchst du in der Telegram App unter „Chats“ nach „BotFather“. Mit einem Klick startest du den Dialog und klickst auf „/newbot“ um einen neuen Bot anzulegen.
Bot anlegen & aufrufen
Das Anlegen eines neuen Bots kann zur Geduldsfrage werden, da sehr viele Namen bereits vergeben sind. Ich benötigte bestimmt fünf Versuche, bis ich einen noch nicht verwendeten Bot-Namen gefunden hatte. Bei der Vergabe des Namens ist es wichtig, dass der Name auf „bot“ endet!
Bitte notiere dir den API-Key deines neuen Bots, diesen benötigst du später im HomeMatic-Skript. Den Bot kannst du über den Link in der Message direkt aufrufen.
Bot starten & Nachricht senden
Nachdem du den neu angelegten Bot gestartet hast, schickst du eine kurze Mitteilung an deinen Bot. Diese Nachricht dient der Ermittlung der Bot-ID.
Telegram – Bot-ID ermitteln
Damit du von deiner CCU2 Meldungen per Telegram verschicken kannst, benötigst du neben dem API-Key deines Bot auch die Bot-ID. Diese kannst du über deinen Browser ermitteln, nachdem du per Telgram-App an deinen Bot eine Nachricht geschickt hast.
Mit den ermittelten Daten, API-Key und Bot-ID, kannst du jetzt einen Aufruf aus einem HomeMatic-Programm erstellen.
var PushoverText = dom.GetObject("PushOver").Value(); dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot[Dein API-Key]/sendMessage -d text='"#PushoverText#"' -d chat_id=[Bot-ID]");
Ersetze in dem Skript bitte deinen API-Key sowie die Bot-ID und lösche dabei die []-Zeichen.
In diesem Beispiel habe ich eine HomeMatic-Systemvariable mit dem Namen „PushoverText“ angelegt in die ich die zu versendende Message schreibe. Anschliessend liest das oben aufgeführte Skript diese Variable aus und versendet den Inhalt per Telegram.
Apps & Programme
Neben Apps für alle gängigen mobilen Betriebssystemen, bietet der Telegram Messenger auch Programme für Windows, Mac OS und Linux an.
Unter https://telegram.org findest du dazu weitere Informationen.
Ich wünsche euch viel Spaß & Erfolg bei der Umsetzung!
Hallo Erhard,
wenn ich meine Bot.ID ermitteln will begomme ich folgende Meldung
„{„ok“:true,“result“:[]}“
Was mache ich falsch
(Bot läuft super)
Hallo Thomas,
du hast alles soweit richtig gemacht.
Allerdings wird die Bot.ID mit der Abfrage im Browser nur dann ausgegeben, nachdem du per Telgram-App an deinen Bot eine Nachricht geschickt hast!
Gruß Erhard
Hallo,
muss ich auf der CCU noch etwas installieren (CUX Daemon), oder kann hier alles out-of-the box laufen? Wenn CUX Daemon > Standard oder weitere Add-Ons bzw. Konfigurationen?
Danke u Gruß
Hallo Sascha,
CUxD ist zu empfehlen, aber nicht Pflicht! Viele meiner Scripte nutzen allerdings CUxD, da der Original SYSTEM_EXEC Befehl sehr instabil ist.
Nach der Installation von CUxD muss du lediglich die CCU2 durchstarten, danach evtl. benötigte virtuelle Geräte über CUxD installieren. In meinen Anleitungen gehe ich darauf immer im Detail ein.
Gruß Erhard
Hallo Erhard,
danke für die Tipps. Leider funktioniert das Skript bei mir nicht. Vermutlich wg. CuX, denn die Variable wird noch sauber ausgelesen. Was genau meinst Du mit virtuellen Geräten?
D.h. ich könnte auch nur den Link über system exec senden? Wie lautet dann die Skriptzeile?
Gruß
Sascha
Hallo Erhard,
ich weiß, viele kegen Wert auf CUxD. Da ich es darüber aber aus irgendeinem Grund nicht zum laufen bekommen und bisher über den Original System_Exec Befehl keine Probleme hatte, würde ich es gern weiterhin darüber laufen lassen.
Bisher hatte ich Notify my Android beim laufen. Da es ja darüber nicht mehr geht, versuche ich es mit Pushover. Leider ohne Erfolg. Kannst du mir dabei helfen?
Script bei Notify my Android war:
string stderr;
string stdout;
string url=“‚http://www.notifymyandroid.com/publicapi/notify?apikey=XXXXXXXXX&application=HomeMatic&event=Trockner&description=W%C3%A4sche%20ist%20fertig!&priority=2′“;
system.Exec(„wget -q -O – „#url, &stdout, &stderr);
Gruß Michele
Hallo Michele,
die von dir genutzte Lösung für Notify scheint zunächst richtig, allerdings scheinen die Anführungszeichen beim url-String etwas seltsam. Entweder verwendest du die einfachen Anführungszeichen oder die verwendest die doppelten Anführungszeichen. Beide zusammen können nicht funktionieren!
Welche Probleme hast du bei der Installation vom CUxD? Eigentlich habe ich in meiner detaillierten Anleitung den Vorgang Schritt für Schritt beschrieben.
Bitte melde dich einfach, falls du noch Fragen hast.
Gruß Erhard
Hallo Erhard,
vielen Dank für die schnelle Rückmeldung. Beim kopieren hat sich da wahrscheinlich ein Formatfehler eingeschlichen. Richtig ist „‚http:………'“. Hat zumindest so immer funktioniert.
Da ich ja nun auf Pushover umsteigen muss, weiß ich nicht wie das Script für den Original System_Exec Befehl aussehen soll. Für mich ist es eben mit dem Original System-Exec Befehl einfacher.
CUxD hab ich installiert. Gerät auch angelegt usw. Nur beim ausführen von dem Script aus deiner Anleitung (token und user wurden angepasst) kommt eben keine Nachricht.
Gruß Michele
Guten Abend Michele,
du kannst die Fehlermeldungen vom CUxD unter „Einstellungen/ Systemsteuerung/ CUx-Daemon“ anschauen. Auf der CUxD-Oberfläche den vierten Menüpunkt „Info“ anwählen und dann „Full Syslog“ anwählen. Jetzt das PushOver-Skript ausführen und die Fehlermeldung auf der CUxD-Oberfläche anschauen. PushOver und Telegram versenden keine Nachrichten von der CCU2, wenn diese Umlaute enthält. Vielleicht ist dies schon die Ursache bei Ihnen.
Gruß Erhard
Hallo Erhard,
es sind keine Umlaute vorhanden. Ich habe sein Script übernommen und nur Token und User abgeändert. Bekomme folgende Fehlermeldung:
local0.err ReGaHss: Error: IseESP::ScriptRuntimeError: var PushoverText = dom.GetObject(„PushOver“).Value(); dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State(„LD_LIBRARY_PATH=/usr/local/addons/cuxd /usr/local/addons/cuxd/curl -s -k -d token=…..
weiter ist die Meldung leider nicht zu lesen.
Hallo Michele,
in deinen Befehl hat sich etwas eingeschlichen, weiß nicht woher.
Richtig muss es folgendermaßen heißen:
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot[Dein API-Key]/sendMessage -d text='"#PushoverText#"' -d chat_id=[Bot-ID]");
Wir bekommen den CUxD gemeinsam schon zum Laufen, nur nicht aufgeben. Wenn du das erste Skript mit CUxD erfolgreich erledigt hast, folgen bestimmt noch viele weitere Anwendungen mit dem CUxD.
Gruß Erhard
Hallo Erhard,
ich habe es jetzt mit dem Original System_Exec Befehl lösen können. Funktioniert einwandfrei. Was ich noch nicht hinbekommen habe, ist das mit der Prio.
Das Script was du in deiner Antwort geschrieben hast, ist doch für die Pushnachricht als Telegramm. Das wollte ich eigentlich nicht. Wollte es mit der Pushover App haben. Das Script dafür von dir habe ich auch genommen. Nur dann eben der ScriptRuntimeError.
Interesse hätte ich trotzdem noch es mit CUxD zum laufen zu bekommen. Schon alleine um rauszufinden was falsch ist.
Gruß Michele
Hallo Michele,
hast du nach der CUxD-Installation deine CCU2 einmal durchgestartet und anschliessend nach der Anlage der CUxD-Geräte diese im Postfach der CCU2 fertig konfiguriert? Wenn du alles richtig gemacht hast, müsstest du in der CCU2 unter „Geräte“ die CUxD-Geräte sehen. Die Seriennummer aller CUxD-Geräte beginnt mit CUX……
Gruß Erhard
Hallo Erhard,
klar, das virtuelle Gerät hatte gefehlt, ergo die Referenz. War einfach anzulegen, dank perfekter Doku.
Danke für alle Tipps!
Gruß
Sascha
Hallo Erhard,
sorry muss mich nochmal melden.
Seit ein paar Tagen funktioniert der Versand aus der Homematic nicht mehr.
Es gab weder ein Update der Homematic noch der CuXD.
Wenn ich den Test über den Browser starte funktioniert der Versand, d.h. der Key und die API-ID sind OK. Irgend eine Idee wo ich suchen kann?
FYI: Das Skript läuft bis zum Ende durch.
Gruß
Sascha
Hallo Sascha,
im CUxD-Log kannst du die entsprechenden Hinweise finden. Zum CUxD-Log gelangst du über die Menüpunkte [Einstellungen]/ [Systemsteuerung]/ [Zusatzsoftware]/ [CUx-Daemon Einstellen]/ [Info]/ [Full Syslog]. Nachdem du den CUxD-Log aufgerufen hast, versuche eine Meldung zu verschicken und suche nach dem Fehlereintrag.
Gruß Erhard
Hallo,
zuerst einmal vielen Dank für deine Anleitung. Diese hat sehr gut funktioniert. Da ich die Nachrichten zur Anwesenheitskontrolle via IPhone verwende (aufwecken für Ping), möchte ich, dass der Bot mehrere User (Telefone) erreicht. Dazu habe ich 2 Fragen, und hoffe dass mir jemand hier weiterhelfen kann:
1.) Leider erscheinen die Homematic Nachrichten nur auf einem Gerät (auf dem die Einrichtung erfolgte). Ich finde den Bot auf anderen Geräten, starte mit /start, aber leider kommen auf dem 2. Gerät keine Nachrichten an.
2.) Ist es möglich, dass man den Bot „sicher“ macht. Sprich, dass User explizit freigeschaltet werden. Ich möchte sichergehen, dass nicht jeder Telegram User lesen kann, wenn bei mir zuhause die Haustüre geöffnet wird.
Viele Grüße
Henry
Hallo Henry,
du kannst eine Telegram Gruppe einrichten und neben allen Empfängern auch den Bot hinzufügen, dadurch erhalten alle Gruppenmitglieder die vom Bot gesendeten Nachrichten. Der Bot reagiert NICHT auf Einladungen, somit kann sich kein anderer Telegram Teilnehmer in den Bot einklinken.
Gruß Erhard
Hallo,
gibt es die Möglichkeit diese Nachricht auch an zwei Teilnehmer zu schicken? Meine Frau ist dem Bot „beigetreten“, bekommt aber keine Nachrichten wie ich sie bisher bekomme.
Was müsste ich ändern, damit sie die gleichen Nachrichten erhält?
Hallo digitalnaive,
ich habe extra zwei Bots angelegt, einen für mich und den anderen für meine Frau. Soll eine Meldung an beide Bots geschickt werden, dann sind das zwei CUxD-Aufrufe. Beim Programm „Fenster offen beim Verschliessen der KeyMatic von aussen“ wird nur der per Bot benachritigt, der auch abgeschlossen hat. Zwei Bots machen somit auf Dauer wirklich Sinn.
Gruß Erhard