Скрипт разросся, решил немного переписать и унифицировать.
Часть моего скрипта второй итерации:
! ````
/////////////Голосовое управление/////////////////////////////
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');
}
}
}
Добавлено:
Скрипт получился удобный, можно давать несколько команд УД в одном предложении.