【问题标题】:gammu phones tables with multiple modem port带有多个调制解调器端口的 gammu 电话桌
【发布时间】:2017-08-04 06:57:06
【问题描述】:

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

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

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 数据将消失,从第二个端口配置更改

这是我来自 modem1 /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

这是我来自 modem2 /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

【问题讨论】:

  • 请问你的多调制解调器端口是从哪里得到的?

标签: sms gammu


【解决方案1】:

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

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专家,希望有人可以做出好的改变以获得更好的结果,但对我来说这足以使用临时。

【讨论】:

  • 如何将 ID 设置为主键
猜你喜欢
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多