не работают таймеры

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

не работают таймеры

Сообщение sega6549 » Пт окт 19, 2018 7:45 pm

помогите понять почему не работают таймеры есть такой код

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

$val = $this->getProperty("taim");
if (gg('motion_ulica.status')=='1') {
 clearTimeout("motion_ulica_timer"); // очищаем таймер
 $this->callMethod('turnOn');
} 
if (gg('motion_ulica.status')=='0') {
 setTimeOut("motion_ulica_timer","callMethod('motion_ulica.turnOff');", 10);
 } 
но спустя 10 секунд метод на выключение не срабатывает, причем сам метод работает если запустить вручную, и при этом точно такой же код на второй системе работает, на обоих машинах стоит винда 10
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: не работают таймеры

Сообщение nightwind » Сб окт 20, 2018 1:33 pm

motion_ulica.turnOff - тут ошибка скорее всего. сенсор движения не может сделать никакого turnOff. мотод турнофф надо вызывать у реле.
+ есть еще проблема с символами '-' и '_' в именнах объектов. похоже она пока не решена
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: не работают таймеры

Сообщение sega6549 » Сб окт 20, 2018 3:00 pm

nightwind писал(а):
Сб окт 20, 2018 1:33 pm
motion_ulica.turnOff - тут ошибка скорее всего. сенсор движения не может сделать никакого turnOff. мотод турнофф надо вызывать у реле.
+ есть еще проблема с символами '-' и '_' в именнах объектов. похоже она пока не решена
Метод турнофф создан в датчике движения, так что тут вряд ли ошибка, точно так же работает на другом компе, а вот с именами проверю возможно дело как раз в знаках -_ , спасибо за наводку
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: не работают таймеры

Сообщение skysilver » Сб окт 20, 2018 3:20 pm

А у тебя точно дело доходит до строчки запуска таймера setTimeOut()? Проверяй-ка всю логику, а то есть сомнения.
Запущенные таймеры видно в X-Ray. Если твой там не появляется, значит косячишь с условиями.
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: не работают таймеры

Сообщение sega6549 » Сб окт 20, 2018 6:53 pm

skysilver писал(а):
Сб окт 20, 2018 3:20 pm
А у тебя точно дело доходит до строчки запуска таймера setTimeOut()? Проверяй-ка всю логику, а то есть сомнения.
Запущенные таймеры видно в X-Ray. Если твой там не появляется, значит косячишь с условиями.
Доходит точно, если вместо вызова метода прописать например сказать что то то работает и говорит, не работает именно запуск метода
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: не работают таймеры

Сообщение xor » Пн окт 22, 2018 1:22 am

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

if (gg('motion_ulica.status')=='1') {
 clearTimeout("motion_ulica_timer"); // очищаем таймер
 $this->callMethod('turnOn');
} 
if (gg('motion_ulica.status')=='0') {
 setTimeOut("motion_ulica_timer","callMethod('motion_ulica.turnOff');", 10);
 } 
У вас как этот код запускается, по времени там или по событию какому?
Где он у вас прописан?
Вы включаете через ссылку на объект (как в классе)
$this->callMethod('turnOn');
а выключаете через явное указание объекта
callMethod('motion_ulica.turnOff').
Вы говорите, что ваш дд умеет что-то включать/выключать, что довольно оригинально.


Трудно догадаться, что у Вас на уме)), а тем более что-либо посоветовать.
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: не работают таймеры

Сообщение sega6549 » Пн окт 22, 2018 6:18 am

xor писал(а):
Пн окт 22, 2018 1:22 am

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

if (gg('motion_ulica.status')=='1') {
 clearTimeout("motion_ulica_timer"); // очищаем таймер
 $this->callMethod('turnOn');
} 
if (gg('motion_ulica.status')=='0') {
 setTimeOut("motion_ulica_timer","callMethod('motion_ulica.turnOff');", 10);
 } 
У вас как этот код запускается, по времени там или по событию какому?
Где он у вас прописан?
Вы включаете через ссылку на объект (как в классе)
$this->callMethod('turnOn');
а выключаете через явное указание объекта
callMethod('motion_ulica.turnOff').
Вы говорите, что ваш дд умеет что-то включать/выключать, что довольно оригинально.


Трудно догадаться, что у Вас на уме)), а тем более что-либо посоветовать.
Создаём клас для датчиков движения, в нем все датчики по комнатам, датчик улица датчик Кухня, датчик ванная, ну и так далее, как в свойства статус приходит 1 то запускается метод этот, в нем вся логика отрабатывается, явное указание метода только потому что в таймере не поддерживается ссылка на объект, и только по тому, часть с включением отрабатывается, а вот выключение не происходит, причём если вместо запуска метода прописать например сказать привет то таймер работает, не работает именно запуск метода тут
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: не работают таймеры

Сообщение xor » Вт окт 23, 2018 12:51 am

sega6549 писал(а):
Пн окт 22, 2018 6:18 am
...явное указание метода только потому что в таймере не поддерживается ссылка на объект...
нет, это неверное утверждение.

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

$ot=$this->object_title;
$alive_timeout=(int)$this->getProperty("aliveTimeOut");
if (!$alive_timeout) {
 $alive_timeout=15*60;
}
clearTimeOut($ot."_alive");
setTimeOut($ot."_alive","sg('".$ot.".alive',0);",$alive_timeout); 
sega6549 писал(а):
Пн окт 22, 2018 6:18 am
...Создаём клас для датчиков движения... в нем вся логика отрабатывается...
В классе у Вас прописан запуск метода объекта?
С say это пройдет, а если сработает датчик на кухне, свет будет включаться/выключаться на улице?
sega6549
Сообщения: 530
Зарегистрирован: Чт авг 20, 2015 11:32 am
Откуда: Ярославль
Благодарил (а): 61 раз
Поблагодарили: 75 раз
Контактная информация:

Re: не работают таймеры

Сообщение sega6549 » Вт окт 23, 2018 1:00 am

sega6549 писал(а):
Пн окт 22, 2018 6:18 am
...Создаём клас для датчиков движения... в нем вся логика отрабатывается...
В классе у Вас прописан запуск метода объекта?
С say это пройдет, а если сработает датчик на кухне, свет будет включаться/выключаться на улице?
[/quote]

говорю же все работает на одной машине, а вот на второй точно так же сделано но именно таймер не отрабатывает, по таймеру должен запускаться метод на выключение света, в методе просто 0 передается свойству объекта и все. ни чего там такого нет, не работает именно вот эта строчка setTimeOut("motion_ulica_timer","callMethod('motion_ulica.turnOff');", 10);
сори что опублшиковал вопрос в не в том разделе, больше этого не повториться(
Тут можно задать вопрос по MajorDoMo VK
Канал по MajorDoMo youtube
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: не работают таймеры

Сообщение Chainik » Вт окт 23, 2018 8:53 am

sega6549 писал(а):
Вт окт 23, 2018 1:00 am
...не работает именно вот эта строчка setTimeOut("motion_ulica_timer","callMethod('motion_ulica.turnOff');", 10);
...
Может попробовать вид кавычек поменять. Т.е.

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

setTimeOut('motion_ulica_timer','callMethod("motion_ulica.turnOff");',10);
Ответить