при переходе на 4G модем (e3372h) понял что текущая схема оповещения через смс перестала работать в связи с отсутствием COM PC UI.
пошерстил инет понял что есть возможность на современных модемах делать с помощью URL.
к сожалению не программист. Может кто то возьмется интерпретировать строчку BASH на PHP ?
How to send SMS via Hilink modem
#!/bin/bash
NUMBER=$1
MESSAGE=$2
LENGTH=${#MESSAGE}
TIME=$(date +"%Y-%m-%d %T")
TOKEN=$(curl -v 'http://192.168.8.1/api/webserver/token' | sed -n 's:.*<token>\(.*\)</token>.*:\1:p')
SMS="<?xml version="1.0" encoding="UTF-8"?><request><Index>-1</Index><Phones><Phone>$NUMBER</Phone></Phones><Sca></Sca><Content>$MESSAGE</Content><Length>$LENGTH</Length><Reserved>1</Reserved><Date>$TIME</Date></request>"
curl 'http://192.168.8.1/api/sms/send-sms' -H "__RequestVerificationToken: $TOKEN" --data "$SMS" --compressed
Usage: ./send-sms.sh +55555555 'hey there'
также возможно осуществлять и прием смс
https://chaddyhv.wordpress.com/2012/08/ ... der-linux/
Отправка смс через HiLink modem (с web интерфейсом)
Модератор: immortal
- savenko_egor
- Сообщения: 705
- Зарегистрирован: Вс авг 03, 2014 8:17 pm
- Откуда: Украина, Запорожье
- Благодарил (а): 108 раз
- Поблагодарили: 147 раз
- Контактная информация:
Re: Отправка смс через HiLink modem (с web интерфейсом)
Не очень уверен что заработает корректно, потому-что:
1. Я быдлокодер
2. Нет на чём протестировать.
От этой части можно избавиться если получать токен через "Веб-переменные":
При таком варианте код будет таким:
1. Я быдлокодер
2. Нет на чём протестировать.
СценарийПоказать
Код: Выделить всё
$number = '+123456789'; //Задаём номер
$message = 'test message'; //Задаём сообщение
$length = strlen($message); //Вычисляем длину сообщения
$time = date("Y-m-d H:i:s"); //Устанавливаем дату
$ch = curl_init(); //Начало получения токена
curl_setopt($ch, CURLOPT_URL, 'http://192.168.8.1/api/webserver/token'); //URL по которому запрашивать токен
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$get_token = curl_exec($ch);
curl_close($ch);
$tmp_token = new SimpleXMLElement($get_token);
$token = $tmp_token->token;
$sms = '<?xml version="1.0" encoding="UTF-8"?><request><Index>-1</Index><Phones><Phone>'.$number.'</Phone></Phones><Sca></Sca><Content>'.$message.'</Content><Length>'.$length.'</Length><Reserved>1</Reserved><Date>'.$time.'</Date></request>';
$ch = curl_init(); //Начало для отправки сообщения
curl_setopt($ch, CURLOPT_URL, 'http://192.168.8.1/api/sms/send-sms'); //URL отправки сообщения
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, '__RequestVerificationToken: $token');
curl_setopt($ch, CURLOPT_POSTFIELDS, $sms);
curl_exec($ch);
Кусок который можно убратьПоказать
Код: Выделить всё
$ch = curl_init(); //Начало получения токена
curl_setopt($ch, CURLOPT_URL, 'http://192.168.8.1/api/webserver/token'); //URL по которому запрашивать токен
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$get_token = curl_exec($ch);
curl_close($ch);
$tmp_token = new SimpleXMLElement($get_token);
$token = $tmp_token->token;
Сценарий без одно curlПоказать
Код: Выделить всё
$number = '+123456789'; //Задаём номер
$message = 'test message'; //Задаём сообщение
$length = strlen($message); //Вычисляем длину сообщения
$time = date("Y-m-d H:i:s"); //Устанавливаем дату
$token = getGlobal("Modem.token");
$sms = '<?xml version="1.0" encoding="UTF-8"?><request><Index>-1</Index><Phones><Phone>'.$number.'</Phone></Phones><Sca></Sca><Content>'.$message.'</Content><Length>'.$length.'</Length><Reserved>1</Reserved><Date>'.$time.'</Date></request>';
$ch = curl_init(); //Начало для отправки сообщения
curl_setopt($ch, CURLOPT_URL, 'http://192.168.8.1/api/sms/send-sms'); //URL отправки сообщения
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, '__RequestVerificationToken: $token');
curl_setopt($ch, CURLOPT_POSTFIELDS, $sms);
curl_exec($ch);
curl_close($ch);
Последний раз редактировалось savenko_egor Ср фев 01, 2017 4:13 pm, всего редактировалось 1 раз.
Re: Отправка смс через HiLink modem (с web интерфейсом)
Спасибо за желание помочь !
при выполнении первого сценария дает ошибку.
Warning: curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(139) : eval()'d code on line 19
а при выполнении второго скрипта
Warning: curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(139) : eval()'d code on line 12
строка на которую ругается
curl_setopt($ch, CURLOPT_HTTPHEADER, '__RequestVerificationToken: $token');
как правильно интерпретировать этот ответ?
при выполнении первого сценария дает ошибку.
Warning: curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(139) : eval()'d code on line 19
а при выполнении второго скрипта
Warning: curl_setopt(): You must pass either an object or an array with the CURLOPT_HTTPHEADER, CURLOPT_QUOTE, CURLOPT_HTTP200ALIASES and CURLOPT_POSTQUOTE arguments in C:\_majordomo\htdocs\modules\scripts\scripts.class.php(139) : eval()'d code on line 12
строка на которую ругается
curl_setopt($ch, CURLOPT_HTTPHEADER, '__RequestVerificationToken: $token');
как правильно интерпретировать этот ответ?
-
- Сообщения: 2
- Зарегистрирован: Вт фев 18, 2020 9:37 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: Отправка смс через HiLink modem (с web интерфейсом)
Модем Хуавей B525. Озадачился считыванием параметров сигнала. Поставил модуль, увидев заветное слово, но получил пустоту в параметрах. Полез разбираться, обнаружил, что на мой взгляд процедура авторизации написана не совсем корректно, с моей точки зрения. В массиве $rec в этот момент пустота.
Если поправить строчки с именем массива в функции авторизации, то всё работает. И параметры и получение смс.
Файл modemsms.class.php, function checkModem,
было:
if ($modem['TYPE'] == 'huawei') {
include_once '3rdparty/Router.php';
$router = new Router;
$router->setAddress($modem['IP']);
if ($rec['AUTH']) {
$router->setNeedsAuth(true);
$router->login($rec['LOGIN'],$rec['PASSWORD']);
}
стало:
if ($modem['TYPE'] == 'huawei') {
include_once '3rdparty/Router.php';
$router = new Router;
$router->setAddress($modem['IP']);
if ($modem['AUTH']) {
$router->setNeedsAuth(true);
$router->login($modem['LOGIN'],$modem['PASSWORD']);
}
Огромное спасибо автору модуля за работу, с B525 работает на ура.
Если поправить строчки с именем массива в функции авторизации, то всё работает. И параметры и получение смс.
Файл modemsms.class.php, function checkModem,
было:
if ($modem['TYPE'] == 'huawei') {
include_once '3rdparty/Router.php';
$router = new Router;
$router->setAddress($modem['IP']);
if ($rec['AUTH']) {
$router->setNeedsAuth(true);
$router->login($rec['LOGIN'],$rec['PASSWORD']);
}
стало:
if ($modem['TYPE'] == 'huawei') {
include_once '3rdparty/Router.php';
$router = new Router;
$router->setAddress($modem['IP']);
if ($modem['AUTH']) {
$router->setNeedsAuth(true);
$router->login($modem['LOGIN'],$modem['PASSWORD']);
}
Огромное спасибо автору модуля за работу, с B525 работает на ура.
-
- Сообщения: 76
- Зарегистрирован: Чт фев 07, 2019 12:17 pm
- Благодарил (а): 14 раз
- Поблагодарили: 45 раз
Re: Отправка смс через HiLink modem (с web интерфейсом)
Спасибо - это приятно
Так же, по модулю есть отдельная тема на форуме: https://mjdm.ru/forum/viewtopic.php?f=5&t=7109
а по поводу Вашей правки, да, всё верно, "копипаста" из одной функции в другую меня подвела:) Исправил, можно обновиться)
Так же, по модулю есть отдельная тема на форуме: https://mjdm.ru/forum/viewtopic.php?f=5&t=7109
а по поводу Вашей правки, да, всё верно, "копипаста" из одной функции в другую меня подвела:) Исправил, можно обновиться)
-
- Сообщения: 2
- Зарегистрирован: Вт фев 18, 2020 9:37 am
- Благодарил (а): 0
- Поблагодарили: 0
Re: Отправка смс через HiLink modem (с web интерфейсом)
Тут уже добьём :о) Обновил, сравнил правки, изменено пока не всё, осталось одно место.
Имя массива в function checkModem не заменено, осталось:
if ($rec['AUTH']) {
должно быть
if ($modem['AUTH']==1) {
И можно вешать наклейку - Протестировано с B525 :о)
Имя массива в function checkModem не заменено, осталось:
if ($rec['AUTH']) {
должно быть
if ($modem['AUTH']==1) {
И можно вешать наклейку - Протестировано с B525 :о)