スマートミラー ソフトウェア(スマートミラー ソフトウェア)
スマートミラーのソフトウェアは、ディスプレイ上の情報表示・外部サービス連携・ユーザーインタラクションを制御するプラットフォームである。最も広く使われているのはオープンソースのMagicMirror²で、Node.jsベースのモジュラーアーキテクチャを採用し、3,000以上のサードパーティモジュールで機能拡張が可能である。音声アシスタント(Alexa、Google Assistant)やスマートホームプラットフォーム(Home Assistant)との統合も実現できる。
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-HomeAssistant | Home Assistantデバイス制御 |
| 音声操作 | MMM-AlexaControl、MMM-GoogleAssistant | 音声コマンドによる操作 |
| 顔認識 | MMM-Facial-Recognition | ユーザー識別、プロフィール切替 |
| カメラ | MMM-ip-camera、MMM-RTSP | 防犯カメラ映像表示 |
| 音楽 | MMM-Spotify | Spotify再生情報表示 |
| フィットネス | MMM-Fitbit | Fitbitアクティビティデータ |
| SNS | MMM-TwitterTimeline | Twitterタイムライン表示 |
| 日本特化 | MMM-JRLine | JR路線運行情報 |
| ゴミ出し | 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 Alexa | MMM-AlexaControl + Echo Dot | 最も幅広いスキル対応 |
| Google Assistant | MMM-GoogleAssistant + AIY Kit | 自然言語理解に優れる |
| Mycroft AI | Mycroft 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.js | MIT | 最大コミュニティ、モジュール3000+ |
| HomeMirror | Android | Apache 2.0 | Androidタブレット流用向け |
| SmartMirror(Evan Cohen) | Node.js | MIT | 音声認識統合に注力 |
| 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を選んでおくとより安心です。