def __init__()

in lab/app/ota.py [0:0]


    def __init__(self, device_id, device_name, mqtt_host, mqtt_port, update_callback, model_path='agent/model'):
        assert(update_callback != None)
        logging.basicConfig(filename='agent/logs/ota.log', encoding='utf-8', level=logging.DEBUG)
        
        self.device_id = device_id
        self.device_name = device_name
        self.model_path = model_path
        self.update_callback = update_callback
        conf_file_name = 'agent/conf/config_%s.json' % device_name.replace('-', '_')
        if not os.path.isfile(conf_file_name):
            raise Exception("Agent config file not found! %s" % conf_file_name)
        params=json.loads(open(conf_file_name, 'r').read())
        self.params = params
        self.mqttc = mqtt.Client()
        self.mqttc.tls_set(
            params['sagemaker_edge_provider_aws_ca_cert_file'],
            certfile=params['sagemaker_edge_provider_aws_cert_file'], 
            keyfile=params['sagemaker_edge_provider_aws_cert_pk_file'], 
            cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None
        )
        self.mqttc.enable_logger(logger=logging)
        self.mqttc.on_message = self.__on_message__
        self.mqttc.on_connect = self.__on_connect__
        self.mqttc.on_disconnect = self.__on_disconnect__
        self.connected = False
        
        self.model_meta = {'model_name': None}
        for f in glob.glob(os.path.join(model_path, str(device_id), '*', '*', 'compiled.*')):
            tokens = f.split(os.path.sep)
            assert(len(tokens) > 3)
            name = tokens[-3]
            version = float(tokens[-2])
            if self.model_meta['model_name'] != name or self.model_meta['model_version'] < version:
                self.model_meta['model_name'] = name
                self.model_meta['model_version'] = version
        logging.info("Model meta", self.model_meta)

        if self.model_meta['model_name'] is not None:
            self.update_callback(self.device_id, self.model_meta['model_name'], self.model_meta['model_version'])
        
        self.processing_lock = threading.Lock()
        self.processed_jobs = []
        
        # start the mqtt client
        self.mqttc.connect(mqtt_host, mqtt_port, 45)
        self.mqttc.loop_start()