NEWS
Голосовое управление
-
на мобильном работает распознавание, но скрипту похоже не передается
да , на компе в хроме тоже работает распознование `
if (voice == 'включить+свет'){ пропиши без + 'включить свет' -
на мобильном работает распознавание, но скрипту похоже не передается
да , на компе в хроме тоже работает распознование
if (voice == 'включить+свет'){ пропиши без + 'включить свет'
Это ничего не изменит, так как уже добавлено:var voice = obj.newState.val.toLowerCase().toString().replace(/\ /g, "+");И с компа у мня работает этот скрипт, а вот на телефоне ни в одном браузере нет, даже не просит сказать фразу, вообще не реагирует на кнопку.
-
на мобильном работает распознавание, но скрипту похоже не передается
да , на компе в хроме тоже работает распознование
if (voice == 'включить+свет'){ пропиши без + 'включить свет'
Это ничего не изменит, так как уже добавлено:var voice = obj.newState.val.toLowerCase().toString().replace(/\ /g, "+");И с компа у мня работает этот скрипт, а вот на телефоне ни в одном браузере нет, даже не просит сказать фразу, вообще не реагирует на кнопку. `
У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :)Даже пикает как окей гугл.
-
У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :) `
Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше -
У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :)
Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше
Строчку добавлю, спасибо. У тебя заработал в хроме?P.S добавил строчку работает с "+".
-
У меня на телефоне всё работает в хроме, а вот твой скрипт начал выполнять действия когда убрал "+" :)
Это потому что таскер отдает с + вместо пробела, добавь строчку как я написал выше
Строчку добавлю, спасибо. У тебя заработал в хроме? `
Я же говорю что на телефоне вообще не реагирует на кнопку, на компе работает. С телефона я пользуюсь таскером, и в браузере на телефоне мне эта функция не нужна. -
if (voice == 'включить+свет'){ пропиши без + 'включить свет' `
как по мне так лучше не сравнивать на полное совпадение по фразе, а искать вхождения подстроки в строке тогда можно построить более гибкую логику распознавания команд, под брокер пока не делал а в охабе у меня так:if (command.contains("вет") && command.contains("спал") && command.contains("вкл")) {
sendCommand(Light_FF_Bed_Ceiling, "ON")
say(command)
}
-
if (voice == 'включить+свет'){ пропиши без + 'включить свет' `
как по мне так лучше не сравнивать на полное совпадение по фразе, а искать вхождения подстроки в строке тогда можно построить более гибкую логику распознавания команд, под брокер пока не делал а в охабе у меня так:if (command.contains("вет") && command.contains("спал") && command.contains("вкл")) {
sendCommand(Light_FF_Bed_Ceiling, "ON")
say(command)
} `
Я думал над этим, и хочу полностью переписать свой скрипт, думаю как сделать обучаемую систему, чтобы при новых командах можно было назначить действие… Хотя это уже нужен не скрипт а драйвер, чтобы было что то на подобии таблицы команд("синонимов") и действий.А вообще в идеале прикрутить нейронку :)
-
А вообще в идеале прикрутить нейронку :) `
да не слишком жирно :Dя вижу такую реализацию, массив многомерный:
команды голосом–
место- устройство-свойства-параметр-действие
зал++++свет+++ яркость+++50%
зал++++свет++++++++++++++++вкл
зал++++свет++++++++++++++++выкл
зал++++телек++громкость++30%
функция проходит по таблице и возвращает вхождения по столбцам строкам в виде чисел, а на числа ставим уже обработчик...
-
Скрипт разросся, решил немного переписать и унифицировать.
Часть моего скрипта второй итерации:
! ````
/////////////Голосовое управление/////////////////////////////
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');
}
}
}Добавлено: Скрипт получился удобный, можно давать несколько команд УД в одном предложении.
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login