Использование системы в различных ситуациях, вопросы программирования сценариев.
Модератор: immortal
-
ansid
- Сообщения: 22
- Зарегистрирован: Пн сен 09, 2019 2:52 pm
-
Благодарил (а):
4 раза
-
Поблагодарили:
0
Сообщение
ansid » Вт сен 10, 2019 11:59 am
Divan писал(а): ↑Вт сен 10, 2019 11:43 am
Методы можно добавлять только в основном объекте, а в под объекте, методы можно только настраивать. Смотрите скриншот ниже.
в итоге так и сделал, но метод не работает. Проверьте мне код плз, мало опыта с пхп.
Код: Выделить всё
$details=array();
$yellow_state=0;
if (!isOnline('82.207.45.207')) {
$yellow_state=1;
$details[]=LANG_GENERAL_NO_ACCESS;
}
if ($yellow_state) {
$state='yellow';
$state_title=LANG_GENERAL_YELLOW;
} else {
$state='green';
$state_title=LANG_GENERAL_GREEN;
}
$new_details=implode(". ",$details);
if ($this->getProperty("remDetails")!=$new_details) {
$this->setProperty('remDetails',$new_details);
}
if ($this->getProperty('remColor')!=$state) {
$this->setProperty('remColor',$state);
$this->setProperty('remTitle',$state_title);
if ($state!='green') {
say(LANG_GENERAL_COMMUNICATION_STATE." ".LANG_GENERAL_CHANGED_TO." ".$state_title.".");
say(implode(". ",$details));
} else {
say(LANG_GENERAL_COMMUNICATION_STATE." ".LANG_GENERAL_RESTORED_TO." ".$state_title);
}
$this->callMethod('remchanged');
}
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз
-
Поблагодарили:
2010 раз
Сообщение
nick7zmail » Вт сен 10, 2019 1:20 pm
Мне кажется ваша проблема в другом. Вы просто НЕ запускаете метод. По этому при ручном запуске у вас всё сработало. А автоматически надо настроить периодический запуск метода. Тут несколько вариантов.
1) поместить запуск метода (команду, которую выше приводил) в метод onNewHour/onNewMinute в класс Timers или в объект ClockChime этого класса. Эти методы запускаются автоматически системой раз в час/раз в минуту. Если раз в минуту запускать вам будет достаточно - можно и на этом остановиться.
2) сделать "самоперезапускающийся" таймер, который будет запускаться раз в указанное время (где то была тема, лень искать, да и вариант не лучший)
3) воспользоваться модулем Cron, и поставить метод на запуск опять же раз в указанный промежуток.
4) Поместить ваш объект вместе с методами в класс SystemStates. У данного класса метод StatusCheck или как там он - запускается раз в 5 секунд. Весь код переместить туда. Думаю этого более чем достаточно будет.
- За это сообщение автора nick7zmail поблагодарил:
- ansid (Вт сен 10, 2019 1:30 pm)
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз
-
Поблагодарили:
2010 раз
Сообщение
nick7zmail » Вт сен 10, 2019 1:38 pm
Divan писал(а): ↑Вт сен 10, 2019 11:43 am
Методы можно добавлять только в основном объекте, а в под объекте, методы можно только настраивать. Смотрите скриншот ниже.
То что наверху называется "класс", а внизу как раз - "объект". И настроить можно на уровне класса. У человека как раз как будто через класс код написан, с конструкциями $this->.
-
ansid
- Сообщения: 22
- Зарегистрирован: Пн сен 09, 2019 2:52 pm
-
Благодарил (а):
4 раза
-
Поблагодарили:
0
Сообщение
ansid » Вт сен 10, 2019 1:39 pm
Еще вопрос: в классе systemStates у всех объектов только checkState, а у моего еще и remchanged выполняется, как это исправить?
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз
-
Поблагодарили:
2010 раз
Сообщение
nick7zmail » Вт сен 10, 2019 2:27 pm
Для начала - скажите где у вас код? В классе, или в методе объекта? Если в методе объекта, и если такой, как вы выше привели - строка $this->callMethod('remchanged'); по идее вызовет метод remchanged при указанных условиях.
-
ansid
- Сообщения: 22
- Зарегистрирован: Пн сен 09, 2019 2:52 pm
-
Благодарил (а):
4 раза
-
Поблагодарили:
0
Сообщение
ansid » Вт сен 10, 2019 2:55 pm
nick7zmail писал(а): ↑Вт сен 10, 2019 2:27 pm
Для начала - скажите где у вас код? В классе, или в методе объекта? Если в методе объекта, и если такой, как вы выше привели - строка $this->callMethod('remchanged'); по идее вызовет метод remchanged при указанных условиях.
уже разобрался - в настройках метода remchanged было выбрано выполнять код, переключил на сценарий и стало все норм. уже все работает, сделал через systemState и его методы. И создал отдельную панельку с сообщениями про узлы так же как про статусы системы.
Еще вопрос: А как заставить функцию say проговаривать написанное? Ато она только в лог сообщение выводит
-
nick7zmail
- Сообщения: 7573
- Зарегистрирован: Пн окт 28, 2013 8:14 am
- Откуда: Екатеринбург
-
Благодарил (а):
121 раз
-
Поблагодарили:
2010 раз
Сообщение
nick7zmail » Вт сен 10, 2019 4:07 pm
Приоритет поменять
say('бла бла бла', 3);
Либо MinMsgLevel в ThisComputer поменять. Там минимальный уровень важности при котором сообщения начинают произносится. По-умолчанию вроде 2.
- За это сообщение автора nick7zmail поблагодарил:
- ansid (Вт сен 10, 2019 9:35 pm)
-
ansid
- Сообщения: 22
- Зарегистрирован: Пн сен 09, 2019 2:52 pm
-
Благодарил (а):
4 раза
-
Поблагодарили:
0
Сообщение
ansid » Вт сен 10, 2019 9:34 pm
А есть какая нибудь инструкция по первичной настройке и принципу работы системы, основным функциям? Чтобы не задавать кучу вопросов для решения задачи, а их еще будет очень много.
-
ansid
- Сообщения: 22
- Зарегистрирован: Пн сен 09, 2019 2:52 pm
-
Благодарил (а):
4 раза
-
Поблагодарили:
0
Сообщение
ansid » Ср сен 11, 2019 10:17 am
Есть кнопка на левой панели, говорящая время. Если ее нажать в Majordroid, время говорит 3 раза. Как это вылечить?