Create a new alarm subscription.

        :param on_data: Function that gets called with  :class:`.AlarmEvent`
                        updates.
        :param float timeout: The amount of seconds to wait for the request
                              to complete.

        :return: A Future that can be used to manage the background websocket
                 subscription.
        :rtype: .AlarmSubscription

def create_alarm_subscription(self,
                                  on_data=None,
                                  timeout=60):
        """
        Create a new alarm subscription.

        :param on_data: Function that gets called with  :class:`.AlarmEvent`
                        updates.
        :param float timeout: The amount of seconds to wait for the request
                              to complete.

        :return: A Future that can be used to manage the background websocket
                 subscription.
        :rtype: .AlarmSubscription
        """
        manager = WebSocketSubscriptionManager(self._client, resource='alarms')

        # Represent subscription as a future
        subscription = AlarmSubscription(manager)

        wrapped_callback = functools.partial(
            _wrap_callback_parse_alarm_data, subscription, on_data)

        manager.open(wrapped_callback, instance=self._instance,
                     processor=self._processor)

        # Wait until a reply or exception is received
        subscription.reply(timeout=timeout)

        return subscription