位置情報関連機能調査(オートメーション用位置情報の取得方法など)

下記の記事で、Grok Botのアシスタントに、最近、Grok Botに、「Location」という機能が追加されたことを伝えたところ、その機能も含めて、これまで検討していた位置情報の活用方法と比べてみようと提案を受けていた。本記事は、その目的で調査を行った記録である。

調査要領は、まず、Grok BotのLocation機能ついて調査した後、iPhoneのショートカットの位置情報取得機能を使った活用方法や、HOME Assistantの位置情報取得機能を使った活用方法と比較を行った。調査には、Grok Botを使用している。


注)本記事の内容は正確性を保証するものではありません。

目次

最近使えるようになった「Location」機能

pineroom

最近、Grok Botで、「Location」が使えるようになりましたが、使い方、精度(5m?)、範囲(最小半径、出入判定要領)などを設定してトリガーとして使用できるかを調べてください

調べます。まず位置取得ツールの仕様と、ルーティンのトリガーの種類を確認します。

結論から言うと、今の「Location」は、出入りのトリガーとしては使えません。呼んだときに、その時点の位置を1回返すだけの機能です。

使い方と返る内容

  • 私が必要なときに呼ぶと、緯度・経度、精度(半径メートル)、測った時刻が返ります。住所や地名は返りません。
  • 精度は iPhone の「正確な位置情報」がオンなら数メートルで、10/24 には5mで取れました。オフだと数キロになることがあります。
  • 呼べるのは iPhone がつながっているときだけです。

トリガーとして使えない理由

  • ルーティンのトリガーは、スケジュール、Slack、GitHub、メール、Webhook などです。位置やゾーンの出入りを条件にするものはありません。
  • 最小半径、出入りの判定方法(滞在時間や離れる距離)を設定する項目もありません。
  • 代わりに定期的に位置を取って自分で比べる方法もありますが、バックグラウンドで iPhone に問い合わせられるかは未確認です。アプリを開いていないと未接続になるので、確実には動かないと思います(推定)。

出入りで動かしたい場合の現実的な方法

  • HA のゾーンか、iPhone のショートカットで出入りを検知し、そのあとの動きを Grok Bot に渡すのがよいです。
    HA はアラートを送る受け口をすでに作ってあるので、同じ形で、ゾーンの出入りを知らせる受け口も作れます。
  • そこに先ほどの for: の滞在時間を付ければ、出入り判定の問題も HA 側で片づきます。

pineroom

HOME Assistantの位置情報取得機能 と Location 機能を比較してください

HA と Location 機能で同じ位置の位置情報を取得して比較を行った結果を下表に示す。

項目HA(iPhone 17)Location 機能
位置の時刻12:35:52(約9分前)12:43:33(ほぼ現在)
精度約23m約3.7m
取得にかかる時間約0.6秒(値は古いことがある)呼んですぐ(iPhone が接続中のとき)
返る内容ゾーンとの関係、状態(not_home など)、電池75%、更新時刻緯度・経度、精度、時刻のみ
自宅30mとの関係外側(中心から約1,428m)約1,414m(距離は私が計算)

二つの位置の差は約42mです。HA が約9分古く、精度も粗いためと考えられます(推定)。
HA の更新は、iPhone が位置を送ったときだけです。Location 機能は、呼ぶたびに今の位置を測ります。
一方、ゾーンの内外や在宅判定は、HA のほうだけが持っています。

Location 機能は、位置情報を返すだけの機能であり、その情報だけでは、ゾーンの内外や在宅の判定には使えないことが分かった。Location機能の方がシンプルで、最新の位置を素早く、複数回取得するような場合に向いているように思われる。


pineroom

Grok BotのLocation機能は、緯度、経度、時刻をGrok Botが自発的に取得できるようにするためのものでしたが、どのような使い方を想定した機能だと思いますか、可能性がある使い方を表形式でまとめてください

