Help us understand the problem. What is going on with this article?

Amazon Dash ButtonをiTunesプレイヤーにしてみた

More than 3 years have passed since last update.

※この記事はIoTLTアドベントカレンダーの12/8分の記事です。

初めましてこんにちは。
しくみ製作所のNotchです。
今回はAmazon Dash Buttonを使ってiTunesプレイヤーにしてみました。
・・・と書くと、ボタンを改造してMP3プレイヤーでも埋め込んだのかと思われるかもしれませんが、
残念ながらただmacで音を鳴らすだけです(本当に再生・停止するだけ)
期待させてしまったらすみません(嘘はついてない・・・はず)

動機

Amazon Dash Button発売のニュースを見て、
「うわー、すげー、いいなぁ」
と思い、勢いで購入(アリエール、NESCAFE)
wkwkしながら待っていると翌日到着!
「よし、早速使ってみよう!アプリ起動して、設定して・・・。うん、簡単だな、これ。」

ポチッ(緊張の一瞬)

「おぉ、注文できた。マジパネェ、物理ボタンやべぇ!」
えっと、で、次はいつ使うんだっけ・・・?

せっかく買ったAmazon Dash Buttonですが、一度押したら満足してしまい、使い道が案外少ない・・・。
(これ、次押すのは半年後ぐらいじゃね?)
と、ふと思うと、なんだかもったいない気分になりました。

そして周りを見るとハックしている人いっぱい。やべぇ、楽しそう。
乗るしかない・・・このビッグウェーブに。

普段、音楽再生専用機と化しているmacに、一々ログインしてからiTunesを起動するのがストレスだったので(<-iPhone使えよ)、
ここはAmazon Dash Buttonをトリガーにして起動してやろうと思い、実装してみました。
(ついでにSlackにトラック名とアーティスト名を通知するようにしました。)
※ かなり初級者向けの内容ですし、二番煎じを独走中。アイデア勝負です。

動作環境

動作環境は以下のとおり

  • OS X El Capitan
  • NECの無線LAN
  • node.js v6.9.1

事前準備

node.jsのインストール

  • まずはnodeのインストールですね(もちろん既に終わってたけど一応)
  • anyenvをリンク先に書いてある通りにインストールして、 以下のコマンドをターミナルで順に叩けばOK
anyenv install ndenv
exec $SHELL -l
ndenv install v6.9.1
ndenv rehash
ndenv global 6.9.1
ndenv rehash

Amazon Dash Buttonの同期

【届いた!】「Amazonダッシュボタン」の使い方・設定方法・レビュー
こちらの記事に丁寧に書いてありました。参照しながら順に設定すればOK。
ただし気をつけて欲しいのが、

ボタンを押したら届けて欲しい商品を選択します。商品を選択したら「次へ」を押します。

このタイミングで操作をやめること。(商品を選ばない)
そうすると、設定終わってないっすよ先輩!保存できないっすよ先輩!って怒られるんですが、無視して終了。
アカウントサービス -> 端末を管理を見ると、こんな感じに警告が出てます。これで大丈夫b
amazon_dash_memo.png

実装準備

先人たちの調査により、非常に簡単でした。
Amazon Dash Buttonを(正しくない方向で)使ってみた
上記記事を参考にしながら、
dash-button
の通りに進めていくだけです。

mkdir node-button
cd node-button
npm init

を叩いてあとはEnterを連打。

npm install --save dash-button jxa slack-node

dash-buttonjxaをインストールしたら、
同フォルダのpackage.jsonの中身で"script"と書いてある箇所を探して以下のとおりに変更。

{
  "scripts": {
    "scan": "dash-button scan"
  }
}

これでAmazon Dash ButtonをPCから探せます。
以下のコマンドを打った後、事前にwifiに登録しておいたボタンを押すと、探した結果が返ってきます。

sudo npm run scan

帰ってきたMACアドレスをメモりましょう。
この辺の手順は、
Amazon Dash Buttonを(正しくない方向で)使ってみた
こちらの記事により詳細な情報がありますので、ここでは割愛。
これで全ての準備が終わりました。

実装

ほとんどdash-buttonにあるサンプルの通りです。
以下、ソースを読んでいただければ良いかと。

app.js
// dash-buttonモジュールの読み込み
const DashButton =  require('dash-button')

// 上でメモしたAmazon Dash ButtonのMACアドレスを登録
const DASH_BUTTON_MAC_ADDRESS = 'XX:XX:XX:XX:XX:XX'

// JXAモジュールの読み込み
const Application = require('jxa').Application

// iTunesアプリケーションを指定
const iTunes = Application('iTunes');

// slackモジュールの読み込み
const Slack = require('slack-node')

// slackのtokenを登録
const apiToken = "ここにslackで発行したtokenをコピーして貼り付け"

let button = new DashButton(DASH_BUTTON_MAC_ADDRESS)
let slack = new Slack(apiToken);

// 再生・停止管理
let play = true
let [name, artist, currentPlay] = ["", "", ""]

// 処理
let subscription = button.addListener(() => {
 if (play) {
   // "RWBY"プレイリストの再生
   iTunes.playlists["RWBY"].play()
   // トラック名取得
   name   = iTunes.currentTrack.name()
   // アーティスト名取得
   artist = iTunes.currentTrack.artist()
   // slack表示文言
   currentPlay = 'Now Playing: ' + name + ' by ' + artist
   console.log("==================================================")
   console.log(currentPlay)
   console.log("==================================================")
   // slack送信
   slack.api('chat.postMessage', {
     username: "Dash Button",
     text: currentPlay,
     channel:'飛ばしたいslackのチャンネル'
   }, function(err, response){
     // console.log(response);
   })
   // 停止待機
   play = false
 } else {
   // 停止
   iTunes.stop()
   console.log("==================================================")
   console.log("                      Stop!!")
   console.log("==================================================")
   // 再生待機
   play = true
 }
})

正直Slack通知部分はおまけなので、なくても普通に動きます。
以下のコマンドで実行してボタンを押すと、再生・停止を繰り返します。

sudo node src/app.js

実行結果

再生・停止についてはYoutubeに動画をあげました。

実行結果の動画はこちら

Slackにはこんな感じで飛ぶようにしています。
Slack画像.png

感想

やっぱ物理ボタンはいいですね。
いろんなところで言われているように、レイテンシは正直気になりますが、
今回のようなケースではほとんど関係ないので、用途次第だと思います。
たくさんボタンを用意して、ちょっと面倒だった作業を簡単にしてみませんか?

参考記事

先人方、大変参考にさせていただきました。ありがとうございます。

Notch44
sikmi
しくみ製作所株式会社は、世の中の「しくみ」を素敵にするためのソフトウェア開発集団です。オフィスのない弊社は、メンバー全員リモートワークです!
https://sikmi.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした