ioBrokerioBroker Tutorials

Telegram Menus für den einfachen Zugriff von unterwegs auf ioBroker

In diesem Artikel zeige ich Dir, wie Du mit einem Telegram Menu von unterwegs dein Smart-Home steuern kannst.

Der Telegram-Adapter bietet neben der normalen Versand-Möglichkeit von Texten oder optional auch Bildern zudem die Möglichkeit über den Telegram-Bot Geräte im ioBroker zu steuern oder Informationen auszugeben. Hierzu kann zudem über eine weitere Tastatur eine Menü-Struktur / Button Übersicht angelegt werden, mit der z.B. Räume aufgelistet werden können oder Geräte gesteuert werden. Im Artikel werden wir nun ein eigenes Menü erstellen, mit dem wir ein Leuchtmittel steuern und zusätzlich noch Temperatur- und Luftfeuchtigkeitsinformationen abrufen.

Folgende Voraussetzungen müssen für diesen Artikel erfüllt sein:

Bevor wir mit der Einrichtung beginnen müssen wir zunächst prüfen ob der Adapter „Text to command“ installiert und aktiviert ist. Gehe dazu in die Adapter-Übersicht und suche nach „text2“. Du solltest hier den Adapter sehen. Falls der Adapter noch nicht installiert ist, kannst Du dies hier jetzt über die Plus-Schaltfläche erledigen.

Unter den Instanzen sollte der Adapter nun mit dem grünen Icon dargestellt werden.

Im nächsten Schritt müssen wir in der Telegram-Adapter Konfiguration die Instanz des „Text to command“ Adapter zuweisen. Dazu öffnest Du die Adapter-Konfiguration und wählst auf der Tab-Lasche „Nachrichten“ die „Text to command“ Instanz aus und klickst auf Speichern.

Wir haben nun die Grundlagen für die weitere Implementierung der Menü-Steuerung angelegt. Im nächsten Schritt wechseln wir nun in den Bereich „Skripte“. Da wir für die Menü-Steuerung für jedes Menü ein eigenes Script anlegen und zudem später noch weitere Scripte für den Informationsabruf benötigen, habe ich hier zunächst aus Gründen der Übersichtlichkeit einen neuen Ordner mit dem Namen „Telegram-Menu“ angelegt. Unterhalb von diesem Ordner werden wir im nächsten Schritt die benötigten Scripte hinterlegen.

Nun fügen wir auf dem Ordner ein neues JavaScript ein. Als Name habe ich Start gewählt. Als Script-Code können wir den folgenden Code einfügen:

sendTo('telegram.0', {
    text:   'Raum wählen',
    reply_markup: {
        keyboard: [
            ['Flur', ''],
            ['Wohnzimmer' ,''],
            ['Esszimmer' ,''],
            ['Status' ,'']
        ],
        resize_keyboard:   true,
        one_time_keyboard: false
    }
});

Das JavaScript sollte nun wie folgt aussehen. Über den Pfeil neben dem Script-Namen können wir dann das Script für die Ausführung aktivieren,

Im nächsten Schritt wechseln wir nun die in den Bereich Text -> Kommandos. Mit diesem Adapter werden können Telegram-Nachrichten analysiert und aufgrund der hinterlegten Regeln Aktionen ausgeführt werden. Im ersten Schritt legen wir nun über die Plus-Schaltfläche oben links eine neue Regel an. Als Regel-Art wählen wir Schaltete irgendwas an oder aus. Als Trigger-Worte habe ich hier den Begriff Übersicht gewählt. Im nächsten Schritt wählen wir im Feld Parameter unser Start-Script aus dem Ordner Telegram-Menu. Als Parameter-Wert geben wir hier true an.

Nun können wir ein weiteres JavaScript anlegen. Ich habe hier den Namen Esszimmer gewählt. In das Script kopieren wir den folgenden Inhalt:

sendTo('telegram.0', {
    text:   'Bitte wähle eine Aktion',
    reply_markup: {
        keyboard: [
            ['Übersicht', ''],
            ['Esszimmerlicht an', 'Esszimmerlicht aus']
        ],
        resize_keyboard:   true,
        one_time_keyboard: false
    }
});

Nach dem Speichern und Aktivieren des Scripts wechseln wir wieder in den Adapter Text -> Kommandos und legen über die Plus-Schaltfläche oben links eine weitere Regel an. In der Regel wählen wir wieder den Typ Schalte irgendwas an oder aus und wählen als Trigger-Wort Esszimmer. Als Parameter wählen wir das gerade angelegt Esszimmer Script aus. Als Parameter-Wert wähle ich hier wieder true.

Jetzt legen wir noch die beiden Regeln an, mit denen wir nun endlich den ersten Aktor steuern können. Hierzu wählen wir wieder den Typ Schalte irgendwas an oder aus sowie die folgenden im Screenshot ersichtlichen Werte. Die Trigger-Worte haben wir ja vorher schon im Menü verwendet, die Parameter sind nun die zu schaltenden Aktoren (On-State). Beim Einschalten nehmen wir dann true, beim Ausschalten false.

