Автор Тема: проблем с РНР-то да чете и пише в серийния порт  (Прочетена 2890 пъти)

a_panov

  • Участник
  • *****
  • Публикации: 62
    • Профил
Здравейте

Имам проблем да накарам РНР-то да чете и пише в серийния порт под Линукс.
Какво имам и какво съм направил досега:
Тестова установка 1 - Сървър:
Сървъра е с DSL Linux, 2.4 ядро, XAMPP с като РНР има "--enable-dio", в php.ini e зададено да всички грешки и предупреждения. Имам закачен луупбак на серийния порт. /dev/ttyS0 e с права 666 или rw- rw- rw-. Когато подам:
echo "12345" > /dev/ttyS0
командата:
cat /proc/tty/drivers/serial
ми казва че tx се е увеличило с 5 символа и rx също се е увеличило със 5 символа.

Когато стартирам РНР кода за комуникация, нищо не се получава като резултат и не дава никакви грешки и предупреждения. Просто браузъра върти си там и чака, и нищо не става. Пускам командата:
cat /proc/tty/drivers/serial
ми казва че tx  и rx не са се променили.

Тестова установка 1 - Лаптоп:
Сървъра е с Decian Linux, 2.6 ядро, XAMPP (прекопиран от горния сървър) с като РНР има "--enable-dio", в php.ini e зададено да всички грешки и предупреждения. Имам закачен луупбак на серийния порт. /dev/ttyS0 e с права 666 или rw- rw- rw-.  Когато подам:
echo "12345" > /dev/ttyS0
командата:
cat /proc/tty/drivers/serial
ми казва че tx  и rx не се променят, и имат стойности 0.

Когато стартирам РНР кода за комуникация, и подам стринга "12" (два служебни символа се предават) се получава:
Writing ...
4 bytes written.
Try to read ...Read miss...
Read miss...
Read miss...
Read miss...
Read miss...
Read miss...
не може да чете, но!!! Но пак при подаването на командата:
cat /proc/tty/drivers/serial
ми казва че tx  и rx не се променят, и имат стойности 0.

Искам да напиша чиста РНР комуникация със серийния порт използвайки dio. Нужна ми е за софтуер за наблюдение на телефонни централи, за управление на микроконтролери и UPS-и. Искам да стане на РНР защото, критичната маса от потребители на този език вече е прехвърлена и ще е в полза на много хора. При търсенето ми в интернет не попаднах на работещ код.

По този софтуер работят за момента:
Алекс Панов - координатор
Росен Захариев - РНР програмист
Николай - Линукс администрация
Сайт на където ще е изложен кода:
http://www.karatebulgaria.com/alex/

Примерен код

<?php

if(!empty($_POST['command_text']))
{
 $dio_file_name = "/dev/ttyS0";
 
 $dio_file_desc = dio_open($dio_file_name, O_RDWR);//O_CREAT | O_APPEND, O_WRONLY);
 dio_tcsetattr($dio_file_desc, array("baud" => 9600, "bits" => 7, "stop" => 2, "parity" => 2));
 
 $text = $_POST['command_text']."*".chr(13);
 $write_num = dio_write($dio_file_desc, $text);
 echo "Writing ...<br>";echo "".$write_num." bytes written.<br>";
 dio_close($dio_file_desc);
sleep(1);
 echo "Try to read ...";
 
 $dio_file_desc = dio_open($dio_file_name, O_RDWR | O_NOCTTY | O_NONBLOCK);
 # $dio_file_desc = dio_open($dio_file_name, O_NONBLOCK, O_RDONLY);
 dio_tcsetattr($dio_file_desc, array("baud" => 9600, "bits" => 7, "stop" => 2, "parity" => 2));
 
 $read_miss_counter = 0;
 while(($dio_read = dio_read($dio_file_desc, 1)) != chr(13))
 {
  if($dio_read == "")
  {
   $read_miss_counter++;
   if($read_miss_counter == 20)
   {
    break;
   }
   else
   {
    echo "Read miss...<br>";
 #   sleep(1);
   }
  }
  else
  {
   echo "Read \"".$dio_read."\"<br>";
  }
 }
 dio_close($dio_file_desc);

}
else
{
?>

<form method = "post">
Въведете команда(без терминиращите символи): <input type = 'text' name = 'command_text' maxlength= '131' value = "">
<input type = "submit" name = "submit_button" value = "Go!">
</form>
<?php
}
?>
Активен

the_real_maniac

  • Участник
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Интересна задача и все пак аз като човек , който също е писал и пише програми за управление на микроконтролери и у-ва по сериен порт , се питам колко е сигурно
(според Вас) да е на script език , при положение и то точно php , достъпно през уеб :?

засега аз с php през уеб съм се ограничил само за визуализиране и то чрез imagemagic< т.е php ми служи да генерирам картините , който ми трябват за да визуализирам и токлова. Но се мисли в тази насока и за управление, та '<img'>
ясно е че ще се минава през процес на удостверяване ssl/https или друго, но все пак '<img'> :-)

А иначе ще погледна скрипта и ще му отделя време :-) Интересна задачка и за 1-ви път виждам Php да позлва serial port , макар че не съм се сънявал , че ще го може '<img'>



EDIT:

АЕ ДА не съм врачка, ама май знам какъв е проблема , линиите за buffer control ... или оп -точно DTS, RTS и прочие

'<img'> Не виждам да сте казали дА НЕ СЕ ПОЛЗВАТ, а ако се ползват не виждам да ги управлявате ;-) :-P '<img'>

А те по подразбиране , начало са включение/ се ползват :-)



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
"...
echo "12345" > /dev/ttyS0
командата:
cat /proc/tty/drivers/serial
ми казва че tx се е увеличило с 5 символа и rx също се е увеличило със 5 символа.
..."

Това под root ли го пускаш? Пробва ли да го пуснеш по потребителя на Apache-то в конзола да видиш какво става?

И още нещо - няма "санитизация" на POST елементите.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

a_panov

  • Участник
  • *****
  • Публикации: 62
    • Профил
В Апача се задава от кои IP-та да се достъпва. Софтуера е за Lan не е за web. От УЕБ ще е достърна машината само под SSH за да може да се оправя евентуален бъркоч. На по-късен период ще се ползва ssl/https. Софтуера е само РНР без JavaScript и AJAX. Има валидизация на всички входящи данни. Логване на "всички" потребителски действия, базата данни ще расте най-много от тука. ЛОгване на всички грешки и предупреждения от Мускула и РНР-то, Апача си тъпче два собствени лога за достъпването му и за грешки.

Интерфейса трябва да е стриктен HTML или XHTML

Интерфейса ще е достъпен от модифицирани K-Meleon или Mozilla без статус бар, без тулл барове и файл бар. И по-подразбиране ще се дава да се зарежда страница от сървъра. На сървъра може да се каже да приема конекции само ако браузера се определя като K-Meleon ...

Има много да се доизкусурява.

Но тази комуникация ни закла като агнета по Великден...

Ще съм благодарен ако помогнеш.
Активен

the_real_maniac

  • Участник
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Цитат (the_real_maniac @ Сеп. 08 2007,14:07)
EDIT:

АЕ ДА не съм врачка, ама май знам какъв е проблема , линиите за buffer control ... или оп -точно DTS, RTS и прочие

'<img'> Не виждам да сте казали дА НЕ СЕ ПОЛЗВАТ, а ако се ползват не виждам да ги управлявате ;-) :-P '<img'>

А те по подразбиране , начало са включение/ се ползват :-)

А това ? '<img'>

Досега теглих кабелите, че бях разпуснал тестовата остановка последните седмици '<img'> А и пречат като работиш повече по софтуер(а).

едит: та в момента съм вързал само 3->2 (TX1 ->RX2), 2 <- 3 (RX1 <- TX2) и 5 <-> 5  (GND - GND) , без контролни линии, и без тях ще работя за начало '<img'> Но ако ползвате plc-та или някакви маркови /сименс контролери 99% ще ви трябват '<img'>



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

a_panov

  • Участник
  • *****
  • Публикации: 62
    • Профил
"...
echo "12345" > /dev/ttyS0
командата:
cat /proc/tty/drivers/serial
ми казва че tx се е увеличило с 5 символа и rx също се е увеличило със 5 символа.
..."

Това под root ли го пускаш? Пробва ли да го пуснеш по потребителя на Apache-то в конзола да видиш какво става?
---
Ууффф ако искаш да ти дам Име и Парола за сървъра да видиш кое как е. На практика сега мисля че root пуска Апача и echo и cat също ги изпълнява root.

И още нещо - няма "санитизация" на POST елементите.
---
Ако искаш може да проведем един разговор за да ми изясниш донякъде " "санитизация на POST елементите".НА мене тази материя не ми е позната, а може да стигнем до някакво позитивно развитие на нещата.
Активен

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
Само "родителния" процес на Apache се пуска под root, процесите които реално обслужват заявките се пускат под потребителя на Apache ... примерно www-data или nobody.

Аз управлявам паралелния порт през уеб интерфейс и го правя чрез "sudo" - т.е. с root права - предполагам, че и при теб трябва да е така.

A за санитизиацията - имах предвид да "изчистиш" нежеланите символи от $_POST['command_text'] преди да го използваш.
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

the_real_maniac

  • Участник
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
даваш право на Nobody да ползва sudo :? грубо казано ?

Ако си в chroot - ок, но иначе :?

едит: а ти посредством php И dio  ли също осъществяваш комуникацията :?



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
Е, нали за това е sudo ...
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

a_panov

  • Участник
  • *****
  • Публикации: 62
    • Профил
Само "родителния" процес на Apache се пуска под root, процесите които реално обслужват заявките се пускат под потребителя на Apache ... примерно www-data или nobody.

