STREAM DECKでAlexaの定型アクションを起動!IFTTTを使わずスマートコントロールパネルを作る方法【Mac向け】

URLをコピーする
URLをコピーしました!

手元であらゆる家電をコントロールしたい。全てはそこから始まりました。

Stream Deck」を使えば、あらゆる機器を操作できる物理コントロールパネルを作れるんじゃないか。ふとそう考え、実際にやってみました。

最終的に、IFTTTを使わず、Alexaそのものを操作して家電制御することに成功したので、その方法をシェアしようと思います。これなら、Amazon Alexaで扱える全ての機器をStream Deckから操作できます。

定型アクションを動かすところを動画にしました。音が出るのでご注意ください。

しかし、割とややこしいことをする必要があります。具体的にはスマートホームスキルを自作しました。

この記事の前提
  • MacOSを前提としてます。
  • ターミナルを使います。
  • Amazon Developerアカウントが必要です。(なければ作る必要があります)
  • AWSアカウントが必要です。(なければ作る必要があります)
  • 自己責任でお願いします。

拝借するためコードは書きませんが、扱いはします。加えて、技術的な前提知識が多少必要になります。

というわけで、申し訳ないのですが、記事通りにやっても全員が実現できるとは限りません。僕自身、この記事は一体誰に向けて書いているのか全く見えないままキーボードを叩いております。

難しくはないですが、パソコン初心者には厳しいと思います。Web系のエンジニアなら余裕です。「あ、めんどうだわ」と思ったら、読み物として楽しんでいただければ幸い。

では、たどり着いてもらえることを願って、記事の最後でお待ちしております。

目次

Stream Deckで家電操作するメリット

まず最初に、なんでそんなことしようと思ったのか、どんなメリットがあるのかを紹介します。

僕は書斎で、エアコン、電気、空気清浄機、間接照明、写真撮影用の照明、子供部屋の見守りカメラを見る、主にこういったものをAmazon Alexaで操作しており、その呼び出し方法のベストプラクティスを模索していました。

  • Zoom中に「アレクサ、○○して」とか言えるわけない。
  • NFCタグはiPhoneのロック解除が必要なのが微妙
  • iPhone背面タップは割当出来る数が少ない
  • iPhoneのショートカットは作るのがめんどくさい。数が増えると呼び出しもめんどくさい。

とか、理由はいろいろあるんですが、もっとこうサクッと操作できないかなと思っていたときに出会ったのがプログラマブルな左手デバイス「Stream Deck」です。

Stream Deck

まあ、他にも方法はあると思いますが、いいんですいいんです合理的な理由なんかどうだって。この佇まいを見たときに、「ボタン操作したいって思っちゃった」それが最大の理由です。

メリットは、一覧性が高い、物理ボタン、ワンタップ、この3つ。あらゆる機器のリモコンが一箇所にまとまり、かつ、複合操作(複数の照明を同時操作など)をボタンひとつ押すだけで可能にします。

ゴールは自作スマートホームスキル

さて、実は「Stream Deck」を使って家電を動かすことはそう難しいことではありません。

Stream Deckはシェルも動かせるし、Automatorも動きます。つまり、動作原理としてはPCの世界で実行できることはだいたいボタン化できるものと考えてよさそうです。

ショートカットなどのアクセス方法がないソフトウェアの操作は無理かな?すみませんよくわかってません。

とにかく、家電操作はhttpが叩ければいいので、IFTTTのWebhookをボタンにすれば一瞬です。

IFTTT(イフト)についての詳しい説明は割愛しますが、ノーコードで複雑な操作を組み合わせて自動化する系では、デファクトスタンダードなサービス。

とても便利なサービスですが、IFTTTを使う上で懸念となるのがこちら。

  1. 全てのメーカー・ブランドが対応しているわけではない
  2. 無料プランでは3つまでのアプレットしかつくれない

SwitchbotやNature Remo、Phiripsなどなど、多くのメーカーが対応しているものの全てとは限りません。

加えて、無料プランだと3つまでのアプレットしか作れません。例えば、電気をつける、電気をけす、これで2つのアプレットです。ひとつのアプレットがStream Deck上でひとつのボタンになるイメージです。無料だとちょっと少ないですよね。

シーンで操作をまとめたとしても3つじゃ少ないと思います。

というか、そもそも各メーカーごとではなく、メーカーをまたいで各機器のコントロールができるところを制御したほうが早くて楽じゃないですか。

それが出来るのは、そうechoデバイス。つまりAlexaです。具体的にはAlexaの定型アクション」Stream Deckのボタンで動かす」ことができれば話は早いわけです。

Stream Deckでアレクサの定型アクションを起動する
これが理想

Stream DeckはPC上で動くものはボタン化できるので、アレクサの定型アクションもPCで起動できれば、アレクサで扱える機器は全てStream Deckで操作できることになります。そうすれば、IFTTTを使う必要もないというわけです。

アレクサの定型アクションをMacから起動する方法

さて、ここまでが前置きで、ようやく本題に入っていきます。長くてすみません。

つまり課題は「いかにしてMacからアレクサの定型アクションを起動するか」です。実現できそうな方法は2つ。

  1. Androidエミュレータ上でアレクサアプリを動かす
  2. スマートホームスキルを作る

他にもあると思うので、いい方法があったら教えて下さい。

1は明らかにだるそうですね。エミュレータをずっと起動しておくのもアレだし、Stream Deckから操作できるかも怪しい。

ということで却下。2の方法を取ります。自分用のスマートホームスキルの開発です。これが本題。

一応、コストをかけず完全無料で実現できます。※一部注意点がありますが後述します。

定型アクションの動作原理

スマートホームスキルを作ると、なぜMacからアレクサの定型アクションが起動できるかを簡単に解説すると、定型アクションは音声コマンド(アレクサ、○○して)など以外に、モーションセンサーをトリガーにできます。

人感センサーで人を感知したら定型アクションで何かを動かすという使い方は広く利用されていますよね。

で、自作スマートホームスキルのセンサーを定型アクションのトリガーにしておき、Macでプログラムから擬似的に反応したよ」みたいな情報を送れば、定型アクションが動くようになる。というわけです。

Macからセンサー信号を送っちゃう

スマートホームスキルの開発手順

ということで、今回のミッションは「スマートホームスキル」の開発ですが、実はなんとそのものズバリの情報を公開してくれているサイトがあります。探してみるもんです。

Pythonで実装しようと思っていたんですが、こちらにある情報がそのまま使えるなら車輪の再発明にならずに済みます。

そして、そのままやってみたところ完璧に動作しました。なんと素晴らしい。というわけで、遠慮なくそのまま使わせてもらいました。

なので開発というより、基本はそのままトレースするだけです。最後の方でStream Deckのボタン化のため独自の工程があります。

というわけで、ここからの流れを一旦まとめます。全7ステップです。大まかにいうと3までがスマートホームスキルの開発、4以降がStream Deckでのボタン化です。

Stream Deckボタンを作るステップ
  1. 実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読します
  2. Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください
  3. 自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってくださ
  4. 動作テストをする
  5. Automatorアプリを作る
  6. Stream Deckでボタン化する
  7. ボタンを追加する

3の最後でPHPを実行していますが、それは不要です。なので3の最後のひとつ前までいけばスキル開発は終了。

全体の所要時間は数十分〜1時間くらいでしょうか。各アカウントをすでに持っていて、AWSの扱いに慣れていれば15分くらいで終わると思います。

2が最もつらいと思います。Lambdaあたりで何もかも投げ出して夕日に向かって走り出しなくなるかもしれませんが、グッと堪えてください。

各ステップの中で引っかかりそうな注意点を記載しておきます。

作るもの

作るものは「スマートホームスキル」です。「カスタムスキル」ではありません。似て非なるものなので注意してください。

Amazon開発者アカウントの登録

2の中でAmazon開発者アカウントを作ります。注意点もあるので作り方はここを見るとわかりやすいです。

スキルの作成

2のスキル作成画面で情報を入力しますが、スキル名には使ってはいけないワードがあります。ここの中ほどに書いてあります。

LWAの規約同意URL

LWA(Login With Amazon)の規約同意URLはexampleで大丈夫なのかわかりませんが、「https://example.com」を設定してます。

というわけで、ここからは3まで終わった前提で進みます。

いよいよStream Deckで動かす

ここまでで、スキルの開発も終わり、下記2つの状態を満たしているはずです。

  • センサー検出状態にした定型アクションを作成済み(アクションは何か適当に設定しておく)
  • ローカルにPHPファイルがある

ここまでOKなら残りのステップに進みます。

Stream Deckボタンを作るステップ
  1. 実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読します
  2. Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください
  3. 自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってくださ
  4. 動作テストをする →今ここ
  5. Automatorアプリを作る
  6. Stream Deckでボタン化する
  7. ボタンを追加する

では、MacのデスクトップにAlexaSkilsとでも名前をつけてフォルダを作り、その中にPHPファイルを格納しておきます。

そして、まずは1度動かして見ましょう。環境づくりは不要です。MacOSにバンドルされているPHPで実行します。

