Esempio n. 1
0
    def set_mode(self, mode):
        """Set Abode alarm mode."""
        if not mode:
            raise AbodeException(ERROR.MISSING_ALARM_MODE)
        elif mode.lower() not in CONST.ALL_MODES:
            raise AbodeException(ERROR.INVALID_ALARM_MODE, CONST.ALL_MODES)

        mode = mode.lower()

        response = self._abode.send_request(
            "put", CONST.get_panel_mode_url(self._area, mode))

        _LOGGER.debug("Set Alarm Home Response: %s", response.text)

        response_object = json.loads(response.text)

        if response_object['area'] != self._area:
            raise AbodeException(ERROR.SET_MODE_AREA)

        if response_object['mode'] != mode:
            raise AbodeException(ERROR.SET_MODE_MODE)

        self._json_state['mode'][(self.device_id)] = response_object['mode']

        _LOGGER.info("Set alarm %s mode to: %s", self._device_id,
                     response_object['mode'])

        return True
Esempio n. 2
0
    def tests_alarm_device_mode_changes(self, m):
        """Test that the abode alarm can change/report modes."""
        # Set up URL's
        m.post(CONST.LOGIN_URL, text=LOGIN.post_response_ok())
        m.get(CONST.OAUTH_TOKEN_URL, text=OAUTH_CLAIMS.get_response_ok())
        m.post(CONST.LOGOUT_URL, text=LOGOUT.post_response_ok())
        m.get(CONST.PANEL_URL,
              text=PANEL.get_response_ok(mode=CONST.MODE_STANDBY))
        m.get(CONST.DEVICES_URL, text=DEVICES.EMPTY_DEVICE_RESPONSE)

        # Logout to reset everything
        self.abode.logout()

        # Assert that after login we have our alarm device with standby mode
        alarm = self.abode.get_alarm()

        self.assertIsNotNone(alarm)
        self.assertEqual(alarm.status, CONST.MODE_STANDBY)

        # Set mode URLs
        m.put(CONST.get_panel_mode_url('1', CONST.MODE_STANDBY),
              text=PANEL.put_response_ok(mode=CONST.MODE_STANDBY))
        m.put(CONST.get_panel_mode_url('1', CONST.MODE_AWAY),
              text=PANEL.put_response_ok(mode=CONST.MODE_AWAY))
        m.put(CONST.get_panel_mode_url('1', CONST.MODE_HOME),
              text=PANEL.put_response_ok(mode=CONST.MODE_HOME))

        # Set and test text based mode changes
        self.assertTrue(alarm.set_mode(CONST.MODE_HOME))
        self.assertEqual(alarm.mode, CONST.MODE_HOME)
        self.assertFalse(alarm.is_standby)
        self.assertTrue(alarm.is_home)
        self.assertFalse(alarm.is_away)

        self.assertTrue(alarm.set_mode(CONST.MODE_AWAY))
        self.assertEqual(alarm.mode, CONST.MODE_AWAY)
        self.assertFalse(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertTrue(alarm.is_away)

        self.assertTrue(alarm.set_mode(CONST.MODE_STANDBY))
        self.assertEqual(alarm.mode, CONST.MODE_STANDBY)
        self.assertTrue(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertFalse(alarm.is_away)

        # Set and test direct mode changes
        self.assertTrue(alarm.set_home())
        self.assertEqual(alarm.mode, CONST.MODE_HOME)
        self.assertFalse(alarm.is_standby)
        self.assertTrue(alarm.is_home)
        self.assertFalse(alarm.is_away)

        self.assertTrue(alarm.set_away())
        self.assertEqual(alarm.mode, CONST.MODE_AWAY)
        self.assertFalse(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertTrue(alarm.is_away)

        self.assertTrue(alarm.set_standby())
        self.assertEqual(alarm.mode, CONST.MODE_STANDBY)
        self.assertTrue(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertFalse(alarm.is_away)

        # Set and test default mode changes
        self.assertTrue(alarm.switch_off())
        self.assertEqual(alarm.mode, CONST.MODE_STANDBY)
        self.assertTrue(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertFalse(alarm.is_away)

        self.abode.set_default_mode(CONST.MODE_HOME)
        self.assertTrue(alarm.switch_on())
        self.assertEqual(alarm.mode, CONST.MODE_HOME)
        self.assertFalse(alarm.is_standby)
        self.assertTrue(alarm.is_home)
        self.assertFalse(alarm.is_away)

        self.assertTrue(alarm.switch_off())
        self.assertEqual(alarm.mode, CONST.MODE_STANDBY)
        self.assertTrue(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertFalse(alarm.is_away)

        self.abode.set_default_mode(CONST.MODE_AWAY)
        self.assertTrue(alarm.switch_on())
        self.assertEqual(alarm.mode, CONST.MODE_AWAY)
        self.assertFalse(alarm.is_standby)
        self.assertFalse(alarm.is_home)
        self.assertTrue(alarm.is_away)

        # Test that no mode throws exception
        with self.assertRaises(abodepy.AbodeException):
            alarm.set_mode(mode=None)

        # Test that an invalid mode throws exception
        with self.assertRaises(abodepy.AbodeException):
            alarm.set_mode('chestnuts')

        # Test that an invalid mode change response throws exception
        m.put(CONST.get_panel_mode_url('1', CONST.MODE_HOME),
              text=PANEL.put_response_ok(mode=CONST.MODE_AWAY))

        with self.assertRaises(abodepy.AbodeException):
            alarm.set_mode(CONST.MODE_HOME)

        # Test that an invalid area in mode change response throws exception
        m.put(CONST.get_panel_mode_url('1', CONST.MODE_HOME),
              text=PANEL.put_response_ok(area='2', mode=CONST.MODE_HOME))

        with self.assertRaises(abodepy.AbodeException):
            alarm.set_mode(CONST.MODE_HOME)