def findBridges(self): devs = [] ljsocketAddress = "localhost:6000" try: devs = LabJackPython.listAll(ljsocketAddress, 200) except: return {} for dev in devs: #print "Got dev: serial = %s, prodId = 0x%X" % (dev['serial'], dev['prodId']) if dev['prodId'] != 0x501: continue elif str(dev['serial']) in self.bridges: d = self.bridges[str(dev['serial'])] if d.numMotes() != len(d.motes): log("Number of motes changed. Placing all motes into rapid mode.") d.motes = d.listMotes() for mote in d.motes: t = PlaceMoteInRapidModeThread(mote) t.start() continue d = skymote.Bridge(LJSocket = ljsocketAddress, serial = dev['serial']) try: d.ethernetFirmwareVersion() except: d.ethernetFWVersion = "(No Ethernet)" d.nameCache = d.getName() d.readSerialNumber() d.usbFirmwareVersion() d.mainFirmwareVersion() d.productName = "SkyMote Bridge" d.meetsFirmwareRequirements = True d.spontaneousDataCache = dict() d.motes = d.listMotes() for mote in d.motes: t = PlaceMoteInRapidModeThread(mote) t.start() self.bridges["%s" % d.serialNumber] = d t = SpontaneousDataLoggingThread(d) t.start() self.loggingThreads["%s" % d.serialNumber] = t return self.bridges
def run(self): log("Trying to place mote %s into high powered mode. This might take some time." % self.mote.unitId) self.mote.nickname = MOTE_CACHE.get(str(self.mote.unitId) ,"Placeholder SkyMote Name") self.mote.startRapidMode() log("Mote %s successfully placed into high powered mode." % self.mote.unitId) self.mote.inRapidMode = True self.mote.nickname = self.mote.name MOTE_CACHE[str(self.mote.unitId)] = self.mote.nickname self.mote.mainFirmwareVersion() self.mote.devType = self.mote.readRegister(65000) if self.mote.devType == 2000: self.mote.productName = "SkyMote TLB" else: self.mote.productName = "SkyMote Unknown Type" self.mote.readSerialNumber() self.mote.checkinInterval = self.mote.readCheckinInterval()/1000
def updateBridgeSettings(self, serial, settings): b = self.getBridge(serial) if settings['name'] != b.nameCache: log("Updating name to %s from %s." % (settings['name'], b.nameCache)) b.name = settings['name'] b.nameCache = settings['name'] netpassDict = b.getNetworkPassword() if settings['enable'] != netpassDict['enabled'] or settings['password'] != netpassDict['password']: e = settings['enable'] pw = settings['password'] for m in b.listMotes(): m.setNetworkPassword(pw, enable = e) b.setNetworkPassword(pw, enable = e) return True
def run(self): log("Spontaneous Data Logger for %s started." % (self.name)) self.running = True while self.running: data = self.bridge.spontaneous().next() now = datetime.now() data['timevalue'] = floattime() m = None for mote in self.bridge.motes: if mote.unitId == data['unitId']: m = mote break if m is not None: hasLast = m.lastCommunication is not None if m.inRapidMode and hasLast and (data['timevalue'] - m.lastCommunication) > 1.5: log("Communication has slowed. Mote %s is not in rapid mode anymore." % m.unitId) m.inRapidMode = False elif hasLast and (data['timevalue'] - m.lastCommunication) < 1.5: m.inRapidMode = True m.lastCommunication = data['timevalue'] data['timestamp'] = str(now) self.bridge.spontaneousDataCache[str(data['unitId'])] = data log("Logging spontaneous data from %s." % data['unitId']) results = [ now, data['unitId'], data['Temp'], data['Light'], data['Bump'], data['RxLQI'], data['TxLQI'], data['Battery']] self.csvWriter.writerow(results) print "Spontaneous Data Logger for %s stopped." % (self.name)
def updateMoteSettings(self, serial, unitId, settings): # Update the settings on a mote. b = self.getBridge(serial) m = self.getMote(b, unitId) if m is None: return False if not m.inRapidMode: m.startRapidMode() m.inRapidMode = True print "settings =", settings if "name" in settings and settings['name'] != m.nickname: log("Updating name to %s from %s." % (settings['name'], m.nickname)) m.name = settings['name'] m.nickname = settings['name'] if "unitId" in settings and settings['unitId'] != m.unitId: log("Updating mote's Unit ID from %s to %s" % (m.unitId, settings['unitId'])) m.setUnitId(settings['unitId']) if "checkinInterval" in settings and settings['checkinInterval'] != m.checkinInterval: log("Updating mote's Check-In interval from %s to %s seconds" % (m.checkinInterval, settings['checkinInterval'])) m.setCheckinInterval(settings['checkinInterval']*1000) return True