ターミナルを起動してトリガーとなるPHPファイルを実行します。ファイル名は自分のものに合わせてください。

ターミナルは「/アプリケーション/ユーティリティ」フォルダにあります。

cd ~/Desktop/AlexaSkils #作ったフォルダに移動
php trigger.php "sensor_001" #phpを実行!動け動け動け動け動け動いてよッ!

なお、ファイル名に続く「“sensor_001”」という引数はセンサー名です。Lambdaに登録したコードの上部でセンサー名を知ることができます。

	var sensors={
		'sensor_001':'スイッチ01',
		'sensor_002':'スイッチ02',
	};

という箇所があったはずです。変えてなければこの「sensor_001」がセンサー名。

どうでしょう、動きましたか?動かなければもう一度よく手順を確認してみてください。

ちなみに、PHPプログラムを実行すると同じフォルダにtxtファイルが作成されます。これはトークンと言ってアレクサとやりとりするために必要な合言葉みたいなものです。

合言葉は60分で期限切れになりますが、更新はPHPプログラムがやってくれます。そのため、PHPファイルとtxtファイルはセットでなければ動作しないので注意してください。

Automatorアプリを作ってStream Deckボタンにする

正常に実行できたらあとはStream Deckのボタンにするだけ。

Stream Deckボタンを作るステップ
  1. 実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読します
  2. Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください
  3. 自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってくださ
  4. 動作テストをする
  5. Automatorアプリを作る→今ここ
  6. Stream Deckでボタン化する
  7. ボタンを追加する

快適に実行できるようにちょっと一手間かけてボタンにします。具体的には、Automatorでシェルを実行するアプリケーションを作ります。

シェルをファイルにしてそのままStream Deckに突っ込むほうが早いですが、.commandファイルを直接動かすとStreamDeckを押すたびに一瞬ターミナルが起動するので邪魔。

Automatorからシェルを実行すればバックグラウンドで処理が完了するため、作業を邪魔されません。

AutomatorはMacにデフォルトで入ってます。アプリケーションフォルダにあります。

STEP
Automatorで新規アプリケーションを作る

Automatorでアプリケーションを選択する。

STEP
シェルスクリプトを実行できるようにする

検索ボックスに「シェル」と入力すると、「シェルスクリプトを実行」がヒットします。それをダブルクリックします。

STEP
シェルスクリプトの入力

 さっきと同じスクリプトを入力します。

cd ~/Desktop/AlexaSkils #作ったフォルダに移動
php trigger.php "sensor_001" #phpを実行
STEP
保存する

シェルを入力したら保存して終了です。好きな名前をつけて保存してください。

STEP
Stream Deckのボタンにする

最後に、作ったアプリをボタンにすれば完成。

はい、あとはボタンを押してみましょう。

定型アクションに設定した動作が実行されましたよね?おめでとうございます。そしておつかれさまです。これでStream Deckからアクレサの定型アクションを起動できるようになりました。

ここまでできた人は、どうすれば実際に家電を動かすボタンを作れるかイメージできていると思いますが、念の為、ボタンを追加するための設定方法を記載しておきます。

もうわかるからいいやという人はスキップしてもらえば。

あと、便宜上デスクトップにフォルダを置いて作業してきましたが、適宜邪魔にならないところに移動してください。(※Automatorのリンク場所が変わるので注意)

Stream Deckのボタンを追加する

一応ステップとしてはこれが最後になります。

Stream Deckボタンを作るステップ
  1. 実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読します
  2. Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください
  3. 自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってください
  4. 動作テストをする
  5. Automatorアプリを作る
  6. Stream Deckでボタン化する
  7. ボタンを追加する→最後!

Stream Deckで家電を操作するためには複数のボタンが必要です。ボタンを作るにあたり、ここで一旦登場人物の関係を整理しておきます。

Stream Deckでボタン化するために登場する人物図
関係者たち
  • STREAM DECKのボタンひとつに対し、ひとつのセンサーを設定できる。1:1の関係
  • ひとつのセンサーに対し、ひとつの定型アクションを設定できる。1:1の関係
  • 定型アクションには複数の機器を設定できる。1:nの関係(同時実行)

このような関係になっています。もし部屋の電気をONにするボタンを作りたいと思ったら、

  1. センサーを増やす(Lambda関数の編集)
  2. 定型アクションを増やして電気ONの設定をする(アレクサアプリ)
  3. ボタン化する(Automatorでボタン化)

このような流れで設定します。※各項目は該当の説明にリンクしてます。

