Периодически запуск сценариев

Новые релизы, обновления и т.п.

Модератор: immortal

Logrus
Сообщения: 1737
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 295 раз
Поблагодарили: 358 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Вс июн 07, 2020 8:00 pm

Bagir писал(а):
Вс июн 07, 2020 6:05 pm
Logrus писал(а):
Вс июн 07, 2020 2:09 pm
при рестарте все эти свойства чистятся и даже дисейбл который проверяется при запуске ...
СПАСИБО! нашел

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

// Removing cycles properties
$qry="1 AND (TITLE LIKE 'cycle%Run' OR TITLE LIKE 'cycle%Control' OR TITLE LIKE 'cycle%Disabled' OR TITLE LIKE 'cycle%AutoRestart')";
Теперь понятно как управлять циклами. Я долго топтался у этого момента, а вот сейчас мозаика в голове сложилась.
вот дисейбл отсюда убрать и выставив своему не будет запускать при старте
а рулить старт и стоп при последнем в автозагрузку не добавит
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 334 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Вс июн 07, 2020 10:13 pm

Chainik писал(а):
Вс июн 07, 2020 7:22 pm
Bagir, вы как найдете устраивающий вас вариант работы цикла, напишите здесь, пожалуйста, что у вас получилось в итоге. Уверен, очень многим будет полезно.
Обязательно напишу. Всё-таки задача необычная. Использование цикла для конкретного процесса, проходящего не каждый день. На следующей неделе будут тесты.
Logrus писал(а):
Вс июн 07, 2020 8:00 pm
вот дисейбл отсюда убрать и выставив своему не будет запускать при старте
а рулить старт и стоп при последнем в автозагрузку не добавит
Отлично работает!

Напомню, что пишу код для самогонного аппарата. Стоит задача на разных стадиях процесса опрашивать температурные датчики с разной частотой. Например при начальном разогреве куба, раз в минуту вполне достаточно. Далее ускоряемся до пары раз в минуту. Это легко делается в методе объекта класса Timer. А вот дальше нужен опрос с максимальной скоростью. Меня вполне устраивает раз в две секунды. На таймерах это решается, но выглядит некрасиво. Уж слишком много действий в системе. Этот вариант у меня уже весьма неплохо отработан. Сейчас опрос датчиков в цикл. Попробовать пока нет возможности, но даже "на холостом ходу" легко и стабильно справляется с опросом датчика каждую секунду. В ближайшие дни всё доделаю и выложу код в новой теме. Тут оставлю ссылочку.
За это сообщение автора Bagir поблагодарил:
Chainik (Вс июн 07, 2020 10:37 pm)
Рейтинг: 1.19%
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 334 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Пн июн 08, 2020 12:56 pm

Друзья, всё отлично работает! С циклом намного лучше чем на таймерах. Ну это и понятно. Таймеры не предназначены для вызова кода по кругу с интервалом в 2 секунды. Уже хочется поделиться тем что получилось, но сначала испытаю код в боевых условиях. Запланировал на среду. Так что скоро обсудим в новой теме код, да и сам процесс с температурными фазами. Я так понял, что тут винокуры тоже есть :)
Единственный момент, который ещё не решал. Циклы в МД скорее всего изначально не были задуманы для работы время от времени по запросу системы. Но не трогая штатный код, всё же есть вариант приспособить циклы под такие нужды. Есть пара грабель:

После остановки цикла, если он проработал больше полчаса, он попадает в авторестарт. Ну это и хорошо, мало ли во время процесса брякнется. Вот только при остановке, он сразу же запускается снова по авторестарту. Я повесил условие остановки внутрь цикла по значению свойства переключателя, отвечающего за стадию процесса. Перезапущенный цикл сразу же остановится снова. Но всё же правильнее было бы вначале исключить его из массива авторестарта. Думаю, это можно сделать. Если кто знает как, прошу написать, чтобы мне второй раз не изобретать велосипед.

При остановке цикла регистрируется ошибка. Тоже не красиво. Надо как то объяснить системе, что этот цикл может быть остановлен, и это штатная ситуация.

В остальном всё работает на ура. Сделали из МД микроконтроллер. Решение на любителя. И многие скажут, что лучше было бы поставить ту же ардуино. Возможно и так. Но лично я не думаю, что стоит разводить огород микроконтроллеров, когда рядом простаивают такие вычислительные мощности. Да и с ардуино я пока не подружился. МД у меня на хорошем компе с SSD которому анализ меряет ещё 55 лет жизни, а столько не живут, так что пускай трудится. К тому же, получая данные сразу в МД, я могу моментально реагировать на их изменения, и строить график в реальном времени. Это всё будет в коде в новой теме, обсудим.
За это сообщение автора Bagir поблагодарил:
Chainik (Пн июн 08, 2020 12:59 pm)
Рейтинг: 1.19%
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
xor
Сообщения: 1721
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 204 раза
Поблагодарили: 512 раз

Re: Периодически запуск сценариев

Сообщение xor » Пн июн 08, 2020 9:03 pm

Bagir писал(а):Друзья, всё отлично работает! С циклом намного лучше чем на таймерах. Ну это и понятно. Таймеры не предназначены для вызова кода по кругу с интервалом в 2 секунды. Уже хочется поделиться тем что получилось, но сначала испытаю код в боевых условиях. Запланировал на среду. Так что скоро обсудим в новой теме код, да и сам процесс с температурными фазами. Я так понял, что тут винокуры тоже есть :)
Единственный момент, который ещё не решал. Циклы в МД скорее всего изначально не были задуманы для работы время от времени по запросу системы. Но не трогая штатный код, всё же есть вариант приспособить циклы под такие нужды. Есть пара грабель:

После остановки цикла, если он проработал больше полчаса, он попадает в авторестарт. Ну это и хорошо, мало ли во время процесса брякнется. Вот только при остановке, он сразу же запускается снова по авторестарту. Я повесил условие остановки внутрь цикла по значению свойства переключателя, отвечающего за стадию процесса. Перезапущенный цикл сразу же остановится снова. Но всё же правильнее было бы вначале исключить его из массива авторестарта. Думаю, это можно сделать. Если кто знает как, прошу написать, чтобы мне второй раз не изобретать велосипед.

При остановке цикла регистрируется ошибка. Тоже не красиво. Надо как то объяснить системе, что этот цикл может быть остановлен, и это штатная ситуация.

В остальном всё работает на ура. Сделали из МД микроконтроллер. Решение на любителя. И многие скажут, что лучше было бы поставить ту же ардуино. Возможно и так. Но лично я не думаю, что стоит разводить огород микроконтроллеров, когда рядом простаивают такие вычислительные мощности. Да и с ардуино я пока не подружился. МД у меня на хорошем компе с SSD которому анализ меряет ещё 55 лет жизни, а столько не живут, так что пускай трудится. К тому же, получая данные сразу в МД, я могу моментально реагировать на их изменения, и строить график в реальном времени. Это всё будет в коде в новой теме, обсудим.
Обозвать его, цикл, не как цикл, чтоб он под общую их циклическую логику не подпадал и рулить им как хочешь

Отправлено с моего Redmi 4X через Tapatalk

Logrus
Сообщения: 1737
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 295 раз
Поблагодарили: 358 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Пн июн 08, 2020 10:22 pm

у меня при остановке цикла вручную, аналогично можно и автоматом, (команда стоп в контроль) из автозапуска он удаляется штатными средствами и никаких ошибок нет
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 334 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Пн июн 08, 2020 11:00 pm

