基于Raspberry Pi2与DHT22的ThingSpeak接入IFTTT Webhook配置求助
嘿,恭喜你已经搞定了DHT22到ThingSpeak的数据上传!对接IFTTT实现通知和Hue灯闪烁其实没那么复杂,我给你一步步捋清楚,包你能搞定:
第一步:在IFTTT上搭建你的自动化流程(Applet)
- 先登录IFTTT,点击右上角的「Create」创建新Applet
- 点击「If This」,搜索并选择「Webhooks」作为触发条件
- 选择「Receive a web request」,给这个请求起个好记的名字(比如
temp_hum_alert,后面代码里要和它完全一致),然后点击「Create trigger」 - 接下来点击「Then That」,先添加第一个动作:比如要手机通知,就搜索「Notifications」,选择「Send a notification from the IFTTT app」,编辑通知内容,比如
温湿度超标啦!当前温度:{{Value1}}℃,湿度:{{Value2}}%(这里的Value1和Value2是后面我们会传给IFTTT的温湿度数据),保存这个动作 - 再点击「Add another action」,添加Philips Hue的动作:搜索「Philips Hue」,选择「Blink lights」,然后选中你要控制的灯,设置好闪烁的次数和时长,保存动作
- 最后给这个Applet起个名字,点击「Finish」就完成创建了
第二步:获取你的IFTTT Webhook密钥
- 回到IFTTT的Webhooks服务页面,点击右上角的「Documentation」
- 你会看到一个类似
https://maker.ifttt.com/trigger/{event}/with/key/{your_key}的URL,把里面的{your_key}部分复制下来,后面代码要用到这个密钥
第三步:修改Raspberry Pi上的代码,对接IFTTT
首先确保你的树莓派已经安装了必要的依赖,打开终端输入这些命令:
sudo apt-get update sudo apt-get install python3-pip pip3 install requests adafruit-circuitpython-dht sudo apt-get install libgpiod2
然后修改你原来的DHT22上传ThingSpeak的代码,加入IFTTT的触发逻辑,示例代码如下(记得替换成你自己的密钥和参数):
import time import requests import adafruit_dht from board import D4 # 假设你的DHT22接在GPIO4上,根据实际接线修改 # 初始化传感器 dht_device = adafruit_dht.DHT22(D4) # 配置参数(替换成你自己的信息) THINGSPEAK_API_KEY = "你的ThingSpeak API密钥" THINGSPEAK_URL = "https://api.thingspeak.com/update" IFTTT_KEY = "你刚才复制的IFTTT Webhook密钥" IFTTT_EVENT = "temp_hum_alert" # 和第一步里的Webhook事件名一致 # 设置触发阈值,比如温度超过30℃或者湿度超过70%就触发 TEMP_THRESHOLD = 30.0 HUMID_THRESHOLD = 70.0 def send_to_thingspeak(temp, hum): payload = { "api_key": THINGSPEAK_API_KEY, "field1": temp, "field2": hum } try: response = requests.get(THINGSPEAK_URL, params=payload) print(f"ThingSpeak上传状态:{response.status_code}") except Exception as e: print(f"上传ThingSpeak失败:{e}") def trigger_ifttt(temp, hum): ifttt_url = f"https://maker.ifttt.com/trigger/{IFTTT_EVENT}/with/key/{IFTTT_KEY}" payload = { "value1": round(temp, 1), "value2": round(hum, 1) } try: response = requests.post(ifttt_url, json=payload) print(f"IFTTT触发状态:{response.status_code}") except Exception as e: print(f"触发IFTTT失败:{e}") while True: try: temperature = dht_device.temperature humidity = dht_device.humidity if temperature is not None and humidity is not None: print(f"当前温度:{temperature:.1f}℃,湿度:{humidity:.1f}%") # 上传数据到ThingSpeak send_to_thingspeak(temperature, humidity) # 判断是否触发IFTTT动作 if temperature > TEMP_THRESHOLD or humidity > HUMID_THRESHOLD: print("温湿度超标,触发通知和灯光!") trigger_ifttt(temperature, humidity) else: print("读取传感器数据失败,重试中...") except RuntimeError as e: print(f"传感器读取错误:{e}") time.sleep(60) # 每分钟读取一次,可根据需求调整间隔时间
第四步:测试和调试
- 把代码保存为
dht22_ifttt.py,然后在终端运行:python3 dht22_ifttt.py - 可以手动模拟超标情况(比如用手捂住DHT22升温),看看手机有没有收到通知,Hue灯会不会闪烁
- 如果没触发,先排查这些点:
- IFTTT的Webhook事件名和代码里的
IFTTT_EVENT是否完全一致 - IFTTT密钥有没有输错
- 树莓派的网络连接是否正常
- DHT22的接线是否牢固
- IFTTT的Webhook事件名和代码里的
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

