Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Русский
  3. ioBroker
  4. Скрипты
  5. ioBroker скрипты
  6. Голосовое управление

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.7k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.2k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    16
    1
    3.0k

Голосовое управление

Geplant Angeheftet Gesperrt Verschoben ioBroker скрипты
20 Beiträge 4 Kommentatoren 5.5k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • H Offline
    H Offline
    Haus
    schrieb am zuletzt editiert von
    #11

    @aurodionov:

    на мобильном работает распознавание, но скрипту похоже не передается

    да , на компе в хроме тоже работает распознование `
    if (voice == 'включить+свет'){ пропиши без + 'включить свет'

    js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

    admin: 3.6.0

    javascript: 4.1.10

    web: 2.4.1 vis: 1.1.10

    cloud: 2.6.2

    Server: DELL FX170 / linux: Debian 9.5 Stretch

    Adapter: MegaD-2561, Mega-ES…

    1 Antwort Letzte Antwort
    0
    • I Offline
      I Offline
      instalator
      schrieb am zuletzt editiert von
      #12

      @Haus:

      @aurodionov:

      на мобильном работает распознавание, но скрипту похоже не передается

      да , на компе в хроме тоже работает распознование if (voice == 'включить+свет'){ пропиши без + 'включить свет'
      Это ничего не изменит, так как уже добавлено:

       var voice = obj.newState.val.toLowerCase().toString().replace(/\ /g, "+");
      

      И с компа у мня работает этот скрипт, а вот на телефоне ни в одном браузере нет, даже не просит сказать фразу, вообще не реагирует на кнопку.

      Высокий уровень Децибел вреден для здоровья!

      http://blog.instalator.ru/

      1 Antwort Letzte Antwort
      0
      • H Offline
        H Offline
        Haus
        schrieb am zuletzt editiert von
        #13

        @instalator:

        @Haus:

        @aurodionov:

        на мобильном работает распознавание, но скрипту похоже не передается

        да , на компе в хроме тоже работает распознование if (voice == 'включить+свет'){ пропиши без + 'включить свет'
        Это ничего не изменит, так как уже добавлено:

         var voice = obj.newState.val.toLowerCase().toString().replace(/\ /g, "+");
        

        И с компа у мня работает этот скрипт, а вот на телефоне ни в одном браузере нет, даже не просит сказать фразу, вообще не реагирует на кнопку. `
        У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :)

        Даже пикает как окей гугл.

        js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

        admin: 3.6.0

        javascript: 4.1.10

        web: 2.4.1 vis: 1.1.10

        cloud: 2.6.2

        Server: DELL FX170 / linux: Debian 9.5 Stretch

        Adapter: MegaD-2561, Mega-ES…

        1 Antwort Letzte Antwort
        0
        • I Offline
          I Offline
          instalator
          schrieb am zuletzt editiert von
          #14

          @Haus:

          У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :) `
          Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше

          Высокий уровень Децибел вреден для здоровья!

          http://blog.instalator.ru/

          1 Antwort Letzte Antwort
          0
          • H Offline
            H Offline
            Haus
            schrieb am zuletzt editiert von
            #15

            @instalator:

            @Haus:

            У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :) Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше
            Строчку добавлю, спасибо. У тебя заработал в хроме?

            P.S добавил строчку работает с "+".

            js-controller: 1.5.7 / node.js: v8.15.1/ npm: 6.4.1

            admin: 3.6.0

            javascript: 4.1.10

            web: 2.4.1 vis: 1.1.10

            cloud: 2.6.2

            Server: DELL FX170 / linux: Debian 9.5 Stretch

            Adapter: MegaD-2561, Mega-ES…

            1 Antwort Letzte Antwort
            0
            • I Offline
              I Offline
              instalator
              schrieb am zuletzt editiert von
              #16

              @Haus:

              @instalator:

              @Haus:

              У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :) Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше
              Строчку добавлю, спасибо. У тебя заработал в хроме? `
              Я же говорю что на телефоне вообще не реагирует на кнопку, на компе работает. С телефона я пользуюсь таскером, и в браузере на телефоне мне эта функция не нужна.

              Высокий уровень Децибел вреден для здоровья!

              http://blog.instalator.ru/

              1 Antwort Letzte Antwort
              0
              • V Offline
                V Offline
                Vlad_k
                schrieb am zuletzt editiert von
                #17

                @Haus:

                if (voice == 'включить+свет'){ пропиши без + 'включить свет' `
                как по мне так лучше не сравнивать на полное совпадение по фразе, а искать вхождения подстроки в строке тогда можно построить более гибкую логику распознавания команд, под брокер пока не делал а в охабе у меня так:

                if (command.contains("вет") && command.contains("спал") && command.contains("вкл")) {

                sendCommand(Light_FF_Bed_Ceiling, "ON")

                say(command)

                }

                1 Antwort Letzte Antwort
                0
                • I Offline
                  I Offline
                  instalator
                  schrieb am zuletzt editiert von
                  #18

                  @Vlad_k:

                  @Haus:

                  if (voice == 'включить+свет'){ пропиши без + 'включить свет' `
                  как по мне так лучше не сравнивать на полное совпадение по фразе, а искать вхождения подстроки в строке тогда можно построить более гибкую логику распознавания команд, под брокер пока не делал а в охабе у меня так:

                  if (command.contains("вет") && command.contains("спал") && command.contains("вкл")) {

                  sendCommand(Light_FF_Bed_Ceiling, "ON")

                  say(command)

                  } `
                  Я думал над этим, и хочу полностью переписать свой скрипт, думаю как сделать обучаемую систему, чтобы при новых командах можно было назначить действие… Хотя это уже нужен не скрипт а драйвер, чтобы было что то на подобии таблицы команд("синонимов") и действий.

                  А вообще в идеале прикрутить нейронку :)

                  Высокий уровень Децибел вреден для здоровья!

                  http://blog.instalator.ru/

                  1 Antwort Letzte Antwort
                  0
                  • V Offline
                    V Offline
                    Vlad_k
                    schrieb am zuletzt editiert von
                    #19

                    @instalator:

                    А вообще в идеале прикрутить нейронку :) `
                    да не слишком жирно :D

                    я вижу такую реализацию, массив многомерный:

                    команды голосом–

                    место- устройство-свойства-параметр-действие

                    зал++++свет+++ яркость+++50%

                    зал++++свет++++++++++++++++вкл

                    зал++++свет++++++++++++++++выкл

                    зал++++телек++громкость++30%

                    функция проходит по таблице и возвращает вхождения по столбцам строкам в виде чисел, а на числа ставим уже обработчик...

                    1 Antwort Letzte Antwort
                    0
                    • I Offline
                      I Offline
                      instalator
                      schrieb am zuletzt editiert von
                      #20

                      Скрипт разросся, решил немного переписать и унифицировать.

                      Часть моего скрипта второй итерации:

                      ! ````
                      /////////////Голосовое управление/////////////////////////////
                      on({id: 'javascript.0.Voice.Command', change: 'any'}, function (obj) {
                      var voice = obj.newState.val.toLowerCase();
                      VoiceCommands (voice);
                      });
                      ! function VoiceCommands (voice){

                      var SceneKodi     = getState('javascript.0.Scenes.Kodi').val;
                      var SceneTV       = getState('javascript.0.Scenes.TV').val;
                      var tempKitchen   = getState('mqtt.0.myhome.Kitchen.Temp_room').val;
                      var tempBedroom   = getState('mqtt.0.myhome.Bedroom.Temp_room').val;
                      var tempBathroom  = getState('mqtt.0.myhome.Bathroom.Temp_room').val;
                      var tempin        = getState('mqtt.0.myhome.Bedroom.Temp_in').val;
                      var Volume        = parseInt(getState('onkyo.0.master-volume').val, 10);
                      var ttsVolume     = parseInt(getState('sayit.0.tts.volume').val, 10);
                      
                      var voiceArr =  voice.split('+');
                      log('Вся переменная - ' + voice);
                      log('Массив - '+ voiceArr);
                      

                      ! function found (cmd){
                      cmd = String(cmd);
                      if (~voice.indexOf(cmd)){
                      return true;
                      } else {
                      return false;
                      }
                      }

                      var FoundNum = function(voice){
                      var num =parseInt(voice.replace(/\D+/, ''), 10);
                      if (num !== isNaN){
                      return num;
                      } else {
                      return false;
                      }
                      };
                      /***************Регулировка громкости/////////////
                      if ((found('тише') || found('тиши') || found('убавь') || found('кеша') || found('сделайте+же') || found('ты+же')) && !found('говор') && !found('оповещ') && !found('помещ')){
                      if (FoundNum(voice) && found('на')){
                      setState('onkyo.0.master-volume', Volume - FoundNum(voice));
                      }
                      else if (FoundNum(voice) && !found('на')){
                      setState('onkyo.0.master-volume', FoundNum(voice));
                      }
                      else if (!FoundNum(voice)){
                      setState('onkyo.0.master-volume', Volume - 3);
                      }
                      }

                      if ((found('громче') || found('прибавь') || found('громк')) && !found('говор') && !found('оповещ') && !found('помещ')){
                        if (FoundNum(voice) && found('на')){
                          setState('onkyo.0.master-volume', Volume + FoundNum(voice));
                        }
                        else if (FoundNum(voice) && !found('на')){
                          setState('onkyo.0.master-volume', FoundNum(voice));
                        } 
                        else if (!FoundNum(voice)){
                          setState('onkyo.0.master-volume', Volume + 3);
                        }
                      }
                      

                      /Управление громкостью Sayit**/
                      if (found('говор') || (found('оповещ') || found('помещ'))){ //помещения оповещени
                      if (FoundNum(voice)){
                      setState('sayit.0.tts.volume', FoundNum(voice));
                      ttsVolume = getState('sayit.0.tts.volume').val;
                      setState('sayit.0.tts.text', 'Громкость оповещения установлена на ' + ttsVolume+'.');
                      }
                      else {
                      if (found('гром')){
                      setState('sayit.0.tts.volume', ttsVolume+10);
                      ttsVolume = getState('sayit.0.tts.volume').val;
                      setState('sayit.0.tts.text', 'Громкость оповещения установлена на ' + ttsVolume+'.');
                      }
                      if (found('тише')){
                      setState('sayit.0.tts.volume', ttsVolume-10);
                      ttsVolume = getState('sayit.0.tts.volume').val;
                      setState('sayit.0.tts.text', 'Громкость оповещения установлена на ' + ttsVolume+'.');
                      }
                      }
                      }
                      /Аквасторож************************/
                      if (found('воду') || found('вода') || found('году') || found('лада')){
                      if (found('закр') || found('выкл') || found('пере')){
                      setState('mqtt.0.myhome.NRF.AquaStoroj.ButtonClose', '1');
                      setState('sayit.0.tts.text', 'Вода перекрыта');
                      }
                      if (found('откр')){
                      setState('mqtt.0.myhome.NRF.AquaStoroj.ButtonOpen', '1');
                      setState('sayit.0.tts.text', 'Вода открыта');
                      }
                      }
                      /Приточка*************/
                      if (found('приточ') || found('проточ') || found('вентил')){
                      var BedRoomMin = 70;
                      var BedRoomMax = 131;
                      var GuestRoomMin = 94;
                      var GuestRoomMax = 163;
                      if (found('спал')){
                      if (FoundNum(voice) && FoundNum(voice) >= 0 && FoundNum(voice) <= 100){
                      setState('mqtt.0.myhome.Bedroom.Servo', ((BedRoomMax - BedRoomMin) / 100) * FoundNum(voice) + BedRoomMin); //70+(*0.61)
                      }
                      if (found('откр')){
                      setState('mqtt.0.myhome.Bedroom.Servo', BedRoomMax);
                      }
                      if (found('закр')){
                      setState('mqtt.0.myhome.Bedroom.Servo', BedRoomMin);
                      }
                      }
                      if (found('зал')){
                      if (FoundNum(voice) && FoundNum(voice) >= 0 && FoundNum(voice) <= 100){
                      setState('mqtt.0.myhome.Guestroom.Servo', ((GuestRoomMax - GuestRoomMin) / 100) * FoundNum(voice) + GuestRoomMin);
                      }
                      if (found('откр')){
                      setState('mqtt.0.myhome.Guestroom.Servo', GuestRoomMax);
                      }
                      if (found('закр')){
                      setState('mqtt.0.myhome.Guestroom.Servo', GuestRoomMin);
                      }
                      }
                      }
                      /*****************Освещение///////////////
                      function Invert (id){
                      if (!found('вкл') && !found('выкл')){
                      IdVal = getState(id).val;
                      if (IdVal === 1 || IdVal === '1'){
                      setState(id, '0');
                      } else {
                      setState(id, '1');
                      }
                      } else {
                      if (found('вкл')){
                      setState(id, '1');
                      }
                      if (found('выкл')){
                      setState(id, '0');
                      }
                      }
                      }

                      if (found('свет') || found('глазк')){
                        if (found('спал')){
                          if (found('глаз')){
                            Invert ('mqtt.0.myhome.Lighting.BedRoom_Additional');
                          } else {
                            Invert ('mqtt.0.myhome.Lighting.BedRoom_Main');
                          }
                        }
                        if (found('зал')){
                          if (found('весь')){
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Additional');
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Main');
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Main2');
                          }
                          if (found('глаз')){
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Additional');
                          }
                          else {
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Main2');
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Main');
                            Invert ('mqtt.0.myhome.Lighting.GuestRoom_Additional');
                          }
                        }
                        if (found('кухн')){
                          if (found('глаз')){
                            Invert ('mqtt.0.myhome.Lighting.Kitchen_Additional');
                          } else {
                            Invert ('mqtt.0.myhome.Lighting.Kitchen_Main');
                          }
                        }
                        if (found('ванн')){
                          if (found('зерк')){
                            Invert ('mqtt.0.myhome.Lighting.BathRoom_Additional');
                          } else {
                            Invert ('mqtt.0.myhome.Lighting.BathRoom_Main');
                          }
                        }
                        if (found('кор') || found('при')){
                            Invert ('mqtt.0.myhome.Lighting.Hall_Main');
                        }
                      }
                      

                      /******************************************************************/
                      if ( found('домоф') || found('двер') ){
                      var DomofonRing = getState('mqtt.0.myhome.Mother.DomofonRing').val;
                      if ((DomofonRing === '1' || DomofonRing === 1)){
                      setState('mqtt.0.myhome.Mother.DomofonOpen', '1');
                      } else {
                      setState('sayit.0.tts.text', 'Режим автооткрытия домофОна активирован! ');
                      setState('javascript.0.Scenes.DomofonAutoOpen', '1');
                      }
                      if (found('откл') || found('выкл')){
                      setState('sayit.0.tts.text', 'Режим автооткрытия домофОна отключен!');
                      setState('javascript.0.Scenes.DomofonAutoOpen', '0');
                      }
                      }
                      }

                      
                      Добавлено:
                      
                      Скрипт получился удобный, можно давать несколько команд УД в одном предложении.

                      Высокий уровень Децибел вреден для здоровья!

                      http://blog.instalator.ru/

                      1 Antwort Letzte Antwort
                      0
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      805

                      Online

                      32.4k

                      Benutzer

                      81.5k

                      Themen

                      1.3m

                      Beiträge
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Anmelden

                      • Du hast noch kein Konto? Registrieren

                      • Anmelden oder registrieren, um zu suchen
                      • Erster Beitrag
                        Letzter Beitrag
                      0
                      • Home
                      • Aktuell
                      • Tags
                      • Ungelesen 0
                      • Kategorien
                      • Unreplied
                      • Beliebt
                      • GitHub
                      • Docu
                      • Hilfe