почему так может быть?

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

Модератор: immortal

triada13
Сообщения: 242
Зарегистрирован: Вт мар 11, 2014 8:36 pm
Откуда: Челябинск
Благодарил (а): 107 раз
Поблагодарили: 7 раз

Re: почему так может быть?

Сообщение triada13 » Пт дек 04, 2015 12:19 am

Vovix писал(а):
zelevova писал(а):Отличная мысль. Надо будет попробовать так длительные процедуры запускать. А я не мог придумать как параллельно процесс запустить.
Я попробовал
это: callMethod("Izhevsk.sensors");
заменил на это: setTimeOut('IzhevskSensor','callMethod("Izhevsk.sensors");',1);

результатом пока очень доволен! метод onNewHour стал просто "летать"!
а метод Izhevsk.sensors наблюдаю запущенным на время в X-Ray -> Timers
т.е. все ок! Еще раз СПАСИБО за идею! (не зря сюда написал :) )
Вы эту строчку прописали в onNewHour?
Majordomo на Orange Pi Zero.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: почему так может быть?

Сообщение Vovix » Пт дек 04, 2015 1:44 am

triada13 писал(а):....
Вы эту строчку прописали в onNewHour?
Да, конечно!
За это сообщение автора Vovix поблагодарил:
triada13 (Пт дек 04, 2015 6:03 am)
Рейтинг: 1.16%
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: почему так может быть?

Сообщение nick7zmail » Вт дек 22, 2015 10:50 am

Помогите пожалуйста решить проблему с ClockChime.OnNewHour!
Недавно заметил что перестает отрабатывать OnNewHour через некоторое время (раз 15-25 отрабатывает, а потом отказывается)...Симптомы похожие. Сделал все что описано в этой теме, единственные 2 метода, которые оттуда вызываются - вызываются через SetTimeOut()...добавил туда только строчку для контроля за работой метода

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

sg('ThisComputer.onnewhourcheck', gg('ThisComputer.timenow').' '.gg('ThisComputer.datenow')); 
Метод загнулся дня 3 назад, и все еще не запускался ниразу. При этом классовый метод выполняется исправно. Где посмотреть - что с ним происходит?
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: почему так может быть?

Сообщение ipz » Вт дек 22, 2015 5:26 pm

Я у себя заметил, что не отрабатывают методы объектов класса systemStates:
Communication.checkState
System.checkState

Цикл cycle_states.php запущен, методы регулярно вызываются, но состояние системы отражается некорректно.
Оказалось, что не отрабатывают конструкции, использующие указатель $this.
Перезагрузка помогает, но временно.
Заменил $this->setProperty, $this->getProperty на setGlobal, getGlobal - методы отрабатывают.
Но проблема то осталась. Пока не знаю куда дальше копать.
Не знаю как проверить что $this "поломался"
$this.title выдает какую-то билеберду.

Пока вставил в код проверку на
$this->getProperty('Свойство')==getGlobal('Объект.Свойство')
По крайней мере буду знать, что система не функционирует.
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 532 раза
Контактная информация:

Re: почему так может быть?

Сообщение Vovix » Вт дек 22, 2015 5:55 pm

nick7zmail писал(а):Помогите пожалуйста решить проблему с ClockChime.OnNewHour!
Недавно заметил что перестает отрабатывать OnNewHour через некоторое время (раз 15-25 отрабатывает, а потом отказывается)...Симптомы похожие. Сделал все что описано в этой теме, единственные 2 метода, которые оттуда вызываются - вызываются через SetTimeOut()...добавил туда только строчку для контроля за работой метода

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

sg('ThisComputer.onnewhourcheck', gg('ThisComputer.timenow').' '.gg('ThisComputer.datenow'));
Метод загнулся дня 3 назад, и все еще не запускался ниразу. При этом классовый метод выполняется исправно. Где посмотреть - что с ним происходит?
вот помню некоторое время назад(несколько месяцев) была такая проблема: перестал нормально работать(запускаться) OnNewHour, ковырялся тогда долго и обнаружил, что он у меня так-же из двух частей был, т.е. был код как в методе класса так и в методе объекта...
решилось просто объединением кода (ну а потом даже просто удалением одной части) и помещением в одно место - метод именно объекта... и стало нормально работать (ну так-же до некоторых описанных ранее мной моментов)! Вот!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: почему так может быть?

