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

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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2013, 21:08   #1
BeZoom
Junior Member
 
Регистрация: 25.08.2013
Сообщений: 15
Вес репутации: 0
BeZoom is an unknown quantity at this point
По умолчанию Помощь с проектом // socat, serial port to TCP socket

Я делаю проект суть которого в двухсторонней коммуникации сервера и множества клиентских устройств по TCP.

Сервер - это просто машина на линуксе где-то в интернете.
Клиенты - это LED панели, они находятся в разных городах, подключенные к своему локальному интернету по wifi

То что ниже - это скажем так, прув оф концепт технологии. Один сервер и один подключенный клиент.
Я столкнулся со сложностями. Помогите пожалуйста их решить.

Клиентское устройство состоит из:
— роутера на OpenWrt
— переходника usb to rs-232
— LED панели, которая дает собой управлять через rs-232

Задача клиента: при включении выходить в интернет по wifi и самостоятельно устанавливать соединение с сервером.
Задача сервера: посылать на клиент текущее время раз в секунду

Роутер принимает данные по TCP от сервера и отправляет их на serial порт /dev/ttyUSB0.
Это делает программа socat запущенная в фоне. Т.е. роутер просто переадресовывает приходящие по TCP данные (и обратно, если бы LED панель отправляла что-то), это своеобразный тонкий клиент.

На сервере время кодируется в наборы команд которые понимает LED панель и передается по TCP.
Те же самые команды, при желании, можно было бы отправить в LED по rs-232 с локального компа.


socat.sh - выполняется на клиенте при загрузке

PHP код:
#!/bin/ash

DEV=/dev/ttyUSB0

PORT
=5555
HOST
=192.168.0.100
BAUD
=115200

while true; do
  if [ -
e $DEV ]
  
then
    usbreset 
'USB-Serial Controller D'
    
socat -----lf /tmp/socat.log -T15 TCP4:$HOST:$PORT,reuseaddr file:$DEV,raw,echo=0,b$BAUD
    
echo '*** socat timeout ***'
  
else
    echo 
'*** no device /tmp/ttyUSB0 ***'
    
sleep 2
  fi
done 


Т.е. как только мы включаем клиентское устройство, сразу после загрузки роутер устанавливает связь с сервером 192.168.0.100 и принимает от него данные.
На LED панели мы видим время и номер пакета переданного с сервера начиная с момента коннекта (по сути это uptime в секундах)

Больше ~3500 секунд максимум не получатся чтобы устройство работало, время замирает.
Как я понимаю подводит переходник.




Вот фрагмент лога socat

PHP код:
1970/01/01 01:38:40 socat[1890I poll timed out (no data within 15.000000 seconds)
1970/01/01 01:38:40 socat[1890N inactivity timeout triggered
1970
/01/01 01:38:40 socat[1890N exiting with status 0
1970
/01/01 01:38:40 socat[1890exit(0)
1970/01/01 01:38:40 socat[1890I shutdown(42)
1970/01/01 01:38:40 socat[1890D shutdown()  -> 0
1970
/01/01 01:38:40 socat[1890D tcsetattr(50, {00000000,00000000,000018b2,00000080,03,1c,7f,15,01,00,00,00,11,13,1a,00,12,0f,17,16,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00})
1970/01/01 01:38:40 socat[1890D tcsetattr() -> -1
1970
/01/01 01:38:40 socat[1890W cannot restore terminal settings on fd 5Invalid argument 

socat устанавливает соединение с сервером и сервер передает данные на устройство, роутер переправляет их serial port, но отваливается по таймуту, видимо serial port отваливается, хотя если набрать команду ниже, то файл устройства есть
PHP код:
root@OpenWrt:~#ls /dev/ttyUSB0
/dev/ttyUSB0 
Если после того как время застопорилось вытащить usb из роутра и воткнуть, то время снова пойдет, только uptime сбросится, но это не так страшно.

После того как socat отваливается по таймауту срабатывает вот эта команда в socat.sh. Она софтварным путем перетыкает usb в роутере.
PHP код:
usbreset 'USB-Serial Controller D' 





Вопросы:


1. Может как-то можно решить вопрос без разрыва TCP соединения? Т.е. раз уж serial port залип, то перетыкнуть его, но оставаться на связи. У socat есть адское кол-во параметров и разных способов и комбинаций применения.
2. Как нужно экранировать переходник, если я все хочу собрать в одном корпусе? Какие места на плате самые опасныев плане помех для переходника? Провода питания 220?
Миниатюры
Нажмите на изображение для увеличения
Название: IMG_0001-fixed.jpg
Просмотров: 3795
Размер:	115.0 Кб
ID:	1263   Нажмите на изображение для увеличения
Название: IMG_0002-7-fixed.jpg
Просмотров: 3851
Размер:	144.2 Кб
ID:	1264   Нажмите на изображение для увеличения
Название: IMG_0003-16-fixed.jpg
Просмотров: 3807
Размер:	142.7 Кб
ID:	1265  
Изображения
 

Последний раз редактировалось BeZoom; 03.11.2013 в 00:05.
BeZoom вне форума   Ответить с цитированием
 


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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


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


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