API агрегаторов Sim Roulette со SMART-прошивкой
Для агрегаторов с установленными версиями ПО
- SR-Nano — версия 7 и выше
- SR-Train — версия 5 и выше
- SR-Box — версия 4 и выше
- SR-Board — версия 2 и выше
- SR-Organizer — версия 4 и выше
Управление Sim Roulette
Варианты взаимодействия с Sim Roulette
- Прямой ввод команды через терминал WEB-интерфейса агрегатора.
- Формирование через WEB-интерфейс агрегатора списков команд (Макросов) и последующее их выполнение устройством.
- GET или POST запрос к агрегатору вида http://XXX.XXX.XXX.XXX/port?token=$token&command=$command
- Обмен данными через регулярные GET-запросы агрегатора на URL вашего сервера (WEB-сайта). Например, http://site.ru/sr/io.php
- Подключение агрегатора к вашему серверу по TCP-сокету, используя IP-адрес/домен и порт, указанные в веб-интерфейсе. Например, site.ru:1234
GET или POST-запрос к агрегатору
Агрегатор принимает HTTP-запросы по следующему шаблону:
http://XXX.XXX.XXX.XXX/port?token=$token&command=$command
Где:
- XXX.XXX.XXX.XXX — IP-адрес агрегатора
- $token — секретный ключ, заданный в веб-интерфейсе агрегатора
- $command — команда, которую необходимо выполнить
Если команда не требуется (например, нужно только получить данные от устройства), в качестве команды следует использовать специальное значение: request
Важно: специальные символы перед командой изменяют поведение агрегатора:
.
(точка) — означает, что управляющее устройство ожидает ответ на команду. Без точки команда будет выполнена, но ответ не будет передан обратно.@
— подавляет подробный ответ. Используется, если достаточно получить только результат выполнения.
Обмен данными через регулярные GET-запросы
Агрегатор периодически обращается к указанному URL на вашем сервере, например:
http://site.ru/sr/io.php
При каждом запросе агрегатор передаёт GET-параметр:
- data — содержит результат выполнения предыдущей команды.
В ответ сервер должен вернуть новую команду в виде обычного текста с обязательным префиксом:
{data}command
Важно: специальные символы перед командой изменяют поведение агрегатора:
.
(точка) — означает, что управляющее устройство ожидает ответ на команду. Без точки команда будет выполнена, но ответ не будет передан обратно.@
— подавляет подробный ответ. Используется, если достаточно получить только результат выполнения.
Важно: префикс {data}
необходим, чтобы агрегатор распознал, что ответ получен корректно. Ответ без него будет проигнорирован.
Подключение агрегатора SIM Roulette к вашему серверу по TCP-сокету
При установлении соединения агрегатор отправляет на ваш сервер идентификационные и служебные данные в следующем формате:
- TK:[key] — ключ авторизации, где
key
представляет собойMD5(token + salt)
. - Значение
token
указывается в интерфейсе. - Значение
salt
доступно только зарегистрированным пользователям в личном кабинете или через техническую поддержку. - Все данные от агрегатора оборачиваются в блоки:
[SRBEGIN]...[SREND]
- Содержимое файлов (например, аудио) передаётся в обёртке:
[FILEBEGIN]...[FILEEND]
- Каждые 10 секунд агрегатор отправляет служебный сигнал
[HEARTBEAT]
для подтверждения активности соединения. - Ответные данные от сервера передаются агрегатору без обёртки — в «сыром» виде.
Важно: специальные символы перед командой изменяют поведение агрегатора:
.
(точка) — означает, что управляющее устройство ожидает ответ на команду. Без точки команда будет выполнена, но ответ не будет передан обратно.@
— подавляет подробный ответ. Используется, если достаточно получить только результат выполнения.
token
для TCP-соединения настраиваются через веб-интерфейс или с помощью команды socket.
Режимы работы агрегатора
Агрегатор SIM Roulette поддерживает два режима работы:
-
Автоматический режим (рекомендуется)
В этом режиме агрегатор самостоятельно управляет SIM-картами и модемами:- мониторит статусы СИМ-карт
- читает/отправляет SMS
- обрабатывает USSD-запросы
-
Ручной режим
Управление модемами осуществляется напрямую через AT-команды. Подходит для отладки, тестов или нестандартных задач.
Ответ от агрегатора
Агрегатор возвращает данные в формате JSON. Пример ответа:
{"result":"[RESULT]"}
Где [RESULT]
— результат выполнения команды. Значение может быть:
- 1 — команда успешно выполнена
- NULL — ошибка или отсутствие результата
- Число, текст, массив — если команда предполагает иной формат ответа
Важно: значение 0
всегда кодируется как NULL
.
Ответы приходят асинхронно.
Кроме прямых ответов на команды с префиксом .
, агрегатор также может отправлять сообщения о:
- Изменении статуса модемов
- Событиях на системных устройствах (например, модемах, кнопках и т.п.)
Эти данные передаются в выходной поток по мере их возникновения.
запрос: http://192.168.1.2/port?token=12345&command=.version
Важно! При GET-запросе параметр command в URL должен быть закодирован на стороне клиента функцией urlencode.
ответ: {"result":"1.69"}результат_выполнения_запроса
Несколько команд можно объединить через &&. В этом случае они будут выполнены последовательно.
запрос: http://192.168.1.2/port?token=12345&command=.version%26%26.set.dev.ip
Обратите внимание! Так как параметр command закодирован urlencode здесь && превратились в %26%26.
ответы:
{"result":"1.69"}результат_выполнения_1_команды
{"result":"192.168.1.2"}результат_выполнения_2_команды
Подпись команды (опционально)
Для удобства навигации в асинхронных ответах агрегатора, любую отправляемую команду можно дополнительно подписать, добавив параметр:
"sign":"[SIGNATURE]"
В этом случае агрегатор добавит в ответ соответствующее поле. Это особенно удобно, когда одновременно отправляются несколько команд, и необходимо сопоставить ответы с исходными запросами.
запрос: http://192.168.1.2/port?token=12345&command=.version:{"sign":"test"}
ответ: {"result":"1.69","sign":"test"}результат_выполнения_запроса
Формирование пользовательского результата в ответе
Агрегатор позволяет управлять значением поля "result"
в ответе.
Для этого в отправляемую команду нужно добавить параметр:
"result":"[KEY]"
В этом случае в поле "result"
агрегатор вернёт значение параметра из [KEY]
.
запрос: http://192.168.1.2/port?token=12345&command=.version:{"sign":"test","result":"sign"}
ответ: {"result":"test"}результат_выполнения_запроса
Термины и определения
Параметры команды могут передаваться по очереди через зяпятую либо в формате JSON
Пример:
sms.send:number(1),sms(2)[,modem=1(3)]
Передача параметров по очереди, через запятую (1, 2, 3), параметр в [квадратных скобках] необязательный: sms.send:+79001234567,Текст SMS
Передача параметров в JSON (number, sms, modem), параметр в [квадратных скобках] необязательный: sms.send:{"number":"+79001234567","sms":"Текст SMS","modem":"1"}
Ответы SIM Roulette
- Ответы приходят асинхронно — не сразу после отправки команды
- Буфер ответов — динамический, может хранить десятки результатов
0
всегда интерпретируется какNULL
- Большинство команд возвращают в поле
result
:- 1 — успешно
- NULL — ошибка или неудача
Далее по тексту:
D — число, пример: 33
W — слово, символьные данные, пример: Текст
X — числовые либо символьные данные
(D) — порядковый номер параметра, пример: fs.rename:source(1),target(2)
[W] — необязательный параметр, пример: sms.send:number(1),sms(2)[,modem(3)]
=X — значение необязательного параметра по умолчанию, пример: ussd:number(1)[,modem(2)=1]
{D...D} — допустимый диапазон значений, пример: {-23...23}
Управляющие команды агрегатора
echo:W — возвращает в выходной поток введенную строку
пример: @echo:Текст ответ: Текст
МОДЕМЫ
modem.on — включение модема(ов)
пример: modem.on ответ: 1всегда
modem.off — выключение модема(ов)
пример: modem.off ответ: 1всегда
modem.map — получение карты банков (только SR-Box)
пример: modem.map ответ: 10001000Подключены 1 и 5 банк
modem.select:data(1) — выбор активного модема для последующей отправки команды через modem.send
примеры:
modem.select:? ответ: 1;2текущие активные модемы
modem.select:1 ответ: 1;2выбранные активные модемы
Примечание: Одновременно агрегатор может получать ответы от 2х последних выбранных модемов (это не касается пакетной обработки modem.pack
modem.card:data(1)[,imei(2)] — выбор карт(ы)
A2 — выбор одной карты
A1+C8+D4 — выбор нескольких карт (кроме моделей с 1 модемом)
примеры:
modem.card:A1 ответ: 1выполнено 0ошибка
modem.card:A2+B3+C4+D5+E6+G7+H8 ответ: 1выполнено 0ошибка
Примечание: Этой же командой можно передать IMEI для каждого модема.
modem.set.request[:data(1)] — настройка автозапросов (выполняются агрегатором в фоне и выдается в выходной поток как соответствующее событие)
P — номер телефона записанного на СИМ-карте
I — ICCID
C — IMSI
O — Название оператора
N — Название сотовой сети
S — Уровень сигнала
примеры:
modem.set.request ответ: PIOтекущие настроки NONEпусто
modem.set.request:PIONS ответ: PIONSтекущие настроки
Примечание: См. также modem.set.timer.opt
modem.set.timer.reg[:data(1)] — настройка тайм-аута (5-60 в секундах) первого после включения карты запроса ее статуса регистрации (статус выдается в выходной поток как соответствующее событие)
примеры:
modem.set.timer.reg ответ: 15текущее значение
modem.set.timer.reg:20 ответ: 20новое значение
modem.set.timer.check[:rescan(1),test(2)] — настройка тайм-аутов (5-3600 в секундах) между проверками статуса регистрации (rescan если все карты в сети, test если есть карты не зарегистрированные в сети)
примеры:
modem.set.timer.check ответ: 180;40текущее значение
modem.set.timer.check:180,40 ответ: 180;40новое значение
modem.set.timer.opt[:data(1)] — настройка тайм-аута (0-300 в секундах) между автозапросами (см. modem.set.request)
примеры:
modem.set.timer.opt ответ: 15текущее значение
modem.set.timer.opt:5 ответ: 5новое значение
modem.set.timer.sms[:data(1)] — настройка тайм-аута (0-3600 в секундах) между проверкой поступления СМС (при получении СМС оно выдается в выходной поток в PDU-формате)
примеры:
modem.set.timer.sms ответ: 15текущее значение
modem.set.timer.sms:20 ответ: 20новое значение
modem.set.clear.sms:data(1) — включение/выключение очистки памяти СМС на модеме при переключении СИМ-карты
примеры:
modem.set.clear.sms:? ответ: 1текущее значение
modem.set.clear.sms:0 ответ: 0новое значение
modem.send[1,2,3]:W — прямая передача команды выбранному (modem.select) модему
На аппаратах с 8 модемами сначала следует выбрать модем командой modem.select
Обратите внимание! Таким образом модему передаются стандартные AT-команды
пример: modem.send:ATD+79001234567; ответ: 1всегда
modem.pack:command(1),modem(2)[,answer(3)] — пакетная отправка команд (только для агрегаторов с 8 и более модемами) на выбранные (15678) либо все (all) модемы (answer=0 не дожидаться ответа/answer=1 выбрать из ответа только значимые данные/answer=2 получить и прислать полный ответ)
примеры:
modem.pack:AT+CREG?,12345,2
ответ:
{"type":"alert","dev":{"modem1":{"data":"AT+CREG?⏎⏎+CREG: 0,1⏎⏎OK"},"modem2":{"data":"AT+CREG?⏎⏎+CREG: 0,1⏎⏎OK"},"modem3":{"data":"AT+CREG?⏎⏎+CREG: 0,1⏎⏎OK"},"modem4":{"data":"AT+CREG?⏎⏎+CREG: 0,1⏎⏎OK"},"modem5":{"data":"AT+CREG?⏎⏎+CREG: 0,1⏎⏎OK"}}}
modem.pack:AT+CREG?,all,1
ответ:
{"type":"alert","dev":{"modem1":{"data":"0,1"},"modem2":{"data":"0,1"},"modem3":{"data":"0,1"},"modem4":{"data":"0,1"},"modem5":{"data":"0,1"},"modem6":{"data":"0,1"},"modem7":{"data":"0,1"},"modem8":{"data":"0,1"}}}
modem.download:modem(1),url(2),file(3)[,size(4)=10240] — скачивание файла с WEB-сайта и загрузка в память указанного модема
пример: modem>download:sim-roulette.com/download/voice.amr;C:\User\voice.amr; ответ: 1выполнено 0ошибка
call:number(1)[,modem(2)=1] — Исходящий вызов с текущей SIM-карты указанного модема
примеры:
call:+79001234567 ответ:1выполнено 0ошибка
call:{"number":"*102#","modem":"2"} ответ:1выполнено 0ошибка
ussd:number(1)[,modem(2)=1] — USSD-запрос с текущей SIM-карты указанного модема
примеры:
ussd:*102# ответ:1выполнено 0ошибка
ussd:{"number":"*102#","modem":"2"} ответ:1выполнено 0ошибка
command:action(1)[,modem(2)=1] — предопределенное действие (answer, hangup)
примеры:
command:answer,3 — ответить на входящий вызов 3-го модема, ответ:1выполнено 0ошибка
command:{"answer":"hangup","modem":"2"} — "положить трубку" 2-го модема, ответ: 1выполнено 0ошибка
SMS
sms.send:number(1),sms(2),modem(3)[,delivery(4)][number2(5),sms2(6),modem2(7)] — отправка SMS (может производиться сразу с 2х выбранных модемов (для моделей с 8 модемами) или со всех (для остальных моделей) , delivery=1 - дождаться уведомления о доставке СМС)
примеры:
sms.send:+79001234567,Текст SMS,3,0,+79001234568,Текст SMS2,4 status в ответе:OKотправлено ERRORошибка
sms.send:{"number":"+79001234567","sms":"Текст SMS","delivery":"1"} status в ответе:OKотправлено DELIVEREDдоставлено ERRORошибка
set.sms.delivery[:data(1)] — настройка времени ожидания (в секундах) отчета о доставке СМС
примеры:
set.sms.delivery ответ:10текущее значение
set.sms.delivery:15 ответ:15новое значение
ЭКРАН
Только для моделей с экраном
display.clear — очистить дисплей
пример: display.clear ответ: 1всегда
display:W — вывод на дисплей текста и специальных символов
W — параметры разделенные символами "::":
2 — выравнивание по левому краю (L), по центру (С), по правому краю (R)
3 — позиция по оси X (0 — 127)
4 — позиция по оси Y (0 — 63)
5 — текст (в зависимости от выбранного языка интерфейса можно показывать пользователю {английскую~русскую} версию)
(6) — необязательный параметр — разделитель "|" после которого можно дописать вывод второй, третьей и т.д. строк
примеры:
display:10::C::64::30::Текст|16::C::64::45::Ещё текст
display:10::C::64::35::{English text~Русский текст}! — в зависимости от выбранного языка будет использован соответсвующий вариант
ответ: 1всегда
display.com:W — включение/выключение инверсии дисплея
W — параметр:
ЗВУК
Только для моделей с бипером
sound:beep — короткий отрывистый звук
пример: sound:beep ответ: 1всегда
sound:error — продолжительный звук
пример: sound:error ответ: 1всегда
БУФЕР
Текстовый буфер устройства — мощный инструмент для анализа входных данных, формирования выходных данных и команд.
buffer.clear — очистка буфера
пример: buffer.clear ответ: 1всегда
buffer.view — вывод содержимого буфера в выходной поток, для формирования таблиц можно использовать bbcode: [table][tr][th][thc[thr][td][tdc][tdr]
пример: buffer.view ответ: ...содержимое буфера 0буфер пуст
buffer.raw — вывод содержимого буфера в выходной поток без обработки bbcode
пример: buffer.raw ответ: ...содержимое буфера 0буфер пуст
buffer.display — вывод содержимого буфера на дисплей устройства (в зависимости от объема данных устройство само настроит размер шрифта и, если нужно, постраничный вывод)
пример: buffer.display ответ: 1всегда
buffer.write:W — ввод новых данных в буфер
пример: buffer.write:Значение A: (a) ответ: 1всегда
Важно! Для подстановки значения переменной используется конструкция (a), (Z) и т.д., для подстановки символа (32), (147) и т.д.
buffer.prefix:W — ввод данных, которые дополнят текущий текст спереди
пример: buffer.prefix:Начало строки(32) ответ: 1всегда
Важно! Для подстановки значения переменной используется конструкция (a), (Z) и т.д., для подстановки символа (32), (147) и т.д.
buffer.postfix:W — ввод данных, которые дополнят текущий текст сзади
пример: buffer.postfix: конец строки ответ: 1всегда
Важно! Для подстановки значения переменной используется конструкция (a), (Z) и т.д., для подстановки символа (32), (147) и т.д.
buffer.push — сохранение содержимого буфера в стеке (памяти устройства)
пример: buffer.push ответ: 1в буфере есть данные 0буфер пуст
buffer.pop — восстановление содержимого буфера из стека
пример: buffer.pop ответ: 1в буфере есть данные 0буфер пуст
buffer.swap — обмен местами содержимого буфера и сохраненной в стеке копии буфера
пример: buffer.swap ответ: 1в буфере есть данные 0буфер пуст
buffer.merge[=W] — склеивание буфера и сохраненной копии буфера из стека (результат остается в буфере)
W — необязательный параметр, текст, который будет добавлен между склеиваемыми частями
пример: buffer.merge(13)(10) ответ: 1всегда
Важно! Для подстановки значения переменной используется конструкция (a), (Z) и т.д., для подстановки символа (32), (147) и т.д.
buffer.time — дополнение буфера текущим временем (HH:MM)
пример: buffer.time ответ: 1всегда
buffer.date — дополние буфера текущей датой (DD.MM.YYYY)
пример: buffer.date ответ: 1всегда
buffer.timestamp — копирование в буфер внутреннего штампа времени (в секундах от 01.01.2000)
пример: buffer.timestamp ответ: 1всегда
buffer.event.dev — копирование в буфер устройства-инициатора события, которое вызвало макрос
пример: buffer.event.dev ответ: 1устройство
buffer.event.result — копирование в буфер результата события, которое вызвало макрос
пример: buffer.event.result ответ: 1результат
buffer.file.save:file(1) — сохранение содержимого буфера в файл
file(1) — путь и имя файла в который следует сохранить содержимое буфера
пример: buffer.file.save:/buffer.txt ответ: 1выполнено 0ошибка
buffer.file.append:file(1) — дописывание в файл содержимого буфера
file(1) — путь и имя файла в который следует дописать содержимое буфера
пример: buffer.file.append:/buffer.txt ответ: 1выполнено 0ошибка
buffer.file.load:file(1)[,line(2){-1...1000000}] — чтение содержимого файла в буфер, если указан номер строки отличный от -1 — в буфер будет помещена только эта строка
примеры:
buffer.file.load:/buffer.txt ответ: 1в буфере есть данные 0буфер пуст
buffer.file.load:/buffer.txt,3 ответ: 1в буфере есть данные 0буфер пуст
buffer.file.load:{"file":"/buffer.txt","line":"10"}
buffer.find:W — поиск в буфере комбинации символов, замена содержимого буфера на найденный фрагмент
W — поисковая строка:
* — заменяет любое количество произвольных символов, пример: buffer.find:баланс* — если в строке буфера содержится слово "баланс", в буфере останется текст от слова "баланс" до конца строки, ответ: 1найдена искомая строка 0совпадений нет
[dD] — поиск числа с заданным (D) количеством цифр, пример: buffer.find:[d10] ответ: 1найдено 10-значное число 0ничего не найдено — если число найдено, то в буфере останется только оно
[sD] — выборка заданного (D) количества символов сначала строки или (-D) с конца (русские символы занимают 2 байта), пример: buffer.find:[s10] — в буфере останутся только первые 10 символов, ответ: 1выполнено 0не выполнено
buffer.test:W — проверка наличия в буфере комбинации символов
W — поисковая строка:
* — заменяет любое количество произвольных символов, пример: buffer.test:баланс* ответ: 1найдена искомая строка 0совпадений нет
[dD] — проверка наличия числа с заданным (D) количеством цифр, пример: buffer.test:[d10] ответ: 1найдено 10-значное число 0ничего не найдено
[sD] — выборка заданного (D) количества символов сначала строки или (-D) с конца (русские символы занимают 2 байта), пример: buffer.cut:[s10] — в буфере останутся только первые 10 символов, ответ: 1в наличии заданное количество символов 0заданное количество символов не найдено
buffer.cut:W — поиск в буфере комбинации символов, удаление из содержимого буфера найденного фрагмента
W — поисковая строка:
* — заменяет любое количество произвольных символов, пример: buffer.cut:руб.* — если в строке буфера содержится слово "руб." оно и все что за ним будет удалено, ответ: 1искомая строка найдено и вырезана 0совпадений нет
[dD] — поиск числа с заданным (D) количеством цифр, пример: buffer.cut:[d10] ответ: 1найдено и вырезано 10-значное число 0ничего не найдено — если число найдено, то оно вырезается
[sD] — удаление заданного (D) количества символов сначала строки или (-D) с конца (русские символы занимают 2 байта), пример: buffer.cut:[s10] — из буфера будут вырезаны первые 10 символов, ответ: 1вырезано заданное количество символов 0заданное количество символов не найдено
ПЕРЕМЕННЫЕ
var:W[=D|+D|-D|*D|\D|==D|<D|>D] — работа с переменной
W — имя численной переменной (доступно 26 переменных от a до z)
примеры: var:a ответ: 123значение переменной a
=D — присвоение значения переменной
примеры: var:a=123 ответ: 123присвоенное значение переменной a, var:a=b ответ: присвоенное значение переменной a
+D — cложение
примеры: var:a+1 ответ: новое значение переменной a, var:a+b ответ: новое значение переменной a
-D — вычитание
примеры: var:a-2 ответ: новое значение переменной a, var:a-b ответ: новое значение переменной a
*D — умножение
примеры: var:a*3 ответ: новое значение переменной a, var:a*b ответ: новое значение переменной a
/D — деление
примеры: var:a/4 ответ: новое значение переменной a, var:a/b ответ: новое значение переменной a
==D — проверка тождественности
пример: var:a==33 ответ: 1выражение тождественно 0выражение не тождественно, var:a==b ответ: 1выражение тождественно 0выражение не тождественно
<D — проверка тождественности
примеры: var:a<33 ответ: 1выражение тождественно 0выражение не тождественно, var:a<b ответ: 1выражение тождественно 0выражение не тождественно
>D — проверка тождественности
примеры: var:a>33 ответ: 1выражение тождественно 0выражение не тождественно, var:a>b ответ: 1выражение тождественно 0выражение не тождественно
W — имя текстовой переменной (доступно 3 переменных str1, str2, str3)
пример: var:buffer=str1 ответ: ...содержимое переменной 0переменная пуста
var:str2=buffer — копирование в переменную str2 содержимого буфера
пример: var:str2=buffer ответ: 1всегда
var:buffer=str3 — копирование в буфер содержимого str3
пример: var:buffer=str3 ответ: 1всегда
Важно! Чтобы вставить значение переменной в буфер используйте конструкцию (a), (b) ... (z).
ФАЙЛЫ
Файловая система всех агрегаторов SIM Roulette использует внутреннюю FLASH-память контроллера. Объем доступного пространства, в зависимости от модели, от 1,5 до 2,5 Мегабайт.
В некоторых комплектациях SR Nano дополнительно может быть задействована внешняя карта памяти microSD.
fs.space:[data(1)] — просмотр информации о состоянии памяти (free/used/total)
примеры:
fs.space:free или fs.space ответ: 1000000размер свободной памяти в байтах
fs.space:used ответ: 2000000размер занятого пространства в байтах
fs.space:total ответ: 3000000всего памяти в байтах
fs.list:W — просмотр содержимого папки
W — имя папки
пример: fs.list:/ ответ: ❰ СПИСОК ФАЙЛОВ ❱ 0ошибка
fs.view:W — просмотр файла
W — имя файла
пример: fs.view:/terminal.dat ответ: ❱❱ ПЕРЕХОД В РЕЖИМ ПРОСМОТРА 0ошибка
fs.edit:W — редактирование файла
W — имя файла
пример: fs.edit:/terminal.dat ответ: ❱❱ ПЕРЕХОД В РЕДАКТОР 0ошибка
fs.delete:W — удаление файла
W — имя файла
пример: fs.remove:/test/file.txt ответ: 1выполнено 0ошибка
fs.rename:source(1),target(2) — переименование файла
source(1) — текущий путь и имя файла
target(2) — новый путь и имя файла
примеры: fs.rename:/terminal.dat,/test/terminal.dat
fs.rename:{"source":"/terminal.dat","target":"/test/terminal.dat"}
ответ: 1выполнено 0ошибка
fs.copy:source(1),target(2) — копирование файла
source(1) — имя файла-источника
target(2) — имя файла-приемника
примеры: fs.copy:/terminal.dat,/test/terminal.dat
fs.copy:{"source":"/terminal.dat","target":"/test/terminal.dat"}
ответ: 1выполнено 0ошибка
fs.download:url(1),file(2)[,size=30000] — скачивание файла с WEB-сайта (только HTTP)
url(1) — URL файла
file(2) — путь и имя сохраняемого файла
size(3) — максимальный размер скачиваемого файла, при большом размере возможны сбои при сохранении файла (необязательный параметр)
примеры:
fs.download:sim-roulette.com/download/test,/test/test ответ: 1выполнено 0ошибка
fs.download:{"url":"site.ru?get_request=123","file":"/test","size":"50000"} ответ: 1выполнено 0ошибка
fs.upload:url(1),file(2)[,newFileName(3)] — закачивание файла на WEB-сайт (только HTTP)
url(1) — URL сервера, на который планируем закачивать файл
file(2) — путь и имя файла для загрузки
newFileName(3) — имя загружаемого файла на сервере (необязательный параметр)
примеры:
fs.upload:sim-roulette.com/upload/test,/test/test ответ: 1выполнено 0ошибка
fs.upload:{"url":"site.ru?get_request=123","file":"/test","newFileName":"my_file"} ответ: 1выполнено 0ошибка
Важно! Механизм загрузки реализован на нашем сайте, в личном кабинете. На своем сервере вы можете воспользоваться готовым PHP-скриптом.
Специфические команды для работы с SR-Nano
Дорожки
В SR-Nano-500 8 дорожек, от 0 (A) до 7 (H). На дорожках расположены карты. На A — 100 карт, на B — 90, на C — 80, на D — 68, на E — 58, на F — 46, на G — 34, на H — 24.
В SR-Nano-1000 12 дорожек, от 0 (A) до 11 (M). На дорожках расположены карты. На A — 140 карт, на B — 130, на C — 120, на D — 110, E — 100 карт, на F — 90, на G — 80, на H — 68, на I — 58, на J — 46, на K — 34, на L — 24.
track:W — дорожка
W — параметр:
? — номер текущей дорожки пример: track:? ответ: 3номер текущей дорожки
СИМ-карты
card>discover — проверка наличия СИМ-карты в текущей ячейке диска
пример: card>discover ответ: 1карта есть 0карты нет
card>begin — отметка текущей СИМ-карты как первой в последующим цикле операций, в этом случае по окончании цикла, например, прохождения полного круга, программа будет остановлена перед этой картой
пример: card>begin ответ: 1выполнено 0ошибка
card>out:W — подведение карты (для ручного извлечения) к обозначенному стрелкой положению на дорожке (на экране при этом выводится буква дорожки с номером карты)
W — параметр:
GSM-МОДЕМ
modem>connect — подключение контактов к текущей СИМ-карте
пример: modem>connect ответ: 1выполнено 0ошибка
Примечание: не работает до тех пор, пока не выбрана СИМ-карта. При подключении в статус-строке на экране устройства и в WEB-интерфейсе отображается соответствующая пиктограмма.
Важно! Всегда визуально проверяйте отключены (подняты) ли контакты при смене диска-контейнера. При необходимости быстро поднять контакты нажмите многофункциональную сенсорную кнопку.
modem>disconnect — отключение контактов от СИМ-карты
пример: modem>disconnect ответ: 1всегда
Примечание: происходит автоматически при любых механических операциях устройства
modem>outside — выдвижение контактов без проверки позиционирования (сервисная команда) new!
пример: modem>outside ответ: 1всегда
Важно! командой следует пользоваться ТОЛЬКО при техническом обслуживании агрегатора!
modem>inside — втягивание контактов (сервисная команда) new!
пример: modem>inside ответ: 1всегда
modem>on — включение модема
пример: modem>on ответ: 1всегда
Примечание: при включенном модеме в статус-строке на экране устройства и в WEB-интерфейсе отображается пиктограмма молнии
modem>off — выключение модема
пример: modem>off ответ: 1всегда
Примечание: происходит автоматически при любых механических операциях устройства
modem>status[:W] — получение статуса модема
пример: modem>status ответ: 1питание включено, контакты подключены 0питание выключено или контакты не подключены
W — необязательный параметр:
:connect — статус подключения контактов, пример: modem>status:connect ответ: 1подключены 0не подключены
modem>activation[:bool] — подключение к СИМ-карте и активация модема с проверкой new!
:bool — необязательный параметр при добавлении которого ответ упрощается до 1 (True) / NULL (False). Успешными считаются статусы 1 и 5.
примеры: modem>activation ответ: 1;9;MTSуспешный статус подключения к сети;затраченное время в секундах;оператор 4;7ошибка подключения к сети;затраченное время в секундах
modem>activation:bool ответ: 1выполнено 0ошибка
Примечание: не работает до тех пор, пока не выбрана СИМ-карта. Подключение/переподключение и включение модема осуществляется автоматически.
подробнее о статусах
НАСТРОЙКИ
version — получение версии микропрограммы агрегатора
пример:
version ответ:1.00версия агрегатора
set.dev.serial — получение серийного номера агрегатора
пример:
set.dev.serial ответ:DDDDDDDDDDDDDDDDDDсерийный номер агрегатора
set.dev.rev — получение ревизии (HARD-версии) агрегатора
пример:
set.dev.rev ответ:5ревизия агрегатора
set.dev.ip — получение IP-адреса агрегатора
пример:
set.dev.ip ответ:192.168.1.2IP-адрес агрегатора
set.carrier_timer:[data(1){0...3600}] — таймер простоя (в секундах) без внешних обращений (Сервер, Терминал) к агрегатору, по окончании периода SIM Roulette переподключается к сети (0 — отключен)
примеры:
set.carrier_time ответ:3600текущее значение
set.carrier_time:60 ответ:60установленный таймер
set.server:[url(1)][,frequency(2){1000...100000}] — получение и установка параметров подключения к серверу (URL и частота обращений)
примеры:
set.server ответ:текущие параметры
set.server:sim-roulette.com/link/?token=DDDDDDDDDD,1000 ответ:установленые параметры
set.dev.mode:[data(1)] — получение и переключение режима работы агрегатора (SMART — агрегатор выполняет всю работу по взаимодействию с GSM-модемами, MANUAL — пользователь сам
опрашивает модемы для получения SMS, USSD и т.д.)
примеры:
set.dev.mode ответ:SMARTтекущий режим
set.dev.mode:MANUAL ответ:MANUALустановленый режим
set.dev.alert:[data(1){0...1}] — получение и становка режима вывода уведомлений в Терминал (сервер будет получать уведомления независимо от данной настройки)
примеры:
set.dev.alert ответ:1уведомления включены
set.dev.alert:0 ответ:0установленный режим отключения уведомлений
set.ntp_server:[address(1)] — получение и установка адреса NTP-серверу (Network Time Protocol)
примеры:
set.ntp_server ответ:pool.ntp.org текущий адрес
set.ntp_server:pool.ntp.org ответ:pool.ntp.org заданный адрес
set.ntp_server:none — отказаться от получения времени ответ:1 запрет подключения к NTP-серверу
set.time.zone:[data(1){-23...23}] — получение и установка значения текущей временной зоны агрегатора
примеры:
set.time.zone ответ:3текущая временная зона UTC+03:00 Москва
set.time.zone:5 ответ:5установлена временная зона UTC+05:00 Екатеринбург
set.time.daylightOffset:[data(1){-1...1}] — получение и установка значения поправки при переходе на летнее время
примеры:
set.time.daylightOffset ответ:0текущая поправка
set.time.zone:-1 ответ:-1установленая поправка
set.dev.name:W — получение и установка имени устройства, которое отображается на дисплее
примеры:
set.dev.name ответ:SR-Boardтекущее имя
set.dev.name:Test ответ:TestПрисвоено новое имя
set.httpupdate:[data(1){0-10}] — частота подключения к серверу sim-roulette для проверки обновлений (0 — проверка отключена)
примеры:
set.httpupdate ответ:1 текущее значение
set.httpupdate:1 ответ:2 каждое второе включение
save — Сохранение настроек в конфигурационном файле (без сохранения настройки действуют до перезагрузки устройства)
пример: save ответ: 1 всегда
УПРАВЛЯЮЩИЕ КОМАНДЫ
answer.clear — очистка очереди ответов агрегатора
пример: answer.clear ответ:1 всегда
command.clear — очистка очереди команд агрегатору
пример: command.clear ответ:1 всегда
i2c — получение перечня внешних, подключенных по шине i2c устройств
пример: i2с ответ:1 всегда
restart — Soft-reset агрегатора
пример: restart ответ: 1 ❱❱ ПЕРЕЗАГРУЗКА УСТРОЙСТВА
load_default_settings — сброс настроек до заводских
пример: load_default_settings ответ:1 всегда
hard_reset — полный сброс устройства до состояния нового устройства
пример: hard_reset ответ: 1 ❱❱ ПЕРЕЗАГРУЗКА УСТРОЙСТВА
МОНИТОРИНГ
request — команда для получения ответа (результата выполнения предыдущих команд) от устройства (команда никаких действий не производит)
email.send:email(1);text(2) — отправка письма на E-mail
примеры: email:user@mail.ru,Новая информация от SIM Roulette
email:{"mail":"user@mail.ru","text":"Новая информация от SIM Roulette"}
ответ: 1письмо отправлено 0неверные настройки
МАКРОСЫ
Макросы (или скрипты) — это мощнейший внутренний механизм автоматизации агрегаторов SIM Roulette. С помощью макросов могут быть реализованы абсолютно любые сценарии работы.
macro:W[,W2] | m:W[,W2] — запуск макроса с заданным именем (W) из папки /m (допустимо использовать переменные) и необязательным входным параметром (W2)
примеры:
macro:filename ответ: ❱❱ ВЫПОЛНЕНИЕ МАКРОСА 0ошибка
m:filename ответ: ❱❱ ВЫПОЛНЕНИЕ МАКРОСА 0ошибка
macro:file_(a) ответ: ❱❱ ВЫПОЛНЕНИЕ МАКРОСА 0ошибка
macro:file,Текст ответ: ❱❱ ВЫПОЛНЕНИЕ МАКРОСА 0ошибка
Примечание: макросы можно редактировать и запускать в разделе Макросы WEB-интерфейса SR-Nano, там же можно отслеживать ход выполнения запущенного макроса.
macro.stop | m.stop — остановка выполнения текущего макроса
пример: m.stop ответ: 1 всегда
macro.event:event(1),macro(2),action(3) | m.event:event(1),macro(2),action(3) — добавление/удаление макроса-слушателя события
Примечание: при наступлении события останавливается запущенный макрос (если таковой был) и последовательно выполняются все зарегистрированные макросы-слушатели, по окончании управление возвращается ранее запущенному макросу. В качестве входного параметра макросу-слушателю в буфере передается ответ от устройства вызвавшее событие, например: 1. С помощью команды buffer.event.dev можно также получить в буфер имя устройства, например: modem1.
event(1) — cобытие:
inCall — поступил входящий вызов
noCarrier — попытка установить связь закончилась неудачей
answer — ответ на входящий вызов, "подняли трубку"
hangUp — завершение вызова, "положили трубку"
ussd — пришел ответ на USSD-запрос
smsAlert — на модем поступила новая SMS
smsReceived — SMS скопирована в файловую систему агрегатора
modemState — изменился статус регистрации SIM-карты в сети
modemAnswer — получен ответ от модема
key — нажата кнопка
portchangeState — изменился статус порта
portChangeUp — изменился порта от низкого к высокому
portChangeDown — изменился порта от высокому к низкому
i2cChangeState — изменился статуса I2C
timer1 — сработал Таймер 1
timer2 — сработал Таймер 2
dtmf — получен код нажатой кнопки
callBegin — начат разговор для 3G/4G-модемов
callEnd — закончен разговор
smsSent — SMS отправлена
smsNotSent — SMS не отправлена
macro(2) — макрос:метка, который будет запущен при наступлении события
action(3) — действие: add — добавить слушателя, delete — удалить слушателя
примеры:
m.event:event=modemState,macro=scanner:test,action=add ответ: 1выполнено 0ошибка
macros.event:event=key,macro=key,action=add ответ: 1выполнено 0ошибка
После старта агрегатора автоматически запускается макрос /m/autoexec, в котором прописаны условия обработки некоторых событий. Подробнее о макросах можно узнать здесь.
ПЛАНИРОВЩИК (CRON)
Для периодического выполнения заданий в определённое время на агрегаторе используется классический механизм CRON.
Регулярные действия описываются инструкциями, помещенными в файл /crontab.
Пример файла:
* * * * * macros:label
В примере инициализирован запуск макроса /m/macros с метки label каждую минуту.
Правила формирования времени запуска макросов
Минута | Час | День | Месяц | День недели |
---|---|---|---|---|
* — каждая X-Y — с минуты X по минуту Y X,Y — минуты X и Y */X — каждая X минута |
* — каждый X-Y — с часа X по час Y X,Y — часы X и Y */X — каждый X час |
* — каждый X-Y — со дня X по день Y X,Y — дни X и Y */X — каждый X день |
* — каждый X-Y — с месяца X по месяц Y X,Y — месяцы X и Y */X — каждый X месяц |
* — каждый X-Y — со дня X по день Y X,Y — дни X и Y |
@hourly — каждый час | @daily, @midnight — каждый день | |||
@weekly — раз в неделю | ||||
@monthly — раз в месяц | ||||
@yearly, @annually — раз год |
Интеграция SIM Roulette в ваш проект
Мы надеемся, что изложенная выше информация поможет без проблем интегровать SIM Roulette в ваш проект.
Для упрощения задачи рекомендуем использовать WEB-панель SR-Navigator и API для взаимодействия с вашим ПО.
И конечно, вы всегда можете воспользоваться услугами наших программистов.