数年前に作った「うんこなう」というIoTデバイス??の代わりに、Amazon Dash Buttonを使ってみました。
当時作ったものはこんな感じ↓
dashボタンのセットアップ
こちらの投稿を参考にさせてもらいました。
Amazon Dash ButtonをただのIoTボタンとして使う
上記投稿の「ボタンセットアップ」までを行います。
Twitter APIのセットアップ
Twitterで新規アプリケーションを登録する
「うんこなう」する(つぶやく)アカウントでTwitterにログインした状態で、以下のURLにアクセスします。
https://apps.twitter.com/
「Create New App」から新しいアプリケーションを作成します。
APIキーを取得
ダッシュボードのアプリケーションの一覧から今回作成したアプリケーションをクリック
「Keys and Access Tokens」から「Create my access token」というボタンをクリック
表示された以下の値をメモ
- consumer key
- consumer secret
- access token
- access token secret
プロジェクトのセットアップとnode.jsモジュールをインストール
プロジェクトの作成
$ mkdir dash-unko-now
$ cd dash-unko-now
$ npm init --yes
必要なモジュールをnpmからインストールします。
Amazon Dash Button
今回は、dash-buttonを使用します。
ドキュメントを参考にDash ButtonのMACアドレスを取得しておきます。
$ npm install --save dash-button
twitter apiを叩くのに使います。
$ npm install --save twitter
日付
日付、時刻をいい感じに表示させるのに使います。
$ npm install --save date-utils
実装
といっても、dash-buttonというモジュールがDash Buttonを簡単に扱えるようにしてくれているので、コードはこれだけ。
ボタン押下イベントを受け、TwitterモジュールからTwitter APIにツイートをポストします。
{
"twitter_credentials": {
"consumer_key": "1234567890abcdefghABCDEFG",
"consumer_secret": "1234567890abcdefghijkABCDEFGHIJKxxxxxxxxxXXXXXXXXX",
"access_token_key": "123456789099999999-1234567890abcdefghijkABCDEFGHIJ",
"access_token_secret": "1234567890abcdefghijkABCDEFGHIJKxxxxxxxxxXXXX"
},
"mac_address": "Dash ButtonのMACアドレス"
}
'use strict';
require("date-utils");
const DashButton = require("dash-button");
const Twitter = require("twitter");
const config = require("./config.json");
// twitter client
var client = new Twitter({
consumer_key: config.twitter_credentials.consumer_key,
consumer_secret: config.twitter_credentials.consumer_secret,
access_token_key: config.twitter_credentials.access_token_key,
access_token_secret: config.twitter_credentials.access_token_secret
});
// button constructor
let button = new DashButton(config.mac_address);
console.log("Stand by...");
// button push listener
button.addListener(() => {
var dt = new Date();
var outputDate = dt.toFormat("YYYY/MM/DD HH24:MI:SS");
var tweet = "うんこなう。\n" + "[" + outputDate + "にうんこをしました。" + "]";
client.post('statuses/update', {status:tweet}, function(error, tweet, response) {
if(error) throw error;
console.log(response);
});
});
うんこしてみる
用を足した際にDash Buttonを押下します。
作る前からわかっていたことだけど、ボタン押下をイベントにTwitterに定型文をポストするだけです...
3年前に同様のことを実現しようとしたら、AruduinoやらRaspberryPiやらを使わなければでしたが、
500円のデバイスで同様のことが実現できてしまうのは驚きです。