【问题标题】:Python how to trigger an APIPython如何触发API
【发布时间】:2019-04-06 15:16:58
【问题描述】:

我在谷歌函数上有 API,上面有两个函数,比如:

当我在网络浏览器中加载它们时,每个功能都可以正常工作(添加和删除数据库上的数据)。问题是,我无法在 Raspberry Pi 3 上的 python 脚本中执行此操作。我想在开关的打开和关闭位置使用这些 URL。

RasPi 上的 Python 脚本

#buttoninput
import RPi.GPIO as GPIO
import sys
import requests

myid="dedektor001"

def button_callback(channel):
    sys.stdout.write('\033c')
    print('open')
    requests.get("https://xxx.cloudfunctions.net/iotUptext=myid,timeout=1")

def button_off(channel):
    sys.stdout.write('\033c')
    print('close');
    requests.get("https://xxx.cloudfunctions.net/iotDowntext=myid,timeout=1")


GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD);


buttonon = 10
buttonoff = 8

GPIO.setup(buttonon, GPIO.IN, pull_up_down=GPIO.PUD_DOWN);
GPIO.setup(buttonoff, GPIO.IN, pull_up_down=GPIO.PUD_DOWN);

print("ok");

GPIO.add_event_detect(buttonon,GPIO.RISING,callback=button_callback)
GPIO.add_event_detect(buttonoff, GPIO.RISING, callback=button_off);

message= input("enter to exit")        

GPIO.cleanup();

此代码在第一次切换开关时有效,但它会冻结。即使我改变开关位置也会打印“打开”。

【问题讨论】:

  • 除了字符串中的语法错误之外,还应该进行一些身份验证,不是吗。
  • 实际上它有效,我认为只是等待回复。正如我所说,第一次切换后冻结。 @克劳斯D。
  • 您是否尝试在没有任何请求的情况下打印一些消息?检查问题是否与请求(看起来不像)或逻辑(可能与仅工作一次的事件处理程序)有关?
  • 是的,它可以在没有请求的情况下正常工作@extempl
  • requests.get 调用中的那些 url 看起来不太正确,也许它们应该与您在问题顶部提供的那些匹配? (无论哪种方式,它们看起来都不是有效的 URL,因为最后的路径/查询字符串混淆了)

标签: python raspberry-pi python-requests google-cloud-functions


【解决方案1】:

与@Henry Woody 所说的相呼应,您的网址看起来格式不正确。这是您应该使用requests 执行的操作:

requests.get("https://xxx.cloudfunctions.net/iotUp", params={
    'text': myid,
    'timeout': 1,
})

您可以为您的 iotDown 函数执行类似的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2022-01-06
    • 1970-01-01
    • 2021-05-15
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多