Пример #1
0
    def schedule_repeating_event(self, handler, when, frequency,
                                 data=None, name=None, context=None):
        """Schedule a repeating event.

        Arguments:
            handler:                method to be called
            when (datetime):        time (in system timezone) for first
                                    calling the handler, or None to
                                    initially trigger <frequency> seconds
                                    from now
            frequency (float/int):  time in seconds between calls
            data (dict, optional):  data to send when the handler is called
            name (str, optional):   reference name, must be unique
            context (dict, optional): context (dict, optional): message
                                      context to send when the handler
                                      is called
        """
        message = dig_for_message()
        context = context or message.context if message else {}
        return self.event_scheduler.schedule_repeating_event(
            handler,
            when,
            frequency,
            data,
            name,
            context=context
        )
Пример #2
0
    def speak(self, utterance, expect_response=False, wait=False, meta=None):
        """Speak a sentence.

        Arguments:
            utterance (str):        sentence mycroft should speak
            expect_response (bool): set to True if Mycroft should listen
                                    for a response immediately after
                                    speaking the utterance.
            wait (bool):            set to True to block while the text
                                    is being spoken.
            meta:                   Information of what built the sentence.
        """
        # registers the skill as being active
        meta = meta or {}
        meta['skill'] = self.name
        self.enclosure.register(self.name)
        data = {'utterance': utterance,
                'expect_response': expect_response,
                'meta': meta}
        message = dig_for_message()
        m = message.forward("speak", data) if message \
            else Message("speak", data)
        self.bus.emit(m)

        if wait:
            wait_while_speaking()
 def speak(self, utterance, *args, **kwargs):
     if self._current_iot_request:
         message = dig_for_message()
         self.bus.emit(message.forward(_BusKeys.SPEAK,
                                       data={"skill_id": self.skill_id,
                                             IOT_REQUEST_ID:
                                                 self._current_iot_request,
                                             "speak_args": args,
                                             "speak_kwargs": kwargs,
                                             "speak": utterance}))
     else:
         super().speak(utterance, *args, **kwargs)
Пример #4
0
    def converse(self, utterances, lang="en-us"):
        if self.conversing:
            message = dig_for_message()
            if message:
                message = message.reply("node_red.converse",
                                        {"utterance": utterances[0]})
            else:
                message = Message("node_red.converse",
                                  {"utterance": utterances[0]})

            if not message.context.get("platform",
                                       "").startswith("NodeRedMind"):
                self.bus.emit(message)
                return self.wait_for_node()
        return False
Пример #5
0
 def wait_for_node(self):
     start = time.time()
     self.success = False
     self.waiting_for_node = True
     while self.waiting_for_node and \
             time.time() - start < float(self.settings["timeout"]):
         time.sleep(0.1)
     if self.waiting_for_node:
         message = dig_for_message()
         if not message:
             message = Message("node_red.timeout")
         else:
             message.reply("node_red.timeout")
         self.bus.emit(message)
         self.waiting_for_node = False
     return self.success
Пример #6
0
 def wait_for_something(self):
     self.log.debug("{name}: waiting".format(name=self.skill_name))
     start = time.time()
     self.success = False
     self.waiting = True
     while self.waiting and \
             time.time() - start < float(self.settings["timeout"]):
         time.sleep(0.1)
     if self.waiting:
         message = dig_for_message()
         if not message:
             message = Message(self.namespace + ".timeout")
         else:
             message.reply(self.namespace + ".timeout")
         self.bus.emit(message)
         self.waiting = False
     self.log.debug("{name}: wait ended".format(name=self.skill_name))
     return self.success
    def _register_words(self, words: [str], word_type: str):
        """
        Emit a message to the controller skill to register vocab.

        Emits a message on the bus containing the type and
        the words. The message will be picked up by the
        controller skill, and the vocabulary will be registered
        to that skill.

        Args:
            words:
            word_type:
        """
        if words:
            message = dig_for_message()
            self.bus.emit(
                message.forward(_BusKeys.REGISTER,
                                data={
                                    "skill_id": self.skill_id,
                                    "type": word_type,
                                    "words": list(words)
                                }))
Пример #8
0
    def schedule_event(self, handler, when, data=None, name=None,
                       context=None):
        """Schedule a single-shot event.

        Arguments:
            handler:               method to be called
            when (datetime/int/float):   datetime (in system timezone) or
                                   number of seconds in the future when the
                                   handler should be called
            data (dict, optional): data to send when the handler is called
            name (str, optional):  reference name
                                   NOTE: This will not warn or replace a
                                   previously scheduled event of the same
                                   name.
            context (dict, optional): context (dict, optional): message
                                      context to send when the handler
                                      is called
        """
        message = dig_for_message()
        context = context or message.context if message else {}
        return self.event_scheduler.schedule_event(handler, when, data, name,
                                                   context=context)