forked from platypush/platypush
Added support (not working yet) for custom Google device actions and events
This commit is contained in:
parent
008fce70fa
commit
ca030b06e0
2 changed files with 37 additions and 10 deletions
|
@ -0,0 +1,22 @@
|
||||||
|
from platypush.message.event import Event
|
||||||
|
|
||||||
|
class GoogleDeviceEvent(Event):
|
||||||
|
"""
|
||||||
|
Base class for Google device events, see `managing traits and handlers <https://developers.google.com/assistant/sdk/guides/service/python/extend/add-trait-and-handler>`_.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, device_id, device_model_id=None, *args, **kwargs):
|
||||||
|
super().__init__(*args, device_id=device_id, device_model_id=device_model_id, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class GoogleDeviceOnOffEvent(GoogleDeviceEvent):
|
||||||
|
"""
|
||||||
|
Event triggered when a device receives an on/off command
|
||||||
|
"""
|
||||||
|
|
||||||
|
def __init__(self, on, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
self.on = on
|
||||||
|
|
||||||
|
|
||||||
|
# vim:sw=4:ts=4:et:
|
|
@ -13,6 +13,8 @@ from platypush.message.event.assistant import ConversationStartEvent, \
|
||||||
ConversationEndEvent, SpeechRecognizedEvent, VolumeChangedEvent, \
|
ConversationEndEvent, SpeechRecognizedEvent, VolumeChangedEvent, \
|
||||||
ResponseEvent
|
ResponseEvent
|
||||||
|
|
||||||
|
from platypush.message.event.google import GoogleDeviceOnOffEvent
|
||||||
|
|
||||||
from platypush.plugins import action
|
from platypush.plugins import action
|
||||||
from platypush.plugins.assistant import AssistantPlugin
|
from platypush.plugins.assistant import AssistantPlugin
|
||||||
from platypush.plugins.assistant.google.lib import SampleAssistant
|
from platypush.plugins.assistant.google.lib import SampleAssistant
|
||||||
|
@ -44,6 +46,7 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
audio_block_size = audio_helpers.DEFAULT_AUDIO_DEVICE_BLOCK_SIZE
|
audio_block_size = audio_helpers.DEFAULT_AUDIO_DEVICE_BLOCK_SIZE
|
||||||
audio_flush_size = audio_helpers.DEFAULT_AUDIO_DEVICE_FLUSH_SIZE
|
audio_flush_size = audio_helpers.DEFAULT_AUDIO_DEVICE_FLUSH_SIZE
|
||||||
grpc_deadline = 60 * 3 + 5
|
grpc_deadline = 60 * 3 + 5
|
||||||
|
device_handler = None
|
||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
credentials_file=os.path.join(
|
credentials_file=os.path.join(
|
||||||
|
@ -100,7 +103,6 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
|
|
||||||
self.grpc_channel = None
|
self.grpc_channel = None
|
||||||
self.conversation_stream = None
|
self.conversation_stream = None
|
||||||
self.device_handler = None
|
|
||||||
|
|
||||||
def _init_assistant(self):
|
def _init_assistant(self):
|
||||||
from google.auth.transport.grpc import secure_authorized_channel
|
from google.auth.transport.grpc import secure_authorized_channel
|
||||||
|
@ -138,7 +140,7 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
sample_width=self.audio_sample_width,
|
sample_width=self.audio_sample_width,
|
||||||
)
|
)
|
||||||
|
|
||||||
self.device_handler = device_helpers.DeviceRequestHandler(self.device_id)
|
self._install_device_handlers()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def on_conversation_start():
|
def on_conversation_start():
|
||||||
|
@ -184,13 +186,6 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
|
|
||||||
return handler
|
return handler
|
||||||
|
|
||||||
def on_device_action(self):
|
|
||||||
""" Device action handler """
|
|
||||||
def handler(request):
|
|
||||||
self.logger.info('Received request: {}'.format(request))
|
|
||||||
|
|
||||||
return handler
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
def start_conversation(self, *args, language=None, **kwargs):
|
def start_conversation(self, *args, language=None, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
@ -230,7 +225,7 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
display=None,
|
display=None,
|
||||||
channel=self.grpc_channel,
|
channel=self.grpc_channel,
|
||||||
deadline_sec=self.grpc_deadline,
|
deadline_sec=self.grpc_deadline,
|
||||||
device_handler=self.on_device_action(),
|
device_handler=self.device_handler,
|
||||||
on_conversation_start=self.on_conversation_start(),
|
on_conversation_start=self.on_conversation_start(),
|
||||||
on_conversation_end=self.on_conversation_end(),
|
on_conversation_end=self.on_conversation_end(),
|
||||||
on_volume_changed=self.on_volume_changed(),
|
on_volume_changed=self.on_volume_changed(),
|
||||||
|
@ -260,5 +255,15 @@ class AssistantGooglePushtotalkPlugin(AssistantPlugin):
|
||||||
|
|
||||||
get_bus().post(ConversationEndEvent())
|
get_bus().post(ConversationEndEvent())
|
||||||
|
|
||||||
|
def _install_device_handlers(self):
|
||||||
|
self.device_handler = device_helpers.DeviceRequestHandler(self.device_id)
|
||||||
|
|
||||||
|
@self.device_handler.command('action.devices.commands.OnOff')
|
||||||
|
def handler(on):
|
||||||
|
get_bus().post(GoogleDeviceOnOffEvent(
|
||||||
|
device_id=self.device_id,
|
||||||
|
device_model_id=self.device_model_id,
|
||||||
|
on=on))
|
||||||
|
|
||||||
|
|
||||||
# vim:sw=4:ts=4:et:
|
# vim:sw=4:ts=4:et:
|
||||||
|
|
Loading…
Reference in a new issue