Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Скрипт для отправки смс  (Прочитано 7921 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Скрипт для отправки смс
« : 23 Мая 2009, 17:14:45 »
Преамбула:
   GSM Модем:  Siemens MC35i
   ОС: Linux Ubuntu 8.04
Амбула
   Через утилиту minicom без всяческих проблем общаюсь с модемом, отправляю смс и прочее
AT+CMGF=1                                                                     
OK                                                                             
AT+CMGS="+79110000000"                                                         
> hello!!!
+CMGS: 144
OK   
Далее приступаю к написанию скрипта на php. После всяческих извращений с ttyS0 получаю такой код
<?php
$file_name 
'/dev/ttyS0';
$w fopen($file_name'w');
$text .= "AT+CMGS=\"+79110000000\"\nHello!!!\n" chr(26);
fwrite($w,$text);
fclose($w);
?>
Скрипт работает через раз, и если смотреть в sudo cat /dev/ttyS0, то создается такое ощущение что скрипт уходит в длительное повторение. Самое важное здесь, что нет стабильности.
Хотелось бы в идеале написать на bash но не знаю пока как там посылать модему символы ентера и контрол зет.
Просьба:
   Если кто то сталкивался уже с написанием скрипта для GSM модемов, просьба указать на недостатки кода. Понимаю, что скрипт пока тривиален, это пока первая версия)))

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #1 : 23 Мая 2009, 18:01:32 »
1. 4 строчка - вместо .= ставь просто =
2. Перед fopen добавь проверку на is_writeable. Например, while(!is_writeable('/dev/ttyS0'))sleep(1);
3. после fopen и перед fwrite добавь flock($w,LOCK_EX), а после fwrite и перед fclose добавь flock($w,LOCK_UN)
4. Попробуй, отпишись.
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #2 : 23 Мая 2009, 18:14:09 »
<?php
$file_name 
'/dev/ttyS0';
   while(!
is_writeable('/dev/ttyS0'))sleep(1);
   
flock($w,LOCK_EX);
$w fopen($file_name'w');
$text "AT+CMGS=\"+79116562712\"\nHello!!!\n" chr(26);
   
flock($w,LOCK_EX);
fwrite($w,$text);
   
flock($w,LOCK_UN);
fclose($w);
   
flock($w,LOCK_UN);
?>

Ругается на flock
Warning: flock() expects parameter 1 to be resource, null given in /var/www/sms.php on line 4

Warning: flock(): 3 is not a valid stream resource in /var/www/sms.php on line 11
Вот, что в порту происходит
AT+CMGS="+79116562712"


ERROR

AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT
+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+C
MGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMG
S="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="
+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+79
11656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+79116
56AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656A
T+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+C
MGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS
="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7
911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+79116
56AT+CMGS="+7911656AT+CMGS="+7911656AT+CMGS="+7911


Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #3 : 23 Мая 2009, 18:21:17 »
flock($w,LOCK_EX) после fopen

Вот, попробуй вот это, может поможет =)
(Нажмите, чтобы показать/скрыть)

P.S.  -h или --help для помощи
« Последнее редактирование: 23 Мая 2009, 18:29:02 от DnSL48 »
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #4 : 23 Мая 2009, 18:45:31 »
Спасибо за помощь, буду пробовать, похожий пример на питоне у меня есть, взял с хабра. В питоне не силен, но попробую разобраться, буду отписывать о результатах )))

Пользователь решил продолжить мысль 23 Мая 2009, 19:02:57:
Попробовал приложенный скрипт на питоне, вроде скрипт рабочий и написано грамотно все, НО.
командую в консоли
phil@phil-desktop:~$ python 1.py -p +79116562712 -m Hello
вот что происходит в порту
AT+CMGS="+79116562712"


ERROR

AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT
+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+C
MGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMG
S="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="
+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+79
11656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+79116
56271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+79116562
71AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271A
T+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+C
MGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMG
S="+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="
+7911656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+79
11656271AT+CMGS="+7911656271AT+CMGS="+7911656271AT+CMGS="+79116
56271AT+CMGS="+791


ERROR


что заставляет меня задуматься о правильной работе модема. тк скрипт посылает AT команду модему только 1 раз. ЧТО же такое происходит, что она там вертится снова и снова.
через minicom такого не происходит. очень странно это
« Последнее редактирование: 23 Мая 2009, 19:02:57 от _phil_ »

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #5 : 24 Мая 2009, 13:55:32 »
<?php
$file_name 
'/dev/ttyS0';
   while(!
is_writeable('/dev/ttyS0'))sleep(1);
   
flock($w,LOCK_EX);    // $w is null
$w fopen($file_name'w');
$text "AT+CMGS=\"+79116562712\"\nHello!!!\n" chr(26);
   
flock($w,LOCK_EX);
fwrite($w,$text);
   
flock($w,LOCK_UN);
fclose($w);
   
flock($w,LOCK_UN);    // $w is not a valid stream resource
?>

Ругается на flock
Warning: flock() expects parameter 1 to be resource, null given in /var/www/sms.php on line 4

Warning: flock(): 3 is not a valid stream resource in /var/www/sms.php on line 11

Удали 4 и 11 строки, так как "flock" должен использоваться внутри "fopen" и "fclose".

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #6 : 24 Мая 2009, 20:41:12 »
в общем складывается такое впечатление, что после записи в ком порт и началом отрабатывания команд модемом, команды остаются висеть в порту, тем самым заставляя снова работать модем. В результате такого наложения модем просто неправильно отрабатывает команды.
что с этим делать,я не знаю.
Может у кого есть дельное предложение. Лично я испробовал уже с десяток рабочих скриптов на пхп и на питоне, но везде ситуация одинаковая. Те мой скрипт в принципе рабочий, просто дело видимо в каких то доп настройках.

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #7 : 24 Мая 2009, 23:56:20 »
А почему именно ^Z, а не ^D?
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #8 : 25 Мая 2009, 09:32:21 »
модем ждем команду CTRL+Z, для него это знак что сообщение окончено и можно отправлять.

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #9 : 25 Мая 2009, 11:22:57 »
попробуй после ^Z добавить ^D
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #10 : 25 Мая 2009, 14:46:43 »
а чем, простите, это может помочь? модем ведь ждет CTLR+Z, а не CTRL+D. Я думаю, даже в терминале это не сработает, тк в тех документации на модем ничего про CTRL+D, не написано. Может я чего то не знаю?

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #11 : 25 Мая 2009, 14:48:46 »
^D - это сигнал окончания файла
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #12 : 25 Мая 2009, 14:54:56 »
хм...домой приду, обязательно попробую. не подкините еще как это будет звучать на пхпе? char(27)?

Оффлайн DnSL48

  • Активист
  • *
  • Сообщений: 286
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #13 : 25 Мая 2009, 16:19:25 »
http://game-editor.com/tutorials/images/ascii.jpg
chr(4)
можно еще попробовать нулевой символ - chr(0), если не получится
ArchLinux x86_64

Оффлайн truegeek

  • Автор темы
  • FPGA Designer
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 4214
  • аЦкий схемотехник
    • Просмотр профиля
Re: Скрипт для отправки смс
« Ответ #14 : 26 Мая 2009, 08:36:06 »
спс за ссылку)))
я все-таки думаю, что дело не в том какой символ посылать. модем ждет CTRL+Z, значит такой и надо. дело в том как посылать.
Допустим, если отправить ему обычную команду ATZ(сброс), но не отправить вместе с ней "
", то модем начинает ее дублировать ATZATZATZATZ .... ATZ до тех пор пока не ответит ERROR. Команды я отправляю правильные, тк через терминал все работает. Но вот какая странная особенность: модем обрабатывает команды по несколько раз, поэтому такая фигня и получается. Как с этим бороться я пока не знаю. Все скрипты которые мне удавалось найти в большинстве своем похожи и считаются рабочими.

Пользователь решил продолжить мысль 27 Мая 2009, 21:50:17:
Как я посмотрю - идеи кончились))))
Я тоже забил общаца с tty с помощью пхп.
Я установил gnokii и рулю башем.
Очень простой в понимании gnokii умеет даже отправлять смски на русском)))
_________________________________________________________________
Одной проблемой меньше)))
« Последнее редактирование: 27 Мая 2009, 21:50:17 от _phil_ »

 

Страница сгенерирована за 0.022 секунд. Запросов: 22.