How2TerminalSiri

HomebridgeとMQTTを使う

ターミナルのコマンドラインやプログラムの中からHomeKitのスマート家電、IoTデバイスをコントロールするには、

などの方法がありました。以下をご覧ください。

ショートカット.appを使う

macOS 12.0 Montereyになって、ショートカット.appがmacOSにも移植されました。

shortcuts.jpg

ショートカットからホーム.appが管理するHomeKitをコントロールできます。 またショートカットはAppleScriptに対応してます。 なので、HomeKitデバイスをAppleScriptからアクセスできます。

Terminal --(AppleScript)--> Shortcuts.app ----> Home.app

ホーム.app自体はAppleScriptに対応していませんが、Shortcuts.appを経由することで AppleScriptでアクセスできるようになりました。

クイックアクションを作る

ショートカットの中で、いろいろなタイプのショートカットが作れるようですが、ここでは「クイックアクション」というのを作ります。 クイックアクションは、サービスメニュー(メニューバーのアプリ名の中にあるメニュー項目)に設定したり、 キーボードショートカットを設定する機能です。 いずれも不要なので設定していませんが、クイックアクションとしての設定はしてあります。 クイックアクションとして設定すると、起動時のパラメタを受け取れるようです。

shortcut_script.jpg

作ったショートカットの中身を上に示します。 変数設定文、if文、Home.appアクセスのブロックなどは、右のタブやメニューを駆使して探してください。 こういうタイプのビジュアルプログラミングは見た目以上に面倒ですね。

「IKEAのあかり」を設定

という行の部分は、右ペーンから「App」「ホーム」「"xxx"をコントロール」(xxxは部屋の名前)を選んで、そのブロックをドラッグ&ドロップして持ってきて、設定します。 ここでは「IKEAのあかり」という名前をつけた、IKEAの無線制御可能なLED電球を点灯するよう設定してあります。

https://www.ikea.com/jp/ja/p/tradfri-led-bulb-e26-806-lumen-wireless-dimmable-warm-white-globe-opal-white-10410068/

ここでは、呼び出された時に得られたテキストの入力をcommandという名前の変数に入れて、 その内容に従ってif文で分岐して、異なるHomeKitデバイスをon/offしてます。

shortcutsコマンドから使う(おすすめ)

macOS Montereyからコマンドラインから使えるshortcutsコマンドが追加されました。 この次に説明するAppleScriptを使うより新しい方法なので、おすすめです。

shortcutsコマンドは、-hでヘルプが出ます。

% shortcuts -h
OVERVIEW: Command-line utility for running shortcuts.

USAGE: shortcuts <subcommand>

OPTIONS:
  -h, --help              Show help information.

SUBCOMMANDS:
  run                     Run a shortcut.
  list                    List your shortcuts.
  view                    View a shortcut in Shortcuts.
  sign                    Sign a shortcut file.

  See 'shortcuts help <subcommand>' for detailed help.

AppleScriptから使う

上で作ったHomeKitShortcutを、AppleScriptから使うこともできます。 でもshortcutsコマンドから使う方が簡単な気がします。そちらがおすすめです。

ターミナルから、

osascript -e 'tell application "Shortcuts" to run shortcut "HomeKitShortcut" with input "IKEA_LED_ON"'

とすれば、呼び出せて、最初のif文が働いて、明かりが点灯するはずです。

command用のテキストを引数にするスクリプトファイルを以下のように用意して

#!/usr/bin/osascript

on run argv

    tell application "Shortcuts"
        run shortcut "HomeKitShortcut" with input (item 1 of argv)
    end tell

end run

これを例えば、hkcommand.osascriptという名前のファイルで保存して、実行可能に設定すれば、以下のようなコマンドでon/offできます。

% ./hkcommand.osascript IKEA_LED_ON
% ./hkcommand.osascript IKEA_LED_OFF
% ./hkcommand.osascript HEATER_ON
% ./hkcommand.osascript HEATER_OFF

ちなみに、現在では実行後に missing value という警告メッセージが出ますが、無視しても問題ないようです。これは、accepts inputというプロパティの問い合わせに対して出るようで、現行のバグではないかと思ってます。この先のmacOSのアップデートで治ると期待してます。


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS