Mit dem Telegram Binding in OpenHAB kann man sehr schöne Sachen machen.
Ich zeige euch, wie man das Binding in OpenHAB3 einbindet und konfiguriert. Anschließend können wir uns dann regelmäßig per Telegram Chatnachricht Informationen zukommen lassen, oder sogar on-demand Informationen abrufen.
Installation
Um das Binding nutzen zu können, muss es erst installiert werden.
Klickt dafür in OpenHAB3 auf „Einstellungen – Bindings – „+““ sucht nach „Telegram“ und klickt auf INSTALL.
Öffnet nun Telegram auf eurem Smartphone/Rechner und beginnt einen Chat mit „BotFather“. Sendet diesem Chat die Nachricht: /newbot
Er wird euch nach einem Namen für den Bot fragen. Dies wird der Name des Chats sein.
Anschließend benötigt ihr einen Usernamen. Diesen darf es nur einmal geben und ist später nicht im Chat sichtbar.
Anschließend erhaltet ihr eine Bestätigungsnachricht mit einem Link zu eurem Chat. Klickt diesen an und schreibt etwas hinein, erst dann ist er aktiv und wir können mit den weiteren Schritten fortfahren.
Außerdem erhaltet ihr einen HTTP API Key. Speichert euch diesen gut weg, da wir ihr jetzt benötigen.
Öffnet nun einen Browser und geht auf die Webseite: https://api.telegram.org/bot<token>/getUpdates
Hierbei müsst ihr <token> mit dem API Key ersetzen, den ihr erhalten habt.
Es wird eine JSON Datei angezeigt. Keine Angst, hier lesen wir nun die ID aus. Diese speichern wir uns ebenfalls.
Test
Um zu testen, ob euer Bot funktioniert, gebt folgende URL in euren Browser ein:
https://api.telegram.org/bot<token>/sendMessage?chat_id=<chatId>&text=testing
Ersetzt hier wieder <token> mit eurer HTTP API und <chatid> mit der ID.
Ihr solltet nun eine Chatnachricht erhalten haben. Wenn nicht, geht die Schritte noch einmal durch.
Konfiguration
Erstellt in OpenHAB nun eine neue Thing Datei. Zum Beispiel „telegram.thing“
Hier tragt ihr Folgendes ein:
Thing telegram:telegramBot:Telegram_Bot [ chatIds="ID", botToken="TOKEN" ] String telegramMessage "Telegram Message" { channel = "telegram:telegramBot:XXXXXXXXXX:lastMessageText" }
„ID“ ersetzt ihr wieder durch eure ChatID, „TOKEN“ durch euren HTTP API Key und X durch die Thing ID.
Speichert diese Datei ab.
Anschließend navigieren wir in OpenHAB nach „Einstellungen – Things – Telegram Bot“.
In der Zeile Identifier sehen wir die Thing ID: telegram:telegramBot:XXXXXXXXXX
Die Thing ID (hier durch X gekennzeichnet) speichern wir uns wieder weg.
Unter „Bot Token“ und „Chat Id(s)“ tragen wir die entsprechenden Daten ein und klicken auf „Save“.
Das war’s, nun haben wir unser Binding entsprechend vorbereitet. Nun erstellen wir uns eine neue Regel.
Regel erstellen
Wir erstellen uns eine neue Regel Datei „telegram.rules“
Anschließend können wir uns unsere Regeln bauen.
Beispiel 1: Jeden Abend um 21 Uhr
rule "Telegram - 21:00 Uhr Lueften" when Time cron "0 00 21 1/1 * ? *" then val telegramAction = getActions("telegram","telegram:telegramBot:XXXXXXXXXX") if((HeizungWohnzimmer_Currenttemperature.state as Number).intValue > (Weather_Current.state as Number).intValue) sendTelegram("Wohnzimmer Lüften!") end
Es wird die innen und außen Temperatur verglichen. Ist es drinnen wärmer als draußen, erhalte ich eine Benachrichtigung, dass ich das Wohnzimmer lüften soll. Das ist gerade im Sommer hilfreich.
Beispiel 2: Informationen auf Anfrage
Man kann sich aber auch Informationen auf Abruf zukommen lassen.
rule "Receive telegram" when Item telegramMessage received update "Info" then val telegramAction = getActions("telegram","telegram:telegramBot:XXXXXXXXXX") telegramAction.sendTelegram("Wohnzimmer Temperatur: %s", HeizungWohnzimmer_Currenttemperature.state.toString) end
Sobald ich „Info“ in den Chat schreibe, erhalte ich eine Antwort mit der aktuellen Temperatur im Wohnzimmer. Hier ist wichtig, dass auf Groß- und Kleinschreibung geachtet wird.
Euch wird die Zeile „val telegramAction…“ aufgefallen sein. Hiermit erstellen wir die Variable, um den Telegram Chat senden zu können. Ich hätte diese Variable am liebsten nur einmal als erste Zeile in der Datei deklariert, jedoch scheint es in dem Fall zu Problem zu kommen. Deswegen deklariere ich die Variable für jede Regel separat. Das X ersetzen wir wieder durch unsere Thing ID.