繁体   English   中英

谷歌助手输入到 Python Output

[英]Google Assistant Input to Python Output

这个问题很简单。 我想使用 Google Home 控制无人机 (Bitcraze Crazyflie)。 The Input is: "Drone fly to x3 y4", processed as usual by Firebase etc. Resulting in the Google Assistant Output: "Flying to x3 y4", but also an Ouput in eg JSON format, to navigate the drone. 因为无人机使用 Python,所以这是首选的 Output 语言。

编辑添加了更多上下文

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

        '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)

但是代码会在谷歌服务器上运行,所以本地端口监听不起作用。

谢谢你的帮助。

最好的方法是在 GCP 上安装另一台机器,而不是与您的家用 PC 通信。 从长远来看,您将学到更多知识并更轻松地构建解决方案。 由于我更熟悉 AWS 而不是 GCP,因此我无法引用您需要配置的网络/安全组件,但文档说您不必这样做。 因此,理论上,它应该只是启动另一台计算机,并在其上运行您的 Python 代码。

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

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

nc -v <destination_ip> <port>

简单的。

这应该让你到达你想去的地方。 您的 GCP 无人机 controller 和 Python 处理器机器之间的工作连接。

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

python -m http.server 8080

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

nc -v -l 8080

最后,对于一个可靠的 Python HTTP API 框架,我强烈推荐FastAPI 它允许快速编写 HTTP API 服务器,例如,您的 GCP 无人机 controller 可以调用的 POST 方法。 它具有为您的代码生成交互式OpenAPI 文档的巨大好处,例如,使用来自 Swagger 的第 3 方工具(您可以在链接的示例中看到),生成服务器/客户端/测试“样板”代码。 我是否还提到他们的文档很棒?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM