コード例 #1
0
ファイル: __main__.py プロジェクト: bunny987/ona
    def on_message_from_mycroft(self, message=None):
        # forward internal messages to clients if they are the target
        if isinstance(message, dict):
            message = json.dumps(message)
        if isinstance(message, str):
            message = Message.deserialize(message)

        LOG.debug("Missatge de mycroft rebut: {0}".format(message.serialize()))

        message.context = message.context or {}
        if message.msg_type == "speak":
            payload = {
                "msg_type": "speak",
                "utterance": message.data["utterance"]
            }
        elif message.msg_type == "ona:recognized":
            payload = {
                "msg_type": "recognized",
                "utterance": message.data["utterance"]
            }
        elif message.msg_type == "ona:hotword_start":
            payload = {
                "msg_type": "waiting_for_hotword",
            }
        elif message.msg_type == "ona:hotword_detected":
            payload = {
                "msg_type": "listening",
            }
        elif message.msg_type == "play:status":
            payload = {"msg_type": "play", "data": message.data}
        elif message.msg_type == "mycroft.stop":
            payload = {"msg_type": "stop"}
        else:
            return

        peers = message.context.get("destination") or []
        if not isinstance(peers, list):
            peers = [peers]
        for peer in peers:
            if peer and peer in self.clients:
                client = self.clients[peer].get("instance")
                if payload["msg_type"] == "speak":
                    tts_engine = self.clients[peer].get("tts_engine")
                    tts_voice = self.clients[peer].get("tts_voice")
                    self.audio_source_queue.put(
                        (payload, client, tts_engine, tts_voice))
                else:
                    self.interface.send(payload, client)
コード例 #2
0
    def handle_outgoing_mycroft(self, message=None):
        if isinstance(message, dict):
            message = json.dumps(message)
        if isinstance(message, str):
            message = Message.deserialize(message)
        if message.msg_type == "complete_intent_failure":
            message.msg_type = "hive.complete_intent_failure"

        message.context = message.context or {}
        peer = message.context.get("destination")

        # if msg_type namespace is node_red
        # if message is for a node red connection, forward
        if message.msg_type.startswith("node_red."):
            self.nodered_send(message)
        elif peer and peer in self.clients:
            self.nodered_send(message)
        return