具有多个调制解调器端口的 Gammu 电话表



编辑:我知道,经过一些研究,这个问题是由IMEI字段引起的 在电话表中作为主要,如果我们使用调制解调器池,如 wavecome 与 16 端口,伽姆仅检测一个 IMEI

我有 1 个调制解调器与 16 个 SIM 卡端口连接,每个配置连接到我服务器上的同一数据库,发送和接收短信都像魅力一样工作,每个端口都有 SMSD 服务,例如

gammu-smsd -c /etc/gammu-smsdrc-modem1 --pid /var/run/gammu-smsdrc-modem1 --daemon
gammu-smsd -c /etc/gammu-smsdrc-modem2 --pid /var/run/gammu-smsdrc-modem2 --daemon

每个端口都有自己的PhoneID,如modem1modem2,问题是 为什么 Gammu 数据库中的电话表不断用上次运行的 Gammu-SMSD 服务替换数据?

前任: 如果我运行第一个配置,那么电话表将包含所有信息,例如信号,来自第一个端口的IMEI,但是当我运行第二个gammu-smsd数据时,来自第一个端口的数据将消失,从第二个端口配置更改

这是我从调制解调器1/etc/gammu-smsdrc-modem1配置的SMSDRC配置

[gammu]
port = /dev/ttyUSB0
model =
connection = at115200
synchronizetime = yes
logfile = /var/log/gammu-smsdrc-modem1
logformat = nothing
use_locking =
gammuloc =
[smsd]
service=sql
logfile=/var/log/gammu-smsdrc-modem1
debuglevel=0
Driver=native_mysql
User=root
Password=root
PC=localhost
Database=test
PhoneID=modem1

这是我从调制解调器2/etc/gammu-smsdrc-modem2的SMSD配置

[gammu]
port = /dev/ttyUSB1
model =
connection = at115200
synchronizetime = yes
logfile = /var/log/gammu-smsdrc-modem2
logformat = nothing
use_locking =
gammuloc =
[smsd]
service=sql
logfile=/var/log/gammu-smsdrc-modem2
debuglevel=0
Driver=native_mysql
User=root
Password=root
PC=localhost
Database=test
PhoneID=modem2

在阅读了 gammu 的 API 文档后,我已经弄清楚了,是的,就像第一个一样,因为我使用一个带有 16 个 SIM 卡端口的调制解调器,gammu 只是检测 singel IMEI 即使调制解调器有 16 个端口,我的问题的快速回答是没有可配置的文件可以处理这个问题,所以我们必须从smsd/services/sql.c修改一些行 og 代码

if (SMSDSQL_option(Config, SQL_QUERY_DELETE_PHONE, "delete_phone",
"DELETE FROM phones WHERE ", ESCAPE_FIELD("IMEI"), " = %I", NULL) != ERR_NONE) {
return ERR_UNKNOWN;
}
.......
.......
.......
if (SMSDSQL_option(Config, SQL_QUERY_UPDATE_RECEIVED, "update_received",
"UPDATE phones SET ",
ESCAPE_FIELD("Received"), " = ", ESCAPE_FIELD("Received"), " + 1"
" WHERE ", ESCAPE_FIELD("IMEI"), " = %I", NULL) != ERR_NONE) {
return ERR_UNKNOWN;
}

最终代码将是

if (SMSDSQL_option(Config, SQL_QUERY_DELETE_PHONE, "delete_phone",
"DELETE FROM phones WHERE ", ESCAPE_FIELD("ID"), " = %P", NULL) != ERR_NONE) {
return ERR_UNKNOWN;
}
.......
.......
.......
if (SMSDSQL_option(Config, SQL_QUERY_UPDATE_RECEIVED, "update_received",
"UPDATE phones SET ",
ESCAPE_FIELD("Received"), " = ", ESCAPE_FIELD("Received"), " + 1"
" WHERE ", ESCAPE_FIELD("ID"), " = %P", NULL) != ERR_NONE) {
return ERR_UNKNOWN;
}

并像往常一样重新编译 gammu,并修改电话表以将 ID 设置为主键,我不是 C 专家,希望有人可以做出很好的更改以获得更好的结果,但对我来说

,使用临时就足够了。

最新更新