AtomcamをHomekitに接続できた

# 目的
　国内メーカー製の安価な防犯カメラとして普及している[Atomcamシリーズ]( https://www.atomtech.co.jp/products/atomcam2 )は、無
料でイベント発生後10秒間ほどの映像をメーカー運営のクラウドに記録できていま
した。
　しかし、このサービスも終了してしまいました。　
　カメラ本体にメモリーカードを入れてあれば、本体で録画は可能ですが、カメラ
本体を持ち去られたり、火災などで失われるリスクがあります。
　これらのリスクを低減するため、ネット上に記録できる方法は無いか探したとこ
ろApple iCloudのサービス[Homekit Secure Video]( https://support.apple.com/ja-jp/guide/icloud/mme054c72692/1.0/icloud/1.0 ) を見つけました。
　この文書では、Atomcamの映像をネット記録する方法としてHomebridgeというサ
ーバーソフトをセットアップする手順について記します。
# 想定する読者
　次の条件を満たす人を想定しています。
* Atomcamユーザー
* 自宅でLinuxマシンを常時稼働しているか、常時稼働しても良い人
* Linuxについて触ったことがあるひと。
* AppleのiPadかHomepodを使用している人
# 構成図
　今回のシステムの大雑把な構成図は下の図のようになります。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/347462/d9e34d9a-0c48-4922-bb2f-cb27b2238060.png)
# 先に結論
　Atomcam標準のRTSPで接続でき改造やファームウェアの書き換えは不要です。
　Linuxで自宅サーバ運用中ならdockerでインストールすることがおすすめ。
　もしくはRaspberry piに専用イメージでインストールすると簡単に利用できる。 
# 用語の説明
## iCloud Homekit Secure Video
　Appleが開発したホームオートメーションとしてHomekitというサービスがありま
す。
　iOs/iPad OS/Mac OSにホームというアプリがありますが、これにいろいろな機器
を登録して制御できるようになるサービスです。
　このサービスに防犯カメラの映像を記録してくれるサービスHome Kit Secure 
Video(以下HKSV) が含まれています。
　契約しているiCloudの容量により、接続できるカメラの上限が決められています
。
　200Gバイトの契約では5台まで接続可能です。
　このサービスを利用することで、防犯カメラからのビデオ信号をLAN内やインタ
ーネット経由で見ることができるようになります。

## homebridge
　Homekit互換機能を実現するためのサーバーソフトです。
  公式サイトは[ここ]( https://www.atomtech.co.jp/products/atomcam2 )。
　これに必要なプラグインを組み込むことで、いろいろな機器をHomekitに接続で
きるようになります。

## RTSP
　Real Time Streaming Protcolのこと。
　ビデオ信号をネットワーク上に配信するために使うプロトコルです。
　atomcamの標準アプリの「その他」にあるパソコンで閲覧するの項目にrtspの接続情報が表示されます。

# 動作条件
　カメラからのビデオ信号をストリーミングとiCloud録画を行うための前提条件は
次のとおりです。
* iCloud契約
　有償のiCloud契約が必要です。Apple OneやファミリーでもOK。
* iCloudの「高度なデータ保護」を有効にする
* インターネット通信できる環境
* 接続するAtomcamのRTSPを有効にする
# 設定方法
　基本はLinuxなどにnodes.jsをインストールし、homebridgeを動かす方法で、
Linuxで環境構築をしたことがある人であれば、難易度は高くありません。
　しかし、HKSVに必要なffmpegをセットアップすることが難しいため現状では避け
た方が良いと思います。

## 設定手順
　いずれの方法でも、基本的な流れは次のようになります。
1. Homebridgeをインストールし、初期設定を行う
2. Camera UIをインストールし、Camera UIの初期設定を行う
3. HKSVに接続したいカメラをCamera UIに登録する。
4. iOS/iPad OS/Mac OSのホームアプリでカメラとHomebridgeを登録する。
　Homebridgeを動作させるマシンが必要ですが、これはRaspberry Piを使うか、Dockerを使う方法がお薦めです。
　どちらの方法でもHomebridgeが起動できる状態でインストールされ、すぐに設定用のWebを利用できます。
　Camera UIにカメラを登録する際、rtspのアドレスとログイン情報の他、解像度、コーデックを登録するだけで動作します。なお映像はカメラのデータをそのままhomekitに流して大丈夫なので「copy」と設定します。音声はカメラからPCM音声で出力されるのでAACに変換する必要がありlibaacを指定します。
## 方法１．Raspberry Piを使う
　Raspberry Pi（以下、ラズパイ）の公式サイトで配布されているOSイメージにHomebridge用にカスタマイズされたものがあるので、とても簡単にセットアップで
きます(homebridgeの公式サイトでも[紹介]( https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Raspbian )されています)。
　手持ちのRaspberry Pi3Bを用いて、次のようなマシンを仕立てて試しました。
* USB接続したストレージから起動
* OSはUSBメモリ(USB 3.0、64Gバイト)にインストール
* Homebridgeイメージをインストールし、OS自体の管理用にcockpitをインストールする
* ラズパイ3用のアダプタを使用する
* マシンのCPU稼働率が高く発熱が高いため、金属ケースを使用する
　この方法ではラズパイの公式サイトから配布されているOSインストーラでHomebridgeを選択し、USBメモリに書き込むだけで必要な環境が手に入ります。
　便利な点としてOSイメージを書き込む前に、OSの環境設定を行うメニューがあるので、ここで必要事項を設定できます。
　なお、このイメージではHomebridge専用として、ヘッドレス（モニター、キーボード無し）で動作するよう設定されていて、動作後はWeb経由で設定を行えますが、最初はマシンのIPアドレスを確認するのと、正常にインストールできていることを確認するためモニタとキーボードをつけておいた方が良いと思います。
　最初の起動時にベースになっているRaspberry OSを実行可能にするための処理があるので数分ほど待たされます。
　正常に起動するとモニタがあればマシンのIPアドレスが表示されているので、これをメモしておきます（以下、Homebridgeマシン）。
　同じネットワークに接続されているマシンのブラウザから、HomebridgeマシンのIPアドレスにアクセスするとHomebridgeの管理画面（Web）にアクセスできます。
homebridgeマシンはavahiを用いて自分の存在をネットワーク内に広告しているのでマシン名でもアクセスできますが、動作不良の時の切り分けのためIPアドレスを確認したほうがいいと思います。
　このラズパイHomebridgeマシンでは、マシン起動→カメラ登録→アプリ登録ですぐにライブビューと録画ができました。
　さらにHoembridgeの設定UIのポートが80に設定されているため、マシンのIPアドレスかマシン名でアクセスでき、ともて使いやすくできています。
　注意点としてはラズパイを連続稼働させる難しさがあげられ、具体的には以下のような課題があります。
* ラズパイ3では、CPU使用率が高い状態が継続しマシンが高温になるため、冷却性能の良いケースとともに、CPU等にヒートシンクが必須と思われます。4以降はさらに消費電力が増え空冷ファンが必須になっています。
* USB充電器を電源に使えますが、ラズパイ3以降は消費電力が大きく大電流を流せるUSBケーブルやUSBアダプタが必要になります。適当なUSBケーブルを使ったところ、低電圧のため異常終了が頻発しました。
　結論としては、この方法は手元に本格的にラズパイを使うための部品が揃っている人か、これようにラズパイを揃える意思のある人向けです。　
## 方法２．PC/AT互換機やMacなどのマシンを使う
明示されているところを見つけていませんが、HKSVに接続するためにはコーデックとしてH264とAACが必要
なようです。
　この二つのコーデックは特許の関係でバイナリ配布が認められていないようで、ubuntuなどでは自分でffmpegをコンパイルする必要があります。
 今回、HKSVを使うために必要なH264とAACを有効にしたffmpegを準備することができませんでした。
　homnebridge用にffmpegを作る[ffmpeg for Homebridge]( https://github.com/homebridge/ffmpeg-for-homebridge )というプロジェクトがあり、こちらを利用してコンパイルに何回挑戦しても動作せず今回は諦めました。
　必要なソフトウェアを一式配布してくれるDockerなら必要なものをパッケージで導入できるのですが、Windowsで
は問題があるようで、UnixクローンのLinuxかMac OSが選択肢となります。
　私はPC/AT互換機ユーザーなので、初心者にも優しいubuntu系のlubuntuを使うこととしました。
　次のようなマシンにhomebridgeをインストールすることとしました。
* Asrock N100DC-ITXにメインメモリ32Gバイト、システム用としてNVme SSD 1台、WD Red 3.5インチHDD2台組込 
* lubuntu 22.04LTSをインストールしアップデートずみ
* 既にファイルサーバーとしてsambaとメディアサーバとしてminiDLNAをインストール済み
* dockerとdocker composeもインストール済み
　dockerkのHomebridgeイメージをインストールする前提として、dockerとdocker-composeがインストールされている必要があります。
　まずインストールされているか確認し、まだインストールしていない場合、OS標準のパッケージでインストールします。
　Homebridge公式サイトに[dockerイメージのインストール方法のページ]( https://github.com/homebridge/homebridge/wiki/Install-Homebridge-on-Docker )があるので
、それに従ってインストールします。
　インストールが終了すると、Homebridgeが起動済みです。
　同じネットワークのマシンのブラウザからHomebridgeをインストールしたマシンのIPアドレス、ポート番号が8581を指定することで管理画面にアクセスできます。
あとはcamera UIをインストールしカメラを登録すればライブビューと録画が利用できます。
　N100など最新のx86プロセッサならラズパイと比べて性能に余裕があるので、映像が乱れることも少なくなります。

# いくつかの注意点について
　今回、lubuntu上でHomebridge+Cameara UIを安定稼働できるまで3週間ほどかかりました。
　いくつか文書で見つけられない落とし穴がありました。
<dl>
        <dt>iCloudの「高度なデータ保護」の有効化</dt>
        <dd>HomekitやHomebridge、Camera UIのドキュメントを調べても、録画には「高度なデータ保護」が必要とは書いていません。Homekitの解説に、「End to Endで高度に暗号化されている」という記述があり、これがヒントでした。おそらくAppleはプライバシーを最優先のため、利用者以外はビデオにアクセスできない
環境を準備するための処置と思われます。</dd>
</dl>
<dl>
        <dt>ffmpegのコーデック</dt>
        <dd>Atomcamからの映像信号はH264ですが、音声はPCMでした。HKSVでは映像がH264、音声がAACにする必要があるようです。ubuntuのパッケージとして配布されているffmpeではいずれも有効になっていないため、H264とAACを有効にしたffmpegを自分でコンパイルする必要があります。ffmpeg for homebridgeというプロジェクトがあり利用してみましたが、どうもうまくいきませんでした。</dd>
</dl>