はじめに
ある日、照明を点けようとNature Remoのアプリを開いたら、何も操作できませんでした。原因は自宅ではなくNature側のサーバー障害。Nature Remoは通常クラウド経由で動くため、サーバーが落ちると家のリモコンが全滅します。家のネットワークもRemo本体も無事なのに、です。
実はNature RemoにはローカルAPIがあり、同じLAN内からならクラウドを経由せず赤外線信号を送れます。そこで、ローカルAPIだけで家電を操作できるWebアプリを自作し、自宅サーバー(Synology NAS)に置きました。この記事ではその紹介とセットアップ手順をまとめます。
作ったものはGitHubで公開しています。
クラウド経由とローカルAPIの違い
| 公式アプリ(クラウド) | ローカルAPI | |
|---|---|---|
| 経路 | スマホ → Natureのサーバー → Remo | ブラウザ → 自宅サーバー → Remo |
| Nature側の障害 | 操作不能 | 影響なし |
| インターネット断 | 操作不能 | 影響なし(LAN内で完結) |
| 操作端末 | スマホアプリのみ | ブラウザならPCでもスマホでも |
ローカルAPIは各Remo本体が持っている機能で、http://<RemoのIP>/messages に対して赤外線信号の受信(学習)と送信ができます。エアコンの温度指定のような高級な操作はできませんが、「リモコンのボタンを覚えさせて、そのまま再生する」ことができます。
副産物として、公式アプリではできなかったPC(MacBookなど)のブラウザからの家電操作もできるようになりました。個人的にはこれが意外と便利です。
作ったもの
FastAPI + SQLiteのシングルコンテナ構成で、フロントはバニラJSのシンプルなWebアプリです。Dockerが動くマシンなら何でもホストになります(Raspberry Pi、Linuxサーバー、各社NASなど)。

主な機能:
- 信号の学習と送信 — 実際のリモコンをRemoに向けて押すだけでボタン登録
- スマホ最適化UI — 大きなボタン、ダークモード、ホーム画面追加対応
- 端末制限 — ブラウザごとに登録制。管理者が承認した端末だけ操作可能
- 監査ログ — 誰がいつ何を操作したかを記録(日次ローテート付き)
動作要件
- Docker(Compose v2)が動くマシン
- そのマシンがNature Remoと同じネットワークにいること
- RemoのIPアドレスがわかること
- ローカルAPI対応のRemoであること(Nature Remo nanoは非対応。Lapisは今後対応予定 — 公式ドキュメントより)
ポイント:RemoのIPはルーターのDHCP予約(固定割り当て)を強く推奨します。IPが変わるたびに設定し直しになるためです。Remoは
dns-sd -B _remo._tcp local.(Mac)で発見でき、mDNS名の末尾6桁はMACアドレスの下3バイトと一致します。
STEP 1:セットアップ
サーバー上で以下を実行します。
git clone https://github.com/yimosy/nature-remo-homelab.git
cd nature-remo-homelab
# 管理者トークンを設定(.env は git 管理外)
cp .env.example .env
# .env の ADMIN_TOKEN に長いランダム文字列を設定
# 生成例: openssl rand -base64 24
mkdir -p data
docker compose up -d --build
あとはスマホやPCのブラウザで http://<サーバーのIP>:8000 を開くだけです。
Synology NASの場合の補足
私はSynology NASにデプロイしました。2箇所ハマったので共有します。
- rsyncでファイル転送すると「Permission denied」 — SSHログインはできるのに、です。SynologyはDSM側で「rsyncサービス」を有効にしないと、rsync接続だけ拒否されます。コントロールパネル → ファイルサービス → rsync で有効化してください。
- 起動時に「Bind mount failed: data does not exist」 — SynologyのDockerはバインドマウント元のフォルダを自動作成しません。
mkdir -p dataを忘れずに。
STEP 2:端末登録と管理者ログイン
ブラウザで開くと端末登録画面が出るので、端末名を付けて登録します。登録画面下部の「管理者の方はこちら」から ADMIN_TOKEN でログインすると、全機能が使えるようになります。
家族のスマホは、設定 → 「端末の管理」で個別に承認します。承認した端末だけが操作でき、「拒否」にすると即座に使えなくなります。

STEP 3:Remoと家電を登録する
- 設定 → 「Nature Remo」で名前とIPアドレスを追加し、「接続確認」を押す
- 設定 → 「家電と信号」で家電(例: 💡 リビング照明)を追加

STEP 4:信号を学習させる
「信号を学習」を押してから、実際のリモコンをRemo本体の正面10〜30cmに向けてボタンを1回短く押します。信号は自動で受信されます。

学習のコツと注意点:
- リモコンはRemoの正面10〜30cmで、短く1回押す
- 何度やっても失敗するリモコンは、赤外線ではなくRF(電波)式の可能性があります。RF式はRemoでは学習できません
- 公式アプリに登録済みのリモコン内容は引き継げません。全部を移そうとせず、「照明のON/OFF」「エアコン停止」「冷房26度」など、本当に使うボタンだけ登録するのがおすすめです
- エアコンは「冷房26度」「停止」のように、状態ごと1ボタンで学習するとシンプルです(エアコンのリモコンは設定全体を毎回送信しているため、この方式が確実です)
使ってみる
「リモコン」タブに部屋(Remo)ごとの家電ボタンが並びます。タップすれば送信。これだけです。

スマホではホーム画面に追加しておくと、公式アプリとほぼ同じ感覚で使えます。そしてこちらはNatureのサーバーが落ちていても動きます。
セキュリティ上の注意
- LAN内での利用が前提です。ポートをインターネットに直接公開しないでください
- 外出先から使いたい場合はVPN(WireGuard、Tailscaleなど)経由を推奨します
- 端末制限に加えて、
ALLOW_CIDRSでネットワーク単位のIP制限もかけられます
まとめ
- Nature Remoはクラウド障害で操作不能になるが、ローカルAPIならLAN内で完結する
- Dockerが動くマシンがあれば
docker compose upだけで自作リモコンサーバーを持てる - 副産物としてPCのブラウザからも家電操作が可能に
- 信号は「本当に使うボタンだけ」登録するのが移行のコツ
公式クラウドを置き換えるものではなく、あくまで「避難用の非常口」という位置づけですが、一度作っておくと安心感が違います。同じようにNature Remoの障害で困った方の参考になれば嬉しいです。


コメント