示例#1
1
def wake_up(hass, now):
    """
    Turn it on in the morning (7 AM) if there are people home and
    it is not already on.
    """
    if not TARGET_ID:
        return

    if device_tracker.is_on(hass) and not core.is_on(hass, TARGET_ID):
        _LOGGER.info('People home at 7AM, turning it on')
        core.turn_on(hass, TARGET_ID)
示例#2
0
async def test_is_on(hass):
    """Test is_on method."""
    entity_id = const.ENTITY_ID_FORMAT.format('test')

    hass.states.async_set(entity_id, STATE_HOME)

    assert device_tracker.is_on(hass, entity_id)

    hass.states.async_set(entity_id, STATE_NOT_HOME)

    assert not device_tracker.is_on(hass, entity_id)
示例#3
0
    def test_is_on(self):
        """Test is_on method."""
        entity_id = device_tracker.ENTITY_ID_FORMAT.format('test')

        self.hass.states.set(entity_id, STATE_HOME)

        assert device_tracker.is_on(self.hass, entity_id)

        self.hass.states.set(entity_id, STATE_NOT_HOME)

        assert not device_tracker.is_on(self.hass, entity_id)
示例#4
0
    def test_is_on(self):
        """Test is_on method."""
        entity_id = device_tracker.ENTITY_ID_FORMAT.format('test')

        self.hass.states.set(entity_id, STATE_HOME)

        self.assertTrue(device_tracker.is_on(self.hass, entity_id))

        self.hass.states.set(entity_id, STATE_NOT_HOME)

        self.assertFalse(device_tracker.is_on(self.hass, entity_id))
示例#5
0
async def test_is_on(hass):
    """Test is_on method."""
    entity_id = f"{const.DOMAIN}.test"

    hass.states.async_set(entity_id, STATE_HOME)

    assert device_tracker.is_on(hass, entity_id)

    hass.states.async_set(entity_id, STATE_NOT_HOME)

    assert not device_tracker.is_on(hass, entity_id)
    def test_is_on(self):
        """Test is_on method."""
        entity_id = device_tracker.ENTITY_ID_FORMAT.format("test")

        self.hass.states.set(entity_id, STATE_HOME)

        self.assertTrue(device_tracker.is_on(self.hass, entity_id))

        self.hass.states.set(entity_id, STATE_NOT_HOME)

        self.assertFalse(device_tracker.is_on(self.hass, entity_id))