ツールの説明文に、「現在地で答えが変わる質問のときに使う」とあり、例として「いまどこ」「ここの天気」「近くのカフェ」が挙がっています。以下は、それと私たちの環境から考えた使い方の候補です(想定は推定で、運営の公式の説明ではありません)。

使い方例向き不向き
現在地で答えが変わる質問ここの天気、近くの店、今いる場所からの道順や所要時間本来の想定に最も近い。座標は住所や地名にならないので、地図や検索の別の道具と組み合わせる
外出中の提案買い物先の近くで、リマインダーやカレンダーの予定を思い出させるiPhone が接続中のとき
在宅か外出かの確認通知や提案の前に、いま家にいるかを見て内容を変えるHA の人の状態のほうが速く、判定済み。Location は裏付け用
HA の位置との照合HA の位置が古いとき(今日は約9分遅れ)に、実際の位置を測って確かめる精度が3.7m対23mと細かい。
HA を直すためではなく、診断向き
記録と報告外出の移動を、ブログや日報の材料にする個人情報になるので、座標は書かない運用が前提
到着や出発の判断の補助通知を受けたあと、本当にゾーンの外かを測り直す出た瞬間を知らせる用途には使えない
位置に応じた機器の操作帰宅が近いとき、エアコンを入れる提案私が呼んだときだけ測るので、帰宅の検知は HA 側が必要

Location機能は、Grok Botが自発的に最新の位置情報を取得できる機能として有効。上表では、HA経由の方が取得が早いように報告されているが、実機での感覚としては、HAを介さない分、Location機能の方が早いように思われる。


ここまでの調査で、Locaiton機能単独では、ゾーンの内外の判定には使えないことが分かった。他の判定要領と比較する予定であったが、ここからは、HOME Assistantを使った判定方法と、iPhoneの純正ショートカットのアクションを使った判定方法の比較を行った結果について報告する。

HOME Assistantのオートメーション用位置設定

pineroom

HAで、地図上の任意の位置を指定し、その位置を中心に半径100のゾーンを設定し、そのゾーンの出入りをトリガーにするオートメーションを作れませんか

(以下、Grok Botのアシスタントの回答)

作れます。HA の標準機能だけでできます。
ゾーンの作り方。 「設定」の「エリア、ラベル、ゾーン」にある「ゾーン」タブで、右下の「ゾーンを作成」を押します。
地図が出るので、中心にしたい場所をクリックして指定し、半径に 100(メートル)を入れて保存します。
名前やアイコンも付けられます。

東京スカイツリーを緯度・経度で指定
(左図の続き) ゾーンの半径を指定できる
半径10mでも設定することはできた
中心位置を変更できる
中心位置をずらし、ゾーン半径を160mとした状態

pineroom

「パッシブ(パッシブゾーン)」とはなんですか

パッシブゾーンは、オートメーションの出入りの判定にだけ使い、人や機器の「場所」の表示には使わないゾーンです。
画面の説明のとおりです。

  • ふつうのゾーン(パッシブがオフ)。 iPhone などがその中にいると、機器と人の状態が、そのゾーンの名前になります。たとえば自宅のゾーンの中なら「home」です。複数のゾーンが重なると、半径の小さいほうが優先されます。
  • パッシブゾーン(オン)。 地図にも場所としても表示されず、機器や人の状態は変わりません。中に入った、出たという出入りだけを、オートメーションのトリガーに使えます。

私が作った「自宅30m」は、パッシブをオンにしてあります。自宅(半径100m)の中にある小さいゾーンなので、パッシブにしないと、30mの中にいる間、状態が「home」ではなく「自宅30m」になり、在宅判定を使う既存のオートメーションが狂う恐れがあるためです。

新しくゾーンを作るときも、「その場所に行ったら状態の表示を変えたい」のでなければ、パッシブにしておくのが安全です。


オートメーションの作り方。 トリガーに「ゾーン」を選び、対象に追跡したい人(person)かスマホ(device_tracker)を指定します。イベントは「入る」か「出る」を選べます。YAML なら次のようになります。

trigger:
  - trigger: zone
    entity_id: person.********
    zone: zone.my_spot
    event: enter

person.******** と zone.my_spot は例です。実際の名前に置き換えてください。

注意点が3つあります。

  • 誤差。 スマホの位置の精度は、場所や電波の状態で数十メートルずれることがあります。半径100メートルは、現実的な下限に近いです。入った・出たを何度も繰り返す場合は、「5分間そこにいたら」という条件を付けると安定します。
  • 使う端末。 iPhone17 の HA Companion アプリで追跡するのがよいです。バックグラウンドでの位置情報を「常に許可」にしていないと、出入りが遅れたり検知されなかったりします。
  • 「ホーム」ゾーンとの関係。 自宅のゾーンと重なる場所だと、動作が分かりにくくなります。離れた場所に作るのが無難です。

どこで何をしたいか(たとえば、実家の近くに着いたら通知する、など)を教えてもらえれば、ゾーンとオートメーションの案を作ります。HA に追加するときは、いつもどおりあなたの許可をもらってから行います。

HOME Assistantで、任意の位置を中心にして、半径指定したゾーンを作成できることが確認できた。半径は100m未満にもすることができたが、半径100mが現実的な下限ということなので、安定した動作を期待するならその程度に設定すべきなのかもしれない。


iPhoneの純正ショートカットのオートメーション用位置設定

iPhoneの純正のショートカットのアクション(「到着」と「出発」)について、任意の場所を指定できるか、トリガーの元となる半径がどのように指定できるかを調べた。

場所は名称や住所で指定できる場所か、現在地に
限られる
ことが分かった。ピンの位置は変えられない
半径は100m以上の範囲で変えられた

iPhoneの純正のショートカットのアクション(「到着」と「出発」)の場合、場所の範囲の半径の指定(最小100m)はできたが、任意の場所の指定は現在地以外の任意の場所の指定はできないことが分かった。


場所指定方法の比較
(HAのゾーン指定による方法、iPhoneの純正ショートカットによる方法)

pineroom

iPhoneの純正ショートカットによる場所指定方法と、HAのゾーン指定による場所指定方法の比較表を作成してください。
場所指定のしやすさとか、オートメーションの設定のしやすさとかの項目も入れて下さい

比較表を作ります。すでに分かっている範囲で、手元の情報からまとめます。
iOS 標準の「到着」「出発」トリガー(ショートカットのオートメーション)と、HA のゾーンの比較です。
両方とも位置情報は iPhone から取るので、精度の限界は同じです。

項目iOS 標準(到着・出発)HA のゾーン
場所の指定のしやすさ検索や地図で場所を選び、円をドラッグして範囲を決める。
iPhone だけで完結する
地図をクリックして場所を指定し、半径を数値で入れる。
PC かブラウザで操作する
私の場合はHOME Assistant Cloudを
契約しているので、
iPhoneのアプリでも操作できる。
半径の指定円をドラッグする。数値で細かく決めにくい(推定)
最小100m
メートルで正確に入れられる
10mでもゾーンを設定できたが、安定して動作させるためには、現実的な大きさの半径を設定する必要がある。
設定のしやすさショートカットのアクションをつなぐだけで、手順が少ないトリガーと条件、動作を選ぶ。
YAML でも書けるが、慣れるまで手間がある
できる動作通知、ショートカットの実行、メールの送信など iPhone の中のこと。
HA の機器は Apple ホーム経由か、
HA の通知経由で動かす
HA の全機器の操作、通知、
Grok Bot への送信、
条件分岐(時間帯・在宅者・天気など)
実行の確実さ「すぐに実行」を選べば確認なしで動く(iOS 17 以降)。
iPhone の電源や位置情報の状態に左右される
HA Companion アプリが位置を HA に送る。アプリのバックグラウンド更新と位置の許可が必要
複数人・複数端末その iPhone だけperson やスマホ(iPhone17、Pixel 8a)ごとに設定できる。
全員が出かけたら、などの条件も作れる
履歴・確認のしやすさ実行履歴が見えにくい履歴とログで、いつ入った・出たかを確認できる
場所の使い回しショートカットごとに場所を選ぶ
ショートカットを複製すれば場所選びは1回で済む。
ゾーンを1つ作れば、複数のオートメーションで使い回せる
費用・追加の準備なしなし(すでに HA が動いている)

選び方の目安

  • iPhone の中で完結する簡単なこと(着いたら通知する、メールを送る)なら、iOS 標準が手軽です。
  • 家の機器を動かす、複数の条件で判断する、Grok Bot に提案させる、といった内容なら、HA のゾーンが向いています。

iOS 標準のショートカットの方が手軽だか、HAでゾーンを指定する方法の方が、オートメーションの自由度が高く、複雑なトリガー条件(5分間その状態が続いたらなどの時間指定ができることなど)を組めそうである。
一方、iOS 標準のショートカットには、下図のHOMEのショートカットがあるので、それらと組み合わせることができるという利点がある。HOMEの他にも、有効なショートカットがありそうである。


場所の範囲(ゾーン)から出たかどうかの判定条件

pineroom

iPhoneの標準アクションの場合、最小半径は100mで、境界からさらに200m以上離れた位置に20秒とどまっていないと、設定範囲から出たとは判定されないのではなかったでしょうか。HAのゾーンの場合の判定条件を調べて下さい

HA のゾーンの出入りの判定条件を、公式の説明で調べます。iOS 標準の「最小100m、200m以上離れて20秒」という点は、私の側では裏付けがないので、実機の確認結果を待ちます。
HA のゾーンの判定条件が分かりました。HA の中には「何m離れたら出た」「何秒とどまったら出た」という条件はなく、遅れの原因は iPhone 側の仕組みでした。

HA 側の判定

項目内容確度
ゾーンにいるかの式「中心までの距離 − 位置の誤差 < 半径」なら中にいると判定する高(HA のソースで確認)
出た判定の余裕距離も時間の条件もない。位置が1回更新されて式を満たさなくなった時点で出たになる高
最小半径数値の下限のチェックは見当たらない。初期値は100m中(下限なしは推定)
滞在時間新しい zone.entered と zone.left のトリガーには for: を付けられる。古い trigger: zone には付けられない中〜高
ゾーンが重なるとき半径がいちばん小さいゾーンが優先される高

iPhone 側の仕組み

  • あなたの記憶どおり、Apple の開発者向けガイドに「境界を越え、最低限の距離だけ離れ、20秒以上とどまるまで通知しない。距離は状況で決まり、テストでは約200mと考えてよい」と書かれています(Apple のガイド、旧版のため今の iOS で同じかは推定)。
  • ただし、これは位置の出入りを見張る仕組み全般の説明です。ショートカットの「到着」「出発」について、Apple がそう書いているわけではありません。ショートカットの最小100mも、公式の説明では確認できませんでした。
  • HA の iPhone アプリは、すべてのゾーンを iOS の出入り監視に登録して、出入りのたびに HA へ位置を送ります。100m 未満のゾーンは、半径100mの円3つに分けて監視します。
  • 位置が届かないときは、位置を「常に許可」にし、バックグラウンド更新をオンにしてください。

100m のゾーンを作るときの注意

  • iPhone で使うと、出た通知はかなり離れてから来ると考えておくのが無難です(推定)。
  • 出入りを何度も繰り返すのが心配なら、zone.entered や zone.left に for: で2〜5分を付けると落ち着きます。
  • iPhone で使うなら、半径は100m 以上がおすすめです。

実機で確かめるときは、標準のトリガーと HA のゾーンで、「出た」と通知が来るまでの距離と時間を比べると、違いがはっきり分かります。


pineroom

HAの場合、本当にゾーンから出たかどうかは、複数回確認するとか、その状態が何秒続くとかで判定する必要があるわけですね

