うちには2匹のがいる。aki と kuro だ。前回の記事ではリビングの Tapo C210 を Frigate に接続して、録画の振り返り・猫日記・毎日のハイライト動画を作った。だが C210 は壁掛けでリビング全景を撮っていて、エリアがちょうど死角になっていた。
カメラと自動給餌機能を兼ね備えたデバイスを探して、この視角を補いたかった。シンプルに見えた——ペットフィーダーカメラ1台、映像ストリームを Frigate に取り込めればいい。
結果、10ブランドを調べてようやくひとつの事実がわかった:この製品カテゴリには映像ストリーミングを開放している機種が1台もない。一部が 非対応なのではなく、カテゴリの構造としてそうなっている。
すべてクラウドロック——偶然ではない#
最初に見たのは米家スマートペットフィーダー 2 カメラ付きモデル。2026年3月にクラウドファンディングで発売、500万画素・150°超広角・940nm赤外線ナイトビジョン・5Lタンク・機能付き。しかも のソースコードで、xiaomi ソースのデバイスフィルター条件に .feeder. が明示的に含まれている——完璧に見えた。
ところが go2rtc の xiaomi モジュールのソースを読み込むと問題が見つかった。映像伝送の経路は2つしかない——Xiaomi 独自のクラウドリレー(CS2)か ThroughTek Kalay(TUTK)P2P で、どちらもクラウド経由。「鍵交換がオンライン、映像は LAN」ではなく、映像自体がクラウドを通る。外部接続を遮断するとストリームが即座に切れる。
比較対象として既に使っている C210:Tapo の RTSP は純粋な LAN 通信で、ルーターの外部接続を切っても録画・検知はすべて正常に動く。Xiaomi のカメラはアーキテクチャ的にまったく別物だ。
IMPORTANT
後から go2rtc コミュニティで重要な観察を見つけた:go2rtc の xiaomi ソース対応リストには50台以上のカメラの報告があるが、フィーダーはゼロ台。作者自身もこう言っている:「If a camera isn't on the list, don't ask if it works. No one knows until you try it.」
台湾ではカメラなしの標準版しか公式販売されていない。カメラ付きは中国版(人民元449 ≈ NT$2,000)で、淘宝か代購が必要、保証なし。加えて Xiaomi のセキュリティ実績——2020年に Google Nest Hub で他人の Xiaomi カメラ映像が表示される事件、2021年に ThroughTek Kalay の CVSS 9.6 のが公開(約8,300万台に影響)——買わないことにした。
PETKIT + LocalKit:クラウドフリー化の代償#
次に見つけたのは YumShare Dual Gen2(P592)。ローカルストリーミングには非対応だが、GitHub に LocalKit というサードパーティプロジェクトがあり、PETKIT デバイスを完全にクラウドフリー化できると謳っている(カメラストリーミング含む)。
デプロイドキュメントを読んで諦めた。必要なもの:
- DNS リライト——PETKIT のクラウドドメインをローカルサーバーに向け、デバイスにメーカーに接続していると思わせる
- 証明書信頼の変更——デバイスに cert pinning があり、証明書信頼チェーンを変更する必要がある
- ローカル MQTT broker——コンテナで PETKIT のクラウド broker をエミュレートする
- デバイス上で go2rtc を実行——カメラ付きの各デバイスで go2rtc を個別に実行
- をバージョン 895 に固定——インストールスクリプトが特定バージョンのみ対応、PETKIT の自動更新を許可できない
しかも1人でメンテナンスしているプロジェクトだ。Tapo の RTSP はメーカー公式の機能。PETKIT のローカルストリーミングはメーカーの見落としに乗っかった一時的な足場——メーカーが OTA を出せば全部崩壊しうる。
P592 の台湾価格は約 NT$5,000。ファームウェアを固定して DNS リライトが必要なフィーダーにその金額を出すのは、方向性が違う気がした。
構造的な理由:なぜどのメーカーも開放しないのか#
数台を調べ終えて、このカテゴリ全体が映像ストリーミングを開放しない理由が理解できるようになった。
カメラブランド(Tapo、Reolink、EZVIZ、Imou)はハードウェアで稼ぐので、RTSP 開放はセールスポイントになる。フィーダーブランドが頼りにしているのはアプリのとクラウドサブスクリプション——クラウドストレージ、AI ペット認識、リモート視聴、すべて自社アプリに。ストリーミングを開放すればユーザーをサードパーティ NVR に追いやることになり、サブスク契約は売れなくなる。
NOTE
自社に RTSP の伝統があるカメラメーカーでさえ、フィーダーカテゴリに進出すると閉じてしまう。Imou(Dahua のコンシューマーライン)の PF1 フィーダーカメラは、3つのソースを調べても RTSP の証拠がなかった:iSpy の Imou デバイスリストに PF1 なし、HA の imou_life 統合で関連 issue ゼロ、Frigate コミュニティで報告ゼロ。そもそも台湾に販路がない。
購入前にどう判断するか:APK を解体して映像 SDK を見る#
ショッピングページに「ローカル RTSP 対応」とは書いてない。では購入前にフィーダーの映像を取り出せるかどうか、どう判断するか?
方法は実にシンプル:アプリのインストールファイルをダウンロードし、解凍してどの映像 SDK を使っているか見る。
は本質的に ZIP ファイルで、lib/ フォルダ内のネイティブライブラリ(.so ファイル)がどの映像伝送 SDK を使っているか暴露する。不要、インストール不要、ファイル名を見るだけ:
| これらのライブラリが見つかったら | 使用 SDK | Frigate に接続できるか |
|---|---|---|
libtuya_*.so | Tuya(塗鴉) | go2rtc に tuya:// あり、ただしシグナリングはクラウド経由 |
libmiot*.so、libmiss*.so | 米家 | go2rtc に xiaomi:// あり、映像は強制的にクラウド経由 |
libIOTCAPIs.so、libAVAPIs.so | ThroughTek Kalay(TUTK) | go2rtc に tutk なし、自力でリバースエンジニアリングが必要 |
libagora-*.so | Agora(声網) | 商用クラウド RTC、ローカルパスは一切なし |
「TUTK ライブラリがある」だけでは不十分。鍵は、アプリが SDK のLAN 直接接続機能を呼び出しているかどうかだ——TUTK SDK を含んでいてもクラウドリレーしか使わず、LAN 接続を試みないアプリもある。これをさらに深く dex バイトコードの呼び出しを見て判断する必要があるが、「まったく無理」vs「可能性あり」の判断には十分だ。
これがゼロコストの購入前スクリーニング#
この方法で台湾で購入可能(または代購可能)な10ブランドをスキャンした:
展開
| ブランド | App パッケージ名 | 映像 SDK | App が LAN 直接接続を呼び出し | 判定 |
|---|---|---|---|---|
| FurSpark | com.ddpai.cpp_overseas | TUTK Kalay | あり(12箇所) | ✅ 可能性あり |
| Dogness | — | TUTK Kalay | あり(17箇所) | ✅ 可能性あり |
| CATLINK | — | TUTK Kalay | あり(15箇所) | 台湾ではカメラなしモデルのみ販売 |
| Xiaomi 米家 | — | TUTK + CS2 | あり | 映像は強制クラウド経由 |
| PETLIBRO | — | TUTK | なし | クラウドリレーのみ |
| Petwant | — | TUTK | なし | クラウドリレーのみ |
| PETKIT | — | Agora RTC | — | App 側にローカルパスなし |
| Petoneer | — | Agora RTC | — | 同上 |
| Hama Home(ドイツ) | — | Tuya | — | App の中身は 100% Tuya |
| maoxga | — | Agora RTC | — | カメラは確実に接続不可 |
いくつかの意外な発見があった:
- PETKIT が使っているのは Agora であり、TUTK ではない。最初は PETLIBRO と同じ Kalay だと思っていたが、まったく違った——これは LocalKit がデバイスに直接入る必要がある理由も説明している:App 側に LAN パスがまったくないのだ。
- ドイツの Hama の独自 App は中身が 100% Tuya。外からは見分けがつかないが、中を開けば一目瞭然。「Tuya かどうか調べられない」のは事実だが、「調べる方法がない」のは嘘だ。
- maoxga の App で Matter SDK が偶然見つかった。給餌側は Matter 対応の可能性がある。だがカメラ部分は Agora なので、ローカルパスがないのは確実。
WARNING
App が LAN 直接接続関数を呼び出しているからといって、ファームウェア側も対応しているとは限らない。App の呼び出しは「開発者がそのコードを書いた」ことを証明するだけで、デバイス側に対応する処理があるかは実機を手にしないとわからない。ただし逆に、App に LAN 直接接続の呼び出しがまったくなければ、直接除外できる。
最終的に FurSpark を選んだ#
にかけて残ったのは2台:Dogness F10 と FurSpark Big Eye。
| FurSpark Big Eye | Dogness F10 | PETKIT P592 | |
|---|---|---|---|
| 解像度 | 2K | 1080P | 1080P |
| 視野角 | 広角(公式非公開) | 165° | 140° |
| タンク容量 | 3.7L | 3.6L | デュアルタンク |
| ストレージ | 内蔵 64GB、48h 再生 | — | — |
| 特殊機能 | 機械式まぶたによる物理レンズカバー | 乾電池バックアップ | 猫顔認識 |
| 映像 SDK | TUTK(LAN 直接接続あり) | TUTK(LAN 直接接続あり) | Agora(ローカルパスなし) |
| Frigate 接続 | リバースエンジニアリング必要 | リバースエンジニアリング必要 | LocalKit による改造必要 |
| 台湾最安値 | NT$3,990 | NT$4,200(momo セール) | ~NT$5,000 |
FurSpark はハードウェアが最も良く、価格が最も安い。しかも App のパッケージ名 com.ddpai.cpp_overseas が面白い事実を明かしている:開発元はの盯盯拍(DDPai)、ドライブレコーダーの会社だ。「アメリカの Furspark」はマーケティング上の包装に過ぎない。
これはむしろ好材料だ——DDPai のドライブレコーダーは公開分解の前例があり、ローカル HTTP インターフェースの実績がある。つまり TUTK P2P 以外にも第二の経路がありうる。
IMPORTANT
この機種が確実に Frigate に接続できるとは保証できなかった。すべての情報が「可能性あり」を指し示していたが、誰もやったことがない。最終的に買った理由は単純で:統合に失敗しても、タイマー給餌ができて App で見られる普通のフィーダーとして使える。ファームウェアには触れない、メーカー機能はすべて保持。最悪のケースは普通のフィーダーが1台増えるだけだ。
映像接続:ひとつの独自 TCP ポート#
2026年9月13日、フィーダーが届いた。セットアップして猫にごはんをあげて、Wi-Fi に接続してから映像を探し始めた。
RTSP はないが、daemon は生きている#
nmap でデバイスの開放ポートをスキャンすると、554 で Hisilicon RTSP Streaming Media Server/1.0.0 が動いていた。しかし十数パスを試してもすべて 400 か 500 が返ってくる——メディアソースがマウントされていない。RTSP daemon は生きているが、コンテンツを供給している者がいない。
NOTE
最初のプローブで初歩的なミスをした:RTSP リクエストで絶対 URI(rtsp://host:554/path)ではなく相対 URI を使ってしまい、400 が返ってきた。正しい形式で再送したところ、OPTIONS は 200 を返し CSeq も正しく応答、daemon は正常にパースしていた。しかし DESCRIBE は一部のパスで 500(パスは認識するがメディアを取得できない)、残りは 400(パスを認識しない)。どのパスも SDP を自発的に返すことはなかった。
ONVIF はなし。デバイスが報告する型番は DDPaiQ3、SoC は Rockchip RV1126——hostname はメーカーの RV1126_RV1109 がそのまま残っていた。
独自 TCP 6200#
他のポートに目を向けた。TCP 6200 に何かある:接続するとバイナリデータが流れ始めた。各パケットの先頭に 8 バイトのヘッダがあり、16進数で見ると:
0a 0b 0c 00 [4-byte ビッグエンディアン長] → キーフレーム(I-frame)
0a 0b 0c 01 [4-byte ビッグエンディアン長] → 通常フレーム(P-frame)
0a 0b 0c は固定のバイト、4バイト目がフレームタイプを区別し、続く4バイトがこの NAL ユニットの長さ。ヘッダを剥がして残りをそのまま ffmpeg に渡すと、デコードエラーゼロ。
ffprobe で計測したスペック:
| 項目 | 値 |
|---|---|
| 解像度 | 1664 × 2224(縦型) |
| フレームレート | 25 fps |
| コーデック | H.264 High profile, level 5.0 |
| ビットレート | ~2530 kbps(≈ 15 GB/日) |
| 音声 | なし(このパスには音声トラックなし) |
| キーフレーム間隔 | 4 秒 |
映像。公式ページに「expanding the upper and lower visual range from the previous 16:9 aspect ratio」との記述がある——前世代は 16:9、新型はイメージセンサーを90°回転させて搭載し、上下方向の視野を拡大。ドライブレコーダーの部品からの転用だ。
WARNING
このストリームのスペックは変わりうる。 過去の録画の ffprobe で確認したところ、初日は 576×768 / level 3.1、翌日には 1664×2224 / level 5.0 に変わっていた。おそらく App の「ビデオ画質」設定が変更されたためと思われる(現在は「超高画質」)。Frigate の detect 解像度もそれに合わせて変更する必要がある。さもないとダウンサンプリングやオーバーサンプリングが発生し、検出品質に影響する。
アーキテクチャ:デバイス → go2rtc → Frigate#
go2rtc は exec:ffmpeg ソースでデバイスの TCP 6200 に接続し、ffmpeg が生の H.264 バイトストリームを受信して RTSP に変換する。Frigate は go2rtc から RTSP をプルし、検知と録画を担当。ブラウザは WebRTC で go2rtc から直接映像を取得する。
いくつかの落とし穴:
- 接続は1本しか開けない。 TCP 6200 に同時に2本目の接続を開くと、camera_fps が 100 以上に跳ね上がり、NAL エラーが出て、ストリーム全体が壊れる。スマホアプリの接続時も同様の競合が起きうる。
- go2rtc は全インターフェースにバインドする必要がある(
:8554)。 ffmpeg producer が内部でメディアをrtsp://127.0.0.1:${port}にパブリッシュするため、loopback がリッスンしていないとセルフループが失敗する。ファイアウォールルールで保護する——Frigate コンテナのネットワークセグメントのみ RTSP プルを許可し、他は拒否。 - ウォーターマークはマスク不要。 画面左下に「Forspark Big Eye」と秒単位のタイムスタンプがあるが、Frigate のモーション検知解像度に縮小すると約1ピクセルの面積しかなく、
contour_areaの閾値よりはるかに小さいため自動的にフィルタされる。
映像表示まで数秒かかる#
デバイスのキーフレーム間隔は固定4秒で、新しい接続は次のキーフレームを待ってからデコードを開始する。平均待ち時間2秒、最悪4秒。C210 は約 0.1〜1.7 秒。App にキーフレーム間隔を調整するオプションはない。
音声側の ffmpeg が入力フォーマットをするのも映像表示を遅くする(go2rtc は producer を順番に起動する)。-f aac -probesize 32 -analyzeduration 0 を追加したところ、~3.2 秒から 0.2 秒に短縮。合計で映像表示まで約3秒。
給餌制御:クラウド MQTT を Home Assistant にブリッジ#
映像はローカル、給餌制御はクラウド。2つの経路は完全に分離している。
デバイスのリアルタイム状態と制御コマンドはメーカー独自の broker を使っている。App から接続方法とコマンド形式をリバースエンジニアリングし、Python daemon(furspark_ha.py)を書いた。メーカーの MQTT に接続して状態を読みつつ、MQTT discovery でローカルの Home Assistant にプッシュする。
IMPORTANT
給餌制御の具体的なコマンド形式とクラウドエンドポイントはこのデバイスの独自プロトコルであり、他のユーザーのデバイスセキュリティに関わるため、ここでは公開しない。以下では「何ができたか」だけを書き、「どうコマンドを送るか」は書かない。
22 エンティティ、すべて同一デバイスの配下#
| タイプ | 項目 |
|---|---|
| sensor | 残量レベル、給餌プラン、本日プラン出糧分数、次回給餌時刻、乾燥剤残日数、ストレージ残量と使用率、映像品質、ファームウェアバージョン |
| binary_sensor | オンライン状態、故障 |
| switch | カメラ ON/OFF、インジケータライト、チャイルドロック、マイク、給餌リマインダー、給餌音声 |
| number | スピーカー音量、ボタン毎回分数、給餌分量 |
| button | 即時給餌、1分給餌 |
| text + button | プランエディター(形式 07:30x40, 18:00x2)、プラン適用、プラン有効化 |
間違えやすいポイント:
- 残量はレベルであってパーセンテージではない。 デバイスが返す値は 0(十分)、1(やや少ない)、2(空)であり、0–100 ではない。最初パーセンテージとして使ったところ、「満タンなのに 0% 表示」になった。
- 1分 ≈ 1グラム。 実測による。説明書には「フード密度により変動・調整不可」とある。2匹の猫が朝40グラム食べるので、40分に設定。上限は実測で 99 まで受け付けた。
- 常駐モード(
--daemon)でのみ制御項目をプッシュする。 ワンショットモードは sensor のみプッシュ——スイッチやボタンはコマンドをする相手がいないと意味がないため。
daemon は systemd サービスとしてインストールし、起動時に自動実行。10分ごとに状態をポーリング。HA でスイッチを切り替えると即時反映——インジケータライトとカメラスイッチで実測済み、コマンド送信からデバイス状態変更まで1秒未満。給餌ボタンは実テストしていない(実際にフードが出る)ので、手動操作に任せた。
リアルタイム音声と双方向通話#
TCP 6200 のストリームには音声トラックがない。しかしデバイスの録画ファイルには AAC 音声が含まれている。マイクは正常——音声がこのパスに乗っていないだけだ。
TUTK P2P ブリッジ#
音声は ThroughTek Kalay(TUTK)の P2P プロトコルを使っている。go2rtc の41種のソースプロトコルには tutk がないため、自力でブリッジを構築する必要がある。
App の APK から arm64 版の TUTK SDK ライブラリ(libIOTCAPIs.so、libAVAPIs.so 等)を抽出し、 で x86 ホスト上で実行。Python の ctypes で SDK 関数を呼び出して P2P セッションを確立し、音声を受信する。
これがプロジェクト全体で最も困難な部分だった。TUTK SDK は Android(bionic libc)向けにコンパイルされており、Linux(glibc)で動かすには複数の ABI 非互換性を shim でする必要がある:
展開
| 問題 | 症状 | 解決策 |
|---|---|---|
pthread_mutex_t のサイズが異なる | bionic 4 bytes、glibc arm64 48 bytes、TUTK FIFO が bionic サイズの mutex を内包 → segfault | shim で pthread_mutex_* を傍受、オブジェクトアドレスを key にして別途 glibc の mutex を管理 |
struct addrinfo のフィールド順序が異なる | bionic の ai_canonname と ai_addr が逆 → ワイルドポインタ | shim で getaddrinfo を傍受、bionic のレイアウトに変換 |
| init_array に null エントリがある | bionic linker はスキップ、glibc はアドレス 0 を直接呼び出し → segfault | 各ライブラリをスキャン、全 null の init_array は DT_INIT_ARRAYSZ をゼロに |
__errno のシンボル名が異なる | bionic は __errno、glibc は __errno_location | shim で転送 |
_ctype_ がポインタでなく配列 | bionic の _ctype_ は const char*、配列を渡すとワイルドポインタになる | shim で正しいポインタ版を提供 |
ブリッジのアーキテクチャはオンデマンド TCP サーバー。go2rtc が接続してきた(誰かが映像を見ている)時だけ TUTK に接続し、音声受信を開始して AAC-ADTS を出力。誰も見ていない時はセッションを解放し、デバイスの P2P 接続数の占有を避ける。
定常状態のリソース消費:CPU ~5%(1コア)、RAM 67MB、音声トラフィック ~65kbps。「24時間365日 qemu ブリッジを動かすとリソースを食う」という心配は杞憂だった——それはビルド時の瞬間的なピークであり、定常状態では極めて軽い。
いくつかの落とし穴#
認証が期限切れになる。 接続に必要なパスワードはクラウド API から算出され、数日で失効する。失効すると DTLS ハンドシェイクが静かに失敗し、エラーコードは「タイムアウト」であって「パスワード不正」ではない——認証の問題とはまったくわからない。現在は crontab で6時間ごとに再計算している。
音声が切れると映像も道連れになる。 go2rtc のマルチソースマージは「全か無か」で、音声ソースが接続できないとストリーム全体が立ち上がらず、映像まで真っ暗になる。修正方法はブリッジを「クライアントがいる限り常に音声トラックを出力できる」ようにすること——実音声が600ms以上途切れたら無音フレームを補填し、TUTK 接続失敗は指数バックオフでリトライ。
WebRTC には Opus が必要。 音声を AAC のみで渡すと、WebRTC は対応できず(AAC 非サポート)、ブラウザが MSE にフォールバックし、外部ネットワークでカクつく。Opus トランスコーディングを追加したところ、WebRTC で音声が通るようになり、外部ネットワークでもスムーズになった。
双方向通話#
送話プロトコルもリバースエンジニアリングした。デバイスは AAC-LC 16kHz mono ADTS 形式の音声を受け付ける(受信側と同一)。正しいコーデックの特定方法は力技:4種類の候補フォーマットにそれぞれ異なるビープ数の音声ファイル(1/2/3/4回)を用意し、一気に送信。フィーダーのそばで人にビープ数を数えてもらう——第3組の回数だけ聞こえたら、それが正しいフォーマットだ。
NOTE
送話中に6日間潜んでいたバグを発見:Python の struct.pack が符号付き int32 にミリ秒タイムスタンプを詰め込んでおり、値が 2^31 を超えた瞬間に struct.error を投げる——送話は最初のフレームを送り出す前にクラッシュしていた。前の4ラウンドで異なるコーデックフォーマットをブラインドスキャンしたが、テストしていたのはまったく実行されていないパスだった。教訓:「送れているか」の確認は「フォーマットが正しいか」より重要。
リアルタイム通話(ブラウザのマイクから直接話す)は実現できなかった。go2rtc の exec: ソースには backchannel サポートがあり、理論上は可能だが、ブラウザが通話モードに切り替わっても go2rtc が producer を起動しない。各種音声フォーマットとアーキテクチャを試したが同じで、根本原因は特定できなかった。現在の代替案は HA にボタンを置き、押すと録音済みの呼び出し音を再生すること——猫をごはんに呼ぶには十分だ。
フィーダーカメラでの猫の個体識別#
フィーダーのカメラは本体上部に搭載されており、ステンレスボウルは画面の最下端にある。猫が食べている時、顔はカメラに正対しており、距離は約40cm、顔が画面に占める割合は約37%——C210 が3m離れて撮った6%よりはるかに大きい。理論上、aki と kuro の識別はもっと容易なはずだ。
ボウル前エリア#
Frigate で feeder_bowl ゾーンを定義し、画面下部5%をカバー。このゾーン内に10秒以上滞在した猫だけを「訪問」とカウントし、ボウル脇を通り過ぎるだけのケースをフィルタする。
過去のイベントでこの設定を検証:バウンディングボックス下端座標 ≥ 0.95 のイベントから8枚抽出したところ、8枚とも食事中。0.88 から 0.95 の間では、8枚中2枚だけが食事中。10秒のとゾーン制限で、誤検知率は非常に低い。
ゾーン追加前、daemon は「リビング全体に10秒以上滞在した猫」をカウントしていた——カメラはリビング全体を捉えているため、1日30回以上に膨れ上がり、大半は猫がダイニングテーブルや棚の上にいるだけで、食事ではなかった。ゾーン追加後は1日約7.5回まで減少し、妥当な数字になった。
食事の統合#
daemon は Frigate のイベント API から「今日 feeder_bowl ゾーンで検知された猫」をプルし、同一の猫で2つのイベント間隔が2分未満のものを同一食事として統合(Frigate は1回の食事を複数のイベントに分割しがち)。HA に2つの sensor がある:aki と kuro のそれぞれの当日訪問回数。
NOTE
名称は「訪問」であって「食事」ではない。カメラが確認できるのは猫がボウルの前にどれだけいたかだけで、本当に食べているかは確認できない——座っているだけかもしれないし、毛繕いをしているかもしれない。当初「本日の食事回数」と名付けたが、指摘を受けた:推論を事実として扱うな。
全体が稼働している状態#
| 項目 | スペック |
|---|---|
| ハードウェアコスト | NT$3,990(FurSpark Big Eye、quoview 最安値) |
| 月額 | NT$0 |
| 映像 | 1664×2224 縦型、25fps、ローカルリアルタイムストリーム(TCP 6200 → go2rtc → Frigate) |
| 録画 | 連続録画3日(~15 GB/日、C210 の ~10 GB/日 と同じディスク上) |
| 給餌制御 | HA でスイッチ切替・分量調整・スケジュール編集・ワンタッチ給餌 |
| 音声 | リアルタイム収音(TUTK ブリッジ → Opus/AAC → WebRTC)、HA ボタンで呼び出し音再生 |
| 個体識別 | ボウル前ゾーン + 10秒閾値、当日訪問回数 × 2匹 |
| 検知 | Frigate オブジェクト検知(cat / person)、GPU 使用率 6% |
| 常駐サービス | furspark-ha.service(給餌制御)、tutk-audio-bridge(音声)、go2rtc(ストリーム) |
Furbo との比較:
| Furbo 360° + ペットシッターサブスク | この構成 | |
|---|---|---|
| ハードウェア | NT$5,399(契約なし単体) | NT$3,990 |
| 年額 | NT$1,840〜 | NT$0 |
| 録画 | AI クリップ、3〜7日保存 | 連続録画、保存日数は自由設定 |
| 振り返り | サブスク限定 | いつでも |
| 双方向通話 | あり | 録音済み呼び出し音の再生 |
| おやつ投げ | あり | タイマー給餌(おやつ投げなし) |
| ペット日記 | サブスク機能 | 前回の記事で構築済み |
| 個体識別 | サブスク機能(マルチペット認識) | Frigate カスタム分類(ボウル前近接撮影の命名率 ~89%) |
| データ保存場所 | Furbo クラウド | ローカルディスク |
最後にひとつ。このフィーダーの RTSP daemon は生きているが、メディアソースがマウントされていない。ファームウェアに「RTSP を有効化する」ように見えるコマンドが2つある(名前はコミュニティで公開されているドライブレコーダーのファームウェア文字列テーブルから見つけた)。試せば音声トラック付きの RTSP ストリームが直接得られるかもしれない。しかしそれはデバイスの状態を変更することになり、現在安定稼働している 6200 のライブストリームが中断するリスクがある。まだ試していない。いつかファームウェアアップデートで何かが壊れて、再設定を余儀なくされた時のために取っておく。