예제 #1
0
 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()
예제 #2
0
 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()
예제 #3
0
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
예제 #4
0
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