Der Bot weiß immer eine Antwort
Auf dieser Seite
So ein Telegram-Bot, der auf Befehle reagiert, ist ja nicht unbedingt selbsterklärend. Wobei … warum eigentlich nicht? Alles, was es braucht, ist ein kleines WebUI-Programm – und schon erklärt der Bot, was er alles kann, wenn er etwas nicht versteht.
Strings in HomeMatic-Scripten
Durch String-Verwendung in HomeMatic-Scripten kann die CCU fehlerhaft arbeiten, instabil werden oder sogar abstürzen. Grundsätzlich gilt: Je öfter mit Strings hantiert wird, desto eher führt dies zu Problemen.
Ich empfehle daher, nach Umsetzung dieser Anleitung die CCU unter Beobachtung zu halten.
Benennung von Systemvariablen
Prinzipiell kann man Systemvariablen – so wie allen Objekten in der CCU – beliebige Namen geben, also z. B. auch Umlaute und Sonderzeichen verwenden. Ich empfehle jedoch, sich auf reguläre Buchstaben (a-z, A-Z) zu beschränken: Bei Umlauten und Sonderzeichen besteht die Gefahr, dass Systemvariablen in Scripten nicht überall gefunden werden.
Telegram bietet selbst die Möglichkeit, einem Bot eine Hilfefunktion zu spendieren. Über den Botfather kann man die Befehle und Erläuterungen hineinkonfigurieren. Das sieht gut aus und hat den Vorteil, dass der Bot auf Hilfe-Anfragen sofort reagiert.
Da ich aber keine Lust habe, bei neuen Programmen an zwei Stellen etwas zu ändern (in der CCU und bei Telegram), lasse ich die Hilfe über ein WebUI-Programm generieren.
Die Idee ist, dass meine Programme, die auf die Befehle an den CCU-Bot reagieren, die Systemvariable Telegram.Command nach getaner Arbeit zurücksetzen. Zur Entzerrung der Systemlast lasse ich die Programme mit einigen Sekunden Verzögerung auslösen, aber nach 29 Sekunden sollte alles durch sein. Wenn dann Telegram.Command noch irgendeinen Inhalt hat, springt mein Hilfe-Programm an und gibt seine hilfreiche Antwort.
Das WebUI-Programm ist wieder mal sehr kompakt.
Wieder lasse ich es auf Telegram.Command reagieren, und wieder reagiert es nur, wenn Telegram.Command irgendeinen Inhalt hat.
Das Script wird dann mit 29 Sekunden Verzögerung ausgeführt.
gesamtes Script markieren / kopieren
! HomeMatic-Script ! EINE KLEINE HILFESEITE ! http://www.christian-luetgens.de/homematic/ccubot/hilfe/Hilfe-Bot.htm object o = dom.GetObject ("Telegram.Command"); if (o.Value() != "") { string txt = "*Befehl nicht erkannt*" # "\n" # o.Value() # "\n\n" # "*Befehlsübersicht*" # "\n" # "/service" # "\n" # " _Servicemeldungen erneut senden_" # "\n" # "/bewegung" # "\n" # " _Übersicht Bewegungsmelder-Status_" # "\n" # "/heizung" # "\n" # " _Übersicht Raumthermostate_"; dom.GetObject ("Telegram").State (txt); o.State (""); } ! Ende des Scripts
Zunächst suche ich mir wieder meine Systemvariable heraus, in der der Befehl steht. Wenn sie nicht leer ist – also kein anderes Script einen Befehl erkannt und „abgeholt“ hat –, wird txt mit einem Hilfetext gefüllt. Hier tobe ich mich reichlich mit den Markdown-Formatierungen des Telegram-Bots aus.
Zum Schluss wird die Nachricht über das T-Framework gesendet und Telegram.Command zurückgesetzt.
Zum Test schicke ich ein „Lorem ipsum“ an den Bot.
Nachdem der CCU-Bot die Nachricht abgeholt hat, kommt knappe 30 Sekunden später die Antwort.
Die Befehle sind sogar anklickbar bzw. auf dem Smartphone antippbar, erkennbar an der farblichen Hervorhebung. Ein Tipp und sie werden abgesendet. Im Gegensatz zu QuickAccess ist der Bot allerdings auch außerhalb meines heimischen LANs erreichbar, ohne dass ich ein Loch in die Firewall bohren oder auf Cloud-Dienste zurückgreifen müsste