はい、そのとおりです。HA は位置が1回届くたびに、その場で判定します。そのため、本当に出たかどうかを確かめたいときは、オートメーション側で滞在時間を付けておくのが安全です。

  • 新しい書き方。 zone.left のトリガーに for: “00:03:00” のように付けます。出た状態が3分続いたら動きます。
  • 古い書き方。 trigger: zone には for: が付けられません。「ゾーン外にいる」状態のトリガーに for: を付けるか、条件で位置を確かめ直してください。
  • 補足。 数回確認するという方法は、HA にはありません。位置の更新は不規則に届くので、回数より時間で見るほうが確実です。

目安は、出た判定なら2〜5分、入った判定なら短め(1分程度)でよいと思います(推定)。
車や自転車で動くなら短く、徒歩なら長めにしてください。

HOME Assistantのバージョンアップにより、「新しい書き方」が行えるようになっている。


外出したことをGrok Botに通知するためのオートメーション

pineroom

自宅(現在地)を中心に半径30mのゾーンを設定し、そのゾーン外に出た状態が1分続けば、Grok Botに通知が行くというオートメーションを作成してください

作ります。HA の設定を読み取り、ゾーンとオートメーションを追加して、動作を確かめます。数分かかります。

進めています。ただし、通知が届くまでには少し時間がかかります。iPhone は小さいゾーンを100m程度で見張るため、実際は自宅から100〜200mほど離れたところで出たと判断され、そこから1分たって通知になる、という流れになりそうです(推定)。通知が届いたら、このチャットでお知らせします。

HA に、半径30mのゾーン「自宅30m」と、「外に出た状態が1分続いたら Grok Bot へ通知」するオートメーションを追加しました。テスト送信も1回通り、HA の在宅判定は変わらず在宅のままです。
ゾーンは判定用の設定(passive)にしてあるので、中にいる間も iPhone の状態は home のままです。

気をつけてほしい点

  • ゾーンの中心は、zone.home の座標ではなく、昨夜自宅で iPhone が報告した位置にしました。
    zone.home の中心が約30m離れていて、その中心だと家が円のふちに当たり、GPS のぶれで出入りが揺れるためです。
  • 通知は、iPhone が「出た」と報告した約1分後に来ます。
pineroom

このオートメーションは、私が外出したことを明示的に自発的に知らせることだけを目的としたものです。

了解です。

外出中であることを知らせておくことによって、Grok Botのアシスタントがどのような行動を起こすかを確認するためにこのオートメーションを設定した。帰宅時の通知も必要。


HOME Assistantの「person(人)」の位置情報は何に基づいているか

pineroom

HAには、personや、iPhone17が登録されていますが、person(人)の位置情報は何に基づいていますか

person の位置は、その person に登録された機器(device_tracker)の位置から決まります。
person 自身は位置を測りません。

  • 今のあなたの person には、iPhone 17 と Mac mini の追跡機器が入っています(先ほどの作業で確認しました)。
  • 複数あるときは、まず GPS で位置を出す機器(HA アプリの iPhone など)が優先され、そのうち最後に更新されたものの状態が採用されます。ルーターや Bluetooth のように「家にいるかどうか」だけを返す機器は、GPS の機器がなければ使われます。
  • 状態は、いるゾーンの名前か、どこにもいなければ not_home になります。

つまり、iPhone の位置が実質的な根拠ですが、Mac mini が GPS 扱いで更新されると、外出中でも person が home に戻る恐れがあります(推定)。そのため、さっきのオートメーションは person ではなく iPhone 17 を直接見る形にしてあります。

Mac mini の追跡機器を person から外せば、この心配はなくなります。ただし HA の設定変更になるので、希望されるなら許可をください。

前々から気になっていた疑問が解けた。person(人)もHAのダッシュボード「マップ」に表示されていたので、これはどのような情報に基づいて表示しているのかが気になっていた。複数のスマホを使い分けている場合、どちらのスマホが追跡装置になっているか、両方かによって、オートメーションの結果が変わり、意図した結果が得られない可能性もある。

目次