2017-08-04 139 views
0

编辑:我知道,一些研究之后,这个问题在电话表的主造成的IMEI场 ,如果我们使用调制解调器池一样wavecome与 16口,监务检测只是一个IMEI监务手机与多个调制解调器端口表

我有1个调制解调器与SIM卡的16端口的连接,连接到同一个数据库我的服务器上的每个配置,发送和接收SMS所有的工作就像一个魅力,每个端口有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从1端口,但是当我运行第二监务,SMSD数据从第1端口将消失,从第2个端口的配置变化

这里是modem1的/ etc /监务-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 /监务-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 

回答

0

经过对gammu的API Doc的一些阅读后,我弄明白了,就像第一个一样,它是因为我用一个带有16端口sim卡的调制解调器,gammu只是检测singel IMEI甚至调制解调器有16端口,快速回答我的问题是没有configureable文件可以处理这个问题,所以我们必须从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; 
} 

修改一些线OG代码的最终代码会

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; 
} 

,并重新编译监务像往常一样,和修改手机表设置ID为主键,我不是在C专家,希望有人可以做出更好的结果,但为了更好的结果我已经足够用于临时使用了。