手元であらゆる家電をコントロールしたい。全てはそこから始まりました。
「Stream Deck」を使えば、あらゆる機器を操作できる物理コントロールパネルを作れるんじゃないか。ふとそう考え、実際にやってみました。
最終的に、IFTTTを使わず、Alexaそのものを操作して家電制御することに成功したので、その方法をシェアしようと思います。これなら、Amazon Alexaで扱える全ての機器をStream Deckから操作できます。
定型アクションを動かすところを動画にしたので良ければご覧ください。音が出るのでご注意ください。
しかし、割とややこしいことをする必要があります。具体的にはスマートホームスキルを自作しました。
- MacOSを前提としてます。
- ターミナルを使います。
- Amazon Developerアカウントが必要です。(なければ作る必要があります)
- AWSアカウントが必要です。(なければ作る必要があります)
- 自己責任でお願いします。
コードは書きませんが扱いはします。加えて、技術的な前提知識が多少必要になります。
というわけで、申し訳ないのですが、記事通りにやっても全員が実現できるとは限りません。僕自身、この記事は一体誰に向けて書いているのか全く見えないままキーボードを叩いております。
難しくはないですが、パソコン初心者には厳しいと思います。Web系のエンジニアなら余裕です。「あ、めんどうだわ」と思ったら、読み物として楽しんでいただければ幸い。
では、たどり着いてもらえることを願って、記事の最後でお待ちしております。
Stream Deckで家電操作するメリット
まず最初に、なんでそんなことしようと思ったのか、どんなメリットがあるのかを紹介します。
僕は書斎で、エアコン、電気、空気清浄機、間接照明、写真撮影用の照明、子供部屋の見守りカメラを見る、主にこういったものをAmazon Alexaで操作しており、その呼び出し方法のベストプラクティスを模索していました。
- Zoom中に「アレクサ、○○して」とか言えるわけない。
- NFCタグはiPhoneのロック解除が必要なのが微妙。
- iPhone背面タップは割当出来る数が少ない。
- iPhoneのショートカットは作るのがめんどくさい。数が増えると呼び出しもめんどくさい。
とか、理由はいろいろあるんですが、もっとこうサクッと操作できないかなと思っていたときに出会ったのがプログラマブルな左手デバイス「Stream Deck」です。
まあ、他にも方法はあると思いますが、いいんですいいんです合理的な理由なんかどうだって。この佇まいを見たときに、「ボタン操作したいって思っちゃった」それが最大の理由です。
メリットは、一覧性が高い、物理ボタン、ワンタップ、この3つ。あらゆる機器のリモコンが一箇所にまとまり、かつ、複合操作(複数の照明を同時操作など)をボタンひとつ押すだけで可能にします。
ゴールは自作スマートホームスキル
さて、実は「Stream Deck」を使って家電を動かすことはそう難しいことではありません。
Stream Deckはシェルも動かせるし、Automatorも動きます。家電操作はhttpが叩ければいいので、IFTTTのWebhookをボタンにすれば一瞬です。
IFTTT(イフト)についての詳しい説明は割愛しますが、ノーコードで複雑な操作を組み合わせて自動化する系では、デファクトスタンダードなサービス。
とても便利なサービスですが、IFTTTを使う上で懸念となるのがこちら。
- 全てのメーカー・ブランドが対応しているわけではない
- 無料プランでは3つまでのアプレットしかつくれない
SwitchbotやNature Remo、Phiripsなどなど、多くのメーカーが対応しているものの全てとは限りません。
加えて、無料プランだと3つまでのアプレットしか作れません。例えば、電気をつける、電気をけす、これで2つのアプレットです。ひとつのアプレットがStream Deck上でひとつのボタンになるイメージです。無料だとちょっと少ないですよね。
というか、そもそも各メーカーごとではなく、メーカーをまたいで各機器のコントロールができるところを制御したほうが早くて楽じゃないですか。
それが出来るのは、そうechoデバイス。つまりAlexaです。具体的には「Alexaの定型アクション」を「Stream Deckのボタンで動かす」ことができれば話は早いわけです。
Stream DeckはPC上で動くものはボタン化できるので、アレクサの定型アクションもPCで起動できれば、アレクサで扱える機器は全てStream Deckで操作できることになります。そうすれば、IFTTTを使う必要もないということになります。
というわけで、アレクサの定型アクションに関する理解がとても重要です。もしアレクサを使っているけど定型アクションを使っていないという人はぜひ設定してみてください。
定型アクションの設定方法や使用例についてはこちらの記事が超絶わかりやすいです。
この記事を書いたKouさん(僕とは別人ですw)はスマートホームに特化したメディア「BENRI LIFE」を運営されており、より幅広いスマートホームのアイデアや製品を紹介されているのでチェックしてみてください。
アレクサの定型アクションをMacから起動する方法
さて、ここまでが前置きで、ようやく本題に入っていきます。長くてすみません。
つまり課題は「いかにしてMacからアレクサの定型アクションを起動するか」です。実現できそうな方法は2つ。
- Androidエミュレータ上でアレクサアプリを動かす
- スマートホームスキルを作る
1は明らかにだるそうですね。エミュレータをずっと起動しておくのもアレだし、Stream Deckから操作できるかも怪しい。
ということで却下。2の方法を取ります。自分用のスマートホームスキルの開発です。これが本題。
一応、コストをかけず完全無料で実現できます。※一部注意点がありますが後述します。
定型アクションの動作原理
スマートホームスキルを作ると、なぜMacからアレクサの定型アクションが起動できるかを簡単に解説すると、定型アクションは音声コマンド(アレクサ、○○して)など以外に、モーションセンサーをトリガーにできます。
人感センサーで人を感知したら定型アクションで何かを動かすという使い方は広く利用されていますよね。
で、自作スマートホームスキルのセンサーを定型アクションのトリガーにしておき、Macでプログラムから擬似的に「反応したよ」みたいな情報を送れば、定型アクションが動くようになる。というわけです。
スマートホームスキルの開発手順
ということで、今回のミッションは「スマートホームスキル」の開発ですが、実はなんとそのものズバリの情報を公開してくれているサイトがあります。探してみるもんです。
Pythonで実装しようと思っていたんですが、こちらにある情報がそのまま使えるなら車輪の再発明にならずに済みます。
そして、そのままやってみたところ完璧に動作しました。なんと素晴らしい。というわけで、遠慮なくそのまま使わせてもらいました。
なので開発というより基本はそのままトレースするだけ。最後の方でStream Deckのボタン化のため独自の工程があります。
というわけで、ここからの流れを一旦まとめます。全7ステップです。大まかにいうと3までがスマートホームスキルの開発、4以降がStream Deckでのボタン化です。
- 実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読します
- Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください
- 自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってください
- 動作テストをする
- Automatorアプリを作る
- Stream Deckでボタン化する
- ボタンを追加する
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なら残りのステップに進みます。
実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読しますAlexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってください- 動作テストをする →今ここ
- Automatorアプリを作る
- Stream Deckでボタン化する
- ボタンを追加する
では、MacのデスクトップにAlexaSkilsとでも名前をつけてフォルダを作り、その中にPHPファイルを格納しておきます。
そして、まずは1度動かして見ましょう。環境づくりは不要です。macOSにバンドルされているPHPで実行します。
macOSからPHPが除かれたためインストールが必要になりました。homebrewなどでインストールしてください。「homebrew 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のボタンにするだけ。
実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読しますAlexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってください動作テストをする- Automatorアプリを作る→今ここ
- Stream Deckでボタン化する
- ボタンを追加する
快適に実行できるようにちょっと一手間かけてボタンにします。具体的には、Automatorでシェルを実行するアプリケーションを作ります。
シェルをファイルにしてそのままStream Deckに突っ込むほうが早いですが、.commandファイルを直接動かすとStreamDeckを押すたびに一瞬ターミナルが起動するので邪魔。
Automatorからシェルを実行すればバックグラウンドで処理が完了するため、作業を邪魔されません。
Automatorでアプリケーションを選択する。
検索ボックスに「シェル」と入力すると、「シェルスクリプトを実行」がヒットします。それをダブルクリックします。
さっきと同じスクリプトを入力します。
cd ~/Desktop/AlexaSkils #作ったフォルダに移動
php trigger.php "sensor_001" #phpを実行
もしこれで動かなければphpをフルパスで指定してください。こんな感じです。
cd ~/Desktop/AlexaSkils #作ったフォルダに移動
/opt/homebrew/bin/php trigger.php "sensor_001" #phpを実行
シェルを入力したら保存して終了です。好きな名前をつけて保存してください。
最後に、作ったアプリをボタンにすれば完成。
はい、あとはボタンを押してみましょう。
定型アクションに設定した動作が実行されましたよね?おめでとうございます。そしておつかれさまです。これでStream Deckからアクレサの定型アクションを起動できるようになりました。
ここまでできた人は、どうすれば実際に家電を動かすボタンを作れるかイメージできていると思いますが、念の為、ボタンを追加するための設定方法を記載しておきます。
もうわかるからいいやという人はスキップしてもらえば。
あと、便宜上デスクトップにフォルダを置いて作業してきましたが、適宜邪魔にならないところに移動してください。(※Automatorのリンク場所が変わるので注意)
Stream Deckのボタンを追加する
一応ステップとしてはこれが最後になります。
実質有料化のIFTTT代替!自作Alexaスキルでスマートホーム機器を自在に活用しようのテキストを一読しますAlexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しようを全部やってください自作スマートホームスキルの擬似センサーでAlexaの定型アクションを起動の最後のステップの1つ前までやってください動作テストをするAutomatorアプリを作るStream Deckでボタン化する- ボタンを追加する→最後!
Stream Deckで家電を操作するためには複数のボタンが必要です。ボタンを作るにあたり、ここで一旦登場人物の関係を整理しておきます。
- STREAM DECKのボタンひとつに対し、ひとつのセンサーを設定できる。1:1の関係
- ひとつのセンサーに対し、ひとつの定型アクションを設定できる。1:1の関係
- 定型アクションには複数の機器を設定できる。1:nの関係(同時実行)
このような関係になっています。もし部屋の電気をONにするボタンを作りたいと思ったら、
- センサーを増やす(Lambda関数の編集)
- 定型アクションを増やして電気ONの設定をする(アレクサアプリ)
- ボタン化する(Automatorでボタン化)
このような流れで設定します。※各項目は該当の説明にリンクしてます。
実はひとつのStream Deckボタンに複数のセンサーを設定することも可能です。その場合、AutomatorにDelayを入れるか、シェルでSleepを入れるかして遅延実行させるといいです。
ボタン化する方法ついては上記にて説明した通りです。ここではセンサーの増やし方と定型アクションの設定だけ解説します。
センサーを増やす
センサーを増やすためにやることは2つ。
- AWS Lambdaのコードを編集する
- アレクサに認識させる
この作業はいちいちやるとめんどくさいので、ある程度一気にセンサーを作っておくと楽だと思います。
var sensors={
'sensor_001':'スイッチ01',
'sensor_002':'スイッチ02',
'sensor_003':'スイッチ03' #→追加する
};
このような感じでセンサーを心ゆくまで追加します。変えたければ名前を変えても問題ありません。
編集後は必ず「Deploy」ボタンを押してください。
アレクサアプリ上でデバイスの検出を実施して、追加したセンサーをアレクサに認識させます。アレクサアプリの「デバイス」メニューの右上、+ボタンをタップ。
下部にメニューが出現するので、「デバイスを追加」を選択。
どれをセットアップする?と聞いてくるので、一番下にある「その他」を選択。
登録したセンサーを認識させるために、下記のボタンを押します。
成功すると、追加したセンサーが表示されるようになるはずです。
定型アクションの設定
定型アクションで追加したセンサーを設定するところまで解説します。
アレクサアプリの定型アクション作成画面で「実行条件を設定」を選択。
スマートホームを選択
モーションの状態を「検出」にしたら次へ
あとは、定型アクションの名前や、センサーが反応したら実行するアクションを設定します。あとは思い思いに設定してください。
もし設定方法がわからなければ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だけでなくアイデア次第ではもっとおもしろい活用方法も考えられます。
それでは、何かの参考になれば幸いです。今日は以上です。それではまた。
コメント
コメント一覧 (5件)
ブログいつも楽しく拝見させて頂いてます。
プログラミングは全くの初心者ですがこの記事に触発されてLoupedeckを購入し、アレクサを操作できるよう頑張ってみました。macOS Montereyで記事通りにしたところPHPが動かなかったため、Homebrewからインストールして何とかターミナルからアレクサを操作するところまでは出来ました。
そこから記載通りにAutomatorでアプリにしましたが、起動するとphp: command not foundと出てエラーになります。ターミナルに入れたPHPがAutomatorに反映されていないような気がするのですが、AutomatorでPHPを実行する方法がどうしてもわかりませんでした。もしわかるようであれば教えて頂ければ幸いです。
コメントありがとうございます。記事をもとに動かすことができたとのこと、とても嬉しいです。
Automatorはパスを通してもコマンドが見つからないとエラーを返すことがあるので、
phpのパスをフルパスで書いてみてください。具体的には、
/opt/homebrew/bin/php trigger.php "sensor_001"
このような感じです。homebrewでインストールしたとのことであればこれで動くと思います。
試してみていただけますか!
教えて頂いた通りにしたところ動くようになりました!書斎制御が捗ります!
丁寧に教えて頂き、ありがとうございました。また新しい記事を楽しみにしております。
PCに詳しいわけではないのですが、本記事を読んでロマンを感じ、
stream deck を購入しました。
実際に記事通り作業を進めたところ、
「Alexaやスマートホーム機器をパソコンなどと連携させるためのスマートホームスキルを作成しよう」の「ステップ6:スマートホームスキルを有効化し」で躓きました。。。。
というのも、WEB版アレクサは機能が削減されているようで、
「スキル」の項目が無いのです。。。。
iosアプリでの認証を試して見ましたが、失敗。。。。
解決策等おわかりになられましたら、ご教授いただけますと大変、大変助かります。
ロマンを追い求めまだしばらく試行錯誤してみます。。。
STREAM DECK でAlexaの定型アクションを実行てきないものかと検索していたところ、こちらに辿り着きました。
非常に有益な情報をありがとうございます。
記事の中で「シェルをファイルにしてそのままStream Deckに突っ込むほうが早いですが、.commandファイルを直接動かすとStreamDeckを押すたびに一瞬ターミナルが起動するので邪魔。」との記載がありますがキックするスクリプト名はXXX.command ではなくXXX.sh であれば、一瞬ターミナルが起動する挙動はなくなるかと思います。