6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SORACOM Dash Button を作った話

Last updated at Posted at 2016-12-11

この記事は、SORACOM Advent Calendar 2016の 12/11 分の記事です。

前書き

我が家にも Amazon Dash Button がやってきました。
すでにハックされている人がたくさんいらっしゃるのですが、この記事もその n 番煎じです。
また、本来用途外の使用方法を推奨するものではありません。もし試される場合には、自己責任でお願いします。

発端

12/11に開催された BIG Raspberry JAM Tokyo 2016 にブース出店するため Amazon Dash Button をラズパイにつなげて遊んでいたのですが、その事をFBに投稿したら、押したらSIMが届くボタンが欲しいという方がいたので、作ってみました。

FB

デモ動画

動作してる様子

構成

SORACOM Dash Button Architecture

フロントエンド

Raspberry Pi 上では、Dasherが動いており、ボタンが押されたことを ARP で認識すると、Beam の HTTP endpoint を叩きます。

dasher/config/config.json
{"buttons":[
  {
    "name": "SORACOM Dash Button",
    "address": "xx:xx:xx:xx:xx:xx",
    "interface": "wlan0",
    "url": "http://beam.soracom.io:8888/order",
    "method": "POST",
    "json": true,
    "body": {"orderItemList":[{"productCode":"4573326590020","quantity":1}],"shippingAddressId":"xxxxxxxxxxxxxxxxxxxxxxxxxx"}
  }
]}

この例では "SORACOM Air SIMカード サイズ:ナノ(データ通信/SMS) 1枚" が発注されます。productCodeや、送付先のアドレスIDは、APIドキュメントページなどで事前にしらべておきましょう。

バックエンド

バックエンド側は Beam -> API Gateway -> Lambda の王道パターンです。デプロイなどが楽になるので、Chalice を使っています。

app.py
from chalice import Chalice
from soracom.client import *

app = Chalice(app_name='soracom-dash-button')

@app.route('/')
def index():
    return {'status':'ok'}

@app.route('/order', methods=['POST'], api_key_required=True)
def order():
    print app.current_request.json_body
    client = SoracomClient()
    client.auth()
    res = client.post("/orders", payload=app.current_request.json_body)
    order_id = res['orderId']
    return client.put("/orders/"+order_id+"/confirm")

重要なのは、SORACOMの認証情報の渡し方ですが、拙作の soracom client がアクセスキーにまだ対応していないので(これは近日中に対応したいなぁ...)、Lambda の環境変数に SORACOM_EMAIL / SORACOM_PASSWORD を設定しておく必要があります。また、APIキーも作成しておきましょう。

Beam 設定

Beamの設定は、API Gateway の FQDN や APIキーを設定するくらいで完了です。
Beam設定

おわりに

Chalice、Ruby の Sinatra っぽい感じで簡単にバックエンドのコードが書けるので、気に入りました。SORACOM Beam の裏で使うのにちょうどいいですね。
ちなみに今回使ったボタンは、洗剤のボタンなので、在庫が切れる前に元の設定に戻す予定です。

次の記事は、tatsuyukiさんの「SORACOMで早口言葉練習(音声認識)」です!

6
2
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
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?