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

gammu phones tables with multiple modem port

EDIT: I know, after some research, this problem caused by IMEI field in phones tables as primary, if we using modem pool like wavecome with 16 port, gammu detect just one 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 中的 smsdrc 配置 /etc/gammu-smsdrc-modem1

[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 中的 smsd 配置 /etc/gammu-smsdrc-modem2

[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

在阅读了 API gammu 的文档之后,我弄明白了,是的,就像第一个一样,因为我使用一个带有 16 端口 sim 卡的调制解调器,gammu 只检测单个 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,并修改phones表以将ID设置为主键,我不是c专家,希望有人能做出好的改变以获得更好的结果,但对我来说已经足够临时使用了.