Mit der Homematic CCU ist es ja schon lange möglich, Nachrichten aus Systemereignissen heraus zu generieren und per E-Mail zu versenden. Ein einfaches Beispiel hierfür ist die Bestätigung der Alarmanlage. Wird diese scharf oder unscharf geschaltet, so kann der Status als Email versendet werden. Oder hat man Umweltdatensensoren verbaut, so kann man sich auch die Daten, wie Temperatur, Luftfeuchte etc. senden lassen. Dazu muss einfach nur das Email-Plug-In unter Zusatzsoftware installiert und eingerichtet werden. Die Nachrichten werden dann per Script Aufruf versendet. Jedes Mal, wenn der Ziel-Email-Client, zum Beispiel am Smartphone, die Nachrichten abruft, ist man wieder informiert.
Es muss aber nicht unbedingt die E-Mail-Lösung sein um Nachrichten zu versenden. Eine weitere Möglichkeit ist der Messenger „Telegram“. Er ist den Nachrichten Messengern WhatsApp, Signal, etc. ähnlich und versendet per Push-Service. Der Versand unterschiedlichster Daten ist hier möglich. Bilder, Videos und Audiodateien können genau so einfach wie Textnachrichten versendet werden. Um einen den Telegram Dienst mit der Homematic nutzen zu können, muss man sich der freien Telegram API bedienen. In den folgenden Zeilen zeige ich, wie ich ein für mich funktionsfähiges System aufgebaut habe, um von der Homematic CCU Nachrichten und IPCam-Bilder an ein Smartphone mit installiertem Telegram Messenger zu senden.
In dem Beispiel beschreibe ich die Installation und Einrichtung auf einem Android System. Beginnend mit dem Download der APP „Telegram Messenger“ aus dem Google Appstore kann derselbe dann installiert und gestartet werden. Nach dem registrieren der Telefonnummer sollte die Software dann auch schon bereit sein.
Einrichten des Bots:
In der rechten, oberen Ecke des Bildschirms ist das Lupensymbol für die Suche zu sehen. Das ist anzuwählen, um ein Eingabefeld zu erhalten. In dieses Feld ist nun BotFather einzugeben. Das ist quasi das Administrationstool für das Erstellen und Einrichten von Bots. Unter einem Bot (von englisch robot ‚Roboter‘) versteht man ein Computerprogramm, das weitgehend automatisch sich wiederholende Aufgaben abarbeitet, ohne dabei auf eine Interaktion mit einem menschlichen Benutzer angewiesen zu sein.( Quelle: Wikipedia)
Ist der BotFather gefunden, dann kann der einfach angeklickt werden und es öffnet sich ein Fenster. Um die Einrichtung des eigenen Bots zu starten, ist in der Nachrichtenzeile folgendes Kommando einzutippen:
/start
Jetzt kommt als Antwort eine Liste mit Befehlen, die für die Bot-Einrichtung und Konfiguration nützlich sind. Um nun einen neuen Bot zu erstellen ist
/newbot
einzugeben. Als nächstes ist ein Name für den Bot auszuwählen. Hier habe ich als Beispiel CCU gewählt. Sollte der Name bereits vergeben sein, dann einen anderen wählen. Das gilt ebenso für den Benutzernamen, der mit „_bot“ zu enden hat. Hier habe ich iretro_bot gewählt.
Ist der Name gewählt und gültig, so kommt als Antwort eine Meldung mit einem Token, der in der Regel 45 Zeichen lang ist. Dieser Token ist zu kopieren oder abzuschreiben. Er ist der Schlüssel für den Bot. Die Arbeiten am Smartphone sind nun soweit abgeschlossen und es geht am PC weiter. Im Browser (am besten Firefox) ist die Telegram Website aufzurufen. web.telegram.org ist der Link zu Website. Diese Schritte dienen dazu, neben dem Token auch noch die ChatID zu erhalten, die in weiterer Folge in den Homematic Skripten benötigt wird. Um sich im Webbrowser anmelden zu können, ist die zu Anfang in der App registrierte Telefonnummer einzugeben. Ist die Nummer eingegeben wird auf das Smartphone ein Anmeldecode gesendet. Mit dem kann die Telegram Session im Browser gestartet werden. Jetzt sollte im Browser Telegram auch der iretro_bot per Suche zu finden sein. Ist er gefunden, dann ist er mit „STARTEN“ zu öffnen und irgendeine beliebige Nachricht einzugeben. Das Eingeben einer beliebigen Nachricht ist wichtig um dann auch die ChatID erhalten zu können. Ist das geschehen, dann ist in der Adresszeile desselben Browserfensters der folgende Link einzugeben:
https://api.telegram.org/bothier_den_45_Zeichen_langen_APItoken_eingeben/getUpdates
und mit Enter bestätigen. Jetzt sollte im Browser in etwa folgendes zu sehen sein: (Tab JSON ausgewählt) Den Inhalt der Website habe ich in die untenstehende Tabelle kopiert. (die originale ID wurde natürlich geändert…)
ok | true |
result | 0 |
update_id | 121212121 |
message | |
message_id | 106 |
from id |
123456789 |
is_bot | false |
first_name | „ingmarsretro“ |
language_code | „de“ |
chat id |
123456789 |
first_name | „ingmarsretro“ |
type | „private“ |
date | 1565349110 |
text | „test“ |
update_id | 121212121 |
message | |
message_id | 111 |
from id |
123456789 |
is_bot | false |
first_name | „iretro“ |
language_code | „de“ |
chat id |
123456789 |
first_name | „iretro“ |
type | „private“ |
date | 1565349112 |
text | „test“ |
Nun kann durch Eingabe in die Browserzeile eine Testnachricht vom PC an das Smartphone gesendet werden.
https://api.telegram.org/botAPITOKEN/sendMessage?chat_id=123456789&text=Hallo das ist ein Test
Nach Bestätigen erscheint die Nachricht in der Telegram App am Smartphone und alles hat geklappt. Für alles Weitere wird nun nur mehr der API-Token und die chatID benötigt.
Homematic und Telegram
Jetzt ist soweit alles für den Einsatz von Telegram mit der Homematic vorbereitet. Meine Beispiele hier beziehen sich auf eine CCU2. Als Addon muss die aktuelle Version des CUxD auf der CCU installiert sein. (Zum Zeitpunkt des erstellen des Blogbeitrages ist es 2.3.0). Der CUx-Daemon ermöglicht es unter anderem, per Skript auf das Linux System der CCU zuzugreifen und stellt somit eine universelle Schnittstelle zu anderen Systemen dar.
Die einfachste und am schnellsten realisierbare Anwendung mit Telegram ist, ein von der Homematic getriggertes Skript zu starten, das eine PUSH-Nachricht versendet. Dazu erstellt man in der CCU ein neues Programm und wählt zuerst unter Bedingung einen „Trigger“ aus. Mit „Trigger“ ist zum Beispiel eine Tastereingabe, eine Bewegungserkennung des Bewegungsmelders, oder auch einfach nur das Auslösen eines beliebigen Sensors gemeint. Das sollte für einen HomeMatic Benutzer auch kein Problem darstellen. Dann wählt man als Aktivität Skript aus und öffnet das Scripteingabefenster. Das folgende Code-Beispiel sendet eine Nachricht an das Handy, wenn bei der HomeMatic der gewählte Trigger ausgelöst ist und das Script gestartet wird:
!Variablen definieren string msg = "Das ist eine Testnachricht von der CCU"; string chatid = "123456789"; !das ist die chatid string botAPI = "987654321:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi"; !und das ist die BOT API id !Textnachricht versenden dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendMessage -F text='"#msg#"' -F chat_id="#chatid);
Die ChatID in dem Beispielscript und auch die botAPI ist hier nur symbolisch angeführt. Wären da reale IDs angeführt, dann würden eure Versuche alle als Nachrichten auf meinem Handy landen. 🙂 Diese beiden IDs sind also durch die vorher ermittelten zu ersetzen.
Versenden von Kamerabildern
Es geht aber noch besser. Viele User haben neben der HomeMatic CCU auch noch IP-Kameras im Einsatz. Da bietet es sich doch an, den Trigger der HomeMatic und seine Webanbindung für das Versenden der IP-Kamera Bilder zu verwenden. Denn Telegramm kann neben Textnachrichten auch Bilddateien versenden.
Um das zu realisieren muss die IP Kamera in der Lage sein, einen Snapshot per http – Aufruf zu erzeugen. Das sollte bei den meisten Kameras möglich sein. In diesem Beispiel habe ich eine Dlink DCS-932 und eine Vivotec FD81xx Domkamera getestet. Es klappt mit beiden.
Hier die grundlegenden Snapshotaufrufe der Kameras:
DLINK:
https://benutzername:passwort@ip_der_kamera/image/jpeg.cgi
VIVOTEK:
https://benutzername:passwort@ip_der_kamera/cgi-bin/viewer/video.jpg?
Als nächstes muss sichergestellt sein, dass die HomeMatic nach dem Aufruf der Snapshot-Links die von der Kamera gelieferten Bilder auch irgendwo im Dateisystem der CCU speichern kann. Hier hilft der CUx-Daemon wieder weiter. Ich speichere im /tmp Ordner das Bild der Kamera unter dem Dateinamen „cambild.jpg“
Nach dem Aufruf desKameralinks über das unten gelistete Script sollte die Datei im /tmp Ordner zu sehen sein.
Eine Kontrolle des Inhaltes der Datei „cambild.jpg“ kann einfach durch Doppelklicken durchgeführt werden. Das Bild sollte dann im CUxD Fenster zu sehen sein.
Das folgend gelistete Script in einem neu erstellten HomeMatic Programm kann nun durch Aufruf das Kamerabild abholen und versendet es als Telegram Push Nachricht.
string picture = "/tmp/cambild.jpg"; !das ist der Pfad in dem die Bilddatei erzeugt und gespeichert wird string chatid = "123456789"; !das ist die chatid string botAPI = "987654321:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi"; !und das ist die BOT API id !Kamera aufrufen und snapshotdatei in /tmp/ anlegen und als datei cambild.jpg speichern dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget --auth-no-challenge -O /tmp/cambild.jpg 'https://user:passwort@000.000.000.000:80/image/jpeg.cgi?profileid=1'"); !Kamerabild per Telegram versenden dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("extra/curl -s -k https://api.telegram.org/bot"#botAPI#"/sendPhoto -F chat_id="#chatid#" -F photo='@"#picture#"'");
Hallo,
ich konnte einen Bot anlegen, habe ihm auch eine Testnachricht geschrieben, konnte aber leider über diesen Link (https://api.telegram.org/hier_den_45_Zeichen_langen_APItoken_eingeben/getUpdates) keine Tabelle mit den Daten erhalten.
Was kann ich nun tun ?
VG Norbert
Hallo!
Es fehlt „bot“ im Link.
https://api.telegram.org/bot%5BAPI-Token%5D/getUpdates
Danke für die Info…
Hallo,
vielen Dank für diese super Anleitung womit es bisher ohne Probleme geklappt hat. Leider funktioniert das bei mir seit einigen Tagen nicht mehr. Textnachrichten von der Ccu2 via Telegram gehen ohne Probleme. Das Bild wird auch im tmp Ordner abgelegt aber kommt nicht mehr über Telegram an.
Hast du einen Tip für mich?
Danke und Gruß
Hallo zusammen,
ich habe das gleiche Problem.
Nach irgendeinem Update funktioniert das versenden von Fotos nicht mehr. Text wird noch versendet.
Hat jemand die Lösung. Bin echt verzweifelt.
Grüße aus dem Rheinland
Hallo, habe vermutlich die Ursache gefunden:
Ein Geschwindigkeitsproblem mit den CCUs
s.hier: https://blog.fh-kaernten.at/ingmarsretro/2020/03/21/homematic-bilder-ueber-telegram-pushen-update-fix/
MEGAAAAA…mit der Verzögerung war die Lösung!
Vielen Dank und bleib gesund!
Vielen Dank für die Rückmeldung.
Schönen Gruß und gesund bleiben!
Auch von mir vielen Dank, das Versenden einer Nachricht von der CCU2 hat sehr lange super funktioniert, jetzt geht nichts mehr. Wenn ich das Script teste passiert auch nichts. Hat jemand eine Idee?
Hallo zusammen,
stimmt es klappt auch bei mir nicht mehr… wenn man bei telegram nachliest hat sich hier scheinbar etwas geändert.
https://core.telegram.org/bots/api
ich werde mir das in der nächsten Zeit etwas genauer ansehen…
Update s.hier https://blog.fh-kaernten.at/ingmarsretro/2020/02/17/homematic-nachrichten-per-telegram-update/
Naben,
funzt super, macht genau was es soll. Aber wie bekomme ich es hin das die Nachricht an 2 verschieden Telegram Nutzer geht?
Danke
Gruß
André
Hallo,
Ich bräuchte mal Hilfe, bitte!
Tolle Anleitung und gut für einen Laien wie mich geschrieben, aber warum auch immer, ich bekomme die Push-Nachrichten nicht hin, muss man noch irgendwas bei CUxD einstellen oder bei der Firewall einen Port freigeben???
der Test mit :https://api.telegram.org/botAPITOKEN/sendMessage?chat_id=123456789&text=Hallo das ist ein Test
klappt, aber aber das eigendliche Skript geht anscheinend nicht (auch nicht bei Skript testen).
Ich bin am versuchen eine Meldung auf einer CCU2 zubekommen, wenn die Waschmaschine fertig ist. Eine Licht anzeige geht entsprechend und nein ich habe wenig Ahnung davon und versuch mich langsam heran zu tasten!
Schon mal vielen Dank!
Dank der ausführlichen Anleitung hat es bei mir auf Anhieb geklappt. Allerdings habe ich das Skript zum Versenden separat auf der CCU gespeichert und mit einer 5-Sekunden Verzögerung versehen damit das System genügend Zeit hat das Bild aufzunehmen und zu speichern bevor es versandt wird. Danke an Ingmar für die großartige Anleitung.
Danke für das positive Feedback 🙂
Hallo,
ich konnte ebenfalls einen Bot anlegen, habe ihm auch eine Testnachricht geschrieben, konnte aber leider über diesen Link (https://api.telegram.org/bothier_den_45_Zeichen_langen_APItoken_eingeben/getUpdates) keine Tabelle mit den Daten erhalten. bei erscheint die Meldung {„ok“:true,“result“:[]}.
Was kann ich tun?
Hallo zusammen,
ich habe ein Problem welches vermutlich von dem hier kommt: „dom.GetObject(„CUxD.CUX2801001:1.CMD_EXEC“).State“ wie kann ich diese CUxD ID ermitteln?
Viele Grüße und vielen dank für das Feedback
Hallo,
im CuX Daemon muss zuerst ein virtuelles Gerät angelegt werden-
dazu den CuX Daemon öffnen – auf den Tab Geräte gehen dann
unter CUxD Gerätetyp: 28 (System) auswählen, dann
unter Funktion: exec einstellen, dann
irgend eine Geräteicon auswählen (Das erscheint dann in der Homematicplatform: zB: Fernbedienung 19 Tasten)
unter Control: Taster auswählen
und zum Schluss: Gerät auf CCU erzeugen!
So wird ein neues virtuelles Gerät anelegt, das über die Homematicscripten executiert werden kann…
VG Ingmar
@Ingmar vielen vielen Dank dafür.. hatte ich wohl übersehen, nun funktioniert es..
vg Christian
gerne
vg Ingmar
Hallo Ingmar, nun muss ich auch mal was hier zum Besten geben.
Erst einmal großen Dank an die Mühe und Leistung. Zum Thema – habe alles nach Anweisung erledigt. Deine Videos waren auch sehr schlüssig. Beim Betätigen eines Aktors in Verbindung mit einer Pushnachricht funktioniert das Skript wie gewünscht in der CCU3 und es kommt eine Nachricht über Telegram aufs Handy. Nur das Skript der Servicemeldungen will einfach beim Auslösen einer Meldung in der CCU3 nicht über Telegram versendet werden. Erst wenn ich das Programm in der CCU händisch starte kommt die Meldung im Handy an.
Würde mich über eine Lösung freuen, denn manchmal sieht man ja den Wald vor lauter Bäumen nicht. LG Jens Müller