Exemple #1
0
    def _normalizeNeighbors(self, zone):
        '''
        If a zone has the same neighbor with more than one OPEN_SPACE type,
        remove the generic one NeighborType.OPEN_SPACE

        :rtype: Zone new object
        '''
        zoneIdToType = {}
        for neighbor in zone.getNeighbors():
            zoneId = neighbor.getZoneId()
            if zoneId in zoneIdToType:
                types = zoneIdToType[zoneId]
            else:
                types = []
                zoneIdToType[zoneId] = types

            types.append(neighbor.getType())

        for types in zoneIdToType.values():
            if NeighborType.OPEN_SPACE_MASTER in types \
                or NeighborType.OPEN_SPACE_SLAVE in types:
                if NeighborType.OPEN_SPACE in types:
                    types.remove(NeighborType.OPEN_SPACE)

        zone = Zone(zone.getName(), zone.getDevices(), zone.getLevel(), [], {},
                    zone.isExternal(), zone.getDisplayIcon(),
                    zone.getDisplayOrder())
        for zoneId in zoneIdToType.keys():
            for type in zoneIdToType[zoneId]:
                zone = zone.addNeighbor(Neighbor(zoneId, type))

        return zone
Exemple #2
0
 def testZoneCtor_validParams_gettersReturnValidValues(self):
     zoneName = 'bed room'
     zone = Zone(zoneName, [self.light], Level.SECOND_FLOOR)
     self.assertEqual(zoneName, zone.getName())
     self.assertEqual(Level.SECOND_FLOOR, zone.getLevel())
     self.assertEqual(
         str(Level.SECOND_FLOOR) + '_' + zoneName, zone.getId())
     self.assertEqual(1, len(zone.getDevices()))
Exemple #3
0
    def testRemoveDevice_validDevice_deviceRemoved(self):
        zone = Zone('ff', [self.light])
        self.assertEqual(1, len(zone.getDevices()))

        zone = zone.removeDevice(self.light)
        self.assertEqual(0, len(zone.getDevices()))
Exemple #4
0
 def testAddDevice_validDevice_deviceAdded(self):
     zone = Zone('ff').addDevice(self.light)
     self.assertEqual(1, len(zone.getDevices()))
Exemple #5
0
    def parse(self, items, itemRegistry, zoneManager):
        '''
        :param scope.items items:
        :param scope.itemRegistry itemRegistry:
        :rtype: list(Zone)
        '''
        zoneMap = {}  # map from string zoneId to Zone

        # Each item is a list of 3 items: zone id, zone id, neighbor type.
        neighbors = []

        # pre-add all zone items
        for itemName in items.keys():
            match = re.search(ZONE_NAME_PATTERN, itemName)
            if not match:
                continue

            zoneName = match.group(1)
            (zone, localNeighbors) = self._createZone(itemName, zoneName)

            zoneMap[zone.getId()] = zone
            for n in localNeighbors:
                neighbors.append(n)

        # now add the items
        for itemName in items.keys():
            match = re.search(ITEM_NAME_PATTERN, itemName)
            if not match:
                continue

            levelString = match.group(1)
            location = match.group(2)
            deviceName = match.group(3)

            zoneId = self._getZoneIdFromItemName(itemName)
            if zoneId in zoneMap:
                zone = zoneMap[zoneId]
            else:
                zone = Zone(location, [], self._getZoneLevel(levelString))

            openHabItem = itemRegistry.getItem(itemName)

            device = self._createCamera(deviceName, openHabItem, zone) \
                or self._createDoor(deviceName, openHabItem) \
                or self._createNetworkPresence(deviceName, openHabItem) \
                or self._createSwitches(
                        deviceName, openHabItem, zone, itemRegistry, neighbors) \
                or self._createPlugs(deviceName, openHabItem, itemRegistry) \
                or self._createAlarmPartition(
                    deviceName, openHabItem, itemRegistry) \
                or self._createChromeCasts(deviceName, openHabItem) \
                or self._createHumiditySensors(deviceName, openHabItem) \
                or self._createTemperatureSensors(deviceName, openHabItem) \
                or self._createCo2Sensors(deviceName, openHabItem, itemRegistry) \
                or self._createNaturalGasSensors(
                        deviceName, openHabItem, itemRegistry) \
                or self._createSmokeSensors(
                        deviceName, openHabItem, itemRegistry) \
                or self._createTv(
                        deviceName, openHabItem, itemRegistry)

            if None != device:
                device = device.setZoneManager(zoneManager)
                zone = self._addDeviceToZone(device, zone)

            if len(zone.getDevices()) > 0:
                zoneMap[zoneId] = zone

            # end looping items

        astroSensor = AstroSensor(itemRegistry.getItem(TIME_OF_DAY_ITEM_NAME))
        astroSensor = astroSensor.setZoneManager(zoneManager)
        for z in zoneMap.values():
            if len(z.getDevicesByType(Light)) > 0 or \
                    len(z.getDevicesByType(Dimmer)) > 0:
                z = z.addDevice(astroSensor)
                zoneMap[z.getId()] = z

        for neighborInfo in neighbors:
            zone = zoneMap[neighborInfo[0]]
            zone = zone.addNeighbor(Neighbor(neighborInfo[1], neighborInfo[2]))
            zoneMap[neighborInfo[0]] = zone

        return [self._normalizeNeighbors(z) for z in zoneMap.values()]