簡體   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