Nature RemoをローカルAPIで操作する自作Webアプリ【クラウド障害に備える】

スマートホーム

 

はじめに

ある日、照明を点けようと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と家電を登録する

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

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の障害で困った方の参考になれば嬉しいです。

参考リンク

コメント

タイトルとURLをコピーしました