Сообщение nick7zmail » Вт дек 22, 2015 9:45 pm

Vovix писал(а): решилось просто объединением кода (ну а потом даже просто удалением одной части) и помещением в одно место - метод именно объекта... и стало нормально работать (ну так-же до некоторых описанных ранее мной моментов)! Вот!
Ну по скольку метод класса отлично работает - думаю если туда все переместить - тоже будет нормально работать все...но все таки это не нормальный ход вещей)) Как минимум Сергея в известность поставить надо...может быть когда-нибудь найдется причина - дак включит в обнову.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: почему так может быть?

Сообщение sergejey » Ср дек 23, 2015 10:55 am

Добавил себе в список "посмотреть", попробую разобраться.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: почему так может быть?

Сообщение ipz » Чт дек 24, 2015 5:07 pm

Vovix, поищи в базе MySQL, таблице pvalues свойства со значением PROPERTY_NAME='ThisComputer.onnewhourcheck'
Что-то мне подсказывает, что их там два. И ты записываешь значение в одно, а система считывает из другого.
У меня, например, создается видимость что не работает в объекте System $this->setProperty('stateColor', ...). А на самом деле в базе их два, и одно из них успешно перезаписывается:
ID PROPERTY_ID OBJECT_ID VALUE UPDATED PROPERTY_NAME
93 42 17 green 2015-12-14 22:41:03 System.stateColor
573 296 17 red 2015-12-23 11:05:03 System.stateColor

Что было причиной раздвоения теперь уже, наверное, не восстановить.
Версии:
- неаккуратное обращение с getGlobal, setGlobal (не очень верю)
- обновление (можно ли где-нибудь посмотреть скачивал ли я обновление 14.12.2015)
- кривые руки, тогда вопрос где)))

PS: Еще из "странного":
- исчезли все свойства в базовых классах. Теперь они обычные свойства объектов;
- потерялись методы stateChanged у класса systemStates;
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: почему так может быть?

Сообщение ipz » Чт дек 24, 2015 10:50 pm

Сейчас проверил: оба - метод setProperty и функция setGlobal пишут в дубликат свойства, при этом getProperty считывает из первоначально созданного свойства, а getGlobal из дубликата...

Не знаю стоит ли копать дальше... Важнее ведь почему появились дубликаты, а не как система на них реагирует.
Попробую дубликаты удалить, их всего 41. За сутки не добавилось)))

UPD: Удалил прямо в базе один из дубликатов, вместо него два дубликата появилось... (systemStates.onNewMinute продолжал перезаписывать stateColor двумя способами)))))

Жаль, что метод грубой силы не сработал)
ipz
Сообщения: 238
Зарегистрирован: Чт ноя 26, 2015 10:54 pm
Благодарил (а): 38 раз
Поблагодарили: 45 раз

Re: почему так может быть?

Сообщение ipz » Пт дек 25, 2015 11:39 pm

Пересмотрел еще раз, что происходит.

Проблема в методе getProperty.

Фатальное отличие set/getProperty от set/getGlobal (помимо чтения/записи кэша памяти функцией) в том, что
getProperty ищет запись в таблице pvalues локально, по полю PROPERTY_NAME!!! в отличие от остальных функций, которые отрабатывают с учетом связи objects<-properties<-pvalues.

В итоге имеем:
- по какой-то причине ломается таблица properties;
- при попытке записи свойства объекта (неважно как - setProperty или setGlobal) появляются НОВЫЕ записи для этого свойства в таблицах properties, pvalues
- старая запись в pvalues становится 'мусором'
- при этом, в новой записи все хорошо, она связана с другими таблицами. Только одно но: поле PROPERTY_NAME не заполнено. Насколько я разглядел оно заполнится теперь только в startup_maintanence.php, т.е. после перезагрузки.
- setProperty и set/getGlobal работают как часы
- getProperty же находит старую, мусорную запись, в которой заполнено поле PROPERTY_NAME

Хотелось бы попросить Сергея решить что с этим делать)))
- мне кажется что достаточно заполнить $v['PROPERTY_NAME']=$this->object_title.'.'.$property; в setProperty
- из startup_maintanence.php костыль можно убрать)))
Ответить