Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. ioBroker Allgemein
    4. Konfiguration text2command

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    Konfiguration text2command

    This topic has been deleted. Only users with topic management privileges can see it.
    • D
      derrapf last edited by

      Hallo

      Habe mit text2command ein neues Spielzeug entdeckt.

      SUPER!

      Aber ich komme mit der Konfiguration nicht klar.

      Die Anleitung auf https://github.com/ioBroker/ioBroker.text2command ist grösstenteils auf englisch und dort wird nur von "blinds" geredet. D.h. ich weiss grad nicht ob ich in den Aufzählungen auch "Rollläden" verwenden kann oder nur "blinds" verwenden darf.

      Wenn ich das alles richtig verstanden habe müsste ich jetzt erstmal in den Aufzählungen Eine mit "blinds" anlegen und die Rolladen zuordnen:
      743_bild2.jpg
      Wenn ich das mache wird aber nichts zugeordnet. Das mittlere Fenster in Screenshot oben bleibt leer. Was mach ich da falsch?

      Das ist dann wohl auch der Grund warum dann hier nichts editierbar ist, oder?:
      743_bild1.jpg
      Die Anleitung auf http://www.iobroker.net/docu/?page_id=4711&lang=en verstehe ich leider auch nicht richtig. Die Screenshots sind in russisch; ich kann kaum ahnen was da steht und zweitens ist das English für mich stellenweise schwer verständlich.

      Z.B. blick ich grad nicht was ich da tunen soll: "In order to use these rules, one should tune up the categories,"

      Ich gehe mal davon aus, dass er "set up" categories meint. Aber was sind "categories"? Ich kann nirgends in IOBroker Kategorien finden. Ich nehme an er meint die Aufzählungen, zumindest sieht der Screenshot danach aus. Danach gehts mit irgendeiner Arduino Variable weiter (die sicher jeder hat); ich nehme mal an damit ist irgend ein Datenpunkt wie zum Beispiel der Level des Rolladens gemeint. Der nächste Screensht scheint dann aber bei den Objekten zu sein wo er dann die Zuordnung zur Aufzählung macht (also in meinem Fall "blinds").

      Wenn ich das richtig verstanden habe dann müsse ich also noch das hier machen:
      743_bild3.jpg
      Dann sieht man die beiden auch unter den Aufzählungen.

      Aber trotzdem ist der Befehl für die Rolläden nicht editierbar und ich kann auch keinen Datenpunkt auswählen wie bei der Temp. oben. D.h. irgendwas hab ich noch nicht verstanden oder falsch gemacht.

      Vielleicht kann mir jemand auf die Sprünge helfen.

      PS. Ich habe bei den enums "blind" und "blinds" ausprobiert. Geht beides nicht.

      edit: ch habe gerade bei den Schaltern gesehen, dass da scheinbar kein Datenpunkt angeboten wird, sondern es automatisch mit allen Schaltern geht (Licht im Esszimmer hab ich grad mal ausprobiert).

      Wenn das mit den Rolläden auch so ist; dann hab ich vielleicht noch nicht das richtige Sesam-öffne Dich gesagt?

      Müsste nicht "Rolläden im Wohnzimmer auf 50%" oder "Rolladen im Wohnzimmer zu" funktioniern? Und warum kann ich die Keywords nicht editieren?

      Beide Sätze gehen nicht.

      Und noch ne Frage: Wie kann ich denn per Text2Command ein CCU-Progamm starten?

      Gruss Ralf

      1 Reply Last reply Reply Quote 0
      • Jeeper.at
        Jeeper.at last edited by

        @derrapf:

        Und noch ne Frage: Wie kann ich denn per Text2Command ein CCU-Progamm starten?

        Gruss Ralf `

        Also zumindest das kann ich beantworten.

        Du legst auf deiner CCU eine Systemvariable an mit der dein Programm welches du starten möchtest getriggert wird. Diese Variable kannst du mit Text2Command ändern.

        LG

        Günther

        1 Reply Last reply Reply Quote 0
        • P
          pix last edited by

          Hallo Ralf,

          ich verstehe den txt2command Adapter etwas anders.

          Du stelltst unter Kategorie grob die Art der Schaltung ein (Schalte irgendetwas).

          Dann die Triggertworte: Rollladen/Rollo/Jalousie Wohnzimmer zu/schließen

          Dann die ID des Datenpunktes für die Werteingabe, dann den Wert 0 für zu und evtl. eine Antwort. Ist bei Rollläden wohl überflüssig.

          Die Haken in der dritten Spalten sind für die Abarbeitung von oben nach unten. Normalerweise werden die Bedingungen/Trigger Worte geprüft bis zu einem Treffer. Bei einem Treffer wird die Aktion ausgeführt und dann die weitere Prüfung angehalten.

          Wenn du aber mehre Rollläden im WZ hast, die gesetzt werden sollen, musst du für jeden Rollladenaktor einen Zeile schreiben und die entsprechende ID einsetzen und den Haken weglassen. Erst beim letzten Rollladen setzt du den Haken.

          Der Text (für die Triggerworte) kann auf mehrere Arten in den Adapter kommen. Per telegram, per SPracheingabe-Widget in VIS (nicht unter iOS), per Handeingabe in Admin/Objekte, aber immer im Datenpunkt text2command.0.text (je nach Instanz).

          Gruß

          Pix

          1 Reply Last reply Reply Quote 0
          • D
            derrapf last edited by

            Hi Pix
            @pix:

            Du stelltst unter Kategorie grob die Art der Schaltung ein (Schalte irgendetwas).

            Dann die Triggertworte: Rollladen/Rollo/Jalousie Wohnzimmer zu/schließen

            Dann die ID des Datenpunktes für die Werteingabe, dann den Wert 0 für zu und evtl. eine Antwort. Ist bei Rollläden wohl überflüssig. `
            Genau. So also:
            743_bild4.jpg
            Aber ich kann eben nicht die Keywords editieren und ich kann nicht einen Datenpunkt einstellen. Das ist mein Problem.

            Selbst wenn man nun keinen Datenpunkt einstellen muss, weil es über die Zuordnung der Funktionen in den Aufzählungen geht, müsste man doch die Keywords editieren können oder? Aber die sind ja ausgegraut.

            Abgesehen davon funktionieren die Keywords bei mir nicht. Der Rolladen bewegt sich kein Stück obwohl er der Aufzählung enum.function.blind zugeordnet ist.

            > Die Haken in der dritten Spalten sind für die Abarbeitung von oben nach unten. Normalerweise werden die Bedingungen/Trigger Worte geprüft bis zu einem Treffer. Bei einem Treffer wird die Aktion ausgeführt und dann die weitere Prüfung angehalten.
            D.h. Du meinst, dass die "Rolladen im Wohnzimmer runter" vorher abgefangen wird aber nichts getan wird? Dann shifte ich das mal hoch…Nee keine Änderung

            > Wenn du aber mehre Rollläden im WZ hast, die gesetzt werden sollen, musst du für jeden Rollladenaktor einen Zeile schreiben und die entsprechende ID einsetzen …
            Ja aber wo?? Wo setze ich die ID ein?

            > Der Text (für die Triggerworte) kann auf mehrere Arten in den Adapter kommen. Per telegram, per SPracheingabe-Widget in

            Den benutze ich…

            Was mir auch noch nicht klar ist: Muss in dem Satz, den ich sage, immer ein Raum dabei sein? Wenn ich zum Beispiel sagen möchte "TV einschalten": Dann will ich nicht noch extra "im Wohnzimmer" dazu sagen müssen, da ich ja nur einen TV hab.

            Wenn ich das tue komme ich aber gleich zum nächsten Fehler "Man muss sagen womit man was machen will", kommt dann vom Adapter.

            Hab ich doch: "TV im Wohnzimmer an":
            743_bild5.jpg

            Gruss Ralf

            1 Reply Last reply Reply Quote 0
            • D
              derrapf last edited by

              Hallo Günther
              @Jeeper.at:

              @derrapf:

              Und noch ne Frage: Wie kann ich denn per Text2Command ein CCU-Progamm starten?

              Gruss Ralf `

              Also zumindest das kann ich beantworten.

              Du legst auf deiner CCU eine Systemvariable an mit der dein Programm welches du starten möchtest getriggert wird. Diese Variable kannst du mit Text2Command ändern. `
              Boah. Das ist aber ein unschöner Workaround. D.h. ich muss ein Programm schreiben um ein Programm zu starten. Und ich brauch zig unnötige Systemvariablen…

              Da sollte man vielleicht in Betracht ziehen den Adapter so zu erweitern, dass man auch Programme starten kann..

              Gruss Ralf

              1 Reply Last reply Reply Quote 0
              • Jeeper.at
                Jeeper.at last edited by

                Hallo,

                Du musst kein Programm schreiben welches ein Programm startet. Sondern das Programm welches du final starten willst horcht auf die Systemvariable.

                Lg

                Günther

                1 Reply Last reply Reply Quote 0
                • D
                  derrapf last edited by

                  Mal ne Frage an die/den Programmierer:

                  Kann es sein, dass hier ein Fehler ist (bin grad mal durch die Sourcen)?:

                  Da steht überall "Rolllade".

                  Muss das nicht "Rolladen" heissen?

                  Keiner sagt "die Rollade"

                  Dann einmal mit drei l und einmal mit zwei l geschrieben.

                  Oder ist das hier Wurst?

                  // Translation of functions, used for detection
                  var functions = {
                      "backlight/beleuchtung/подсветка":    {"ru" : "подсветк/светильник","de": "beleuchtung/rücklicht", "en": "back light/back light/rear light" },
                      "light/licht/свет":                   {"ru" : "свет/лампу/лампа",   "de": "licht/lampe",     "en": "light/lamp" },
                      "heating/heizung/отопление":          {"ru" : "отопление/батаре",   "de": "heizung",         "en": "heating" },
                      "blind/rollade/rolladen/жалюзи/окна": {"ru" : "жалюзи/ставни",      "de": "rolllade",        "en": "shutter" },
                      "music/musik/музыка":                 {"ru" : "музык",              "de": "musik",           "en": "music" },
                      "security/sicherheit/alarm/alarmanlage/сигнализация/охрана": {"ru" : "сигнал/охран", "de": "sicherheit/alarm", "en": "security/alarm" },
                      "lock/door/schloß/tür/замок/дверь":   {"ru" : "замок/дверь/ворота", "de": "verschluß/schloß/tür","en": "lock/door" }
                  };
                  
                  // Used for answer
                  var functionsGenitive = {
                      "backlight/beleuchtung/подсветка":    {"ru" : "подсветки",          "de": "e Beleuchtung",  "en": "back light" },
                      "light/licht/свет":                   {"ru" : "ламп",               "de": "e Lampen",       "en": "light" },
                      "heating/heizung/отопление":          {"ru" : "отопление",          "de": "e Heizung",      "en": "heating" },
                      "blind/rollade/rolladen/жалюзи/окна": {"ru" : "жалюзей",            "de": "e Rolllade",     "en": "shutter" },
                      "music/musik/музыка":                 {"ru" : "музыки",             "de": "e Musik",        "en": "music" },
                      "security/sicherheit/alarm/alarmanlage/сигнализация/охрана": {"ru" : "сигнализации", "de": "e Sicherheitssystem", "en": "security" },
                      "lock/door/schloß/tür/замок/дверь":   {"ru" : "замков",             "de": "e Verschluße",   "en": "lock" }
                  };
                  
                  // Used for answer
                  var functionsAccusative = {
                      "backlight/beleuchtung/подсветка":    {"ru" : "подсветку",          "de": "die Beleuchtung","en": "back light" },
                      "light/licht/свет":                   {"ru" : "свет",               "de": "das Licht",      "en": "light" },
                      "heating/heizung/отопление":          {"ru" : "отопление",          "de": "die Heizung",    "en": "heating" },
                      "blind/rollade/rolladen/жалюзи/окна": {"ru" : "жалюзи",             "de": "die Rolllade",   "en": "shutter" },
                      "music/musik/музыка":                 {"ru" : "музыку",             "de": "die Musik",      "en": "music" },
                      "security/sicherheit/alarm/alarmanlage/сигнализация/охрана": {"ru" : "сигнализацию", "de": "das Sicherheitssystem", "en": "security" },
                      "lock/door/schloß/tür/замок/дверь":   {"ru" : "замок",              "de": "den Verschluß",  "en": "lock" }
                  };
                  
                  

                  Gruss Ralf

                  1 Reply Last reply Reply Quote 0
                  • D
                    derrapf last edited by

                    Wenn wir schon dabei sind:

                    SimpleAnswers.js: Hier sind ein paar Übersetzungsfehler drin. Ich würde folgende Änderungen vorschlagen:

                    /* jshint -W097 */// jshint strict:false
                    /*jslint node: true */
                    'use strict';
                    
                    //noinspection JSUnresolvedVariable
                    var functionsGenitive = require(__dirname + '/functions').functionsGenitive;
                    //noinspection JSUnresolvedVariable
                    var roomsDative = require(__dirname + '/rooms').roomsDative;
                    
                    function getRandomPhrase(arrOrText) {
                        if (typeof arrOrText === 'string') {
                            arrOrText = arrOrText.split('/');
                        }
                    
                        if (typeof arrOrText === 'object') {
                            if (arrOrText.length > 1) {
                                var randomNumber = Math.floor(Math.random() * arrOrText.length);
                                if (randomNumber > arrOrText.length - 1) {
                                    randomNumber = arrOrText.length - 1;
                                }
                                return arrOrText[randomNumber];
                            } else {
                                return arrOrText[0];
                            }
                        } else {
                            return arrOrText;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayIDontKnow(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'ru') {
                            toSay = getRandomPhrase(["Извините, но ", "Прошу прощения, но ", ""]) +
                                getRandomPhrase(["Я не знаю", "Нет данных"]);
                        }
                        else if (lang == 'de') {
                            toSay = getRandomPhrase(["Entschuldigen sie. ", "Es tut mir leid. ", ""]) +
                                getRandomPhrase(["Ich weiss nicht", "Keine Daten vorhanden"]);
                        }
                        else if (lang == 'en') {
                            toSay = getRandomPhrase(["I am sorry, but ", "Excuse me. ", ""]) +
                                getRandomPhrase(["I don't know", "No data available"]);
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayNoName(lang, text, args, ack, cb) {
                        var toSay;
                    
                        if (lang == 'ru') {
                            toSay = 'Обращайся ко мне как хочешь. У меня нет имени';
                        }
                        else if (lang == 'de') {
                            toSay = 'Nenne mich wie du willst. Ich habe keinen Namen.';
                        }
                        else if (lang == 'en') {
                            toSay = "Call me as you wish. I don't have a name";
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayIDontUnderstand(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'ru') {
                            if (!text) {
                                toSay = 'Я не поняла комманду';
                            }
                            else {
                                toSay = 'Я поняла только "' + text + '"';
                            }
                        }
                        else if (lang == 'de') {
                            if (!text) {
                                toSay = 'Ich habe nichts verstanden';
                            }
                            else{
                                toSay = 'Ich verstehe "' + text + '" nicht';
                            }
                        }
                        else if (lang == 'en') {
                            if (!text) {
                                toSay = "I could not understand you";
                            }
                            else{
                                toSay = "I don't understand. I could only hear \"" + text + "\"";
                            }
                        }
                    
                        cb(toSay);
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayNoSuchRoom(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'en') {
                            toSay = getRandomPhrase(['Room not present', 'Room not found', 'You don\'t have such a room']);
                        } else
                        if (lang == 'de') {
                            toSay = getRandomPhrase(['Raum wurde nicht gefunden', 'Es gibt kein Zimmer mit dem Namen', 'Man muss sagen in welchem Raum oder überall']);
                        } else
                        if (lang == 'ru') {
                            toSay = getRandomPhrase(['Комната не найдена', 'Надо сказать в какой комнате или сказать везде']);
                        } else {
                            toSay = '';
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayNothingToDo(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'en') {
                            toSay = getRandomPhrase(['I don\'t know, what to do', 'No action defined']);
                        } else
                        if (lang == 'de') {
                            toSay = getRandomPhrase(['Ich weiß nicht, was ich machen soll', 'Aktion ist nicht definiert']);
                        } else
                        if (lang == 'ru') {
                            toSay = getRandomPhrase(['Непонятно, что делать', 'Не задано действие']);
                        } else {
                            toSay = "";
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayNoSuchFunction(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'en') {
                            toSay = getRandomPhrase('Function not present/Function not found/You don\'t have such a device');
                        } else
                        if (lang == 'de') {
                            toSay = getRandomPhrase('Die Funktion wurde nicht gefunden/Es gibt keine Funktion mit dem Namen/Man muss sagen womit man was machen will');
                        } else
                        if (lang == 'ru') {
                            toSay = getRandomPhrase('Устройство не найдено/Надо сказать с чем произвести действие');
                        } else {
                            toSay = "";
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayNoFunctionInThisRoom(lang, text, args, ack, cb) {
                        var sRoom     = args[0];
                        var sFunction = args[1];
                    
                        var toSay;
                        if (lang == 'en') {
                            toSay = 'There is no ' + functionsGenitive[sFunction][lang] + ' ' + roomsDative[sRoom][lang];
                        } else if (lang == 'de') {
                            toSay = 'Es gibt kein' + functionsGenitive[sFunction][lang] + ' ' + roomsDative[sRoom][lang];
                        } else if (lang == 'ru') {
                            toSay = roomsDative[sRoom][lang] + ' нет ' + functionsGenitive[sFunction][lang];
                        } else {
                            toSay = '';
                        }
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    //noinspection JSUnusedLocalSymbols
                    function sayError(lang, text, args, ack, cb) {
                        var toSay;
                        if (lang == 'en') {
                            toSay = getRandomPhrase('Error. See logs.');
                        } else
                        if (lang == 'de') {
                            toSay = getRandomPhrase('Fehler. Sehe Logs.');
                        } else
                        if (lang == 'ru') {
                            toSay = getRandomPhrase('Ошибка. Смотрите логи.');
                        } else {
                            toSay = "";
                        }
                    
                        if (cb) {
                            cb(toSay);
                        } else {
                            return toSay;
                        }
                    }
                    
                    module.exports = {
                        getRandomPhrase:         getRandomPhrase,
                        sayIDontKnow:            sayIDontKnow,
                        sayNoName:               sayNoName,
                        sayIDontUnderstand:      sayIDontUnderstand,
                        sayNoSuchRoom:           sayNoSuchRoom,
                        sayNoSuchFunction:       sayNoSuchFunction,
                        sayNothingToDo:          sayNothingToDo,
                        sayError:                sayError,
                        sayNoFunctionInThisRoom: sayNoFunctionInThisRoom
                    };
                    
                    

                    Bei simpleControl.js muss es "Inaktiv" heissen. Nicht "Inaktive"

                    var no = [
                        'false',
                        'inactive',
                        'nein',
                        'inaktiv',
                        'нет',
                        'неактивно',
                        'неактивна',
                        'неактивный'
                    ];
                    

                    und

                    if (lang === 'de') ack = 'Temperatur ist %s %u';
                    ````statt
                    

                    if (lang === 'de') ack = 'Temperature ist %s %u';

                    1 Reply Last reply Reply Quote 0
                    • D
                      derrapf last edited by

                      So,ich bin ein Schritt weiter:

                      Wenn man "Schalte irgendwas an oder aus", dann kann man sowohl den Text als auch das Gerät wählen. Das funktioniert super.

                      Bleibt also nur das Rolladenproblem.

                      Das Blöde daran ist, dass man nun für jedes Gerät theoretische eine Frage definieren muss.

                      Beispiel: Ich will wissen wie die Luftfeuchtigkeit im Bad ist: Dann brauche ich eine Regel "Frage über irgendwas" und muss dann "feucht/Feuchte Bad/Badezimmer" als Keywords definieren. Dann kann ich den entsprechenden Datenpunkt eintragen.

                      Jetzt muss ich aber für jedes Zimmer und für jede Größe (Temp., Abs. Feuchte, Taupunkt, …) eine Frage definieren. Bei 6 Zimmern und, sagen wir mal 3 Größen pro Zimmer, sind das schon 18 Fragen...

                      Nicht ganz praktisch.

                      Eigentlich braucht man für jede Art von Datenpunkt (*.TEMPERATURE, *.HUMIDITY, usw.) eine Frage, die dann wieder über die Enums geht.

                      Oder geh' ich's doch verkehrt an?

                      Gruss Ralf

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

                        Schade dass du das nicht bei github irgendwie abgelegt hast. Ich habe nur durch pure Zufall die Vorschläge entdeckt.

                        1 Reply Last reply Reply Quote 0
                        • D
                          derrapf last edited by

                          Hallo Bluefox

                          Du meinst die Rechtschreibfehler?

                          Das war mir damals ehrlich gesagt nicht wichtg genug für Git; ich hab mich damals mit der Sprachsteuerung rumgeschlagen.

                          Da ich aber nicht weitergekommen bin hab ich das auf Eis gelegt und mich leider nicht mehr weiter drum gekümmert.

                          Auch aus der Tatsache heraus, dass ich für die Sprachsteuerung ja das Tablett und VIS brauche. Aber dann kann ich auch

                          gleich auf ein VIS-Control drücken. Also ist die Sprachsteuerung unnötig und eigentlich nur ein Feature.

                          Eine Sprachsteuerung wäre sinnvoll wenn man ein Mikrofon zentral im Raum positionieren könnte (vielleicht über einen weiteren Raspberry PI) das so empfindlich ist, dass es aus jeder Ecke zuhören kann und das Aufgenommene an text2Command, also an den Rechner weiterleitet auf dem IOBroker läuft. Dann wäre das durchaus praktisch.

                          Aber wenn ich letztendlich den Rechner auf em IOBroker/VIS läuft, brauche um dem Text zuzuhören, dann kann ich auch gleich Tasten drücken.

                          Deswegen hab ich das hier auch nicht mehr gross weiter verfolgt.

                          Gruss Ralf

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

                          Support us

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

                          757
                          Online

                          32.0k
                          Users

                          80.4k
                          Topics

                          1.3m
                          Posts

                          4
                          11
                          6105
                          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