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.
    • 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

                        710
                        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