Telegram als Binding in openHAB integrieren
Eine meiner ersten Aktionen mit openHAB war die Integration für mobile Benachrichtungen mit Telegram. In meinem ersten Anwendungsfall wurde Telegram per Action angebunden und eine kleine Anleitung habe ich hier abgelegt.
Seit ein paar Versionen gibt es nun ein Telegram Binding. Mit diesem Binding ist auch ein einfacheres Verschicken von Nachrichten an Gruppen möglich. Es ist also höchste Zeit meine bestehende Umgebung zu aktualisieren / anzupassen.
Vorbereitung und Struktur
Weiterführende Informationen zu dem Thema findet Ihr hier. Einen Telegram-Bot habe ich bereits erzeugt, wenn Ihr dies noch benötigt, findet Ihr hier eine Anleitung.
Folgende Gruppen habe ich mir in Telegram erstellt für unser SmartHome erstellt:
- Eidelsburger SmtartHome (für allgemeine Nachrichten z.B. Wetterwarnungen, Müllkalender, Statusmeldungen, Rauchmelder)
- Eidelsburger SmartHome – Admin (für technische Nachrichten z.B. Neustart des Systems)
- Eidelsburger SmartHome – Test (für Testnachrichten und neue Konfigurationen)
Damit kann ich für mich persönlich und für die ganze Familie die jeweiligen Nachrichten entsprechen kanalisieren und priorisieren.
Gruppen-ID’s aus Telegram
- alle gewünschten Gruppen in Telegram für die weitere Verwendung erstellen
- in der Telegram-App eine neue Gruppe erstellen und die notwendigen Benutzer hinzufügen (den Bot hatte ich bereits für die Nachrichten erstellt)
- am Desktop-PC die URL https://web.telegram.org/ aufrufen
- mit der zugehörigen Telefonnummer anmelden
- den von Telegram verschickten Code vom mobilen Endgerät am Desktop-PC eingeben
- nun die notwendige Gruppe auswählen
- die URL in der Adressleiste sieht wie folgt aus: https://web.telegram.org/#/im?p=g1234567
- die eindeutige Gruppen-ID befindet sich nach dem “p=g” (in diesem Beispiel: 1234567)
- da alle Gruppen-Nummern in Telegram negativ sind, wäre die zu verwendende Nummer aus dem Beispiel: -1234567
openHAB-Binding
Hier gibt es ein paar Informationen über die Technik:
- Telegram Action – https://www.openhab.org/addons/actions/telegram/
- Telegram Binding – https://www.openhab.org/addons/bindings/telegram/
- in diesem Beispiel wird das Telegram Binding verwendet
- die Telegram Action ist parallel auch installiert und es sind keine Konflikte sichtbar
- aus meiner Sicht gab es die Action vor dem Binding (darum habe ich auch beides bei mir in dem System)
Das Binding ist über die Oberfläche wie folgt schnell und einfach installiert:
- PaperUI – Add-ons – ACTIONS – Telegram Action (1.14.0) – bereits installiert, also nicht notwendig
- PaperUI – Add-ons – ACTIONS – Telegram Binding (2.5.4) – INSTALL
Telegram.things
Im nächsten Schritt wird ein Thing entsprechend erstellt:
Thing telegram:telegramBot:HA_Bot [chatIds="-<channel main>","-<channel details>","-<channel test>", botToken="<token>", parseMode="Markdown"]
Hier ergänzt man in den chatIds die aus den Telegram-Gruppen extrahierten Nummern und passt seinen botToken entsprechend dem Bot an.
Telegram.items
Nun können die Standard-Items aus der Dokumentation hinzugefügt werden. Ich habe noch drei Variablen für die Verwendung der Telegram-ID’s erstellt (um mir etwas Tipparbeit zu sparen).
// Items for Telegram Groups String TELEGRAM_CHANNEL_SMARTHOME "-<channel main>" String TELEGRAM_CHANNEL_SMARTHOME_ADMIN "-<channel details>" String TELEGRAM_CHANNEL_SMARTHOME_TEST "-<channel test>" // Items for Telegram Groups String telegramLastMessage "Telegram Bot Last Message" { channel = "telegram:telegramBot:HA_Bot:lastMessageText" } String telegramLastMessageURL "Telegram Bot Last Message URL" { channel = "telegram:telegramBot:HA_Bot:lastMessageURL" } DateTime telegramlastMessageDate "Telegram Bot Last Message Date" { channel = "telegram:telegramBot:HA_Bot:lastMessageDate" } String telegramLastMessageName "Telegram Bot Last Message Sender" { channel = "telegram:telegramBot:HA_Bot:lastMessageName" } String telegramLastMessageUsername "Telegram Bot Last Message Username" { channel = "telegram:telegramBot:HA_Bot:lastMessageUsername" } String telegramLastMessageChatId "Telegram Bot Last Message chatId" { channel = "telegram:telegramBot:HA_Bot:chatId" } String telegramLastMessageReplyId "Telegram Bot Last Message replyId" { channel = "telegram:telegramBot:HA_Bot:replyId" }
Telegram.rules
Nun kann in einem Regelwerk ganz einfach eine Nachricht an eine Telegram-Gruppe verschickt werden.
val telegramAction = getActions("telegram","telegram:telegramBot:HA_Bot") telegramAction.sendTelegram(Long::parseLong(TELEGRAM_CHANNEL_HA_DETAILS), "%s %s", "Telegram Bot", "online")
In meinen bestehenden Rules-Dateien muss ich natürlich die vorherige Konfiguration der Telegram Action noch entsprechend suchen und aktualisieren (das wird bei den meisten Lesern nicht notwendig sein).
Fazit
Damit konnte ich mit relativ wenig Aufwand von den Telegram Actions auf das Telegram Binding wechseln. Die Action habe ich aktuell noch im System, wird aber von mir nicht mehr verwendet.
Jetzt kann ich meinen Bot auch an Gruppen einfach Nachrichten senden und die SmartHome-Funktion auf ein paar Anwender mehr verteilen.
Wie nutzt Ihr Telegram in eurem SmartHome? Habt Ihr ein anderes Nachrichtensystem verwendet? Mir würde ja noch eine Integration in Microsoft Teams sehr gut gefallen. 🙂