Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Praktische Anwendungen (Showcase)
    4. Heathcliff mein Telegram Bot

    NEWS

    • Neues Video über Aliase, virtuelle Geräte und Kategorien

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    Heathcliff mein Telegram Bot

    This topic has been deleted. Only users with topic management privileges can see it.
    • I
      ignis-draco last edited by

      Ich wollte euch mal meine Telegram Bot vorstellen.

      Übersicht:

      uebersicht.gif

      Heitzung:

      heitzung.gif
      Verwendete Adapter : MaxCul, ZigBee

      Wetter:

      wetter.gif
      Verwendete Adapter : DasWetter.com

      Tanken:

      tanken.gif
      Verwendete Adapter : Tankerkönig, Flot, Screenshop Phantom, History

      Licht:

      licht.gif
      Verwendete Adapter : ZigBee

      Saugroboter:

      sauger.gif
      Verwendete Adapter : Xiaomi/Roborock

      Einkausliste:

      einkaufen.gif
      Verwendete Adapter : Bring

      Musik:

      Musik.gif
      Verwendete Adapter :Logitech Squeezebox Adapter

      Schichtplan:

      schichtplan.gif
      Verwendete Adapter : -
      Benötigt: Nextcloud Kalender

      Aufbau

      Für jede Funktion gibt es eine Javascipt Datei so ist es leichter einzelne Funktionen zu entfernen oder hinzu zufügen.
      Neben der Auswahl über die Tastatur können die meisten Funktionen auch über Wörter gestartet werden (z.b. "Musik").
      Die Skripte sind zustandslos geschrieben somit kann man immer zwischen den Funktionen wechseln ohne das man was beachten muss.

      Bei Interesse kann ich auch Quellecode online stelllen jedoch ist der leider überhaupt nicht Dokumentiert noch
      verständlich geschrieben. Also muss ich den zumindest aufräumen damit der Überhaupt nachvollzogen werden kann.

      Xenon 1 Reply Last reply Reply Quote 0
      • Xenon
        Xenon Forum Testing Developer @ignis-draco last edited by Xenon

        @ignis-draco ich hab meinen T2C in Klassen geschrieben. So bleibt das ganze extrem übersichtlich und man mit minimalem Aufwand neue Funktionen implementieren.

        
        // Garage
        class garageClass {
            constructor() {
        
                this._name = 'Garage';
        
                this._action = async (/** @type {string} */ cmd) => setStateAsync('0_userdata.0.Garage.Aktion.Garagentor_fahren', cmd, true);
        
                this.oeffnen = () => this._action('auf');
                this.schliessen = () => this._action('zu');
                this.paket = () => this._action('paket');
                this.zustand = () => {
                    const id = getState(arrPath[1]).val;
                    const objMsg = {
                        msg: getState('0_userdata.0.Garage.Zustand.Zustand_Garage').val,
                        id: `${id}`,
                        user: objRequest[id].firstName
                    };
                    setState(telegram_msg, objMsg, true);
                };
            };
        };
        
        // Lichtsteuerung
        class lichterClass {
            constructor() {
                this._name = 'Licht';
        
                this._action = async (/** @type {string} */ path, /** @type {boolean} */ cmd, /** @type {boolean} */ ack) => setStateAsync(path, cmd, ack);
        
                this.aus = () => this._action('0_userdata.0.switches.main_Switch_Lights', true, true);
            };
        };
        
        // Sonstige Funktionen
        class sonstigesClass {
            constructor() {
                this._name = 'Sonstiges';
        
                this._action = async (/** @type {string} */ path, /** @type {boolean} */ cmd, /** @type {boolean} */ ack) => setStateAsync(path, cmd, ack);
        
                this.spritpreise = () => this._action('0_userdata.0.message.trigger.telegram_Spritpreise', true, true);
                
            };
        };
        
        // klassen erstellen
        let objClass = {
            garage: new garageClass(),
            lueftung: new lueftungClass(),
            licht : new lichterClass(),
            sonstiges : new sonstigesClass()
        };
        

        Jede Klasse ist ein eigenes Menu, jeder attribut ohne "_" am Anfang ein Button. Man braucht also auch keinen switch case oder sonst was bauen, einfach nur die Klasse mit den Funktionen einfügen und das wars

        übersicht.png

        danach öffnet sich das entsprechende Menu:

        garage.png

        Ich nutze das Wort vor dem ":" als keyword, das Wort nach dem ":" als command

                // Aktion ausfuehren
                objClass[keyword][cmd]();
        
        1 Reply Last reply Reply Quote 0
        • I
          ignis-draco last edited by

          @Xenon

          Das ist eine sehr interessante und auch elegante Möglichkeit wenn es jetzt noch möglich wäre die Classen in einzelne Dateien zu packen dann würde ich es sofort umstellen. Und diese ganzen Classen in global zu machen ist auch nicht wirklich sauber.

          Xenon 1 Reply Last reply Reply Quote 0
          • Xenon
            Xenon Forum Testing Developer @ignis-draco last edited by

            @ignis-draco du könntest dir ein eigenes node Modul erstellen, ich denke das wird mein nächster Schritt sein

            1 Reply Last reply Reply Quote 0
            • I
              ignis-draco last edited by ignis-draco

              @Xenon

              node Modul ?
              Meinst du damit NodeRed oder gibt es was neben Adapter und Skript das ich noch nicht kenne.

              Xenon 1 Reply Last reply Reply Quote 0
              • Xenon
                Xenon Forum Testing Developer @ignis-draco last edited by

                @ignis-draco du kannst ja ein node Modul erstellen und es dann in den js Adapter importieren. Ein Adapter ist ja auch nichts anderes als ein node Modul

                1 Reply Last reply Reply Quote 0
                • I
                  ignis-draco last edited by

                  @Xenon

                  Oh stimmt daran habe ich noch gar nicht gedacht. Werde mich mal schlau machen wie so etwas geht und was die Vor und Nachteile sind. Mir fehlt nämlich häufiger die Möglichkeit zur Kapselung und Aufteilung in Dateien.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post

                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  903
                  Online

                  32.0k
                  Users

                  80.5k
                  Topics

                  1.3m
                  Posts

                  2
                  7
                  858
                  Loading More Posts
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes
                  Reply
                  • Reply as topic
                  Log in to reply
                  Community
                  Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                  The ioBroker Community 2014-2023
                  logo