Да, можно, используя флаг «vol».
Вот описание:
on starting command line, param --vol YYY, double millibels, default 0, range [-6000:0]
by stdin interface, sending ± to omxplayer will increase/decrease volume for 300 dmbels
with DBUS interface, cmd 'set volume', value double:XXX, default 1, range [0:1]
xxx to yyy relation is: XXX = 10 ^ (YYY / 2000)… according to omxplayer.cpp source code, reverse formula would be: YYY = 2000 * (log XXX).
so if we need:
volume 1%, XXX=0.01 and YYY=-4000 (10^(-4000/2000)=10^-2=0.01
volume 10%, XXX=0.1 and YYY=-2000 (10^(-2000/2000)=10^-1=0.1
volume 50%, XXX=0.5 and YYY=-602 (10^(-602/2000))~=0.5
volume 100%, XXX=1 and YYY=0 (10^(0/2000)=10^0=1)
volume 150%, XXX=1.5 and YYY=352… (for boost test, normal values are <=100%)
По большому счету вы правы. В случае с динамиком — показано как настроить мультикаст на него с нужными приоритетами. В случае raspberry — Asterisk контролирует работу omxplayer'a, однако для этого asterisk и нужен, он контролирует когда играть музыку, а когда говорить оператору.
Цель статьи же в том, чтобы показать, насколько разноплановым может быть asterisk, не просто банальной звонилкой, лично мне было очень интересно это реализовывать, чей я и поделился с сообществом.
Даже любопытно, насколько корректно вообще пиарить в комментах проприетарную софтину? Давайте чтоли обсудим, как быстро то же самое на Asterisk'e поднять можно?
Вообще я предерживаюсь точки зрения, что документации по любому функционалу Asterisk вполне достаточно (ну разве что по DPMA порой не совсем полные конфиги), про odbc можно почитать например тут
MYSQL app deprecated уже в 11 астере.
ODBC — значительно проще и универсальнее (до тех пор пока в топик не залезет уважаемый antirek и не начнет говорить про agi:)
Чтоб долго не мучаться, вот пример, я тут вытаскиваю имя из базы по CALLERID:
В файле /etc/odbcinst.ini прописываем пути для драйверов (это для убунты, для центоса разница в путях к библиотекам будет):
[MySQL]
Description = MySQL driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
CPTimeout =
CPReuse =
;;Centos, разница в названии библиотек и путях
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc3.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
В файле /etc/odbc.ini описываем параметры odbc-подключения:
[asterisk-barrier]
Driver = MySQL
Description = Connector/ODBC 3.51 Driver DSN
Server = localhost
Port = 3306
User = root
Password = VeryStrongPassword
Database = barrier
Socket = /var/run/mysqld/mysqld.sock
Charset = utf8
В файле /etc/asterisk/res_odbc.conf описываем параметры odbc-подключения:
В func_odbc.conf пишем функцию, которая будет искать в MySQL номер вызывающего абонента и возвращать нам его имя
[MOBILE]
dsn=asterisk-barrier
readsql=SELECT name FROM numbers WHERE phone = '${CALLER}'
и в диалплане что-то типа:
exten => s,1,Set(CALLER=${CALLERID(num)})
same => n,Set(result=${ODBC_MOBILE()}) ;;looking for phone number is mysql, return id
same => n,Set(foo=${ISNULL(${result})}) ;;isnull — is there a number in mysql? 1 or 0
same => n,GotoIf($["${foo}" = «0»]?true:false)
Имхо не совсем корректно юзать ODBC и команду диалплана MYSQL, надо тогда все запросы и писать в рамках ODBC. А может и вообще вынести всю логику на сторону AGI, что крайне котирует уважаемый antirek :)
К сожалению вопрос технического оснащения шлагбаумов gsm-модулями для меня пока темный лес, поинтересуюсь у заказчика, надеюсь они более подкованы, сообщу вам если будет какая-то инфа.
Еще для разработки прикладных вещей на астериске мне кажется удобнее использовать AGI, а не ODBC
имхо, если единственное назначение скрипта коннектиться к базе и брать оттуда одно значение, то AGI становится просто лишним звеном, нецелесообразно. В вашей статье все-таки у скриптов есть логика помимо коннекта к базе, у вас это целесообразно. Ну и немаловажно, что вам, как программисту, удобно вынести логику в программирование, мне, как нубу в программировании — это гораздо сложнее:)
Планируете ли вы еще другим клиентам ставить такие системы?
в том виде, в котором это сейчас существует, это не коробочный продукт, который заинтересовал бы заказчика, но идеи по развитию проекта безусловно есть:)
Да, спасибо, немаловажный момент. Забыл отметить, что на симке подключены самые дешевые услуги рассылки, снимается порядка 1р в день и симка не блокируется.
Большое спасибо за комментарии к коду, очень полезно в моем случае, когда знаешь php чуть меньше, чем совсем не знаешь, потестирую с вашими изменениями:)
А, теперь понял. Нет, к сожалению, пока это невозможно, скрипты смотрят только статус «registered» и отличные от него. Постараемя решить, как можно реализовать интересующий вас функционал:)
Вот описание:
on starting command line, param --vol YYY, double millibels, default 0, range [-6000:0]
by stdin interface, sending ± to omxplayer will increase/decrease volume for 300 dmbels
with DBUS interface, cmd 'set volume', value double:XXX, default 1, range [0:1]
xxx to yyy relation is: XXX = 10 ^ (YYY / 2000)… according to omxplayer.cpp source code, reverse formula would be: YYY = 2000 * (log XXX).
so if we need:
volume 1%, XXX=0.01 and YYY=-4000 (10^(-4000/2000)=10^-2=0.01
volume 10%, XXX=0.1 and YYY=-2000 (10^(-2000/2000)=10^-1=0.1
volume 50%, XXX=0.5 and YYY=-602 (10^(-602/2000))~=0.5
volume 100%, XXX=1 and YYY=0 (10^(0/2000)=10^0=1)
volume 150%, XXX=1.5 and YYY=352… (for boost test, normal values are <=100%)
Цель статьи же в том, чтобы показать, насколько разноплановым может быть asterisk, не просто банальной звонилкой, лично мне было очень интересно это реализовывать, чей я и поделился с сообществом.
Вот офф. документация
ODBC — значительно проще и универсальнее (до тех пор пока в топик не залезет уважаемый antirek и не начнет говорить про agi:)
В файле /etc/odbcinst.ini прописываем пути для драйверов (это для убунты, для центоса разница в путях к библиотекам будет):
[MySQL]
Description = MySQL driver
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
CPTimeout =
CPReuse =
;;Centos, разница в названии библиотек и путях
[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/libmyodbc3.so
Setup = /usr/lib/libodbcmyS.so
FileUsage = 1
В файле /etc/odbc.ini описываем параметры odbc-подключения:
[asterisk-barrier]
Driver = MySQL
Description = Connector/ODBC 3.51 Driver DSN
Server = localhost
Port = 3306
User = root
Password = VeryStrongPassword
Database = barrier
Socket = /var/run/mysqld/mysqld.sock
Charset = utf8
В файле /etc/asterisk/res_odbc.conf описываем параметры odbc-подключения:
[asterisk-barrier]
enabled => yes
dsn => asterisk-barrier
username => root
password => VeryStrongPassword
pooling => no
limit => 1
pre-connect => yes
В func_odbc.conf пишем функцию, которая будет искать в MySQL номер вызывающего абонента и возвращать нам его имя
[MOBILE]
dsn=asterisk-barrier
readsql=SELECT name FROM numbers WHERE phone = '${CALLER}'
и в диалплане что-то типа:
exten => s,1,Set(CALLER=${CALLERID(num)})
same => n,Set(result=${ODBC_MOBILE()}) ;;looking for phone number is mysql, return id
same => n,Set(foo=${ISNULL(${result})}) ;;isnull — is there a number in mysql? 1 or 0
same => n,GotoIf($["${foo}" = «0»]?true:false)
PS Ждем следующей статьи с кодом админки:)
Поправьте нуба в физике, если не прав, но с каких пор частота в нанометрах меряется?
Залил на гитхаб, вот тут.
По поводу
имхо, если единственное назначение скрипта коннектиться к базе и брать оттуда одно значение, то AGI становится просто лишним звеном, нецелесообразно. В вашей статье все-таки у скриптов есть логика помимо коннекта к базе, у вас это целесообразно. Ну и немаловажно, что вам, как программисту, удобно вынести логику в программирование, мне, как нубу в программировании — это гораздо сложнее:)
в том виде, в котором это сейчас существует, это не коробочный продукт, который заинтересовал бы заказчика, но идеи по развитию проекта безусловно есть:)
какая у вас версия питона? покажите вывод python --version