in lab/03-Package-Deploy/iot-jobs/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()