💡
AWS LambdaからSwitchBotを操作する
新しいSwitchBotを購入したので、APIを通じてLambdaから操作できるようにしてみた。
SwitchBotアプリ
- SwitchBot本体をマイホームに登録する
-
プロフィール
>設定
のアプリバージョン
を連続タップして開発者向けオプション
を表示する - アクセストークンを取得してメモしておく(後で使う)
curlコマンドで登録してあるデバイスのID確認できる(これも後で使う)
curl -X GET -H "Authorization: {取得したアクセストークン}" https://api.switch-bot.com/v1.0/devices
Serverless Framework
環境を作成する。
今回はpythonを使う。
$ sls create --template aws-python3
環境変数を追加する。
ここでさっき取得したアクセストークンとデバイスIDを入力する。
serverless.yml
service: python-switchbot-sls
frameworkVersion: '2'
provider:
name: aws
runtime: python3.8
region: ap-northeast-1
environment:
ACCESS_TOKEN: xxxxxxxxxx
DEVICE_ID: xxxxxxxxxx
functions:
turn_on:
handler: handler.turn_on
turn_off:
handler: handler.turn_off
コードをささっと書く。
handler.py
import os
import json
import requests
ACCESS_TOKEN = os.environ.get('ACCESS_TOKEN')
DEVICE_ID = os.environ.get('DEVICE_ID')
API_BASE_URL = 'https://api.switch-bot.com'
def turn_on(event, context):
command = 'turnOn'
headers = {
'Content-Type': 'application/json; charset: utf8',
'Authorization': ACCESS_TOKEN
}
url = API_BASE_URL + '/v1.0/devices/' + DEVICE_ID + '/commands'
body = {
'command': command,
'parameter': 'default',
'commandType': 'command'
}
data = json.dumps(body)
res = requests.post(url, data=data, headers=headers)
print(res)
def turn_off(event, context):
command = 'turnOff'
headers = {
'Content-Type': 'application/json; charset: utf8',
'Authorization': ACCESS_TOKEN
}
url = API_BASE_URL + '/v1.0/devices/' + DEVICE_ID + '/commands'
body = {
'command': command,
'parameter': 'default',
'commandType': 'command'
}
data = json.dumps(body)
res = requests.post(url, data=data, headers=headers)
print(res)
外部モジュールのrequestsをローカルにインストールする
$ pip install requests -t
Lambdaにデプロイする
$ sls deploy
テストで確認
# ON
$ sls invoke -f turn_on
# OFF
$ sls invoke -f turn_off
SwitchBotが動けば成功!
Discussion