iPhone12 mini と HomePod mini
職場で KDDI の 5G アンテナが導入されたのもあるし、3年半での iPhone X から iPhone 12 mini への機種変 au Online Shop で発注したら、HomePod mini が並んでて、思わず一緒に購入しちゃった。
iPhone 12 への移行は、基本はすぐなんだけど、2段階認証アプリとして使っていた Saleforce のパスワードが分からない。今までは、MS365 専用で使っていた Microsoft Authenticator とペアで使っていたけど、ひとつひとつ Microsoft Authenticator に移動。仕事用のアカウント管理でも使っているので、20個ほどの移行作業で疲れた。
HomePod mini は、ひとまず設定が終わり、今まで Google Home mini でやっていたことが、スマホ無しの Siri でできるようになった。赤外線リモコンなどの制御に Raspberry-Pi と HomeBridge の操作をスマホなど関係なく使える。それに、HomePod が中継してくれるので、自宅外でも自宅内の状態もわかる。
iOS14.5で体重計が動かなくなる
iOS 14.5 で コロナによるマスクが普通になり、FaceID の対応が取れ、Apple Watch さえ持ってれば、かなり便利になった。でも、アプリがシステムのデータを触るときのルールが厳しくなったので、いろいろと影響がでてきた。
毎日使ってる、Bluetooth 連動でデータが取れる体重計も、アプリが動かなくなった。新しい別アプリが提供されていたのでそれをインストールして無事使えるようになった。ただ、ヘルスケアにデータは残っているけど、このアプリでの過去データが見れなくなった。
マスクをしてのFaceIDが不便になった対策の iOS14.5 が出たので、早々にインストール。Apple Watch と連携しての認証ですごく便利。
ただ今朝 bluetooth 連動の体重計が、システム領域へのアクセス条件が厳しくなり動かなくなった。アプリの更新もかからないので心配になったけど、別の新アプリが出てた。
homebridge-config-ui-x を入れる
Appleの家電制御のためのHomeKitと互換性のあるソフト homebridge だけど、以前より家電の赤外線リモコンで活用しているが、google home との連携もさせたくって、homebridge-gsh を入れようとしたが、nodejs のバージョンが古く、インストールに失敗していた。
Google Home Mini で家電を制御するために、iPhone に eRemote 用のアプリを入れて、制御もしているけど、テレビなどの電源ボタンがトグル動作で、ON/OFF を正しく認識しないので、操作性が悪い。homebridge では、テレビにつけた Raspberry-Pi から、cec-client を使って、電源操作や入力切替操作が行えるので、基本は homebridge ベースに切り替えたい。
インストール
今回、nodejs のリポジトリを nodejs の本家を使うように設定して、nodejs を最新の 12.x に上げる。合わせて、設定ユーザインタフェースが便利な、homebridge-config-ui-x を入れてみた。
# リポジトリを登録 $ curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - $ sudo aptitude update ; sudo aptitude safe-upgrade # Node.js のインストール $ sudo aptitude install -y nodejs $ sudo npm install -g npm # homebridge-config-ui-x のインストール $ sudo npm install -g homebridge-config-ui-x
config-ui-x を使えば、config.json の編集機能があるし、その編集も各モジュール単位で編集もできるので便利。一部のモジュールは、config.json で触る必要があって、その切り分けで手間取った。
この Web-UI では、スイッチの操作で時間のかかる処理のコマンドで、一部動きがおかしいのもあるけど、スマホ版だと問題なく動くようなので、この画面はあくまで設定用かな。
WatchOS7のx-callback-urlの検証
うーむ、WatchOS7の x-callback-url って上手く動かないのかな。
iOSであれば、ショートカット機能で x-callback-url を実行して、実行先で
header( "Location shortcuts://x-callback-url/run-shortcut?name=ショートカットの名前" ) ;
を実行すると、指定したショートカットを起動するし、
header( "Location shortcuts://x-callback-url/open" ) ;
を実行すれば、ショートカットに戻ってくれる。
かといって、「ショートカットの終了」が起動するように、別のショートカットを作っても、起動していたショートカットを終わらせることにはならないみたいだな。
でも、WatchOS7 だと、上記を実行しても、Webを開く画面を表示して何も表示されない画面のまま。いちいち「閉じる」を押さないとダメ。
ということで、Safari の URL を開く+ショートカットの終了の合わせ技にしておくのが一番無難なのか。
Watch OS 7 のWeb表示
Watch OS 7になって色々試しているけど、何気にiPhoneで起動しているショートカットをApple Watchで動かしたら、それなりに JavaScript 入っている自作ページだけど動くじゃん。
# 下に追記したけど、Webページの閲覧機能(クイックルック)をショートカットから呼出すのは避けるべきとのことであった。
家電リモコン操作が、Apple Watchで使えるぞぉ… (^_^;
コンプリケーションにショートカットを設定すれば、簡単にアプリ起動やらページ閲覧やらを起動できるので、ランチャとして使える。
問題点の追記(2020/09/30)
ショートカットを使って、LINEに固定メッセージを送る実験をしていると、メッセージが2回送られている。同じショートカットをiPhoneで動かすと1回だけ。LINEにメッセージを送るプログラム側の問題かと思ったけど、一番シンプルなページアクセスのショートカットを使ってWebサーバのログを確認したら、やっぱり2回連続してページアクセスをしている。
色々と調べていたら、「複雑なショートカットのショートカットアクションについて」を見ると、ショートカットからクイックルック機能を呼出すのは「避けるように」とのことであった。なるほど、不具合ではないのか。Web閲覧とクイックルックは別機能だな。
2回の連続アクセスだったら一方を無視させようと、flock() とかを使ってみたが、1回目のアクセスの完了を待ってから2回目のアクセスを行っているみたいで、なかなか面倒。
WatchOS7は x-callback-url が違う?
WatchOS7 が公開されて、Apple Watch単独でショートカットを実行できるということなので、自分用に動かしているショートカットを試してみた。ただ、どれも動かなかった。
職場の中で自分のサーバに http:// で動くショートカットだけど、reverse-proxy の内側なので、SSL公開鍵が使えないため、http は危ないから…ということでダメ。
自宅で動かしているショートカットは、https:// で呼び出した後、x-callback-url でショートカットに戻るようにしてあるけど x-callback の仕組みが違うのか、制御がショートカットアプリに戻ってくれない。ショートカットが終了扱いにならないので、使い辛いなぁ…
Microsoft Authenticator が Apple Watch でうまく認証ができず内部エラーが発生するけど、この辺も同じような理由なんだろうなぁ…
Apple WatchのProxyダメだな
最近、少しでもキャッシュの効果が出ることもあるかと、squid のキャッシュproxyを動かしていた。
また、自宅内アクセス時に、proxyがかかると、不都合もあったので proxy.pac の自動設定を設定したけど、その頃からApple Watchの天気のコンプリケーションが表示されなくなった。
どうもproxy.pacをうまく処理できないのか現在地情報がとれないようで、天気情報が出てこない。
ということで、iPhoneでApple Watch使うなら、proxyは使っちゃダメだな。
IFTTTのwebhooksトリガーでLINEメッセージ送信
家に帰る時に、家族のLINEに「今から帰る」とメッセージを送りたいんだけど、iOSのショートカットだと、メッセージ文面をいちいち入力する必要がある。そこで、LINEのメッセージ送信は、IFTTT に任せることにして、スマホでショートカットなり、ショートカットのオートメーションから、LINEメッセージ送信を起動したい。
また、IFTTTの JSON形式を返すWebhook trigger だと、safari が開いたままになるので、webhook trigger を起動し、x-callback-url を返す trigger ページを作ってみた。
<?php
// IFTTTのwebhookトリガを呼出す
// x-callback-url の機能で呼び出し側(shortcut)に戻る
// ifttt webhook url
$ifttt_webhook = "https://maker.ifttt.com/trigger/%s/with/key/xxxxxxxxxxxxxxxxx_xxxxxx" ;
$mykey = "yyyyyyyyyyyyyyyyyyyyyy" ;
// パラメータを読み込む
$key = isset( $_GET[ "K" ] ) ? $_GET[ "K" ] : "" ;
$command = isset( $_GET[ "C" ] ) ? $_GET[ "C" ] : "" ;
$json = file_get_contents( "php:input" ) ;
// 想定外の接続は無視
if ( $_SERVER['HTTPS'] != 'on' || $key != $mykey )
exit( 1 ) ;
// 時間によるwebhook呼出し制限の前処理
$localtime = localtime( time() , true ) ;
$l_hour = $localtime[ "tm_hour" ] ;
$l_week = $localtime[ "tm_wday" ] ;
// webhookの呼出し
function post_webhook( $trigger , $json ) {
global $ifttt_webhook ;
$url = sprintf( $ifttt_webhook , $trigger ) ;
$opts = array(
'http' => array(
'method' => 'POST' ,
'header' => 'Content-type: application/json; charset=UTF-8' ,
'content' => $json ) ) ;
$context = stream_context_create( $opts ) ;
header( "Content-Type: application/json; charset=utf-8" ) ;
// x-callback-urlで処理後はショートカットに戻す
header( "Location: shortcuts://" ) ;
// IFTTTのtriggerを呼出す
print file_get_contents( $url , false , $context ) ;
}
// GETパラメータで呼び出しするwebhookを切り替え
if ( $command == "go_home" ) {
// ショートカットからの呼出し用
// go_homeリクエストを中継
post_webhook( "go_home" , $json ) ;
} else if ( $command == "go_home_time" ) {
// オートメーションからの呼出し用
// 平日の帰宅時間のみ中継
if ( 17 <= $l_hour && $l_hour < 21
&& 1 <= $l_week && $l_week <= 5 )
post_webhook( "go_home" , $json ) ;
else
exit( 0 ) ;
} else {
exit( 1 ) ;
}
header( "Content-Type: application/json; charset=utf-8" ) ;
?>














