def __init__(self, address='localhost:4304', desiredFeatures=None): # TODO: trap and report errors on connect. print("Connecting to " + address) self._root = Connection(address) print("Connected") self._desiredFeatures = desiredFeatures self._address = address self._connected = False self._firstCycle = True self._sensors = dict() self._updateSensors()
class OneWireNeo: # TODO: this is hard to test - pass in (optional) Connection to support mock def __init__(self, address='localhost:4304', desiredFeatures=None): # TODO: trap and report errors on connect. print("Connecting to " + address) self._root = Connection(address) print("Connected") self._desiredFeatures = desiredFeatures self._address = address self._connected = False self._firstCycle = True self._sensors = dict() self._updateSensors() desiredFeatures = property(lambda self: self._desiredFeatures) address = property(lambda self: self._address) sensors = property(lambda self: tuple(self._sensors.values())) def refresh(self): self._updateSensors() def _updateSensors(self): #TODO: add timer & stats for min, max, last read time try: print('Refreshing sensors') knownSensors = set(self._sensors) for foundSensor in self._root.iter_sensors(): self._connected = True spath = foundSensor.path if self._sensors.has_key(spath): print('Found existing sensor at path %s' % spath) knownSensors.remove(spath) self._sensors[spath]._status = SENSOR_STATUS.Available self._sensors[spath].update(foundSensor) else: if isDesiredSensor(spath, self._desiredFeatures): sensor = OneWireNeoSensor(foundSensor, self._desiredFeatures) self._sensors[spath] = sensor # anything left in knownSensors? if len(knownSensors) > 0: print("Some sensors seem to have gone missing!" ) # TODO: callback here(?) for sensor in knownSensors: sensor._status = SENSOR_STATUS.Missing finally: if self._firstCycle: print(str(self)) self._firstCycle = False def __str__(self): retval = '\nOneWireNeo: Server' if self._connected: retval += str("Connected to [%s], %d Registered Sensors\n%s" % (self._address, len(self._sensors), ('-' * 80))) keyList = sorted(self._sensors.keys()) for key in keyList: sensor = self._sensors[key] desc = str('%-35s' % (getSensorDescription(sensor.id))) if len(desc) > 35: desc = desc[:35] retval += str("\n%s\t%s\t%s\t%s" % (sensor.id, desc, sensor.status, sensor.lastRead.strftime('%m/%d/%y %H:%M:%S'))) for propkey in sorted(sensor._properties.keys()): prop = sensor._properties[propkey] if prop is not None: propval = prop.getFormattedValue() statbump = ' ' if prop.status is None else STATUS_BUMPS[ prop.status] retval += str("\n%s%-22s%16s [%s] %s" % ((' ' * 16), prop.name, propval, statbump, prop.kind)) else: retval += ' Not connected.' retval += '\n' return retval
class OneWireNeo: # TODO: this is hard to test - pass in (optional) Connection to support mock def __init__(self, address='localhost:4304', desiredFeatures=None): # TODO: trap and report errors on connect. print("Connecting to " + address) self._root = Connection(address) print("Connected") self._desiredFeatures = desiredFeatures self._address = address self._connected = False self._firstCycle = True self._sensors = dict() self._updateSensors() desiredFeatures = property(lambda self: self._desiredFeatures) address = property(lambda self: self._address) sensors = property(lambda self: tuple(self._sensors.values())) def refresh(self): self._updateSensors() def _updateSensors(self): #TODO: add timer & stats for min, max, last read time try: print('Refreshing sensors') knownSensors = set(self._sensors) for foundSensor in self._root.iter_sensors(): self._connected = True spath = foundSensor.path if self._sensors.has_key(spath): print('Found existing sensor at path %s' % spath) knownSensors.remove(spath) self._sensors[spath]._status = SENSOR_STATUS.Available self._sensors[spath].update(foundSensor) else: if isDesiredSensor(spath, self._desiredFeatures): sensor = OneWireNeoSensor(foundSensor, self._desiredFeatures) self._sensors[spath] = sensor # anything left in knownSensors? if len(knownSensors) > 0: print("Some sensors seem to have gone missing!") # TODO: callback here(?) for sensor in knownSensors: sensor._status = SENSOR_STATUS.Missing finally: if self._firstCycle: print(str(self)) self._firstCycle = False def __str__(self): retval = '\nOneWireNeo: Server' if self._connected: retval += str("Connected to [%s], %d Registered Sensors\n%s" % (self._address, len(self._sensors), ('-' * 80))) keyList = sorted(self._sensors.keys()) for key in keyList: sensor = self._sensors[key] desc = str('%-35s' % (getSensorDescription(sensor.id))) if len(desc) > 35: desc = desc[:35] retval += str("\n%s\t%s\t%s\t%s" % (sensor.id, desc, sensor.status, sensor.lastRead.strftime('%m/%d/%y %H:%M:%S'))) for propkey in sorted(sensor._properties.keys()): prop = sensor._properties[propkey] if prop is not None: propval = prop.getFormattedValue() statbump = ' ' if prop.status is None else STATUS_BUMPS[prop.status] retval += str("\n%s%-22s%16s [%s] %s" % ((' ' * 16), prop.name, propval, statbump, prop.kind)) else: retval += ' Not connected.' retval += '\n' return retval