def on_message(self, client, userdata, msg): """Received message from MQTT broker.""" try: if not msg.topic.endswith("/audioFrame"): _LOGGER.debug("Received %s byte(s) on %s", len(msg.payload), msg.topic) # Check enable/disable messages if msg.topic == AsrToggleOn.topic(): json_payload = json.loads(msg.payload or "{}") if self._check_siteId(json_payload): self.enabled = True _LOGGER.debug("Enabled") elif msg.topic == AsrToggleOn.topic(): json_payload = json.loads(msg.payload or "{}") if self._check_siteId(json_payload): self.enabled = False _LOGGER.debug("Disabled") if not self.enabled: # Disabled return if AudioFrame.is_topic(msg.topic): # Check siteId if (not self.audioframe_topics) or ( msg.topic in self.audioframe_topics ): # Add to all active sessions if self.first_audio: _LOGGER.debug("Receiving audio") self.first_audio = False siteId = AudioFrame.get_siteId(msg.topic) for result in self.handle_audio_frame(msg.payload, siteId=siteId): self.publish(result) elif msg.topic == AsrStartListening.topic(): # hermes/asr/startListening json_payload = json.loads(msg.payload) if self._check_siteId(json_payload): for result in self.start_listening( AsrStartListening(**json_payload) ): self.publish(result) elif msg.topic == AsrStopListening.topic(): # hermes/asr/stopListening json_payload = json.loads(msg.payload) if self._check_siteId(json_payload): for result in self.stop_listening(AsrStopListening(**json_payload)): self.publish(result) except Exception: _LOGGER.exception("on_message")
def test_topics(self): """Check get_ methods for topics""" siteId = "testSiteId" requestId = "testRequestId" intentName = "testIntent" wakewordId = "testWakeWord" # AudioFrame self.assertTrue(AudioFrame.is_topic(AudioFrame.topic(siteId=siteId))) self.assertEqual( AudioFrame.get_siteId(AudioFrame.topic(siteId=siteId)), siteId) # AudioPlayBytes self.assertTrue( AudioPlayBytes.is_topic( AudioPlayBytes.topic(siteId=siteId, requestId=requestId))) self.assertEqual( AudioPlayBytes.get_siteId( AudioPlayBytes.topic(siteId=siteId, requestId=requestId)), siteId, ) self.assertEqual( AudioPlayBytes.get_requestId( AudioPlayBytes.topic(siteId=siteId, requestId=requestId)), requestId, ) # AudioPlayFinished self.assertTrue( AudioPlayFinished.is_topic(AudioPlayFinished.topic(siteId=siteId))) self.assertEqual( AudioPlayFinished.get_siteId( AudioPlayFinished.topic(siteId=siteId)), siteId) # NluIntent self.assertTrue( NluIntent.is_topic(NluIntent.topic(intentName=intentName))) self.assertEqual( NluIntent.get_intentName(NluIntent.topic(intentName=intentName)), intentName) # HotwordDetected self.assertTrue( HotwordDetected.is_topic( HotwordDetected.topic(wakewordId=wakewordId))) self.assertEqual( HotwordDetected.get_wakewordId( HotwordDetected.topic(wakewordId=wakewordId)), wakewordId, )
def on_message(self, client, userdata, msg): """Received message from MQTT broker.""" try: if not msg.topic.endswith("/audioFrame"): _LOGGER.debug("Received %s byte(s) on %s", len(msg.payload), msg.topic) # Check enable/disable messages if msg.topic == HotwordToggleOn.topic(): json_payload = json.loads(msg.payload or "{}") if self._check_siteId(json_payload): self.enabled = True self.first_audio = True _LOGGER.debug("Enabled") elif msg.topic == HotwordToggleOff.topic(): json_payload = json.loads(msg.payload or "{}") if self._check_siteId(json_payload): self.enabled = False _LOGGER.debug("Disabled") if not self.enabled: # Disabled return # Handle audio frames if AudioFrame.is_topic(msg.topic): if (not self.audioframe_topics) or ( msg.topic in self.audioframe_topics ): if self.first_audio: _LOGGER.debug("Receiving audio") self.first_audio = False siteId = AudioFrame.get_siteId(msg.topic) for wakewordId, result in self.handle_audio_frame( msg.payload, siteId=siteId ): if isinstance(result, HotwordDetected): # Topic contains wake word id self.publish(result, wakewordId=wakewordId) else: self.publish(result) except Exception: _LOGGER.exception("on_message")