Страница 1 из 2

Как передать параметр?

Добавлено: Вс окт 08, 2017 1:29 pm
Alex
Как передать параметр при вызове метода из кода. Например, в метод VolumeLevelChanged нужно передать значение громкости. Я вызываю так

Код: Выделить всё

callMethod('ThisComputer.VolumeLevelChanged'); 
Но как передать значение?

Re: Как передать параметр?

Добавлено: Вс окт 08, 2017 2:27 pm
Alex
Проблема решена

Код: Выделить всё

callMethod('ThisComputer.VolumeLevelChanged', array('VALUE'=>'0')); 
Зато появилась другая. Что понимается под «code»?

Код: Выделить всё

Before SAY (code): 
Вышеприведённая строчка намертво вешает звуковое сопровождение. И восстанавливается речь только после шаманства и перезагрузок.

Что туда подразумевается вставлять и чем вышеприведённая строчка — не код?

Re: Как передать параметр?

Добавлено: Вс окт 08, 2017 3:41 pm
nick7zmail
Туда надо писать код, на сколько я помню...вышеприведенная строка код, почему вешает - надо логи смотреть.

Попробуй что нить простенькое типа

Код: Выделить всё

Say('Отработал обработчик beforesay'); 
Это не вешает систему?

Re: Как передать параметр?

Добавлено: Вс окт 08, 2017 5:58 pm
Alex
Это не вешает систему?
Вешает точно так же.
надо логи смотреть
Это те, которые debmes?

Кстати, выставил уровень 9, но баллоны упорно продолжают жить своей жизнью. Без какой-либо системы то появляются, то не появляются.

Re: Как передать параметр?

Добавлено: Вс окт 08, 2017 6:55 pm
nick7zmail
Хм...ну это уже к Сергею наверное...Вроде раньше работали обработчики....потом ими не пользовался.

Re: Как передать параметр?

Добавлено: Пн окт 09, 2017 10:08 am
skysilver
У меня в Before SAY (code) указан вызов сценария, который включает колонки,

Код: Выделить всё

runScript('myBeforeSayScript', array('ph'=>$ph,'level'=>$level)); 
с таким кодом

Код: Выделить всё

$ph = $params['ph'];
$level = $params['level'];


// Если фраза не пустая, или если уровень произношения фразы больше глобального уровня, 
// то выполняем нужные действия
if ($level >= gg('minMsgLevel')) {

     // Если колонки уже включены, то просто проговорим фразу и не будем ставит таймер выключения,
     // т.к. возможно они включены для музыки или радио.
     // Если колонки не включены, то включим и поставим таймер выключения.
 
     if ( !gg('Relay3MegaD1.status') ) {
        cm('Relay3MegaD1.turnOn');
        clearTimeOut('afterSayTimer');
         clearTimeOut('afterPlayTimer');
         setTimeOut('afterSayTimer', 'cm("Relay3MegaD1.turnOff");', 180);         
    }  else { return; }

} else { return; } 
Работает четко, проблем не замечал. Видимо, у вас какой-то частный случай.

Re: Как передать параметр?

Добавлено: Пн окт 09, 2017 11:40 am
Alex
Ещё один актуальный вопрос: конструкция

Код: Выделить всё

$var = $params['v']; 
прекрасно отлавливает цифровые значения, но не ловит текстовые. Что нужно сделать, чтобы можно было ловить текстовые значения?

И как, собственно, передавать М строковые значения в GET запросах?

Re: Как передать параметр?

Добавлено: Пн окт 09, 2017 11:45 am
nick7zmail
Что имеется ввиду под "ловить"?
Ибо конструкции

Код: Выделить всё

callMethod('Obj.prop', array('VALUE'=>'0', 'VALUE2'=>'any text', 'VALUE3'=>'any text and # 0 1 2 3'));
У меня передавались в метод отлично.
Соответственно их поймать в методе надо, как

Код: Выделить всё

$params['VALUE2']; //VALUE3 и тд 

Re: Как передать параметр?

Добавлено: Пн окт 09, 2017 12:05 pm
Alex
Кажется я понял, если в GET запросе попадается пробел, то система не воспринимает это нормально

Код: Выделить всё

GET /objects/?object=object&op=m&m=update&v=1&mac=00 2A F5 12 67 60&prop=0
Верно?

В данном случае mac у неё равен 00, а остальное она глотает. Тогда вопрос: как передавать подобные значения? Шифровать на одном конце и расшифровывать в М? Или есть более простые средства?

Re: Как передать параметр?

Добавлено: Пн окт 09, 2017 1:41 pm
skysilver
Alex писал(а):Тогда вопрос: как передавать подобные значения? Шифровать на одном конце и расшифровывать в М? Или есть более простые средства?
На отправляющей стороне делать urlencode(), а на принимающей (в МajorDoMo) urledecode():

Код: Выделить всё

urldecode($params['track']);