周辺機器
初級

スマートミラー ソフトウェア(スマートミラー ソフトウェア)

スマートミラーのソフトウェアは、ディスプレイ上の情報表示・外部サービス連携・ユーザーインタラクションを制御するプラットフォームである。最も広く使われているのはオープンソースのMagicMirror²で、Node.jsベースのモジュラーアーキテクチャを採用し、3,000以上のサードパーティモジュールで機能拡張が可能である。音声アシスタント(Alexa、Google Assistant)やスマートホームプラットフォーム(Home Assistant)との統合も実現できる。

0 回閲覧
0 いいね

MagicMirror²プラットフォーム

MagicMirror²は、スマートミラー向けに設計されたオープンソースのモジュラースマートミラープラットフォームである。2016年にMichael Teeuw氏が初代MagicMirrorを全面的に再設計してv2としてリリースした。GitHubでのスター数は20,000以上を誇り、スマートミラーソフトウェアのデファクトスタンダードとなっている。

技術スタック:

コンポーネント技術役割
サーバーサイドNode.js + Expressモジュール管理、API中継、設定管理
フロントエンドElectronデスクトップアプリとしてフルスクリーン表示
モジュール通信Socket.ioサーバーとフロントエンド間のリアルタイム通信
スタイリングCSS3レイアウト、テーマ、アニメーション
設定ファイルJavaScript(config.js)モジュール設定、レイアウト配置

MagicMirror²の最大の特徴はモジュールシステムである。表示する各機能(時計、天気、カレンダーなど)が独立したモジュールとして実装されており、config.jsファイルで有効・無効の切り替え、表示位置、パラメータの設定が可能である。

デフォルトモジュール

MagicMirror²には以下のデフォルトモジュールが同梱されている。

モジュール名機能データソース
clock時計表示(アナログ/デジタル)システム時刻
calendarカレンダー予定表示iCal/CalDAV(Google Calendar等)
currentweather現在の天気OpenWeatherMap API
weatherforecast天気予報(週間)OpenWeatherMap API
newsfeedニュースヘッドラインRSSフィード
compliments挨拶メッセージローカル設定
updatenotificationアップデート通知GitHub
alertアラート表示他モジュールからの通知

これらのデフォルトモジュールだけで基本的なスマートミラーとして十分に機能する。設定はconfig.jsで以下のような形式で記述する。

modules: [
  {
    module: "clock",
    position: "top_left"
  },
  {
    module: "calendar",
    position: "top_left",
    config: {
      calendars: [
        { url: "https://calendar.google.com/..." }
      ]
    }
  },
  {
    module: "weather",
    position: "top_right",
    config: {
      weatherProvider: "openweathermap",
      apiKey: "YOUR_API_KEY",
      location: "Tokyo",
      locationID: "1850147"
    }
  }
]

サードパーティモジュール

MagicMirror²のサードパーティモジュールは3,000以上が公開されており、さまざまな機能を追加できる。

カテゴリ代表的なモジュール機能
交通情報MMM-Wunderlist、MMM-GoogleTraffic電車遅延、道路渋滞情報
スマートホームMMM-HomeAssistantHome Assistantデバイス制御
音声操作MMM-AlexaControl、MMM-GoogleAssistant音声コマンドによる操作
顔認識MMM-Facial-Recognitionユーザー識別、プロフィール切替
カメラMMM-ip-camera、MMM-RTSP防犯カメラ映像表示
音楽MMM-SpotifySpotify再生情報表示
フィットネスMMM-FitbitFitbitアクティビティデータ
SNSMMM-TwitterTimelineTwitterタイムライン表示
日本特化MMM-JRLineJR路線運行情報
ゴミ出しMMM-Trashdayゴミ収集日カレンダー

モジュールのインストールは非常に簡単で、以下のコマンドで完了する。

cd ~/MagicMirror/modules
git clone https://github.com/作者/モジュール名.git
cd モジュール名
npm install

その後、config.jsにモジュール設定を追加するだけで有効になる。

モジュール開発の基本

独自のモジュールを開発することも可能である。MagicMirror²のモジュールは以下のファイル構造を持つ。

modules/
  MMM-MyModule/
    MMM-MyModule.js       # フロントエンド表示ロジック
    node_helper.js        # バックエンド処理(API呼び出しなど)
    package.json          # 依存パッケージ定義
    MMM-MyModule.css      # スタイルシート(任意)

フロントエンド側(MMM-MyModule.js)の基本構造は以下の通りである。

Module.register("MMM-MyModule", {
  defaults: {
    updateInterval: 60000
  },
  start: function() {
    this.data = null;
    this.scheduleUpdate();
  },
  getDom: function() {
    var wrapper = document.createElement("div");
    wrapper.innerHTML = this.data || "Loading...";
    return wrapper;
  },
  scheduleUpdate: function() {
    setInterval(() => {
      this.sendSocketNotification("FETCH_DATA", this.config);
    }, this.config.updateInterval);
  },
  socketNotificationReceived: function(notification, payload) {
    if (notification === "DATA_RECEIVED") {
      this.data = payload;
      this.updateDom();
    }
  }
});

バックエンド側(node_helper.js)でAPI呼び出しやデータ処理を行い、Socket.io経由でフロントエンドにデータを送信する仕組みとなっている。HTML/CSS/JavaScriptの基本知識があれば、独自モジュールの開発は比較的容易である。