Wir können jetzt in die Telegram-App wechseln und unseren Bot öffnen. Im ersten Schritt geben wir nun das Trigger-Wort Übersicht ein. Nun erscheint die Antwort Raum wählen und es werden die vorher definierten Buttons im Tastatur-Bereich eingeblendet. Da wir bis jetzt nur die Menüs Übersicht und Esszimmer definiert und implementiert haben, klicken wir jetzt auf die Schaltfläche Esszimmer. Nun wird das Menü des Esszimmers geladen und im Tastatur-Bereich eingeblendet.

Über die Schaltflächen Esszimmerlicht an und Esszimmerlicht aus können wir nun den Aktor direkt steuern. Mit einem Klick auf die Schaltfläche Übersicht wird wieder das Übersichtsmenü eingeblendet.

Zudem habe ich noch ein weiteres Blockly-Script geschrieben, mit dem ich Status-Informationen von Türen oder Fenstern sowie Temperatur-Informationen anzeigen lassen kann. Hierzu habe ich zunächst das Blockly-Script mit dem Namen Status erstellt.

Im Script werden zunächst die Informationen über geöffnete Fenster oder Türen ermittelt. Im Beispiel prüfe ich derzeit nur zwei Türen. Im zweiten Teil des Scripts werden dann Informationen über Temperaturen und Luffeuchtigkeiten ermittelt und an die Zeichenkette angehängt. Aus Gründen der Übersichtlichkeit habe ich die Blöcke im Script zusammengefaltet. Für die Bearbeitung müsst ihr diese wieder entfalten.

Ich habe hier das gesamte Script als Download, so müsst ihr das Script nicht nachbauen, sondern könnt direkt eure Sensoren integrieren.

Blockly Status Script (3303 Downloads)

Nach dem das Script gespeichert und für die Ausführung aktiviert wurde, erstellen wir im nächsten Schritt den entsprechenden Eintrag im Text->Kommandos Adapter.

Als Regel wählen wir hier wieder Schalte irgendwas an oder aus. Als Trigger-Wort Status und als Parameter des Script Datenpunkts unser aktuell erstelltes Status Script. Zudem als Parameter-Wert true.

Wir können mit dem Telegram-Menü nun von unterwegs Aktoren schalten sowie Informationen aus unserem Smart-Home abrufen. Ich finde es wirklich ein sehr praktisches Hilfsmittel, falls VPN oder andere Lösungen nicht funktionieren.

Ich hoffe euch gefällt dieser Artikel. Über Kommentare unterhalb des Artikels oder per E-Mail freue ich mich wie immer 🙂

Matthias Korte

Hauptberuflich Software-Entwickler und seit einigen Jahren Smart-Home Fan. Angefangen hat alles mit einem RaspberryMatic und einer schaltbaren Steckdose. Mittlerweile habe ich einige Steckdosen, Sensoren, und Thermostate sowie ioBroker zur Visualisierung im Einsatz.

