SleepTimer по условиям

SleepTimer по условиям

Postby Morpheus68 » 28 Feb 2017, 11:43

Уважаемые коллеги, всем добрый день!
Занялся разработкой таймера сна через определённое время, при условии неактивности плеера - ничего не воспроизводит, хозяин заснул, забыл и т.д. :D
Имею успешный опыт аналогичной разработки для плеера Dune - http://forum.hdtv.ru/index.php?showtopic=12649&hl=sleeptimer
Что задумано к реализации (и частично выполнено):
- выключение плеера после окончания просмотра фильма через DVDPlayer
- выключение плеера после окончания просмотра фильма через IPTV
- выключение плеера после окончания прослушивания музыки
- выключение плеера при неактивности в меню
- выключение плеера при неактивности по сети - нет файлов на копировании
......
Столкнулся с проблемой определения нажатия клавиш на пульте. С помощью уважаемого FarVoice, пришли к выводу, что единственный способ - анализ stdout от DP.
Однако и здесь есть засада. Через "шланг" видно - нажатие на любую клавишу пульта вызывает в консоле запись вида "--- process key" -
DPout_clear.zip
(558 Bytes) Downloaded 306 times
Однако при перенаправлении потока DP в файле /usr/local/etc/rcSс помощью команды:
| +
Code: Select all
./RootApp DvdPlayer | /usr/local/etc/sleepD&
в файл /usr/local/etc/sleepD вида:
| +
Code: Select all
#!/bin/sh

while true ; do
   read s
   echo "read:$s"
   if echo "$s" | grep -q 'process' ; then
      echo "write:$s"
      date '+%s' > /tmp/lasttime_DP_out
   fi
done
начинают происходить какие-то странности - "--- process key" появляется какими-то кусками, такое впечатление, что что-то где-то буферизируется!
Можно несколько раз нажимать клавиши на пульте, но ничего не происходит. Потом вдруг, после 3-х нажатий кнопки возврат, вываливается лог с "--- process key" всех предыдущих нажатий и ещё много мусора -
DPout_pipe.zip
(1.44 KiB) Downloaded 291 times
Вообщем, конструкция работает, но как-то не так... Прошу помощь зала! :?
...
P.S. Скрипт ещё очень сырой - выкладывать пока что не буду!
P.P.S. Вывод stdout пробовал и помощью такой конструкции:
| +
Code: Select all
./RootApp DvdPlayer 2>&1 | /usr/local/etc/sleepD&
Результат аналогичный.
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby Morpheus68 » 03 Apr 2017, 14:41

Уважаемые коллеги, представляю траймер сна по условиям.
Версия 0.6beta-20170330
sleepTimer_v.0.6b-20170330.zip
(7.06 KiB) Downloaded 317 times

Change log: | +
0.6beta-20170330 - first release

SleepTimer - таймер выключения при наступлении определённого события. Срабатывает в случае отсутствия активности в течение заданного интервала времени (по умолчанию 30 минут). В том числе, при отсутствии активности с пульта.
Таймер НЕ срабатывает:
- при просмотре кино, фотографий, прослушивании музыки. В том числе и при постановке этих процессов на паузу!
- при навигации в меню плеера.
-----
Что реализовано в данной версии:
- выключение плеера после окончания просмотра фильма с локального или сетевеого носителя.
- выключение плеера после окончания просмотра фильма через IPTV.
- выключение плеера после окончания прослушивания музыки.
- выключение плеера ПОСЛЕ просмотра фотографий.
- выключение плеера при неактивности в меню.
Что НЕ реализовано:
- проверка отсутствия файлов на копировании между локальными носителями и/или по сети.

Установка: | +
Для установки SleepTimer на плеер необходимо скачать инсталляционный скрипт на плеер, присвоить ему права на исполнение и запустить его:
1. chmod 755 ./sleepTimer_v.Х.ХХ_install.sh
2. ./sleepTimer_v.Х.ХХ_install.sh
(v.X.XX заменить на актуальную версию)
В процессе установки, инсталляционный скрипт создаёт в директории /usr/local/etc/rc.init запускающий скрипт S98sleepTimer, исполняемый во
время загрузки плеера. Кроме этого, инсталляционный скрипт изменяет файл /usr/local/etc/rcS, предварительно создав копию файла с расширением .bak.
Для вступления в силу сделанных изменений, инсталляционный скрипт предлагает выполнить перезагрузку плеера.
ВАЖНО!!!
Ввиду изменения инсталляционным скриптом файла /usr/local/etc/rcS, в части запуска программы DvdPlayer, отвечающего за "поднятие" сети, крайне
рекомендую предварительно раскомментировать первые строчки файла /usr/local/etc/rcS, выполняющие инициализацию сетевого интерфейса:
ifconfig eth0 192.168.0.2 netmask 255.255.0.0
route add default gw 192.168.0.1
Естественно, прописав свои настройки сети.
В случае успешного запуска плеера (до полного старта интерфейса), после инсталляции SleepTimer, указанные строчки можно закомментировать обратно.

Конфгурирование: | +
SleepTimer имеет единственный настраиваемый параметр - время задержки в минутах перед выключением плеера. Устанавливается или в инсталляционном
скрипте - строка 19 [latency=30] или в запускающем скрипте /usr/local/etc/S98sleepTimer - строка 54 [time=30].
По умолчанию стоит значение в 30 минут.

Отладка: | +
Отладка может включаться на двух уровнях - глобально в установочном скрипте и, раздельно для каждого демона, в запускающем скрипте /usr/local/etc/S98sleepTimer.
-----
В установочном скрипте - строка 18:
debug=1
1 - отладка включена, 0 - отладка выключена.
-----
В запускающем скрипте /usr/local/etc/S98sleepTimer - строки 20 и 53:
dbgD=1 # Для /tmp/sleepD.sh
dbgT=1 # Для /tmp/sleepT.sh
1 - отладка включена, 0 - отладка выключена.
-----
Установочный скрипт ведёт лог своих действий в той-же директории, откуда он запускался. Файл называется sleepTimer_install.log.
Запускающий скрипт /usr/local/etc/S98sleepTimer ведёт лог своих ошибок периода выполнения в файл /tmp/S98_error.log
Демон, контролирующий нажатие кнопок пульта, ведёт лог в файл /tmp/sleepD.log
Основной скрипт таймера, ведёт лог в файл /tmp/sleepT.log
-----
По умолчанию, отладка отключена глобально.

Для гуру: | +
Во время запуска плеера, выполняется скрипт /usr/local/etc/S98sleepTimer, который создаёт в папке /tmp два исполняемых скрипта (демона) - sleepT.sh и sleepD.sh, и запускает их на исполнение.
Ввиду изменённого файла /usr/local/etc/rcS основная программа DvdPlayer запускается с параметрами -l и -o, позволяющими вести протокол вывода в отдельный,
предварительно созданный, именованный канал /tmp/DvdPlayer.out.
Для отслеживания действий, выполняемых программой DvdPlayer, таких как, воспроизведение фильмов (в том числе через IPTV), прослушивание музыки, просмотра фотографий, используется скрипт /tmp/sleepT.sh, анализирующий содержимое файла /tmp/appContext.
Для отслеживания нажатий кнопок пульта во время навигации в меню плеера, используется скрипт /tmp/sleepD.sh, анализирующий вывод сообщений от программы DvdPlayer, в именованный канал /tmp/DvdPlayer.out и, в случае нажатия кнопок на пульте, изменяющий содержимое файла /tmp/PressKey.log.

Совместимость: | +
На данный момент, SleepTimer работает на:
    - 3Q 370HW, прошивка Universal AMPS_r6, 3Dgui

To do list: | +
1. Реализовать отслеживание копирования файлов с/на плеер.
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby Virtual » 03 Apr 2017, 18:05

пара советов:
1. модуль лучше оформлять как модуль moS легче будет устанавливать и настраивать, хоть из вэб хоть из rss (UI плеера)
2. активность сети и дисков можно глянуть iostat и cat /proc/net/dev (там счетчики, если кто что копирует смотрит они будут расти ;))
3. править /usr/local/etc/rcS очень опасное действо! ибо любая ошибка приведет к незагрузке гуя иль вобще к циклическому ребуту (проверь на конфликт с модулем капчи, сначала свой ставь потом капчу и наооборот, 90% конфликтанет)

PS мониторинг по п.2. способен исключить все остальные мониторинги! (ибо если плеер ничего не качает по сети и не пользуется дисками он точно нифига не делает) ;)
небольшое исключение тут только в (Home menu replacement) оно погодку подтягивает, но такой мизерный трафик легко отфильтровать.
марсы: HDS7 (смотрелка AMP скин vrt )
HDR12 AMP (обычно сервер с RAM 256 и 2 SATA диска 2T+)//но очень иногда оцифровка видео
XTR PRO(AMP, HTTP(S) NFS SMB FTP сервер +trans2.90 + 2 SATA диска 2T+
сатурны: XTR Prodigy, R6S(512Mb_NAND), HD900A(_MD*) прошивка
User avatar
Virtual
 
Posts: 6862
Joined: 01 Oct 2010, 17:17
Location: RU

Re: SleepTimer по условиям

Postby Morpheus68 » 03 Apr 2017, 18:49

Спасибо за советы, особенно по пункту 2!
1. Руки не дошли. Думал вначале все процессы оформить, протестить как следует, а уж потом ка модуль moS оформлять.
2. Диски хотел глядеть через cat /sys/block/sda/stat...
3. Если капча - это Capture, то всё проверенно - мой инсталятор корректно отрабатывает после установленного модуля Capture. А вот наоборот не проверял! :(

P.S. И проверку нажатия кнопок пульта всё равно не исключить...
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby Virtual » 03 Apr 2017, 19:13

1. сразу сделать как модуль moS сразу, реально удобней pm make модуль рулит
2. iostat это обертка над cat /sys/block/*/stat 8-)

PS что можно делать пультом долго.... не читая по сети и с дисков?
марсы: HDS7 (смотрелка AMP скин vrt )
HDR12 AMP (обычно сервер с RAM 256 и 2 SATA диска 2T+)//но очень иногда оцифровка видео
XTR PRO(AMP, HTTP(S) NFS SMB FTP сервер +trans2.90 + 2 SATA диска 2T+
сатурны: XTR Prodigy, R6S(512Mb_NAND), HD900A(_MD*) прошивка
User avatar
Virtual
 
Posts: 6862
Joined: 01 Oct 2010, 17:17
Location: RU

Re: SleepTimer по условиям

Postby Morpheus68 » 04 Apr 2017, 12:47

Есть небольшой баг, я бы сказал багчик...
Наблюдается однонаправленный конфликт SleepTimer'а и модуля Capture - если SleepTimer устанавливать ПОСЛЕ модуля Capture, то всё проходит гладко и прекрасно работает.
А вот наоборот - наблюдается некорректная работа инсталлятора, и именно в модуле Capture - происходит задвоение вызова модуля Capture в файле /usr/local/etc/rcS.
Так как инсталлятор SleepTimer'а комментирует оригинальную строку вызова DvdPlayer'а, а затем вставляет свой вызов:
Code: Select all
#./RootApp DvdPlayer&
./RootApp DvdPlayer -l on -o $DPout&
То если после этого запустить установку модуля Capture, он 2 раза вставляет свой вызов:
Code: Select all
/usr/local/etc/mos/bin/captured | #./RootApp DvdPlayer&
/usr/local/etc/mos/bin/captured | ./RootApp DvdPlayer -l on -o $DPout&
То-есть он игнорирует строку начинающуюся с комментария.
Как-то так...
Исправляется это удалением первой строки с неправильным вызовом модуля Capture.

В следующей версии SleepTimer'а сделаю, что бы он НЕ комментировал оригинальный вызов DvdPlayer'а. Всё равно делается копия файла...
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby Morpheus68 » 10 Apr 2017, 15:11

Представляю следующую версию:
0.7beta-20170405
sleeptimer.tar.bz2
(3.69 KiB) Downloaded 301 times

Что сделано/добавлено:
1) Скрипт переделан в moS-модуль
2) Реализовано отслеживание копирования файлов между дисками и с/на плеер по сети
3) Устранён конфликт установки совместно с модулем Capture

Подробная инструкция во вложении ниже.
For English users - detailed instructions for use are in the archive.
README.zip
(4.11 KiB) Downloaded 308 times

P.S. Убедительная просьба, всех установивших модуль, отписываться о результатах с обязательным указанием прошивки и гуя.
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby Morpheus68 » 11 Apr 2017, 12:12

UPDATE -> обновил справку (была кривая кодировка). Updated help file.
README_v2.ZIP
(4.1 KiB) Downloaded 312 times
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Re: SleepTimer по условиям

Postby azabrof » 14 Apr 2017, 11:08

apacer al460 AMP_r13 (icon) по истечении времени модуль становится не активным. Отладка включена. Время 3 мин.
S98error.log - пустой, sleepD.log - Version: 0.7beta-20170405
sleepT.log | +
[2017-04-14 08:10:19] 75 First start sleepTimer (0.7beta-20170405)
[2017-04-14 08:10:19] 80 Daemon initialization
[2017-04-14 08:10:19] 93 Timer = 0
[2017-04-14 08:10:19] 94 Waiting...
[2017-04-14 11:20:11] 102 Check changes in files
[2017-04-14 11:20:11] 271 /tmp/appContext = changed -> reset timer
[2017-04-14 11:20:11] 93 Timer = 0
[2017-04-14 11:20:11] 94 Waiting...
[2017-04-14 11:21:11] 102 Check changes in files
[2017-04-14 11:21:11] 110 /tmp/appContext = not changed
[2017-04-14 11:21:11] 136 Music playback -> reset timer
[2017-04-14 11:21:11] 93 Timer = 0
[2017-04-14 11:21:11] 94 Waiting...
[2017-04-14 11:22:11] 102 Check changes in files
[2017-04-14 11:22:12] 271 /tmp/appContext = changed -> reset timer
[2017-04-14 11:22:12] 93 Timer = 0
[2017-04-14 11:22:12] 94 Waiting...
[2017-04-14 11:23:12] 102 Check changes in files
[2017-04-14 11:23:12] 110 /tmp/appContext = not changed
[2017-04-14 11:23:12] 63 sda: da5bd8e8c674e26c996b658616fbe262
[2017-04-14 11:23:12] 248 Disks is active -> reset timer
[2017-04-14 11:23:12] 93 Timer = 0
[2017-04-14 11:23:12] 94 Waiting...
[2017-04-14 11:24:12] 102 Check changes in files
[2017-04-14 11:24:12] 110 /tmp/appContext = not changed
[2017-04-14 11:24:13] 63 sda: da5bd8e8c674e26c996b658616fbe262
[2017-04-14 11:24:13] 239 System idle after playback -> increase timer
[2017-04-14 11:24:13] 93 Timer = 1
[2017-04-14 11:24:13] 94 Waiting...
[2017-04-14 11:25:13] 102 Check changes in files
[2017-04-14 11:25:13] 110 /tmp/appContext = not changed
[2017-04-14 11:25:13] 63 sda: da5bd8e8c674e26c996b658616fbe262
[2017-04-14 11:25:13] 239 System idle after playback -> increase timer
[2017-04-14 11:25:13] 93 Timer = 2
[2017-04-14 11:25:13] 94 Waiting...
[2017-04-14 11:26:13] 102 Check changes in files
[2017-04-14 11:26:13] 110 /tmp/appContext = not changed
[2017-04-14 11:26:14] 63 sda: da5bd8e8c674e26c996b658616fbe262
[2017-04-14 11:26:14] 239 System idle after playback -> increase timer
[2017-04-14 11:26:14] 281 Power Off...
[2017-04-14 11:26:21] 293 Abnormal exit!!!
ASUS O!Play R1 (amp_r13_icon), Apacer al460 (amp_r13_vrt gu)
azabrof
 
Posts: 34
Joined: 10 Aug 2013, 14:34

Re: SleepTimer по условиям

Postby Morpheus68 » 14 Apr 2017, 12:19

to azabrof: что происходит понятно - у Вас не отрабатывает выключение по команде:
Code: Select all
echo 0xA8579F00 > /sys/devices/platform/VenusIR/fakekey
А как у Вас выглядит код кнопки POWER в /usr/local/etc/irfake/irfake.conf ?
3Q F370HW (он же measy X5) -> amps_r6_nogui+3Dgui
Morpheus68
 
Posts: 53
Joined: 16 Sep 2016, 14:23
Location: Москва

Next

Return to Разработка

Who is online

Users browsing this forum: No registered users and 22 guests