Аз управлявам паралелния порт през уеб интерфейс и го правя чрез "sudo" - т.е. с root права - предполагам, че и при теб трябва да е така.
---

Да обаче аз имам 666 на /dev/ttyS0 тоест всеки може да го ползва. Ще пробвам от конзолата

A за санитизиацията - имах предвид да "изчистиш" нежеланите символи от $_POST['command_text'] преди да го използваш.
---
това е тест за да  разберем дали работи, нас ни трябва да тръгне после ще се заемем с проверките.


ЗА мене е важно както вие засегнахте да изчистим двете страни: сървърния софтуер и кода за управление
Активен

the_real_maniac

  • Участник
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Е да де, но идеята да ползваш Nobody ,  а не root нали е да няма admin Привилегий и възможности, а ако излезе дупка в apache и посредством него се влезе ще влезе като (най-вероятно) като потребителят под който работи apache  и този потребител хоп има SUDO , е браво ? и за какво цялата гимнастика '<img'> вярно прав си:

ами ако ми трябват , както в случея явно, и питам ок sudo , а в  'клетка ли е'/"затвор" ли е '<img'>

питам защото ме вълнува '<img'>
Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
Цитат (the_real_maniac @ Сеп. 08 2007,14:04)
едит: а ти посредством php И dio  ли също осъществяваш комуникацията :?

Не, точно - PHP, но с компилиран файл, като онзи от статията за watchdog-a
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
Цитат (the_real_maniac @ Сеп. 08 2007,14:18)
Е да де, но идеята да ползваш Nobody ,  а не root нали е да няма admin Привилегий и възможности, а ако излезе дупка в apache и посредством него се влезе ще влезе като (най-вероятно) като потребителят под който работи apache  и този потребител хоп има SUDO , е браво ? и за какво цялата гимнастика '<img'> вярно прав си:

ами ако ми трябват , както в случея явно, и питам ок sudo , а в  'клетка ли е'/"затвор" ли е '<img'>

питам защото ме вълнува '<img'>

Ти не даваш чрез sudo пълен достъп до всички команди - само до тези, които ти трябват - даже и параметрите, които са позволени можеш да укажеш

с chroot на Apache не съм се занимавал '<img'>



Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

the_real_maniac

  • Участник
  • *****
  • Публикации: 1258
  • Kernel panic, me - no panic ;-) :-)
    • Профил
Мда на мен това ми е идеята да ползвам отделна програма за комуникацията, която да върши работата и тя да се стартира, нещо от сорта
един tool , който да си върши работата и друг който да го ползва и да си върши своята '<img'>

но ще видим

благодаря за инфото.

едит: @SUDO: да има възможнист за ограничаване и то доста '<img'> '<img'> и все пак sudo, setuid извън chroot за отдалечен достъп аз много тудно се съгласявам '<img'>



edit: трябва да обновя PHP-то си е че е 4-та версия, но не е 4.2.0 или от коя версия има подръжка за dio не знам.

но факта е че го нямам на моя сървър.

а излизам , довечера обаче ще се тества и все пак за 3-ти път
погледнете си stty -F /dev/ttyS0 -a ! след вашият fopen '<img'> !
за да видите как го отваряте '<img'>
защото ако има контролни линии, и те не са пресукани кактоп пин 2 с 3  ;-)

аз не виждам вие да сетвате флагове за изкл. на контролни линии и последно , А те по подразбиране са вкл.

успех ! '<img'> ':p' '<img'>



edit:

даже
можете да викнете следното

system("stty 57600 cread clocal echo -crtscts cs8 -parenb -parodd -ixon ixoff -F /dev/ttyS0");


след това след този ред


   dio_tcsetattr($dio_file_desc, array("baud" => 9600, "bits" => 7, "stop" => 2, "parity" => 2));

system("stty -F /dev/ttyS0 -a"); // ще  е полезно

/* трябва cstopb да е сетнато без - , и parenb да е без или това е odd, едно от двете трябва д е без - , също така трябва да е cs7 , а не cs8 , -crstcts отменя контролните линии , а ixon другите софт. мех. за flow контрол*/



edit: малко ме еяд че не мога дапробвам сега нещата, но не мога да дам от раз ъпдейт на php-то на сървъра  :-)
довечера, айде чао засега.

пп: the.real.maniac@jabber.com



edit: хмм версията ми е по-голяма от 4.2 , но dio функциите ги нямам така илииначе  , странно, мм ще го гледам после.



Активен

Powered by Debian GNU / LINUX /// Intel inside ...

„Насилието е последното убежище на некомпетентността“ - Айзък Азимов (1920 — 1992)

VladSun

  • Moderator
  • Участник
  • *****
  • Публикации: 2166
    • Профил
@the_real_maniac
Цитат (a_panov @ Сеп. 08 2007,12:46)
... като РНР има "--enable-dio" ...




Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P