実はひとつのStream Deckボタンに複数のセンサーを設定することも可能です。その場合、AutomatorにDelayを入れるか、シェルでSleepを入れるかして遅延実行させるといいです。

ボタン化する方法ついては上記にて説明した通りです。ここではセンサーの増やし方と定型アクションの設定だけ解説します。

センサーを増やす

センサーを増やすためにやることは2つ。

  1. AWS Lambdaのコードを編集する
  2. アレクサに認識させる

この作業はいちいちやるとめんどくさいので、ある程度一気にセンサーを作っておくと楽だと思います。

STEP
Lambda関数にセンサーを追加する
	var sensors={
		'sensor_001':'スイッチ01',
		'sensor_002':'スイッチ02',
		'sensor_003':'スイッチ03' #→追加する
	};

このような感じでセンサーを心ゆくまで追加します。変えたければ名前を変えても問題ありません。

編集後は必ず「Deploy」ボタンを押してください。

STEP
アレクサのデバイスを追加(アレクサに認識させる)

アレクサアプリ上でデバイスの検出を実施して、追加したセンサーをアレクサに認識させます。アレクサアプリの「デバイス」メニューの右上、+ボタンをタップ。

STEP
デバイスを追加を選択

下部にメニューが出現するので、「デバイスを追加」を選択。

STEP
その他を選ぶ

どれをセットアップする?と聞いてくるので、一番下にある「その他」を選択。

STEP
デバイスを検出する

成功すると、追加したセンサーが表示されるようになるはずです。

定型アクションの設定

定型アクションで追加したセンサーを設定するところまで解説します。

STEP
定型アクション作成画面で実行条件を設定

アレクサアプリの定型アクション作成画面で「実行条件を設定」を選択。

STEP
実行条件にスマートホームを選択

スマートホームを選択

STEP
好きなセンサーを選択

作ったセンサー一覧が並ぶと思うので、設定したいセンサーを選択。

名前がわかりづらければLambda関数を編集して再検出すれば変更できます。

STEP
モーションの状態を検出に

モーションの状態を「検出」にしたら次へ

STEP
名前やアクションを追加

あとは、定型アクションの名前や、センサーが反応したら実行するアクションを設定します。あとは思い思いに設定してください。

もし設定方法がわからなければAmazon公式の解説ページをどうぞ。

説明は以上です。

今回の内容における注意点

最後に、今回の内容における主な注意点を記載します。

ファイルの扱いは慎重に

PHPファイルがローカルにあると思います。そのファイルの取り扱いは慎重に。

具体的には、AlexaクライアントID、Alexaクライアントシークレットの情報は絶対に人に教えないこと。Lambda関数にも同じものを書いているはずなのでそれも同様に注意。

Lambdaは無料枠を使用している

今回の実装は全て無料ですが、本来、AWS Lambdaはリクエストの回数、実行時間によって料金がかかります。

しかし、毎月の無料利用枠というものがあり、今回のコードを個人的に使う上では十分すぎるほどのバッファがあります。

重要なのは、あくまでも個人レベルで使うならということです。大量のリクエストを発生させるようなことをすると無料枠を使い切って課金される可能性もあるため注意が必要です。

ミスってStream Deckのボタンを高橋名人並みの速度で24時間押し続けるみたいな実装をしちゃうと、とんでもないことになるので十分注意してください。

回数だけでいうと100万リクエストまで無料なので、まあ個人宅で家電を操作しているくらいでは心配ないと思います。

PHPはいつかそのままでは動かなくなります

Stream Deckのボタンを押すとPHPが実行されているわけですが、MacOSにバンドルされたPHPを使っています。

しかし、PHPは将来的にMacOSから取り除かれる予定です。まだしばらくは大丈夫ですが、そのうちMacOSのアップデートによって動かなくなる可能性があります。

PHP is not recommended – upgrade to php 8

その場合、MacにPHP環境を作ることで解決します。ググればたくさん出てきます。

Stream Deckでアレクサの定型アクションを起動する方法まとめ

ここまでたどり着いた方、大変お疲れさまでした。

すぐに出来た人もいれば時間がかかった人もいると思います。いずれにしろ、かけた時間に対して満足なリターンが得られたと感じてもらえているといいのですが。

ちなみに、プログラムから定型アクションを起動できる手段を得たことになるので、Stream Deckだけでなくアイデア次第ではもっとおもしろい活用方法も考えられます。

それでは、何かの参考になれば幸いです。今日は以上です。それではまた。

この記事が気に入ったら
いいね または フォローしてね!

参考になったらシェアを!
URLをコピーする
URLをコピーしました!

コメント

コメントする

目次
閉じる