Google Assistant输入到Python输出

问题描述 投票:-1回答:1

这个问题很简单。我想使用Google Home控制一架无人机(Bitcraze Crazyflie)。输入为:“无人驾驶飞机飞向x3 y4”,由Firebase像往常一样进行处理。结果是Google助手输出:“飞向x3 y4”,but也是一个输出,例如JSON格式,用于导航无人机。由于无人机可与Python一起使用,因此这是首选的输出语言。

[EDIT添加了更多上下文

当前我正在使用运行此代码的节点服务器:

        'use strict';

    // Import the Dialogflow module from the Actions on Google client library.
    const {dialogflow} = require('actions-on-google');

    // Import the firebase-functions package for deployment.
    const functions = require('firebase-functions');

    // Instantiate the Dialogflow client.
    const app = dialogflow({debug: true});

    // Handle the Dialogflow intent named 'fly'.
    // The intent collects parameters named 'xaxis, yaxis'.
    app.intent('fly', (conv, {xaxis,yaxis}) => {
        const xAxis = xaxis;
        const yAxis = yaxis;
        // Respond with the user's coordinates and end the conversation.
        conv.close('Roger that, flying to ' + xAxis + ", " + yAxis);

    });

    // Set the DialogflowApp object to handle the HTTPS POST request.
    exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);

现在,我想获取const xAxis和yAxis并在Python程序中使用它们。我尝试使用

process.stdout.write(xAxis + yAxis);

在Python中听类似的内容

out = sensor.stdout.read(1)

但是该代码将在Google服务器上运行,因此本地端口侦听不起作用。

感谢您的帮助。

javascript python node.js google-assistant-sdk
1个回答
0
投票

[最佳方法是在GCP上安装另一台计算机,而不是与家用PC通信。从长远来看,您将了解更多信息,并拥有更轻松的时间来构建解决方案。由于我对AWS而非GCP更加熟悉,因此我无法引用您需要配置的网络/安全组件,但是docs表示您不必这样做。因此,从理论上讲,它应该只是在运行您的Python代码的情况下旋转另一台计算机。

要决定与家用PC通话时,您需要转发路由器上的端口。当前,它充当LAN设备的防火墙,并且不允许外部计算机initiating连接到您的内部地址。例如您的GCP机器initiating与家用PC的连接。默认情况下,允许使用另一种方法。如果您考虑一下,您的路由器具有一个WAN IP地址,但是您的LAN可以具有多个设备(多个LAN IP)。如果您的GCP机器通过端口8080连接到路由器的WAN IP,应该将其连接到哪个LAN IP?您必须帮助路由器并明确告诉它。

一旦有了网络解决方案,就可以使用netcat(nc / ncat,取决于Linux发行版)调试连接本身(服务器可以与客户端通信)。 Netcat是一种多功能的联网工具,您可以使用它纯粹打开连接(在将程序添加到调试堆栈之前),并确保解决方案的联网部分按预期工作。

nc -v <destination_ip> <port>

简单。

这应该使您到达想要的位置。 GCP无人机控制器和Python处理器机器之间的有效连接。

Bonus-如果您想要一种快速的方法来让您的计算机(PC或其他)在端口上侦听,可以将Python的内置HTTP文件服务器模块与]一起使用

python -m http.server 8080

这将从您运行此命令的目录中提供文件。因此,如果您对世界开放,请记住这一点。或者,使用netcat一个简单的“回显服务器”。

nc -v -l 8080

最后,对于可靠的Python HTTP API框架,我强烈建议FastAPI。它允许使用GCP无人机控制器可以调用的POST方法快速编写HTTP API服务器。它具有为代码生成interactive OpenAPI文档example和使用Swagger的第三方工具(您可以在示例中看到)生成服务器/客户端/测试“锅炉”的巨大好处。板”代码。我是否也提到他们的docs很棒?

© www.soinside.com 2019 - 2024. All rights reserved.