update des fonctions
This commit is contained in:
+73
-20
@@ -188,8 +188,6 @@ def init_gsm_com(serObj=None, config={}, logger=None):
|
||||
cmd_lst = ['AT',
|
||||
'ATE1',
|
||||
'AT+CMEE=2',
|
||||
'AT+CREG?',
|
||||
'AT+CSQ',
|
||||
'AT+CLTS=1',
|
||||
'AT+CLIP=1',
|
||||
'AT+CMGF=1',
|
||||
@@ -198,13 +196,14 @@ def init_gsm_com(serObj=None, config={}, logger=None):
|
||||
cmd_lst.append('AT+CPIN='+config['CODE_PIN'])
|
||||
else:
|
||||
cmd_lst.append('AT+CPIN?')
|
||||
logger.info("Initialisation des commandes GSM ...")
|
||||
for cmd in cmd_lst:
|
||||
ret, _ = send_at_cmd(cmd=cmd, timeout=0.0, serObj=serObj, logger=logger)
|
||||
if ret == 2:
|
||||
logger.error("Erreur avec la commande AT: {}".format(cmd))
|
||||
return False
|
||||
elif ret == 1:
|
||||
lgger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
logger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
return True
|
||||
|
||||
def update_gsm_com(serObj=None, config={}, logger=None):
|
||||
@@ -240,7 +239,7 @@ def update_gsm_com(serObj=None, config={}, logger=None):
|
||||
logger.error("Erreur avec la commande AT: {}".format(cmd))
|
||||
return False
|
||||
elif ret == 1:
|
||||
lgger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
logger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
return True
|
||||
|
||||
def info_gsm_com(serObj=None, config={}, logger=None):
|
||||
@@ -274,49 +273,93 @@ def info_gsm_com(serObj=None, config={}, logger=None):
|
||||
{'cmd':'AT+CSMINS?', 'obj':'control', 'item':'sim_inserted'},
|
||||
{'cmd':'AT+CSPN?', 'obj':'control', 'item':'service_provider'},
|
||||
{'cmd':'AT+CGSN', 'obj':'manufacturer', 'item':'serial_number'},
|
||||
{'cmd':'AT+CCALR?', 'obj':'control', 'item':'call_ready'}]
|
||||
{'cmd':'AT+CCALR?', 'obj':'control', 'item':'call_ready'},
|
||||
{'cmd':'AT+CREG?', 'obj':'control', 'item':''},
|
||||
{'cmd':'AT+CSQ', 'obj':'control', 'item':'signal_dbm'}]
|
||||
for idx, cmd in enumerate(cmd_lst):
|
||||
ret, rsp = send_at_cmd(cmd=cmd['cmd'], timeout=0.0, serObj=serObj, logger=logger)
|
||||
if ret == 2:
|
||||
logger.error("Erreur avec la commande AT: {}".format(cmd))
|
||||
return False
|
||||
elif ret == 1:
|
||||
lgger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
logger.warning("Timeout avec la commande AT: {}".format(cmd))
|
||||
else:
|
||||
logger.debug('cmd: {} - rsp: {}'.format(cmd, rsp))
|
||||
if cmd['cmd'] == 'AT+CGMI':
|
||||
#cmd: AT+CGMI - rsp: ['AT+CGMI', 'SIMCOM_Ltd', 'OK']
|
||||
# Request Manufacturer Identification
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1]
|
||||
elif cmd['cmd'] == 'AT+CGMM':
|
||||
#cmd: AT+CGMM - rsp: ['AT+CGMM', 'SIMCOM_SIM868', 'OK']
|
||||
# Request Model Identification
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1]
|
||||
elif cmd['cmd'] == 'AT+CGMR':
|
||||
#cmd: AT+CGMR - rsp: ['AT+CGMR', 'Revision:1418B02SIM868M32_BT_EAT', 'OK']
|
||||
# Request TA Revision Identification of Software Release
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1].split(':')[1]
|
||||
elif cmd['cmd'] == 'AT+COPS?':
|
||||
#cmd: AT+COPS? - rsp: ['AT+COPS?', '+COPS: 0,0,"SFR"', 'OK']
|
||||
# Operator Selection
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1].split(',')[2][1:-1]
|
||||
elif cmd['cmd'] == 'AT+CSMINS?':
|
||||
#cmd: AT+CSMINS? - rsp: ['AT+CSMINS?', '+CSMINS: 0,1', 'OK']
|
||||
# SIM Inserted Status Reporting
|
||||
if rsp[1].split(',')[1] == '1':
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = True
|
||||
elif rsp[1].split(',')[1] == '0':
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = False
|
||||
elif cmd['cmd'] == 'AT+CSPN?':
|
||||
#cmd: AT+CSPN? - rsp: ['AT+CSPN?', '+CSPN: "La Poste Mobile",0', 'OK']
|
||||
# Get Service Provider Name from SIM
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1].split(': ')[1].split(',')[0][1:-1]
|
||||
elif cmd['cmd'] == 'AT+CGSN':
|
||||
#cmd: AT+CGSN - rsp: ['AT+CGSN', '864866057705260', 'OK']
|
||||
# Request Product Serial Number Identification
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = rsp[1]
|
||||
elif cmd['cmd'] == 'AT+CCALR?':
|
||||
#cmd: AT+CCALR? - rsp: ['AT+CCALR?', '+CCALR: 1', 'OK']
|
||||
# Call Ready Query
|
||||
if rsp[1].split(': ')[1] == '1':
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = True
|
||||
elif rsp[1].split(': ')[1] == '0':
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = False
|
||||
elif cmd['cmd'] == 'AT+CSQ':
|
||||
# Signal Quality Report
|
||||
val = rsp[1].split('+CSQ: ')[1].split(',')[0]
|
||||
for item in SIGNAL:
|
||||
if item['val'] == int(val):
|
||||
config['INFOS'][cmd['obj']][cmd['item']] = item['dbm']
|
||||
config['INFOS'][cmd['obj']]['signal_qos'] = item['condition']
|
||||
break
|
||||
|
||||
with open(os.path.join("/etc/kineintercom", "db.json"), 'w') as f:
|
||||
json.dump(config, f)
|
||||
|
||||
return True
|
||||
|
||||
SIGNAL = [{"val":2, "dbm":"-109", 'condition':'Marginal'},
|
||||
{"val":3, "dbm":"-107", 'condition':'Marginal'},
|
||||
{"val":4, "dbm":"-105", 'condition':'Marginal'},
|
||||
{"val":5, "dbm":"-103", 'condition':'Marginal'},
|
||||
{"val":6, "dbm":"-101", 'condition':'Marginal'},
|
||||
{"val":7, "dbm":"-99", 'condition':'Marginal'},
|
||||
{"val":8, "dbm":"-97", 'condition':'Marginal'},
|
||||
{"val":9, "dbm":"-95", 'condition':'Marginal'},
|
||||
{"val":10, "dbm":"-93", 'condition':'OK'},
|
||||
{"val":11, "dbm":"-91", 'condition':'OK'},
|
||||
{"val":12, "dbm":"-89", 'condition':'OK'},
|
||||
{"val":13, "dbm":"-87", 'condition':'OK'},
|
||||
{"val":14, "dbm":"-85", 'condition':'OK'},
|
||||
{"val":15, "dbm":"-83", 'condition':'Good'},
|
||||
{"val":16, "dbm":"-81", 'condition':'Good'},
|
||||
{"val":17, "dbm":"-79", 'condition':'Good'},
|
||||
{"val":18, "dbm":"-77", 'condition':'Good'},
|
||||
{"val":19, "dbm":"-75", 'condition':'Good'},
|
||||
{"val":20, "dbm":"-73", 'condition':'Excellent'},
|
||||
{"val":21, "dbm":"-71", 'condition':'Excellent'},
|
||||
{"val":22, "dbm":"-69", 'condition':'Excellent'},
|
||||
{"val":23, "dbm":"-67", 'condition':'Excellent'},
|
||||
{"val":24, "dbm":"-65", 'condition':'Excellent'},
|
||||
{"val":25, "dbm":"-63", 'condition':'Excellent'},
|
||||
{"val":26, "dbm":"-61", 'condition':'Excellent'},
|
||||
{"val":27, "dbm":"-59", 'condition':'Excellent'},
|
||||
{"val":28, "dbm":"-57", 'condition':'Excellent'},
|
||||
{"val":29, "dbm":"-55", 'condition':'Excellent'},
|
||||
{"val":30, "dbm":"-53", 'condition':'Excellent'}]
|
||||
|
||||
|
||||
def verify_caller(buf="", num="", logger=None):
|
||||
''' Verify phone number of caller
|
||||
example : +CLIP: "0607297154",129,"",0,"",0
|
||||
@@ -477,7 +520,7 @@ def cron_verify_hours(op=None, config=None, logger=None):
|
||||
else:
|
||||
# Si le module GSM doit être éteint et qu'il est allumé, on l'eteint
|
||||
if GSM_MODULE_STATE:
|
||||
logger.debug("Fermeture du module GSM HAT ...")
|
||||
logger.info("Fermeture du module GSM HAT ...")
|
||||
if not setup_module():
|
||||
logger.error('Erreur de fermeture du module GSM')
|
||||
else:
|
||||
@@ -512,13 +555,19 @@ def process(buf="", config={}, ser=None, logger=None):
|
||||
# Pick up
|
||||
ret, _ = send_at_cmd(cmd='ATA', timeout=0.0, serObj=ser, logger=logger)
|
||||
if ret == 0:
|
||||
time.sleep(0.2)
|
||||
logger.info('Pick up the call ...')
|
||||
# Configure DTMF duration
|
||||
ret, _ = send_at_cmd(cmd='AT+VTD='+str(config['DTMF_DURATION']), timeout=0.0, serObj=ser, logger=logger)
|
||||
if ret:
|
||||
logger.error("Erreur de configuration de la durée ({}) du code DTMF".format(config['DTMF_DURATION']))
|
||||
time.sleep(0.2)
|
||||
# send DMTF tone
|
||||
send_at_cmd(cmd='AT+VTS='+config['DTMF_CODE'], timeout=0.0, serObj=ser, logger=logger)
|
||||
# Waiting DTMF tone duration (1/10 sec) + 2 seconds
|
||||
time.sleep(float(config['DTMF_DURATION']/10) + 2)
|
||||
time.sleep(float(config['DTMF_DURATION']/10) + 1)
|
||||
# Hang up
|
||||
logger.info('Hang up ...')
|
||||
ret, _ = send_at_cmd(cmd='ATH', timeout=0.0, serObj=ser, logger=logger)
|
||||
if ret > 0:
|
||||
logger.error('Cannot hang up ...')
|
||||
@@ -616,10 +665,13 @@ def main():
|
||||
|
||||
# Verify if the GSM module must be opened or not
|
||||
if config['OPERATION'] == 'Horaires':
|
||||
logger.info("Mode \"Horaires\" activé ...")
|
||||
opened = verify_open_hours(conf=config['HORAIRES'], logger=logger)
|
||||
elif config['OPERATION'] == 'Manuel ON':
|
||||
logger.info("Mode \"Manuel ON\" activé ...")
|
||||
opened = True
|
||||
elif config['OPERATION'] == 'Manuel OFF':
|
||||
logger.info("Mode \"Manuel OFF\" activé ...")
|
||||
opened = False
|
||||
else:
|
||||
logger.error("Wrong 'OPERATION' parameter in database")
|
||||
@@ -699,12 +751,13 @@ def main():
|
||||
while True:
|
||||
# Drapeau de mise à jour de la configuration, par le configurateur via le serveur (socket)
|
||||
if FLAG_CONF_UPDATE:
|
||||
logger.info("Configuration must be reloaded ...")
|
||||
logger.info("Configuration doit être rechargée ...")
|
||||
# reload conf in memory
|
||||
config = get_conf(logger)
|
||||
config = get_conf(logger)
|
||||
logger.info("Mode \"{}\" activé ...".format(config['OPERATION']))
|
||||
# update GSM parameters with new parameters
|
||||
if not update_gsm_com(serObj=ser, config=config, logger=logger):
|
||||
logger.warning('Impossible de mettre à jour les paramètres GSM')
|
||||
#if not update_gsm_com(serObj=ser, config=config, logger=logger):
|
||||
# logger.warning('Impossible de mettre à jour les paramètres GSM')
|
||||
if FLAG_HORAIRE_UPDATE:
|
||||
logger.info("Restart scheduler ...")
|
||||
# Stop job scheduler to restart it
|
||||
|
||||
Reference in New Issue
Block a user