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

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вс окт 08, 2017 1:29 pm

Как передать параметр при вызове метода из кода. Например, в метод VolumeLevelChanged нужно передать значение громкости. Я вызываю так

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

callMethod('ThisComputer.VolumeLevelChanged'); 
Но как передать значение?
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вс окт 08, 2017 2:27 pm

Проблема решена

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

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

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

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

Что туда подразумевается вставлять и чем вышеприведённая строчка — не код?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вс окт 08, 2017 3:41 pm

Туда надо писать код, на сколько я помню...вышеприведенная строка код, почему вешает - надо логи смотреть.

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

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

Say('Отработал обработчик beforesay'); 
Это не вешает систему?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Вс окт 08, 2017 5:58 pm

Это не вешает систему?
Вешает точно так же.
надо логи смотреть
Это те, которые debmes?

Кстати, выставил уровень 9, но баллоны упорно продолжают жить своей жизнью. Без какой-либо системы то появляются, то не появляются.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Вс окт 08, 2017 6:55 pm

Хм...ну это уже к Сергею наверное...Вроде раньше работали обработчики....потом ими не пользовался.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн окт 09, 2017 10:08 am

У меня в 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; } 
Работает четко, проблем не замечал. Видимо, у вас какой-то частный случай.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн окт 09, 2017 11:40 am

Ещё один актуальный вопрос: конструкция

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

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

И как, собственно, передавать М строковые значения в GET запросах?
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

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

Сообщение nick7zmail » Пн окт 09, 2017 11:45 am

Что имеется ввиду под "ловить"?
Ибо конструкции

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

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

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

$params['VALUE2']; //VALUE3 и тд 
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

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

Сообщение Alex » Пн окт 09, 2017 12:05 pm

Кажется я понял, если в GET запросе попадается пробел, то система не воспринимает это нормально

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

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

В данном случае mac у неё равен 00, а остальное она глотает. Тогда вопрос: как передавать подобные значения? Шифровать на одном конце и расшифровывать в М? Или есть более простые средства?
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

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

Сообщение skysilver » Пн окт 09, 2017 1:41 pm

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

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

urldecode($params['track']);
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Ответить