import time import os try: import json except: import simplejson as json import thread import threading import re class start(threading.Thread): def __init__(self, name=None, number=None, mac=None, Q=None, mcu=None, companyId=None, offset=None, mqtt=None, Nodes=None): threading.Thread.__init__(self) self.daemon = True self.offset = offset self.company = companyId self.name = name self.number = number self.q = Q self.deviceName = name + '_[' + mac + ':' + number[0:2] + ':' + number[2:] + ']!' print 'device name is:' print self.deviceName mac2 = mac.replace(":", "") self.mac = mac2.upper() self.version = "16" #mistification #added Nodes in v5 self.finished = threading.Event() threading.Thread.start(self) #this is a required function for all drivers, its goal is to upload some piece of data #about your device so it can be seen on the web def register(self): #self.mainMistaway_hb('hb', 'On') self.sendtodb("connected", "true", 0) def stop (self): self.finished.set() self.join() def sendtodb(self, channel, value, timestamp): if int(timestamp) == 0: timestamp = self.getTime() if timestamp < 1400499858: return csplit = re.split(r"(.*?)_\[(.*?)\]", self.deviceName) nodeTypeName = csplit[1] uniqueID = csplit[2] company = "194" try: topic = 'meshify/db/%s/%s/%s/%s/%s' % (company, "_", nodeTypeName, uniqueID.lower(), channel) print topic if channel == "files": #for the file structure I had to take off the " " around the value msg = """[{"value":%s}]""" % (str(value)) else: msg = """[{"value":"%s"}]""" % (str(value)) print msg self.q.put([topic, msg, 0]) except: print "didn't work to send up MQTT data" def run(self): #on startup send the version number self.sendtodb("version", str(self.version), 0) if os.path.isfile('/root/python_firmware/drivers/device_base.py'): print "found new device_base file" os.system("/bin/mv -f /root/python_firmware/drivers/device_base.py /root/python_firmware/device_base.py") os.system("/bin/rm -f /root/python_firmware/drivers/device_base.py") os.system("/bin/rm -f /root/python_firmware/drivers/device_base.pyc") if os.path.isfile('/root/python_firmware/drivers/meshifyData.py'): print "found new meshifyData file" os.system("/bin/mv -f /root/python_firmware/drivers/meshifyData.py /root/python_firmware/meshifyData/meshifyData.py") os.system("/bin/rm -f /root/python_firmware/drivers/meshifyData.py") os.system("/bin/rm -f /root/python_firmware/drivers/meshifyData.pyc") if os.path.isfile('/root/python_firmware/drivers/main.py'): print "found new main.py file" os.system("/bin/mv -f /root/python_firmware/drivers/main.py /root/python_firmware/main.py") os.system("/bin/rm -f /root/python_firmware/drivers/main.py") os.system("/bin/rm -f /root/python_firmware/drivers/main.pyc") time.sleep(0.5) os.system('/root/reboot') while True: try: self.mainMeshify_hb('hb', 'On') self.sendtodb("connected", "true", 0) time.sleep(3600 * 4) except Exception, e: print e def mainMeshify_files(self, name, value): name = 'files' dict = {} for dirname, dirnames, filenames in os.walk(str(value)): # print path to all subdirectories first. print "##########################################" print "new directory: " + dirname print "##########################################" # print path to all filenames. tempDictParent = {} for filename in filenames: tempDict = {} filepath = os.path.join(dirname, filename) try: fileMem = os.stat(filepath).st_size fileDate = os.stat(filepath).st_mtime except: fileMem = "" fileDate = "" print filepath, fileMem, fileDate tempDict["mem"] = fileMem tempDict["date"] = fileDate tempDictParent[filename] = tempDict dict[dirname] = tempDictParent # Advanced usage: # editing the 'dirnames' list will stop os.walk() from recursing into there. if '.git' in dirnames: # don't go into any .git directories. dirnames.remove('.git') value = json.dumps(dict) self.sendtodb(name, value, 0) return True def mainMeshify_hb(self, name, value): self.sendtodb(name, value, 0) def getTime(self): return str(int(time.time() + int(self.offset)))