17 Gedanken zu „Telegram Menus für den einfachen Zugriff von unterwegs auf ioBroker

  • Michael Baer

    Hallo Matthias,
    Danke für das Tuto. Liest sich ganz gut. Kann es leider
    nicht testen, da ich im Urlaub bin.
    Grüße aus Puerto del Carmen
    Michael

    Antwort
  • Manfred

    Hallo Meister,
    funktioniert wunderbar einfach – aber wenn ich mehrere Geräte (>4?) steuern will, geht das Script nicht mehr (ich habe einfach eine Zeile hinzugefügt, aber dann passiert eben nix mehr). Geht das nicht oder mache ich einen Fehler?

    Antwort
  • Hallo Meister , konntest du bereits den Fehler finden? Ich stehe vor dem gleichen Problem.

    Antwort
    • Matthias Korte

      Moin zusammen, was für ein Fehler kommt denn bei euch?

      Antwort
  • t-master

    Hallo Mathias & tony & Manfred

    in Zeile 6 des JS-Scripts fehlt das Komma am ende der Zeile.

    6> [‚Esszimmerlicht an‘, ‚Esszimmerlicht aus‘] <

    Dann kann man auch noch mehrere Zeilen eintragen, die auch übermittelt werden (gerade getestet).

    Antwort
  • Matze Weh

    Hat bisher immer gut gekplappt.

    Seit letztem iobroker Update ist das importieren nicht mehr möglich.

    „TypeError: main.instances[i].match is not a function“

    Kann man da was machen?

    Antwort
  • Sebastian

    Hi,

    ich habe das Problem, dass er die Commands nicht umsetzt. Im log steht folgendes:

    telegram.0 2020-10-15 18:11:27.576 warn (29650) User XXXX hast not set an username in the Telegram App!!

    Ebenso gibt er mir nicht aus: „Licht RAUM XY ein/aus“

    Was hab ich falsch gemacht? Skripts sind genau wie in deiner Anleitung.

    Antwort
  • Moritz

    Hallo Matthias,

    danke für die super Erklärung.

    Wir haben jetzt ein kleines Problem und wollte dich fragen wie wir das umsetzen können.

    Wenn ich an meinen Bot „Licht“ schreibe, bekomme ich wie gewünscht die Optionen unsere Lichtsteuerung. Leider bekommt aber auch mein Frau jetzt per Telegramm die Licht-Optionen angezeigt, genau so andersherum. Kann man das Script auch iwie Personalisieren?

    liebe grüße

    Antwort
    • Constantin

      Hi Moritz, du kannst das folgendermaßen hinbekommen:
      im „sendto“ einfach statt „user“ den Paramter „chatId“ verwenden.

      > chatId: getState(„telegram.0.communicate.requestChatId“).val

      Durch die requestChatId bekommt dann nur der Nutzer, der den request ausgelöst hat die Meldung zurück.

      Antwort
      • Matthias

        Hi,

        erstmal Glückwunsch zu dieser Sammlung an guten Tutorials.
        haben mir bislang alle sehr weitergeholfen.
        An der Stelle die antworten nur an den anfragenden User zu schicken, komme ich jetzt leider nicht weiter. Im Script steht ja nirgendwo was vom user welchen man durch ChatID ersetzen kann.
        Besteht die möglichkeit hierfür eine genauere Erklärung zu erhalten oder ein Beispiel skript.

        gruß

        Matthias

        Antwort
  • Tomtom

    Hi Moritz,

    ich habe dies über die gespeicherten Nutzer aus dem Telegram-Adapter, Tab „Nachrichten“ gelöst. Dafür müssen die Scripte aber mit dem Zusatz „user“ angepasst werden (mehrere Namen: kommagetrennt) – Beispiel:

    sendTo(‚telegram.0‘, {
    text: ‚Bitte wähle eine Aktion‘,
    user: ‚NAME-AUS-TELEGRAMADAPTER-TAB-NACHRICHTEN‘,
    reply_markup: {
    keyboard: [
    [‚Übersicht‘, “],
    [‚Esszimmerlicht an‘, ‚Esszimmerlicht aus‘]
    ],
    resize_keyboard: true,
    one_time_keyboard: false
    }
    });

    VG
    Tom

    Antwort
  • Hallo Matthias,

    ich habe seit einigen Tagen das Problem das ich mehrmals täglich den text: …. den ich in den java scripten verwende über Telegram gesendet bekomme. Angefangen hat das „gefühlt“ nach dem Update auf js-controler 3.2. Oder einfacher beschrieben, jedes Script egal ob JS oder Blockly ohne Trigger in dem Telegramm vorkommt wird ausgeführt und schickt eine Meldung über Telegram.

    siehe auch
    https://forum.iobroker.net/topic/42567/scripte-ohne-trigger-seit-update-auf-js-3-2-probleme/6?_=1614092355366

    Vielen Dank im voraus für deine Zeit
    Gruß
    Dirk

    Antwort
    • Matthias Korte

      Hallo Dirk,

      ich hätte auch mal gerne das Log gesehen, habe aber gerade im Forums-Topic gesehen was los ist. Startet dabei auch der javascript Adapter neu, das wäre dann die Erklärung für die Meldungsflut.

      LG Matthias

      Antwort
  • heinz

    wenn ich zb in der telegram-app den verlauf leere, verschwinden damit auch die buttons. gibt es einen weg, diese wiederherzustellen (ohne das skript neuzustarten)?

    Antwort
  • Markus

    Super Anleitung hat mir gut geholfen!
    Ich habe die Skripte so angelegt wie es du gemacht hast.
    Funktioniert alles toll.

    Ein kleines Problem habe ich:
    Sobald ich auf einen Menübutton klicke wechselt er z.b. in die Übersicht.
    Der Text wird aufgerufen und das bei allen Benutzern die im Bot „angemeldet“ sind.

    Kann man das irgendwie unterbinden?

    Viele grüße Markus

    Antwort
  • Ansgar

    Hallo Matthias,
    schönes Tutorial.
    Eine Frage habe ich aber: Die Button tragen ja die Trigger Wörter.
    Kann ich den Button auch unsichtbare Trigger Wörter anhängen, damit die Button nicht so lang werden? Also z.B.:
    ‚Esszimmer‘ -> ‚Deckenlampe An‘ anstatt ‚Esszimmer Deckenlampe An‘
    ‚Wohnzimmer‘ -> ‚Deckenlampe An‘ anstatt ‚Wohnzimmer Deckenlampe An‘
    Je mehr Funktionen ich in mehreren Räumen habe, desto länger werden ja sonst die Namen.

    Antwort
  • Daniel

    Hallo,
    vielen Leiben dank für die Super Anleitung.

    Kann mir jemand bitte sagen/weiter helfen, wie ich das „Menü“ im start script ändern kann? Ich habe zum versuchen die oben genannte Sachen (Esszimmer, Flur…) gewählt. Würde das nun gerne ändern aber Telegramm übernimmt das nicht wenn ich einfach die Namen im Script ändere, da bleiben die erst erstellten Werte.

    Vielen Lieben Dank
    Lg Daniel

    Antwort

Schreibe einen Kommentar zu heinz Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht.