Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 03.11.2014, 23:41   #31
borey
Member
 
Регистрация: 25.10.2013
Сообщений: 80
Вес репутации: 0
borey is an unknown quantity at this point
По умолчанию Re: Одновременные чтение/запись в/из Arduino на /dev/ttyUSB

Admin, спасибо!

Дурная моя голова - я ведь уже однажды сталкивался с этой проблемой - нашел в загашнике ссылок патч с мануалом для решения проблемы с USB: https://github.com/SLboat/Openwrt_12...1_RESET_PATCH/

К слову, у меня не FTDI, а Prolific PL2303. Проблема, как я понял у SoC AR9331 в работе с USB 1.1 (с USB 2.0 проблемы нет и поэтому при подключении через любой USB 2.0 хаб проблема исчезает), патч фиксит баг так, что можно подключать USB 1.1-устройства непосредственно к маршрутизатору.

Важно: перед использованием проверьте, что у Вас нужная версия OpenWRT (там же - пошаговая инструкция, как это сделать)!

Итого, я решил не заморачиваться с асинхронным приемом команд с удаленного сервера.
Для моих нужд хватает открытия порта через stty и чтения строк в цикле с отправкой на сервер и записью в порт принятого от сервера.

Остался открытый вопрос - как просто проверить, запущен ли уже скрипт?

Я пробую такое:

PHP код:
ISWORK=`ps | grep '/read_test' | wc -l`
echo 
"iswork=$ISWORK"

if [ "$ISWORK-gt 1 ]; then
        
echo "already run"
#       exit 1
fi
но ISWORK у меня почему-то всегда =3 если скрипт не запущен и =4, если запущена 1 копия.

При этом

из консоли, руками, если скрипт не запущен:

PHP код:
root@banya:/# ps | grep read_test
22411 root      1492 S    grep read_test 
из консоли, руками, если скрипт запущен:

PHP код:
root@banya:/# ps | grep read_test
22412 root      1496 S    {read_test} /bin/sh /read_test
22428 root      1492 S    grep read_test 
Как так?

Последний раз редактировалось borey; 12.11.2014 в 11:14.
borey вне форума   Ответить с цитированием
Старый 04.11.2014, 13:08   #32
borey
Member
 
Регистрация: 25.10.2013
Сообщений: 80
Вес репутации: 0
borey is an unknown quantity at this point
По умолчанию Re: Одновременные чтение/запись в/из Arduino на /dev/ttyUSB

На 45567 секунде таки отвалился USB )))

Но, возможно, причина была в чем-то ином - сейчас уже более 114553 секунд (31+ часов) без проблем.

Последний раз редактировалось borey; 05.11.2014 в 20:35.
borey вне форума   Ответить с цитированием
Старый 08.11.2014, 16:19   #33
borey
Member
 
Регистрация: 25.10.2013
Сообщений: 80
Вес репутации: 0
borey is an unknown quantity at this point
По умолчанию Re: Одновременные чтение/запись в/из Arduino на /dev/ttyUSB

Подвожу итог - вдруг кому-то понадобится:

1. патч помог, теперь даже без хаба arduino с MR3020 работает стабильно
2. на всякий случай (скрипт подвис или еще чего) заморочился с перезапуском скрипта
3. почему при проверке ps | grep 'abc' показывает на один процесс больше (3 вместо 2 при первом запуске, 4 - при одной работающей в фоне копии и т.д.), я так и не понял и решил сделать проверку так:

/arduino_xchg запускаю в фоне по крону раз в минуту:

PHP код:
#cat /arduino_xchg

#!/bin/sh

# get last action time or 0 if first run
if [ -"/tmp/last_send" ]; then
        LAST
=`cat /tmp/last_send`
else
        
LAST=0
fi

NOW
=`date +%s`
let DELTA=$NOW-$LAST
TIMEOUT
=180

if [ $DELTA -le $TIMEOUT ]; then
        
# exit if another the same script is working normally
        
echo "already worked ($DELTA sec)"
        
exit 0
else
        
# if last action was so long before - kill all the existing processes (and itself too - it will run after one minute)
        
ISWORK=`ps | grep '{arduino_xchg}' | wc -l`
        if [ 
$ISWORK -gt 3 ]; then
                killall 
'arduino_xchg'
        
fi;
fi;

stty -/dev/tty$USB raw speed 9600
while read i; do

        
# do something useful

        # upd last action time
        
NOW=`date +%s`
        echo 
$NOW > /tmp/last_send

done 
</dev/ttyUSB0 
C удовольствием выслушаю критику.
borey вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 02:27. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика