Выполнение метода во всем классе. Цикл. Проблема. :?:

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

Модератор: immortal

Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение Kod.Begemot » Пн авг 22, 2016 10:48 am

Не, всё-равно ошибка...
с

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

$this->callMethod("TurnOn", );  
вообще "Phfrse error"
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение nick7zmail » Пн авг 22, 2016 10:50 am

Kod.Begemot писал(а): вообще "Phfrse error"
Читай предыдущее сообщение, мне кажется там рабочий вариант))про передачу имени.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение Kod.Begemot » Пн авг 22, 2016 11:02 am

ага...
попробовал в цикле сделать:

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

$objects=getObjectsByClass("Relay");
foreach($objects as $obj) {
callMethod($obj['TITLE'].'.Refresh',$obj);
} 
а в методе:

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

$Status=getGlobal($params['NAME'].'.Status');
//$Status=$this->getProperty("Status");
if ($Status) {
cm($params['NAME'].'.TurnOn');
//$this->callMethod("TurnOn"); 
} else {
 cm($params['NAME'].'.TurnOff');
//$this->callMethod("TurnOff"); 
}

 
Ошибок нет, но и не работает... Видимо я неправильно имя передаю...

upd.

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

callMethod($obj['TITLE'].'.Refresh',array('NAME'=>$obj,)); 
 
тоже не работает...
опыта в программировании мало.. :(
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение nick7zmail » Пн авг 22, 2016 11:10 am

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

callMethod($obj['TITLE'].'.Refresh',array('NAME'=>$obj['TITLE']));
А в самом Refresh вроде все норм.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение Kod.Begemot » Пн авг 22, 2016 1:30 pm

Всё, сам я виноват! :( Всё заработало, даже с моими старыми методами. :?
Прошу прощения, сам виноват. Ночь на дворе была глубокая, видимо потому и накосячил.
Там в TurnOn и TurnOff у меня вызов метода из класса MegaD, имя объекта задается в свойстве, которое было не прописано в одном из объектов. Моя вина - не сделал перед вызовом метода проверки на наличие там свойств...
Сейчас выполняется, но только вот - очень медленно... Время выполнения скрипта ~ 30 секунд. в классе - 12 объектов.
Если в любом из подклассов код метода очистить - время уменьшается в 2 раза, соответственно... В чем может быть проблема?
Хотя, пожалуй, создам новую тему для этого. Это явно не в контексте.
Большое спасибо nick7zmail за помощь!
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение nick7zmail » Пн авг 22, 2016 2:29 pm

Пожалуйста) Мозги размять - лишним не бывает). А на счет торможения - все логично же вроде...скрипты же к меге запрос делают, как я понял. А пока запрос пошлют - пока ответ придет. Вот тебе и 2-3 секунды на каждый запрос, а кол-во запросов по кол-ву объектов...вот и 30 сек. Единственный вариант - оптимизировать запросы как то. Делать 1 запрос, потом уже раскидывать по объектам свойства, к примеру.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
Kod.Begemot
Сообщения: 358
Зарегистрирован: Чт июн 20, 2013 5:53 pm
Благодарил (а): 32 раза
Поблагодарили: 42 раза

Re: Выполнение метода во всем классе. Цикл. Проблема. :?:

Сообщение Kod.Begemot » Пн авг 22, 2016 2:57 pm

У меня этот скрипт занимается несколько другим - он синхронизирует состояние выходов Мегадевайсов со свойствами объектов.
нужен на случай перезагрузки меги, для того, чтобы свет снова загорелся там, где он был включен до перезапуска. Мега при включении отдает параметр "st=1", вот на него и смотрю.
Насчет тормозов при обращении к мегам - думал уже, тем паче что в половине объектов (PWM) использую медленное включение/выключение.
...
О, пока писал пост - отрапортовала "система контроля здоровья сетевых устройств" - одна из мег зависла, и была перезапущена. И всё, теперь скрипт выполняется за ~1 секунду!!!
Урра! заработало!!
Ещё раз спасибо!
Всё, теперь подкручу немного скрипт рефреша PWM каналов, сделаю при рефреше скорость максимальную нарастания, чтобы быстрее визуально процесс происходил. Теперь отказоустойчивость возросла :) Мега зависла - её рестартуем, Мега перзагрузилась (это мы её, или она сама, к примеру сохранили что-то в её веб интерфейсе) - и свет гаснет только на 1-2 секунды :)
Ответить