示例#7
0
def wake_up(hass, now):
    """
    Turn it on in the morning (7 AM) if there are people home and
    it is not already on.
    """
    if not TARGET_ID:
        return

    if device_tracker.is_on(hass) and not core.is_on(hass, TARGET_ID):
        _LOGGER.info('People home at 7AM, turning it on')
        core.turn_on(hass, TARGET_ID)
    def test_writing_known_devices_file(self):
        """ Test the device tracker class. """
        scanner = loader.get_component('device_tracker.test').get_scanner(
            None, None)

        scanner.come_home('DEV1')
        scanner.come_home('DEV2')

        self.assertTrue(
            device_tracker.setup(
                self.hass, {device_tracker.DOMAIN: {
                    CONF_PLATFORM: 'test'
                }}))

        # Ensure a new known devices file has been created.
        # Since the device_tracker uses a set internally we cannot
        # know what the order of the devices in the known devices file is.
        # To ensure all the three expected lines are there, we sort the file
        with open(self.known_dev_path) as fil:
            self.assertEqual([
                'DEV1,unknown device,0,\n', 'DEV2,dev2,0,\n',
                'device,name,track,picture\n'
            ], sorted(fil))

        # Write one where we track dev1, dev2
        with open(self.known_dev_path, 'w') as fil:
            fil.write('device,name,track,picture\n')
            fil.write('DEV1,device 1,1,http://example.com/dev1.jpg\n')
            fil.write('DEV2,device 2,1,http://example.com/dev2.jpg\n')

        scanner.leave_home('DEV1')
        scanner.come_home('DEV3')

        self.hass.services.call(device_tracker.DOMAIN,
                                device_tracker.SERVICE_DEVICE_TRACKER_RELOAD)

        self.hass.pool.block_till_done()

        dev1 = device_tracker.ENTITY_ID_FORMAT.format('device_1')
        dev2 = device_tracker.ENTITY_ID_FORMAT.format('device_2')
        dev3 = device_tracker.ENTITY_ID_FORMAT.format('DEV3')

        now = datetime.now()

        # Device scanner scans every 12 seconds. We need to sync our times to
        # be every 12 seconds or else the time_changed event will be ignored.
        nowAlmostMinimumGone = now + device_tracker.TIME_DEVICE_NOT_FOUND
        nowAlmostMinimumGone -= timedelta(seconds=12 +
                                          (nowAlmostMinimumGone.second % 12))

        nowMinimumGone = now + device_tracker.TIME_DEVICE_NOT_FOUND
        nowMinimumGone += timedelta(seconds=12 - (nowMinimumGone.second % 12))

        # Test initial is correct
        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertFalse(device_tracker.is_on(self.hass, dev1))
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        self.assertIsNone(self.hass.states.get(dev3))

        self.assertEqual(
            'http://example.com/dev1.jpg',
            self.hass.states.get(dev1).attributes.get(ATTR_ENTITY_PICTURE))
        self.assertEqual(
            'http://example.com/dev2.jpg',
            self.hass.states.get(dev2).attributes.get(ATTR_ENTITY_PICTURE))

        # Test if dev3 got added to known dev file
        with open(self.known_dev_path) as fil:
            self.assertEqual('DEV3,dev3,0,\n', list(fil)[-1])

        # Change dev3 to track
        with open(self.known_dev_path, 'w') as fil:
            fil.write("device,name,track,picture\n")
            fil.write('DEV1,Device 1,1,http://example.com/picture.jpg\n')
            fil.write('DEV2,Device 2,1,http://example.com/picture.jpg\n')
            fil.write('DEV3,DEV3,1,\n')

        scanner.come_home('DEV1')
        scanner.leave_home('DEV2')

        # reload dev file
        self.hass.services.call(device_tracker.DOMAIN,
                                device_tracker.SERVICE_DEVICE_TRACKER_RELOAD)

        self.hass.pool.block_till_done()

        # Test what happens if a device comes home and another leaves
        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        # Dev2 will still be home because of the error margin on time
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        # dev3 should be tracked now after we reload the known devices
        self.assertTrue(device_tracker.is_on(self.hass, dev3))

        self.assertIsNone(
            self.hass.states.get(dev3).attributes.get(ATTR_ENTITY_PICTURE))

        # Test if device leaves what happens, test the time span
        self.hass.bus.fire(ha.EVENT_TIME_CHANGED,
                           {ha.ATTR_NOW: nowAlmostMinimumGone})

        self.hass.pool.block_till_done()

        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        # Dev2 will still be home because of the error time
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        self.assertTrue(device_tracker.is_on(self.hass, dev3))

        # Now test if gone for longer then error margin
        self.hass.bus.fire(ha.EVENT_TIME_CHANGED,
                           {ha.ATTR_NOW: nowMinimumGone})

        self.hass.pool.block_till_done()

        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        self.assertFalse(device_tracker.is_on(self.hass, dev2))
        self.assertTrue(device_tracker.is_on(self.hass, dev3))
    def test_writing_known_devices_file(self):
        """ Test the device tracker class. """
        scanner = loader.get_component(
            'device_tracker.test').get_scanner(None, None)

        scanner.reset()

        scanner.come_home('DEV1')
        scanner.come_home('DEV2')

        self.assertTrue(device_tracker.setup(self.hass, {
            device_tracker.DOMAIN: {CONF_PLATFORM: 'test'}
        }))

        # Ensure a new known devices file has been created.
        # Since the device_tracker uses a set internally we cannot
        # know what the order of the devices in the known devices file is.
        # To ensure all the three expected lines are there, we sort the file
        with open(self.known_dev_path) as fil:
            self.assertEqual(
                ['DEV1,{},0,\n'.format(DEVICE_DEFAULT_NAME), 'DEV2,dev2,0,\n',
                 'device,name,track,picture\n'],
                sorted(fil))

        # Write one where we track dev1, dev2
        with open(self.known_dev_path, 'w') as fil:
            fil.write('device,name,track,picture\n')
            fil.write('DEV1,device 1,1,http://example.com/dev1.jpg\n')
            fil.write('DEV2,device 2,1,http://example.com/dev2.jpg\n')

        scanner.leave_home('DEV1')
        scanner.come_home('DEV3')

        self.hass.services.call(
            device_tracker.DOMAIN,
            device_tracker.SERVICE_DEVICE_TRACKER_RELOAD)

        self.hass.pool.block_till_done()

        dev1 = device_tracker.ENTITY_ID_FORMAT.format('device_1')
        dev2 = device_tracker.ENTITY_ID_FORMAT.format('device_2')
        dev3 = device_tracker.ENTITY_ID_FORMAT.format('DEV3')

        now = dt_util.utcnow()

        # Device scanner scans every 12 seconds. We need to sync our times to
        # be every 12 seconds or else the time_changed event will be ignored.
        nowAlmostMinimumGone = now + device_tracker.TIME_DEVICE_NOT_FOUND
        nowAlmostMinimumGone -= timedelta(
            seconds=12+(nowAlmostMinimumGone.second % 12))

        nowMinimumGone = now + device_tracker.TIME_DEVICE_NOT_FOUND
        nowMinimumGone += timedelta(seconds=12-(nowMinimumGone.second % 12))

        # Test initial is correct
        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertFalse(device_tracker.is_on(self.hass, dev1))
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        self.assertIsNone(self.hass.states.get(dev3))

        self.assertEqual(
            'http://example.com/dev1.jpg',
            self.hass.states.get(dev1).attributes.get(ATTR_ENTITY_PICTURE))
        self.assertEqual(
            'http://example.com/dev2.jpg',
            self.hass.states.get(dev2).attributes.get(ATTR_ENTITY_PICTURE))

        # Test if dev3 got added to known dev file
        with open(self.known_dev_path) as fil:
            self.assertEqual('DEV3,dev3,0,\n', list(fil)[-1])

        # Change dev3 to track
        with open(self.known_dev_path, 'w') as fil:
            fil.write("device,name,track,picture\n")
            fil.write('DEV1,Device 1,1,http://example.com/picture.jpg\n')
            fil.write('DEV2,Device 2,1,http://example.com/picture.jpg\n')
            fil.write('DEV3,DEV3,1,\n')

        scanner.come_home('DEV1')
        scanner.leave_home('DEV2')

        # reload dev file
        self.hass.services.call(
            device_tracker.DOMAIN,
            device_tracker.SERVICE_DEVICE_TRACKER_RELOAD)

        self.hass.pool.block_till_done()

        # Test what happens if a device comes home and another leaves
        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        # Dev2 will still be home because of the error margin on time
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        # dev3 should be tracked now after we reload the known devices
        self.assertTrue(device_tracker.is_on(self.hass, dev3))

        self.assertIsNone(
            self.hass.states.get(dev3).attributes.get(ATTR_ENTITY_PICTURE))

        # Test if device leaves what happens, test the time span
        self.hass.bus.fire(
            ha.EVENT_TIME_CHANGED, {ha.ATTR_NOW: nowAlmostMinimumGone})

        self.hass.pool.block_till_done()

        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        # Dev2 will still be home because of the error time
        self.assertTrue(device_tracker.is_on(self.hass, dev2))
        self.assertTrue(device_tracker.is_on(self.hass, dev3))

        # Now test if gone for longer then error margin
        self.hass.bus.fire(
            ha.EVENT_TIME_CHANGED, {ha.ATTR_NOW: nowMinimumGone})

        self.hass.pool.block_till_done()

        self.assertTrue(device_tracker.is_on(self.hass))
        self.assertTrue(device_tracker.is_on(self.hass, dev1))
        self.assertFalse(device_tracker.is_on(self.hass, dev2))
        self.assertTrue(device_tracker.is_on(self.hass, dev3))