音声アシスタント統合

スマートミラーに音声操作を追加することで、ハンズフリーでの情報取得やスマートホーム制御が可能になる。

音声アシスタント統合方法特徴
Amazon AlexaMMM-AlexaControl + Echo Dot最も幅広いスキル対応
Google AssistantMMM-GoogleAssistant + AIY Kit自然言語理解に優れる
Mycroft AIMycroft Mark II完全オープンソース
Rhasspyローカル音声認識クラウド不要、プライバシー重視

Amazon Alexaとの統合は最も手軽で、Raspberry Piの近くにEcho Dotを置き、MMM-AlexaControlモジュールでMagicMirror²と連携させる方法が一般的である。「アレクサ、ミラーに天気を表示して」のような音声コマンドで表示内容を制御できる。

プライバシーを重視する場合は、Rhasspyのようなローカル完結型の音声認識システムがおすすめである。インターネット接続なしで音声認識が動作し、発話データが外部サーバーに送信されることがない。

スマートホーム連携

Home Assistantとの連携により、スマートミラーをスマートホームのコントロールパネルとして活用できる。

連携可能なデバイスの例:

  • 照明(Philips Hue、IKEA TRADFRI、SwitchBot)
  • エアコン(Nature Remo、SwitchBot Hub)
  • 施錠(SesameスマートロックQrio Lock)
  • カメラ(Ring、Arlo)
  • センサー(温湿度、人感、開閉)
  • 掃除機(iRobot Roomba、Roborock)

MMM-HomeAssistantモジュールを使えば、Home AssistantのREST APIを通じてデバイスの状態表示と制御が可能である。タッチスクリーン対応のディスプレイを使用すれば、ミラー上のボタンをタッチして照明のオン/オフや温度調整を行うこともできる。

その他のソフトウェアプラットフォーム

MagicMirror²以外にもスマートミラー向けのソフトウェアプラットフォームが存在する。

プラットフォーム開発言語ライセンス特徴
MagicMirror²Node.jsMIT最大コミュニティ、モジュール3000+
HomeMirrorAndroidApache 2.0Androidタブレット流用向け
SmartMirror(Evan Cohen)Node.jsMIT音声認識統合に注力
MirrorMirror(Amazon)Node.js + AlexaサンプルAlexa Skills Kit学習用
DAKboardクラウドサービス商用セットアップ不要、月額課金

DAKboardはクラウドベースのソリューションで、Raspberry Piのブラウザでダッシュボードを表示するだけの最もシンプルな構成である。プログラミング不要でブラウザ上のGUIエディタでレイアウトをカスタマイズできるため、技術的なハードルを最小限にしたい場合に適している。

よくある質問

Q: MagicMirror²は日本語表示に対応していますか?

はい、完全に対応しています。MagicMirror²の設定ファイル(config.js)でlanguageを「ja」に設定するだけで、デフォルトモジュールの表示が日本語になります。天気の「晴れ」「曇り」、曜日の「月曜日」「火曜日」などが日本語で表示されます。日本語フォントはRaspberry Pi OSにデフォルトで含まれているNoto Sans CJKが使用されますが、カスタムCSSで好みのフォントに変更することも可能です。ニュースフィードも日本語のRSSフィードURLを指定すれば日本語ニュースが表示されます。

Q: MagicMirror²のモジュールは自動でアップデートされますか?

いいえ、デフォルトでは自動アップデートは行われません。各モジュールは手動でのアップデートが必要です。方法はモジュールディレクトリに移動して「git pull」を実行し、必要に応じて「npm install」を再実行するだけです。ただし、MMM-UpdateNotificationモジュール(デフォルト搭載)がMagicMirror²本体のアップデートを検知してミラー上に通知してくれるため、アップデートの存在を見逃すことは少ないでしょう。自動アップデートを設定したい場合は、cronジョブでgit pullとnpm installを定期実行するスクリプトを作成する方法があります。

Q: スマートミラーにタッチ操作を追加できますか?

はい、タッチスクリーン対応のディスプレイを使用すれば可能です。ただし、ハーフミラーを通してのタッチ操作には注意点があります。静電容量方式のタッチパネルは、ハーフミラーガラス(厚さ3mm以上)を前面に配置するとタッチ感度が大幅に低下する場合があります。赤外線方式のタッチフレームをミラー前面に設置する方法が確実です。また、MMM-Touchモジュールを導入することで、MagicMirror²のモジュールをタッチ操作で切り替えたり、スワイプでページ送りしたりする機能を追加できます。

Q: MagicMirror²の動作にはどのくらいのスペックが必要ですか?

Raspberry Pi 3 Model B以上であれば基本的に動作しますが、快適な動作にはRaspberry Pi 4(4GB RAM)以上を推奨します。モジュール数が10個以下であればPi 3でも問題ありませんが、顔認識や動画表示などリソースを多く使うモジュールを追加する場合はPi 4またはPi 5が必要です。メモリ使用量の目安として、MagicMirror²本体で約200MB、モジュール1つあたり10〜50MBを消費します。ストレージは32GB microSDで十分ですが、ログやキャッシュの蓄積を考慮して64GBを選んでおくとより安心です。