Wilhelm Faber

IT Projekte, Expertise, Solutions Architect, Street-Photograph aus Ratingen

Homematic und Telegram

Benachrichtigungszentralle mit Homematic und Telegram...

| Keine Kommentare

Wer unterwegs ist, möchte sicher sein, dass zu Hause alle Fenster und Türen geschlossen sind. Mit einer Homematic-Zentrale und dem Telegram Messenger bekommst du beim Öffnen oder Schließen einer Tür sofort eine Nachricht aufs Smartphone. Das gibt ein gutes Gefühl von Sicherheit, wenn man nicht zu Hause ist. Außerdem sieht man, ob die Familie wie geplant nach Hause kommt oder das Haus verlässt.

Das Schöne daran:

  • Telegram ist kostenlos.
  • Du brauchst keinen Cloud-Dienst.
  • Du musst keine Ports im Router freigeben. Die Zentrale schickt die Nachricht selbst ins Internet.

Das wird benötigt

  • Eine Homematic-Zentrale: CCU3, RaspberryMatic oder piVCCU
  • Homematic- bzw. Homematic-IP-Tür-/Fensterkontakte, z. B. HmIP-SWDO
  • Ein Account beim Telegram Messenger
  • Internetzugang für die Zentrale

Schritt 1: Telegram-Bot anlegen

Die Nachrichten verschickt ein eigener Telegram-Bot. Einen Bot legst du über den offiziellen Telegram-Bot @BotFather an:

  1. In Telegram nach @BotFather suchen. Auf den blauen Haken achten, es gibt Nachahmer.
  2. Mit /start die Unterhaltung beginnen. Der BotFather antwortet mit einer Liste möglicher Befehle.
  3. Mit /newbot einen neuen Bot anlegen. Der BotFather fragt zuerst nach dem Anzeigenamen, z. B. „Haus Benachrichtigung“.
  4. Danach fragt er nach dem Benutzernamen des Bots. Er muss eindeutig sein und auf bot enden, z. B. MeinHaus_Info_bot.
  5. Der BotFather legt den Bot an und nennt dir das Access-Token. Es sieht etwa so aus: 123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw

Mit diesem Token kann man Nachrichten über den Bot verschicken. Behandle es deshalb wie ein Passwort und gib es nicht weiter. Ist es doch einmal öffentlich geworden, erzeugst du beim BotFather mit /revoke ein neues.

Schritt 2: Unterhaltung mit dem Bot starten

Ein Bot darf niemanden von sich aus anschreiben. Deshalb musst du den ersten Schritt machen:

  1. In Telegram nach dem Benutzernamen deines Bots suchen, z. B. @MeinHaus_Info_bot.
  2. Auf Start tippen bzw. /start senden.
  3. Zusätzlich eine kurze Nachricht schreiben, z. B. Hallo.

Schritt 3: Chat-ID herausfinden

Damit der Bot weiß, an wen er schreiben soll, brauchst du die Chat-ID. Direkt nach deiner „Hallo“-Nachricht diese URL im Browser aufrufen. <DEIN_BOT_TOKEN> ersetzt du durch dein Token:

https://api.telegram.org/bot<DEIN_BOT_TOKEN>/getUpdates

In der Antwort findest du einen Abschnitt wie diesen:

"chat": {
    "id": 123456789,
    "first_name": "Max",
    "type": "private"
}

Die Zahl hinter "id" ist deine Chat-ID.

Liefert die URL nur ein leeres Ergebnis ("result":[]), gibt es einen einfachen Ausweg: den Bot @userinfobot öffnen und auf Start tippen. Er antwortet sofort mit deiner ID. Warum getUpdates manchmal leer bleibt und wie man die ID einer Gruppe herausfindet, erkläre ich im Artikel „Telegram: Chat-ID herausfinden“.

Tipp für Familien: Sollen alle Familienmitglieder die Nachrichten bekommen, legst du in Telegram eine Gruppe an und fügst deinen Bot hinzu. Dann verwendest du die Chat-ID der Gruppe. Sie beginnt mit einem Minuszeichen, z. B. -1001234567890.

Schritt 4: Nachricht testen

Bevor es an die Homematic-Zentrale geht, prüfst du im Browser, ob Token und Chat-ID zusammenpassen:

https://api.telegram.org/bot<DEIN_BOT_TOKEN>/sendMessage?chat_id=<CHAT_ID>&text=Test

Kommt auf dem Smartphone „Test“ an, ist alles bereit.

Schritt 5: Programm in der Homematic-Zentrale anlegen

Nun legen wir in der Zentrale ein Programm an. Es reagiert auf einen Sensor, z. B. an der Eingangstür, und schickt per Skript eine Nachricht an den Telegram-Bot.

  1. Die WebUI der Zentrale im Browser öffnen.
  2. Programme und Verknüpfungen → Programme & Zentralenverknüpfung wählen und unten auf Neu klicken.
  3. Dem Programm einen Namen geben, z. B. „Telegram Eingangstür“.
  4. Bedingung „Wenn…“ festlegen:
    • Auf Geräteauswahl klicken und den Kanal des Tür-Kontakts auswählen, z. B. „Eingangstür“.
    • Als Zustand „bei offen“ wählen.
    • Rechts „bei Änderung auslösen“ einstellen.
  5. Aktivität „Dann…“ festlegen:
    • Auf das Plus-Symbol klicken und Skript wählen.
    • Als Zeitpunkt „sofort“ wählen.
    • Auf die drei Punkte klicken, um das Skript einzutragen (siehe unten).
  6. Aktivität „Sonst…“ festlegen: ebenfalls ein Skript mit dem Zeitpunkt „sofort“ anlegen, mit der Meldung „Eingangstür wurde geschlossen“. Durch „bei Änderung auslösen“ läuft dieser Zweig genau dann, wenn die Tür wieder geschlossen wird.
  7. Mit OK speichern.

Das Skript

string msg    = "Eingangstür wurde geöffnet";
string TOKEN  = "123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw";
string CHATID = "123456789";

string MESSAGE = msg.ToUTF8().Replace(" ", "%20");

string cmd = "wget -q -O /dev/null 'https://api.telegram.org/bot" # TOKEN # "/sendMessage?chat_id=" # CHATID # "&text=" # MESSAGE # "'";
system.Exec(cmd);

Was hier passiert:

  • msg enthält den Text der Benachrichtigung.
  • TOKEN und CHATID durch deine eigenen Werte ersetzen.
  • ToUTF8() sorgt dafür, dass Umlaute wie „ü“ und „ö“ korrekt ankommen. Replace(" ", "%20") wandelt die Leerzeichen so um, dass sie in einer Internetadresse funktionieren.
  • Mit # werden in der Homematic-Skriptsprache Texte aneinandergehängt. So entsteht die vollständige Adresse für sendMessage.
  • system.Exec führt den Befehl wget auf der Zentrale aus, der die Adresse aufruft und damit die Nachricht verschickt.

Aktuelle Firmware-Versionen der CCU3 und RaspberryMatic bringen die nötigen Zertifikate mit. Die Option --no-check-certificate, die man in vielen älteren Anleitungen findet, ist deshalb meist nicht mehr nötig. Sie schaltet die Prüfung ab, ob man wirklich mit Telegram spricht. Nur wenn der Versand ohne sie fehlschlägt, solltest du sie ergänzen.

Skript testen

Bevor du das Programm speicherst, kannst du das Skript direkt ausprobieren:

  1. Unter Programme und Verknüpfungen → Programme & Zentralenverknüpfung unten auf Skript testen klicken.
  2. Das Skript einfügen und Ausführen klicken.
  3. Nach wenigen Sekunden sollte die Nachricht auf dem Smartphone erscheinen.

Erweiterung: Uhrzeit mitschicken

Praktisch ist es, wenn die Nachricht gleich die Uhrzeit enthält. Dafür ersetzt du die erste Zeile des Skripts:

string zeit = system.Date("%H:%M");
string msg  = "Eingangstür wurde um " # zeit # " Uhr geöffnet";

So siehst du auf einen Blick, wann jemand nach Hause gekommen ist oder das Haus verlassen hat.

Erweiterung: Abendlicher Fenster-Check

Neben Meldungen beim Öffnen und Schließen ist eine Kontrolle am Abend nützlich:

  1. Ein neues Programm „Fenster-Check 22 Uhr“ anlegen.
  2. Als Bedingung eine Zeitsteuerung wählen: täglich um 22:00 Uhr.
  3. Als zweite Bedingung mit UND die Fensterkontakte mit „bei offen“ und „nur prüfen“ hinzufügen. Sollen mehrere Fenster geprüft werden, diese untereinander mit ODER verknüpfen.
  4. Unter „Dann…“ das Skript mit der Meldung „Achtung: Es ist noch ein Fenster offen!“ eintragen.

So wirst du nur dann benachrichtigt, wenn wirklich noch etwas offen ist.

Fehlersuche

  • Es kommt keine Nachricht an: Zuerst die Test-URL aus Schritt 4 im Browser aufrufen. Funktioniert sie, liegt das Problem im Skript oder in der Zentrale. Funktioniert sie nicht, stimmen Token oder Chat-ID nicht.
  • „chat not found“ im Browser-Test: Die Chat-ID ist falsch, oder du hast den Bot noch nie mit /start angeschrieben. Bei Gruppen das Minuszeichen nicht vergessen.
  • Test-URL funktioniert, Skript nicht: Prüfen, ob die Zentrale Internetzugang hat. In der WebUI unter Einstellungen → Systemsteuerung → Netzwerkeinstellungen müssen Gateway und DNS-Server eingetragen sein, z. B. die IP-Adresse deines Routers.
  • Umlaute werden falsch dargestellt: Prüfen, ob ToUTF8() im Skript steht. Sehr alte Firmware-Versionen kennen diese Funktion nicht. Dann hilft ein Update der Zentrale.
  • Die Nachricht ist abgeschnitten: Sonderzeichen wie &, # oder + haben in Internetadressen eine besondere Bedeutung. Am besten im Nachrichtentext darauf verzichten.
  • Das Programm löst nicht aus: Prüfen, ob bei der Bedingung „bei Änderung auslösen“ eingestellt ist. Mit „nur prüfen“ reagiert das Programm nicht auf den Sensor.

Ein Wort zur Sicherheit

  • Das Token steht im Klartext im Skript. Jeder, der Zugriff auf die WebUI hat, kann es sehen. Die WebUI deshalb mit einem Passwort schützen und nicht ungesichert aus dem Internet erreichbar machen.
  • Telegram-Nachrichten sind nicht Ende-zu-Ende-verschlüsselt. Für Meldungen wie „Tür geöffnet“ ist das in der Regel unkritisch. Sensible Informationen wie Alarmanlagen-Codes gehören aber nicht in die Nachricht.

Fazit

Mit einem Telegram-Bot, ein paar Zeilen Skript und einem Programm in der Homematic-Zentrale entsteht in weniger als einer halben Stunde eine eigene Benachrichtigungszentrale. Du weißt jederzeit, ob Fenster und Türen offen oder geschlossen sind. Das Prinzip lässt sich auf alle anderen Sensoren übertragen: Wassermelder, Rauchmelder oder Bewegungsmelder schicken ihre Meldungen genauso zuverlässig aufs Smartphone.

Tipp: Wie du einen eigenen DNS-Server im Heimnetz einrichtest, damit Adressen wie nas.stargate oder fotos.stargate auf allen Geräten funktionieren, erkläre ich ausführlich im Artikel DNS-Server: SSL-verschlüsselte Domains im lokalen Heimnetzwerk.

In der Kategorie Smart Home findest Sie weitere interessante Artikel zum Thema Smart Home.

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.