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:

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. 🙂

0 Kommentare

Hinterlasse ein Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.