xor писал(а):
Пн июн 08, 2020 9:03 pm
Обозвать его, цикл, не как цикл, чтоб он под общую их циклическую логику не подпадал и рулить им как хочешь
Тогда потеряю и штатные средства управления циклом. Это конечно не приговор, но не хотелось бы.
Logrus писал(а):
Пн июн 08, 2020 10:22 pm
у меня при остановке цикла вручную, аналогично можно и автоматом, (команда стоп в контроль) из автозапуска он удаляется штатными средствами и никаких ошибок нет
Я кажется понял. Я останавливаю цикл изнутри цикла, проверкой свойства моего объекта. Это и приводит к регистрации ошибки. Тормозить надо действительно только командой stop. Надо бы мне починить taskkill, а то при использовании функции proc_terminate() действительно иногда наблюдаю сбои. Пока не копал почему.
Тогда, получается, что вопрос с закрытием цикла снят.
Завтра перегоню сырец без очистки. Будет лишний перегон, хуже точно не станет. Не хочется ждать ещё пару дней на очистку. Так что скоро результат.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 334 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Ср июн 10, 2020 9:43 am

Оставляю ссылку на тему с продолжением обсуждения кода самогонного аппарата.
По теме периодического запуска сценариев, там можно посмотреть цикл и взаимодействие с ним. Цикл запускается и останавливается при необходимости. В цикле происходит опрос свойства объекта, и по его значению опрос датчиков с разной частотой. Общая частота запросов может достигать 1 секунды. Работает очень стабильно.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
xor
Сообщения: 1721
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 204 раза
Поблагодарили: 512 раз

Re: Периодически запуск сценариев

Сообщение xor » Ср июн 10, 2020 10:30 pm

Bagir писал(а):
Пн июн 08, 2020 11:00 pm
xor писал(а):
Пн июн 08, 2020 9:03 pm
Обозвать его, цикл, не как цикл, чтоб он под общую их циклическую логику не подпадал и рулить им как хочешь
Тогда потеряю и штатные средства управления циклом. Это конечно не приговор, но не хотелось бы.
Logrus писал(а):
Пн июн 08, 2020 10:22 pm
у меня при остановке цикла вручную, аналогично можно и автоматом, (команда стоп в контроль) из автозапуска он удаляется штатными средствами и никаких ошибок нет
Я кажется понял. Я останавливаю цикл изнутри цикла, проверкой свойства моего объекта. Это и приводит к регистрации ошибки. Тормозить надо действительно только командой stop. Надо бы мне починить taskkill, а то при использовании функции proc_terminate() действительно иногда наблюдаю сбои. Пока не копал почему.
Тогда, получается, что вопрос с закрытием цикла снят.
Завтра перегоню сырец без очистки. Будет лишний перегон, хуже точно не станет. Не хочется ждать ещё пару дней на очистку. Так что скоро результат.
вообще, плохая идея рубить цикл киллом на полном скаку, выход по ребуту сделан гораздо мягче, например.
Logrus
Сообщения: 1737
Зарегистрирован: Пт апр 07, 2017 12:20 pm
Благодарил (а): 295 раз
Поблагодарили: 358 раз

Re: Периодически запуск сценариев

Сообщение Logrus » Ср июн 10, 2020 11:09 pm

и через пол часа он перезапустится или ты все перепишешь?
из за мультиплатформенности много чего нехорошо реализовано (((
Telegram | Блог
Raspberry Pi3, с образа от Сергея 3.31, PHP 7
Почти всё время уходит на исправление ошибок, оставшееся - на их повторение. (с) ))) Спасибо
Аватара пользователя
Bagir
Сообщения: 1485
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 334 раза

Re: Периодически запуск сценариев

Сообщение Bagir » Ср июн 10, 2020 11:16 pm

xor писал(а):
Ср июн 10, 2020 10:30 pm
вообще, плохая идея рубить цикл киллом на полном скаку, выход по ребуту сделан гораздо мягче, например.
Да сам придерживаюсь такого мнения. С детства воспитан освобождать все ресурсы, Закрывать формы и уж потом завершать программу. А мешком по голове далеко не всегда хороший вариант.

В циклах вижу конструкцию

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

   if (file_exists('./reboot') || IsSet($_GET['onetime'])) {
      exit;
   }
Я пробовал использовать exit; для завершения цикла. Цикл то останавливается, но в МД регистрируется ошибка об остановке цикла.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Ответить