2022年12月22日 星期四

使用IFTTT觸發服務以Email傳送天氣資料

本實作將利用ESP8266建立無線網路連線取得 openweathermap 氣象網站的資料,並將相關的項資料透過 IFTTT 服務平台將天氣資料透過 EMail 寄送給特定對象。


撰寫實驗程式如下:
from urlencode import urlencode
import network
import urequests, ujson

#網路天氣URI參數設定與組合
API_key = ""
area = "Taipei,TW"
url  = "https://api.openweathermap.org/data/2.5/weather?"
url += "q=" + area   # 城市與國別
url += "&units=metric&lang=zh_tw"   # 溫度單位、語言
url += "&appid=" + API_key

#指定IFTTT服務金鑰
#IFTTT_KEY = ""

#設定網路連線帳號密碼
SSID = ""        # WiFi名稱
PASSWORD = ""    # WiFi密碼

#自訂無線基地台連線函式
def connect_wifi(ssid, passwd):
    sta = network.WLAN(network.STA_IF)
    sta.active(True)
    if not sta.isconnected():
       print("連線中... \n")
       sta.connect(ssid, passwd)
       while not sta.isconnected():
          pass
    print("連線成功... \n")
#進行網路連線
connect_wifi(SSID, PASSWORD)

#嘗試取回天氣資料並加以解析
try:
    response = urequests.get(url)
    data = ujson.loads(response.text) #轉換JSON格式資料成Python字典物件
except:
    data = None

#串接IFTTT服務的網址資訊
if not data:
    print("沒有查詢到天氣資料")
else:
    print("天氣資料接收成功")
    main = data["main"]
    temp = main["temp"]
    params = { "value1": "溫度 " + str(temp), "value2": "濕度 " + str(main["humidity"]) }
    WEBHOOK_URL="https://maker.ifttt.com/trigger/EmailTest/with/key/" + IFTTT_KEY
    WEBHOOK_URL+="/?" + urlencode(params)
    
#使用urequests.get()方法觸發IFTTT服務送出取得的天氣資訊
WEBHOOK = urequests.get(WEBHOOK_URL)
if WEBHOOK is not None and WEBHOOK.status_code == 200:
    print("天氣資料Email傳送成功!!")
else:
    print("天氣資料Email傳送失敗!!")
程式在Thonny執行畫面如下:

當上列程式碼順利執行後,取得的天氣資料就會藉由 IFTTT 服務平台寄出信件,收到類似下圖的天氣資料信件。