Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Text2command + Telegrambot - "künstliche Intelligenz" scripten?

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Text2command + Telegrambot - "künstliche Intelligenz" scripten?

    This topic has been deleted. Only users with topic management privileges can see it.
    • dslraser
      dslraser Forum Testing Most Active last edited by

      Ich habe keinen Benutzer eingetragen

      1 Reply Last reply Reply Quote 0
      • dslraser
        dslraser Forum Testing Most Active last edited by

        @lobomau:

        Das Script gefällt mir, habe ich eingebaut. `
        Ich habe für mich für die Batteriegeräte noch das gleiche Script gemacht, allerdings geht da nicht die komplette Abfrage für alle Geräte, dann kommt bei mir auch ne Fehlermeldung im Log (Sinngemäß: Nachricht zu lang) Hier sind die Wörter Batterie/voll/leer/Volt.

        ! ````
        on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
        var stateval = getState('telegram.0.communicate.request').val; // Statevalue in Variable schreiben
        var benutzer = stateval.substring(1,stateval.indexOf("]")); // Benutzer aus Statevalue extrahieren
        var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length); // Befehl/Text aus Statevalue extrahieren
        ! if (befehl.search(/(?=.*(\bBATTERIE\b|\bVOLL\b|\bLEER\b|\bVOLT\b)).+/ig) != -1) {
        sendTo('telegram', {
        user: benutzer,
        text: 'Für welchen Raum möchtest du die Batterie abfragen?',
        reply_markup: {
        inline_keyboard: [
        // [{ text: 'alle Räume', callback_data: '%Batalle'}],
        [{ text: 'Flur', callback_data: '%BatFlur'}],
        [{ text: 'Wohnzimmer', callback_data: '%BatWohnzimmer'}],
        [{ text: 'Badezimmer', callback_data: '%BatBadezimmer'}],
        [{ text: 'Gästezimmer', callback_data: '%BatGaestezimmer'}],
        [{ text: 'Schlafzimmer', callback_data: '%BatSchlafzimmer'}],
        ]
        }
        });
        }

        // Auswahl alle Räume oder einzeln.Alle Räume ist für Telegramm zu lang = Fehler im log
        /* else if (befehl === "%Batalle") {
        sendTo('telegram', {
        user: benutzer,
        text: "Batterien alle Räume angefragt",
        answerCallbackQuery: {
        text: 'Flur\nFlur Haustür ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nFlur Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nFlur Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        'Wohnzimme\nWohnzimmer Fenster links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Fenster rechts ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt',
        showAlert: true
        }
        });
        }*/
        else if (befehl === "%BatFlur") {
        sendTo('telegram', {
        user: benutzer,
        text: "Flur Batterie angefragt",
        answerCallbackQuery: {
        text:
        'Flur Haustür ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nFlur Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nFlur Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt',
        showAlert: true
        }
        });
        }
        else if (befehl === "%BatSchlafzimmer") {
        sendTo('telegram', {
        user: benutzer,
        text: "Schlafzimmer Batterie angefragt",
        answerCallbackQuery: {
        text:
        'Schlafzimmer Fenster links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nSchlafzimmer Fenster rechts ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nSchlafzimmer Wandthermostat ' + getState("hm-rpc.0.000A97099C2232.0.OPERATING_VOLTAGE").val +
        ' Volt\nSchlafzimmer Heizkörper links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nSchlafzimmer Heizkörper rechts ' + getState("hm-rpc.0.000A1709A1EBD5.0.OPERATING_VOLTAGE").val +
        ' Volt',
        showAlert: true
        }
        });
        }
        else if (befehl === "%BatGaestezimmer") {
        sendTo('telegram', {
        user: benutzer,
        text: "Gästezimmer Batterie angefragt",
        answerCallbackQuery: {
        text:
        'Gästezimmer Fenster links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nGästezimmer Fenster rechts ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nGästezimmer Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nGästezimmer Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt',
        showAlert: true
        }
        });
        }
        else if (befehl === "%BatWohnzimmer") {
        sendTo('telegram', {
        user: benutzer,
        text: "Wohnzimmer Batterie angefragt",
        answerCallbackQuery: {
        text:
        'Wohnzimmer Fenster links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Fenster rechts ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nWohnzimmer Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt',
        showAlert: true
        }
        });
        }
        else if (befehl === "%BatBadezimmer") {
        sendTo('telegram', {
        user: benutzer,
        text: "Badezimmer Batterie angefragt",
        answerCallbackQuery: {
        text:
        'Bad Fenster links ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nBad Fenster rechts ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nBad Wandthermostat ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val +
        ' Volt\nBad Heizkörper ' + getState("hm-rpc.0..0.OPERATING_VOLTAGE").val + ' Volt',
        showAlert: true
        }
        });
        }
        });

        [3822_bat.jpg](/assets/uploads/files/3822_bat.jpg)
        1 Reply Last reply Reply Quote 0
        • R
          robsdobs last edited by

          @dslraser:

          Ich habe keinen Benutzer eingetragen `

          Wenn nur eine Person den Bot Nutzer geht das. Sobald mehrere Nutzer den Bot nutzen, gehen alle Nachrichten ohne user immer an alle die den Bot nutzen. Daher im Multi-User Betrieb ist die Angabe des Benutzers schon sinnvoll.

          1 Reply Last reply Reply Quote 0
          • lobomau
            lobomau last edited by

            @dslraser:

            Ich habe keinen Benutzer eingetragen `
            Läuft bei dir telegram mit "ständig Abfragen" oder "Server"?

            Bei mir ständig Abfragen… ich suche noch nach der Ursache meiner Fehlermeldung.

            1 Reply Last reply Reply Quote 0
            • dslraser
              dslraser Forum Testing Most Active last edited by

              @lobomau:

              @dslraser:

              Ich habe keinen Benutzer eingetragen `
              Läuft bei dir telegram mit "ständig Abfragen" oder "Server"?

              Bei mir ständig Abfragen… ich suche noch nach der Ursache meiner Fehlermeldung. ` Ich bin gerade unterwegs, aber aus dem Kopf kann ich Dir sagen das ich keinen "Server" im Adapter konfiguriert habe. Im Moment nutze ich Telegram nur selbst und habe keinen weiteren Benutzer.

              1 Reply Last reply Reply Quote 0
              • B
                Basti1234 last edited by

                Danke für das Script, läuft super! Einzig die Fehlermeldung "ich verstehe xxx nicht" bekomme ich nicht raus. Hast du das gelöst?

                1 Reply Last reply Reply Quote 0
                • dslraser
                  dslraser Forum Testing Most Active last edited by

                  @Basti1234:

                  Danke für das Script, läuft super! Einzig die Fehlermeldung "ich verstehe xxx nicht" bekomme ich nicht raus. Hast du das gelöst? ` nein, habe mich drann gewöhnt.

                  1 Reply Last reply Reply Quote 0
                  • E
                    erkenbrecht last edited by

                    @BuZZy:

                    Hab auch mal text2command außen vor gelassen und kurz & schnell ein Script erstellt womit man erstmal nur die Temperatur abfragen kann.

                    Wenn man nicht genau definiert was man abfragen will dann kommt eine Rückfrage mit Vorschlägen.

                    Beschäftige mich erst seit 2 Wochen mit Javascript.. Also bitte habt Verständnis falls es "komplizierter" Code ist.. 😄

                    Geht bestimmt noch einfacher aber wie gesagt, bin Javascript Neuling. :mrgreen:

                    on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                        var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                        var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                        var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                        var unbekannt = [                                                           // Array für Antworten bei unbekanntem Befehl
                            'Ich weiß leider nicht was du meinst.',
                            'Das habe ich leider nicht verstanden.',
                            'Tut mir leid. Ich verstehe das nicht.'
                                        ];
                        var zufall = Math.floor(Math.random()*unbekannt.length);                    // Setzt eine zufällige Zahl für Antworten bei unbekanntem Befehl
                        
                        //createState('Telegram.Bot.Menu' + benutzer, '');                          // EVENTUELL Datenpunkt für "Menüführung" erstellen
                        //setState('Telegram.Bot.Menu' + benutzer, 'Ich bin hier');                 // EVENTUELL Schreiben in welchem Menü der Benutzer sich befindet.
                    
                    // Ab hier werden die zu beantwortenden Fragen definiert.
                    // /(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bWOHNZIMMER\b|\bSTUBE\b)).+/ig
                    // reagiert auf Sätze in denen die Wörter
                    // (TEMPERATUR oder WARM oder KALT) UND (WOHNZIMMER oder STUBE) vorhanden sind.
                    // Klar definierte Abfragen müssen logischerweise oben stehen (Wie ist die Temperatur im Wohnzimmer?),
                    // damit das Script aufhört zu laufen wenn eine passende Antwort gefunden wurde.
                    // Unklar definierte Abfragen wo der Bot nachfragen muss was gemeint ist müssen weiter unten definiert werden.
                    // (Wie ist die Temperatur drin?) - Antwort vom Bot: "Welcher Raum ist gemeint? - Vorschlag 1, Vorschlag 2?"
                    
                        if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bWOHNZIMMER\b|\bSTUBE\b)).+/ig) != -1) {
                            sendTo('telegram', {
                                user: benutzer,
                                text: 'Die Temperatur im Wohnzimmer beträgt ' + getState("hm-rpc.0.OEQ0295648.1.TEMPERATURE").val + '°C!',
                            });
                        } 
                        else if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bSCHLAFZIMMER\b)).+/ig) != -1) {
                            sendTo('telegram', {
                                user: benutzer,
                                text: 'Die Temperatur im Schlafzimmer beträgt ' + getState("hm-rpc.0.OEQ0291234.1.TEMPERATURE").val + '°C!',
                            });
                        } 
                        else if (befehl.search(/(?=.*(\bTEMPERATUR\b|\bWARM\b|\bKALT\b))(?=.*(\bDRINNE\b|\bDRIN\b|\bIM\b|\bIN\b)).+/ig) != -1) {
                            sendTo('telegram', {
                                user: benutzer,
                                text: 'Für welchen Raum möchtest du die Temperatur abfragen?',
                                reply_markup: {
                                    inline_keyboard: [
                                        [{ text: 'Wohnzimmer', callback_data: '%TempWohnzimmer'}],
                                        [{ text: 'Schlafzimmer', callback_data: '%TempSchlafzimmer'}]
                                    ]
                                 }
                            });
                        }    
                        
                    // Ab hier werden die Reaktionen auf die returns zu "unklaren" Fragen definiert.
                        
                        else if (befehl === "%TempWohnzimmer") {
                            sendTo('telegram', {
                                user: benutzer,
                                text: "Wohnzimmertemperatur angefragt",
                                answerCallbackQuery: {
                                    text: 'Die Temperatur im Wohnzimmer beträgt ' + getState("hm-rpc.0.OEQ0295648.1.TEMPERATURE").val + '°C!',
                                    showAlert: true
                                }
                            });
                        } 
                        else if (befehl === "%TempSchlafzimmer") {
                            sendTo('telegram', {
                                user: benutzer,
                                text: "Schlafzimmertemperatur angefragt",
                                answerCallbackQuery: {
                                    text: 'Die Temperatur im Schlafzimmer beträgt ' + getState("hm-rpc.0.OEQ0291234.1.TEMPERATURE").val + '°C!',
                                    showAlert: true
                                }
                            });
                        }
                        
                    // Wenn überhaupt kein Befehl erkannt wurde dann einen zufälligen Satz aus dem unbekannt Array senden
                    
                        else { 
                            sendTo('telegram', {user: benutzer, text: unbekannt[zufall]});
                        }
                    });
                    ```` `  
                    

                    Top. Genau sowas habe ich gesucht. Vielen Dank.

                    Was müsste ich in das Script noch reinschreiben, wenn ich über Telegram die Temperatur des Heizungsthermostates einstellen will? Also wenn ich dem Bot schreibe "Stelle Heizung im Wohnzimmer auf 22 Grad"

                    Hab jetzt schon eine Weile erfolglos gesucht ob ich etwas in der Art finde. Leider hab ich von Javascript so gar keinen Plan. In Blockly bekomme ich auch nur die einfachsten Sachen hin. Bin erst ein paar Tage dabei.

                    Beste Grüße

                    1 Reply Last reply Reply Quote 0
                    • F
                      Fischler last edited by

                      Moin moin,

                      In dem Script von dslRaser:

                      on({id: 'telegram.0.communicate.request', change: 'any'}, function (obj) {
                          var stateval = getState('telegram.0.communicate.request').val;              // Statevalue in Variable schreiben
                          var benutzer = stateval.substring(1,stateval.indexOf("]"));                 // Benutzer aus Statevalue extrahieren
                          var befehl = stateval.substring(stateval.indexOf("]")+1,stateval.length);   // Befehl/Text aus Statevalue extrahieren
                      
                           if (befehl.search(/(?=.*(\bBATTERIE\b|\bVOLL\b|\bLEER\b|\bVOLT\b)).+/ig) != -1) {
                              sendTo('telegram', {
                                  user: benutzer,
                                  text: 'Für welchen Raum möchtest du die Batterie abfragen?',
                                  reply_markup: {
                                      inline_keyboard: [
                                          [{ text: 'Flur', callback_data: '%BatFlur'}],
                                          [{ text: 'Wohnzimmer', callback_data: '%BatWohnzimmer'}],
                                          [{ text: 'Badezimmer', callback_data: '%BatBadezimmer'}], 
                                          [{ text: 'Gästezimmer', callback_data: '%BatGaestezimmer'}],
                                          [{ text: 'Schlafzimmer', callback_data: '%BatSchlafzimmer'}],
                                      ]
                                   }
                              });
                          }    
                      
                          ......
                      
                      

                      gibt es eine RegExp mommt

                      kann mir vielleicht jemand kurz die RegExp erklären?

                      /(?=.(\bBATTERIE\b|\bVOLL\b|\bLEER\b|\bVOLT\b)).+/ig*

                      Einiges habe ich schon selber heraus gefunden:

                      .* -> kein oder mehrere beliebige Zeichen

                      (\bBatterie\b|\bSpannung\b) -> allein stehendes Wort Batterie oder Spannung

                      .+ -> Ein oder mehrere beliebige Zeichen

                      i -> insensitiv (Klein und Großschreibung wird nicht beachtet)

                      g -> globale Suche

                      Wofür wird das ?= und das .+ benötigt ?

                      Da die Wörter Batterie, Voll, Leer und Volt ja alleine stehen (\bVoll\b) warum soll dann noch ein beliebiges Zeichen folgen?

                      Das ?= ist ja eine lookahead Anweisung aber davor steht ja nichts.

                      Ich hoffe Ihr könnt meinen Knoten im Kopf etwas lösen.

                      Danke schon mal.

                      1 Reply Last reply Reply Quote 0
                      • BBTown
                        BBTown @Uhula last edited by

                        @Uhula sagte in Text2command + Telegrambot - "künstliche Intelligenz" scripten?:

                        Ich bin gerade dabei eine ioBroker-AI/KI zu schreiben, mit der man, ähnlich dem Google-Assistenten, kommunizieren kann

                        Ich bin durch Zufall über diesen - zugegeben etwas älteren 😉 - Beitrag von dir gestolpert.
                        Mir blieb zunächst einmal der Mund offen stehen, als ich gelesen habe was Du urspünglich mal vorgehabt hast.

                        Da stellt sich für mich natürlich die neugierige Frage - Hast Du das Thema weiterverfolgt?
                        Gibt es es irgendetwas bei dem man in Form von testen oder ähnlichem unterstützen kann?

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

                        Support us

                        ioBroker
                        Community Adapters
                        Donate
                        FAQ Cloud / IOT
                        HowTo: Node.js-Update
                        HowTo: Backup/Restore
                        Downloads
                        BLOG

                        491
                        Online

                        31.9k
                        Users

                        80.2k
                        Topics

                        1.3m
                        Posts

                        16
                        38
                        8374
                        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