Personal Smart Mirror Display - Modular Information Hub
This is MrBULU's personal MagicMirror installation - a customized smart mirror platform built on MagicMirror² v2.32.0. This setup transforms any display into an intelligent information hub with real-time weather, calendar events, public transport, and custom modules.
- 🌦️ Advanced Weather Integration - AccuWeather Forecast Deluxe & OpenWeatherMap
- 📅 Extended Calendar System - CalendarExt3 with agenda view
- 🚌 Public Transport Info - Real-time HAFAS transport data
- 🎭 Entertainment Modules - Jokes, Moon phases, and embedded content
- 💡 Smart Home Control - Philips Hue lights integration
- 🔧 Remote Management - Web-based configuration and control
- 📱 Touch Interface - SmartTouch module for interaction
- 🔄 Auto-Update Script - Keep all modules up to date with one command
# System Requirements
- Node.js 22.14.0+
- Git
- Raspberry Pi 4+ (recommended) or any Linux system
- Display with HDMI input# Clone this repository
git clone https://github.com/MrBULU/MagicMirror.git
cd MagicMirror
# Install dependencies (production only)
npm run install-mm
# Copy and configure
cp config/config.js.sample config/config.js
# Edit config/config.js with your settings
# Start MagicMirror
npm start# Install dev dependencies
npm run install-mm:dev
# Start in development mode
npm run start:dev| Module | Purpose | Status |
|---|---|---|
| MMM-AccuWeatherForecastDeluxe | Detailed weather forecasts | ✅ Active |
| MMM-OpenWeatherMapForecast | Alternative weather source | ✅ Active |
| MMM-MoonPhase | Lunar phase display | ✅ Active |
| Module | Purpose | Status |
|---|---|---|
| MMM-CalendarExt3 | Enhanced calendar display | ✅ Active |
| MMM-CalendarExt3Agenda | Agenda view for events | ✅ Active |
| Module | Purpose | Status |
|---|---|---|
| MMM-PublicTransportHafas | Real-time public transport | ✅ Active |
| Module | Purpose | Status |
|---|---|---|
| mmm-hue-lights | Philips Hue integration | ✅ Active |
| MMM-Remote-Control | Web interface control | ✅ Active |
| MMM-SmartTouch | Touch screen interaction | ✅ Active |
| Module | Purpose | Status |
|---|---|---|
| MMM-Jokes | Daily humor display | ✅ Active |
| MMM-EmbedURL | Embed external content | ✅ Active |
| MMM-Screencast | Screen sharing capability | ✅ Active |
The main configuration is stored in config/config.js. Key sections:
var config = {
address: "0.0.0.0", // Listen on all interfaces
port: 8080,
basePath: "/",
ipWhitelist: [], // Allow all IPs
useHttps: false,
httpsPrivateKey: "",
httpsCertificate: "",
language: "en",
locale: "en-US",
modules: [
// Your custom module configuration here
]
};┌─────────────────────────────────────┐
│ top_bar top_bar │
│ top_left top_right │
│ upper_third upper_third │
│ │
│ middle_center │
│ │
│ lower_third lower_third │
│ bottom_left bottom_right │
│ bottom_bar bottom_bar │
└─────────────────────────────────────┘
{
module: "MMM-AccuWeatherForecastDeluxe",
position: "top_right",
config: {
apikey: "YOUR_ACCUWEATHER_API_KEY",
locationKey: "YOUR_LOCATION_KEY",
updateInterval: 600000, // 10 minutes
forecastDays: 5
}
}{
module: "MMM-CalendarExt3",
position: "bottom_left",
config: {
mode: "month",
instanceId: "basicCalendar",
locale: "en-US",
maxEventLines: 5
}
}| Script | Purpose | Usage |
|---|---|---|
npm start |
Start MagicMirror (X11) | npm start |
npm run start:dev |
Development mode | npm run start:dev |
npm run server |
Server only mode | npm run server |
npm run start:wayland |
Wayland display server | npm run start:wayland |
npm run install-mm |
Production install | npm run install-mm |
npm run install-mm:dev |
Development install | npm run install-mm:dev |
npm run config:check |
Validate configuration | npm run config:check |
npm test |
Run all tests | npm test |
npm run lint:js |
Lint JavaScript files | npm run lint:js |
npm run lint:css |
Lint CSS files | npm run lint:css |
This repository includes a convenient script to update all installed modules at once.
# Navigate to modules directory and run the update script
cd ~/MagicMirror/modules
./updates_modules.shThe script (modules/updates_modules.sh) automatically:
- Loops through all MMM-* modules
- Pulls latest changes from their repositories
- Updates npm dependencies
- Provides status feedback
Note: This script assumes modules were originally cloned via git. For manually installed modules, you may need to update them individually.
MagicMirror/
├── config/
│ ├── config.js # Main configuration file
│ ├── config.js.sample # Configuration template
│ └── .gitkeep # Keep directory in git
├── modules/
│ ├── default/ # Core MagicMirror modules
│ ├── MMM-AccuWeatherForecastDeluxe/
│ ├── MMM-CalendarExt3/
│ ├── MMM-CalendarExt3Agenda/
│ ├── MMM-EmbedURL/
│ ├── MMM-Jokes/
│ ├── MMM-MoonPhase/
│ ├── MMM-OpenWeatherMapForecast/
│ ├── MMM-PublicTransportHafas/
│ ├── MMM-Remote-Control/
│ ├── MMM-Screencast/
│ ├── MMM-SmartTouch/
│ ├── mmm-hue-lights/
│ └── updates_modules.sh # Module update script
├── js/
│ ├── electron.js # Electron main process
│ ├── main.js # Core application
│ └── node_helper.js # Node helper utilities
├── css/
│ ├── main.css # Main stylesheet
│ └── custom.css # Custom styling
├── translations/ # Language files
├── tests/ # Test files
├── package.json # Dependencies and scripts
└── README.md # This file
- Raspberry Pi 4B (4GB RAM minimum, 8GB recommended)
- 32GB+ microSD card (Class 10, A2 rating)
- 2-way mirror acrylic (3mm thickness)
- Monitor (24" or larger recommended)
- Picture frame (deep enough for components)
- Power supplies (Pi + Monitor)
- Mount monitor in picture frame
- Attach 2-way mirror to front
- Install Raspberry Pi behind monitor
- Connect HDMI and power cables
- Ensure proper ventilation
# AccuWeather
ACCUWEATHER_API_KEY=your_accuweather_key
ACCUWEATHER_LOCATION_KEY=your_location_key
# OpenWeatherMap
OPENWEATHER_API_KEY=your_openweather_key# HAFAS Public Transport
HAFAS_ENDPOINT=your_hafas_endpoint# Philips Hue Bridge
HUE_BRIDGE_IP=192.168.1.xxx
HUE_USERNAME=your_hue_username🖥️ Display Problems
# Check display configuration
xrandr --query
# Force specific resolution
xrandr --output HDMI-1 --mode 1920x1080📶 Module Not Loading
# Check module installation
ls -la modules/MMM-ModuleName/
# Restart MagicMirror
pm2 restart MagicMirror🌐 API Connection Issues
# Test internet connectivity
ping -c 4 google.com
# Check API endpoints
curl -I https://api.openweathermap.org/# View MagicMirror logs
pm2 logs MagicMirror
# System logs
journalctl -u magicmirror -fCreate /etc/systemd/system/magicmirror.service:
[Unit]
Description=MagicMirror
After=network.target
[Service]
Type=simple
User=bulupi
WorkingDirectory=/home/bulupi/MagicMirror
ExecStart=/usr/bin/npm start
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target# Enable service
sudo systemctl enable magicmirror
sudo systemctl start magicmirror# Increase GPU memory split
echo 'gpu_mem=128' | sudo tee -a /boot/config.txt
# Disable unnecessary services
sudo systemctl disable bluetooth
sudo systemctl disable cups
# Optimize for kiosk mode
echo 'disable_overscan=1' | sudo tee -a /boot/config.txt- Limit concurrent API calls
- Set appropriate refresh intervals
- Use local caching when possible
- Optimize CSS animations
Found a bug or want to add a feature? Contributions are welcome!
- Fork this repository
- Create feature branch:
git checkout -b feature/awesome-feature - Commit changes:
git commit -m 'Add awesome feature' - Push to branch:
git push origin feature/awesome-feature - Open Pull Request
This project is licensed under the MIT License - see LICENSE.md for details.
- v2.32.0 - Current MagicMirror version
- Latest modules - All modules updated to latest versions
- Custom configuration - Personalized for MrBULU's setup
⭐ If you found this setup helpful, please give it a star!
Last updated: October 2025
