From e36055faf1e2e5f7e3634866a99cab825f5b74b2 Mon Sep 17 00:00:00 2001 From: Vincent BENOIT Date: Wed, 9 Nov 2022 20:47:48 +0100 Subject: [PATCH] update des fonctions --- src/intercom.py | 93 ++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 20 deletions(-) diff --git a/src/intercom.py b/src/intercom.py index 987cd69..3569ff2 100644 --- a/src/intercom.py +++ b/src/intercom.py @@ -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