def on_start(mosq, userdata, msg): if (skip_retained and msg.retain == 1) or len(msg.payload) == 0: return log.debug("_start: {0} {1}".format(msg.topic, msg.payload)) save_rawdata(msg.topic, msg.payload) watcher(mosq, msg.topic, msg.payload) imei = version = "" try: imei, version, tstamp = msg.payload.split(' ') except: log.error("Cannot split() on ../start") return startup_dt = None try: startup_dt = dateutil.parser.parse(tstamp) except: startup_dt = datetime.datetime.now() # Inventory must have base topic in it so that we can later associate TID # with the IMEI basetopic, suffix = tsplit(msg.topic) odo = 0 try: inv = Inventory.get(Inventory.imei == imei) odo = int(inv.odo) try: inv.topic = basetopic inv.version = version inv.startup = startup_dt try: if basetopic in devices: inv.tid = devices[basetopic]['tid'] except: pass inv.tstamp = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) inv.save() except Exception, e: raise log.error("DB error on UPDATE Inventory: {0}".format(str(e))) except Inventory.DoesNotExist: try: inv = Inventory(topic=basetopic, imei=imei, version=version, startup=startup_dt) if basetopic in devices: inv.tid = devices[basetopic]['tid'] inv.save() except Exception, e: log.error("DB error on SAVE Inventory: {0}".format(str(e)))
def t_imei(rest, val): ''' val is a TID. Return IMEI from Inventory ''' tid = val resp = 'unknown TID=%s' % tid try: inv = Inventory.get(Inventory.tid == tid) resp = "TID={0} IMEI={1} topic={2}".format(inv.tid, inv.imei, inv.topic) except Inventory.DoesNotExist: log.warning("IMEI for TID={0} requested but not found".format(tid)) pass except Exception, e: log.error("DB error on GET Inventory: {0}".format(str(e))) pass