Skip to content

feat(findmy-tag): Find My タグの取得を10分ごとの LaunchAgent にする - #525

Merged
gapul merged 3 commits into
mainfrom
feat/findmy-tag-agent
Sep 1, 2026
Merged

feat(findmy-tag): Find My タグの取得を10分ごとの LaunchAgent にする#525
gapul merged 3 commits into
mainfrom
feat/findmy-tag-agent

Conversation

@gapul

@gapul gapul commented Aug 31, 2026

Copy link
Copy Markdown
Owner

自作 Find My タグの位置レポートを10分ごとに取得し、generic-airtagreports.db に追記する LaunchAgent を macWorkstation ロールに追加する。

なぜ10分か

取得エンドポイントはリクエストの日時範囲を無視して、鍵ごとに最新数件しか返さない。実測すると窓を1時間にしても24時間にしても同じ最新8件だけが返り、その日の朝に取れていたレポートはもう返ってこなかった。Apple の保持は7日あるが、こちらから見えるのは常に最新8件なので、取りこぼしたぶんは永久に失われる。継続的に拾われているタグは15分あたり8件ほど出るため、そこから10分を逆算した。

実装メモ

  • launchd から10分ごとに flake を評価させたくないので、repo の devShell と同じ python 環境をモジュール側で組み直している (bleak だけ不要なので除外)
  • repo か auth.json が無ければ静かに exit 0 するので、このプロジェクトを設定していないマシンでも無害
  • スリープ中に落ちたポーリングは埋められないので RunAtLoad

確認

  • just fmt / just check 通過
  • エージェントが使うのと同一の python 環境で src/fetch.py を実行し、8件取得・復号できることを確認済み

gapul and others added 3 commits September 1, 2026 00:07
自作の Find My タグ (~/Developer/github.com/gapul/generic-airtag) の位置
レポートを定期取得して repo の reports.db に追記する。

10分という間隔には理由がある。取得エンドポイントはリクエストの日時範囲を
無視して、鍵ごとに最新数件しか返さない (このアカウントでの実測は8件)。
Apple 側の保持期間は7日あるのに、それより前に古いものが返らなくなるので、
ポーリングで拾えなかったぶんは復旧できない。継続的に拾われているタグは
15分で8件ほど出るので、そこから逆算している。

launchd から10分ごとに flake を評価させたくないので、devShell と同じ
python 環境をモジュール側で組み直している。
蓋を閉じたノートは全部のポーリングを落とすが、落としたぶんは8件の上限に
押し流されて復旧できない。常時稼働の macmini に置く。

homeserver ではなく macmini なのは、Apple が要求するアネットが AOSKit
由来で macOS にしか無いため。Linux だと anisette サーバでデバイス
identity を偽装することになり、この構成が避けている当のものに戻る。
macmini は iCloud にサインインしていないが、AOSKit はユーザーではなく
マシンに答えるので問題なく動くことを実機で確認した。

auth.json のトークンは取得したマシンに紐づく。母艦からコピーすると401に
なるので、マシンごとに一度ログインする (macmini 側は実施済み)。
@gapul
gapul merged commit 4390b9a into main Sep 1, 2026
6 checks passed
@gapul
gapul deleted the feat/findmy-tag-agent branch September 1, 2026 04:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant