LoginSignup
3
3

More than 3 years have passed since last update.

ESP32 - MicroPythonにて、IFTTT-Webhooksにトリガーを投げる

Last updated at Posted at 2020-02-11

はじめに

ESP32 - MicroPythonを使い、IFTTT-Webhooksへのリクエスト方法について記載します。

※IFTTTの紹介や設定手順は割愛します。

開発環境

以下が確認した環境となります。

  • ホストPC
    • windows10 64bit Home
    • VSCode - 1.41.1
      • Pymakr 1.1.5
    • NodeJS - 12.14.1 LTS
  • ターゲット
    • MicroPython v1.12 on 2019-12-20; ESP32 module with ESP32

機材

項目 型名 備考
ESP32-WROOM-32 開発ボード [NodeMCU-32S ESP32-WROOM-32]

コード

動作確認したコードは以下となります。

ファイル名:sample_ifttt.py

import urequests as requests
import time

SSID = "xxxxxxxxx"  # アクセスポイントのSSID
PASSWORD = "xxxxxxxxx" # アクセスポイントのパスワード
MY_KEY = "xxxxxxxxx" #IFTTT - webhooks - tokenを指定
EVENT_ID = "xxxxxxxxx" # 登録したwebhooksのイベント名を指定

def do_connect():

    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(SSID, PASSWORD)
        while not wlan.isconnected():
            pass
            time.sleep(1)
    print('network config:', wlan.ifconfig())



# IFTTT_Webhook
def ifttt_webhook(eventid):

    # valueに載せる情報
    payload = "value1="
    payload += "dummy1"
    payload += "&value2="
    payload += "dummy2"
    payload += "&value3="
    payload += "dummy3"

    url = "http://maker.ifttt.com/trigger/" + eventid + "/with/key/" + MY_KEY

    response = requests.post(url, headers={"Content-Type": "application/x-www-form-urlencoded"}, data=payload)
    # value指定が不要な場合は↓でok
    # response = requests.post(url)

    response.close()

# wifiへの接続
do_connect()

# ifttt-webhooksへのトリガー
ifttt_webhook(EVENT_ID)

実行方法

>>> import sample_ifttt

→コードで指定したイベントがよばれること確認

メモ

valueの指定について

ここが一番はまりました。

以前、Python3.7でIFTTTへのリクエストを行うコードを以下のように書きました。。

import requests

def ifttt_webhook(eventid, values):
    payload = {"value1": "",
                "value2": "",
                "value3": "" }
    payload["value1"] = values[0]
    payload["value2"] = values[1]
    payload["value3"] = values[2]

    url = "https://maker.ifttt.com/trigger/" + eventid + "/with/key/" + my_key
    print(url)
    response = requests.post(url, data=payload)

これをMicroPythonでそのまま記載すると、エラーにはなりませんが、valueが適用されません。

urequestsのコードを確認したところ、jsonで指定しないとダメなのかなという感じでした。

そこで、json指定したのですが、urequestsの中で、ヘッダが固定文字で渡されており、
"Content-Type: application/x-www-form-urlencoded"
がのらないことが分かりました。

というわけで、headersとdataをそれぞれ指定して、
valueに適用させしました。

参考にさせていただいたサイト

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3