[DIY Smart Home] Teil 5: Der Telegram-Adapter
Du hattest jetzt lange genug Zeit, um im ioBroker rumzuspielen, denn jetzt geht’s weiter mit dem Telegram-Adapter. Damit wird es uns nun möglich, unser SmartHome sicher aus der Ferne zu steuern, ohne direkten Zugriff auf das Heimnetzwerk bzw. den ioBroker zu haben. Ebenso kann uns unser SmartHome Nachrichten senden. Wie das geht? Einfach weiterlesen!
Telegram-Adapter installieren
Wir wechseln in unserem ioBroker zum Tab Adapter und suchen uns dort den Telegram-Adapter raus. Durch den Klick auf das „+“-Icon wird dieser installiert.
Ist die Installation fertig, öffnen sich auch schon die Adapter-Einstellungen. Jetzt möchte der Adapter einen Token von uns und wie wir daran kommen, schauen wir uns im nächsten Absatz an.
Einen neuen Bot einrichten
Wir öffnen Telegram, egal ob am Smartphone oder am PC und suchen nach dem BotFather. Anschließend klicken wir im Chatfenster auf Start. Um unseren Bot zu erstellen, geben wir /newbot ein und schon werden wir nach dem Namen für unseren Bot gefragt. Iron Man-Fans finden hier sicherlich sofort einen Namen.. 😉 Ich nenne den Bot einfach mal Mein SmartHome. Als nächstes braucht unser Bot einen Benutzernamen, ohne Leerzeichen und muss mit bot enden! In meinem Fall meinsmarthomebot und nach Absenden des Namens bekommen wir, insofern dieser nicht schon vergeben ist, unseren Token. Kleine Randnotiz: Der Username des Bots ist eigentlich egal, denn diesen seht ihr später nicht, sondern nur den Namen.
Den Token fügen wir nun in unseren Telegram-Adapter unter dem entsprechenden Feld ein. Beim Punkt Passwort kannst Du dir noch ein Passwort eintragen, das muss beim Starten des Bots eingegeben werden, sodass nicht jeder dein SmartHome steuern kann, und klicken nun auf speichern und starten den Adapter.
Der Bot steuert unser Smarthome
Wir suchen nun in der Telegram-Suche den Usernamen unseres Bots und starten eine Unterhaltung mit ihm. Und schon werden wir nach unserem Passwort gefragt, das wir zuvor im ioBroker hinterlegt haben. Dieses geben wir mittels /password deinPasswort ein, also in meinem Fall /password 123456, und schon werden wir begrüßt.
Aber warum eigentlich Telegram? Vielleicht fragst Du dich das schon die ganze Zeit; nun die Antwort ist einfach: Nebst Sicherheit bietet Telegram auch die tolle Möglichkeit, Buttons einblenden zu lassen. Somit müssen wir die Befehle nicht jedes Mal tippen, sondern können diese einfach per Tastendruck ausführen. Und dazu erstellen wir uns im Tab Skripte ein neues Script, wählen aber dieses Mal nicht Blockly aus, sondern Javascript, denn das Anzeigen der Buttons lässt sich mit Bausteinen leider nicht umsetzten. Und nun einfach nachfolgenden Code via Copy & Paste bei euch einfügen:
sendTo('telegram.0',{ text: 'Hier sind die Buttons:', user: 'Username', reply_markup: { keyboard: [ ['Stehlampe an', 'Stehlampe aus'], ['Saugroboter an', 'Saugroboter aus'], ], resize_keyboard: true, one_time_keyboard: true } });
Hierbei kannst Du den text anpassen, dieser wird immer dann angezeigt, wenn Du das „Hotword“, welches wir gleich festlegen, an deinen Bot sendest, damit die Buttons auch angezeigt werden. Beim Punkt user legen wir fest, an welchen Nutzer die Nachricht gehen soll, bspw. wenn man mit seiner Familie das SmartHome betreibt, kann man hier einzelne Personen festlegen oder falls bspw. irgendjemand das Passwort deines Bots rausfinden sollte, bekommt er trotzdem keine Benachrichtigungen, da die Nachrichten ja an dich gehen. Und euren Namen für den Punkt user findet ihr im Reiter Objekte -> telegram.0 -> communicate -> users.
Beim Punkt keyboard legen wir die Namen der Buttons fest. Alles, was in einer eckigen Klammer steht, ist eine Zeile und durch ein Komma wird quasi ein neuer Button in derselben Zeile erstellt. So kann auch ein großer Button unter zwei kleineren Buttons angezeigt werden etc. Beispiele dazu:
Speichern wir das Script ab und starten es, sollte sich unser Bot schon mit den entsprechenden Buttons melden, doch noch passiert nichts, denn dazu benötigen wir noch einen Adapter.
text2commands als Vermittler
So, unser Script für unsere Buttons steht, aber wie rufen wir diese nun in Telegram ab? Dazu brauchen wir den Adapter, genannt text2commands, welcher Text (von Telegram) in Befehle umwandelt. Also suchen wir im Reiter Adapter nach diesem und installieren ihn. Anschließend wechseln wir nochmal kurz zum Tab Instanzen und gucken, ob der text2commands-Adapter läuft, klicken hier nochmal auf den Telegram-Adapter und wählen bei Text2Command Instance die eben installierte Instanz aus und speichern das Ganze ab. Sollte bei dir jetzt oben kein neuer Reiter erschienen sein, dann lade einfach die Seite neu und schon sollte der Text->Kommandos.0-Reiter zu sehen sein. Wir klicken drauf und erstellen uns direkt eine neue Regel, indem wir links oben auf das „+“-Icon drücken.
Bei Regel wählen wir Schalte irgendetwas an oder aus, bei dem Punkt Trigger-Worte kannst Du dein „Hotword“ reinschreiben, also das, was Du in Telegram eintippen möchtest, damit der nachfolgende Befehl ausgeführt wird. Somit nenne ich es beispielhaft „Hilfe“, um meine Buttons angezeigt zu bekommen. Bei Parameter (das 1.) müssen wir nun den Pfad zu unserem (Button-) Script angeben. Dazu klicken wir auf das Ordner-Icon und gehen auf javascript.0 -> scriptEnabled und suchen hier nach dem Script.
In meinem Fall findet sich dieses im Ordner Telegram. Wir wählen dieses mit Select aus und geben bei Parameter (das 2.) true ein.
Wieso, weshalb, warum? Wir „starten“ an dieser Stelle quasi das Script nochmal, obwohl es schon läuft. Du erinnerst dich an vorher, wo Du das Script gespeichert und gestartet hast? Da hat sich dein Bot ja mit den Buttons gemeldet, genau das passiert hier dann auch. Du könntest so auch bspw. Scripte ausschalten, indem Du statt true einfach ein false einträgst. Und das müssen nicht nur Scripte sein, hier kannst Du jedes Objekt nach belieben steuern.
Den Quittungstext lassen wir in diesem Fall leer, da unser Script ja schon einen Quittungstext enthält. Fertig. Speichern müssen wir hier nichts, das läuft automatisch. Schreiben wir unserem Bot das „Hotword“, also bei mir „Hilfe“, sollte er dir mit den Buttons antworten. Falls nicht, ist irgendwo etwas schiefgelaufen.
Den Buttons den letzten Schliff verpassen
Wir können nun unsere Buttons abrufen, allerdings noch nicht bedienen. Dazu gehen wir nochmal in den Tab Text->Kommandos.0 und legen eine neue Regel an. In diesem Fall wählen wir Schreibe Text in den Zustand, als Hotword müssen wir jetzt den Namen des Buttons 1:1, also Groß- und Kleinschreibung beachtet, eintragen. Bei Parameter (1) wählen wir nun unter Eigene_Dateien.0 unser Stehlampe_an/aus-Objekt aus. (Du erinnerst dich? Dieses haben wir in Teil 4 erstellt) Paramter (2) erhält den Wert true (fürs Einschalten) und als Quittungstext können wir nun sowas eingeben wie „Stehlampe wurde eingeschaltet“. Selbiges machen wir noch für Stehlampe aus, nur dass wir statt true false eingeben und den Quittungstext entsprechend anpassen.
Klicken wir nun in Telegram auf den Button Stehlampe an, sollte der Quittungstext angezeigt werden und die Lampe angehen. Klicken wir auf Stehlampe aus, passiert selbiges, nur dass die Lampe dabei ausgeht.
Wir senden via Telegram den Text „Stehlampe an“ an unseren ioBroker, genauer gesagt an den text2commands-Adapter. In diesem haben wir hinterlegt, dass er beim Objekt Stehlampe_an/aus den Wert true eintragen soll. Somit weiß unser Script, welches wir im vorherigen Teil erstellt haben, dass es die Lampe einschalten soll. Selbiges funktioniert umgekehrt mit dem Wert false.
Und nach diesem Schema kannst Du alle deine Scripte steuern. Es besteht deutlich mehr Potenzial als das gerade gezeigte, aber mit etwas Kreativität und Rumprobieren und -spielen kann man viele geniale Sachen damit bauen.
Das Senden von Nachrichten
Wir können auch unser SmartHome Nachrichten an uns per Telegram senden lassen. Dazu haben wir in Blockly nun unter Sendto einen neuen Telegram-Baustein. Dieser sollte selbsterklärend sein, allerdings packe ich euch noch einen kleinen Screenshot hierher, wie ich das bspw. für meinen Saugroboter gemacht habe.