<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Family Command Center – Pi 5 Touch Mirror with 19 Pages, AI Comics &amp; Presence Control]]></title><description><![CDATA[<p dir="auto">Hi everyone! After many evenings of tinkering I’d like to share our family’s MagicMirror² build. It hangs in the hallway and has become the central info hub for a family of five – calendars, school timetables, shopping lists, news, music, and a few experiments with AI. Everything is touch-operated.</p>
<hr />
<h2>Hardware</h2>
<ul>
<li><strong>Raspberry Pi 5</strong> in a passive Flirc case, booting from USB</li>
<li><strong>Samsung DB22D</strong> – 22" Smart Signage LED display, mounted horizontally</li>
<li>Connected via <strong>HDMI</strong> (video) and <strong>USB</strong> (touch)</li>
<li><strong>IKEA SYMFONISK bookshelf speaker</strong> (Sonos) mounted below the screen, sitting on the SYMFONISK shelf with built-in wireless phone charging – so the mirror doubles as a charging station</li>
<li><strong>S3KM1110 mmWave radar sensor</strong> for presence detection (much more reliable than PIR – it detects you even when you stand still)</li>
</ul>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/IMG_5447.jpeg" alt="" class=" img-fluid img-markdown" /></p>
<h2>Software overview</h2>
<ul>
<li>MagicMirror² on Raspberry Pi OS Bookworm</li>
<li><strong>19 pages</strong>, navigated by swipe gestures (MMM-Touch + MMM-pages + MMM-page-indicator with custom FontAwesome icons per page)</li>
<li>MMM-ModuleScheduler switches between day and night layout automatically</li>
<li>MMM-Remote-Control for administration and as an API for my presence script</li>
</ul>
<h2>The pages</h2>
<h3>Family calendar</h3>
<p dir="auto">MMM-CalendarExt3 in week view, merging iCloud family calendars, school holidays, both kids’ football clubs’ match schedules (auto-imported from the association’s ICS feeds), Juventus fixtures and the F1 calendar – color-coded per source.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/2.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h3>School timetables (3 pages)</h3>
<p dir="auto">One page per child, rendered with MMM-CalendarExt3Journal as a proper weekly timetable grid. The data comes straight from the schools’ ICS exports, so it updates itself – no manual maintenance. The kids check their own page in the morning.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/3.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/4.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/5.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h3>Shopping list with recipe integration</h3>
<p dir="auto">MMM-Bring shows our Bring! lists with full touch support – tap to add items (on-screen keyboard), tap to check them off. We use multiple lists; one of them is fed by <strong>Tandoor Recipes</strong> (self-hosted on a Synology NAS): when I add a recipe’s ingredients to the shopping list in Tandoor, they appear on the mirror. Meal plan and recipe of the day come from a small self-written MMM-Tandoor module.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/16.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/17.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/17.1.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/16.1.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h3>News ticker with AI comic generation</h3>
<p dir="auto">This is my favorite gimmick. A self-written module (MMM-NewsComicFeed) shows rotating headlines from Swiss news sources at the top, plus Juventus/F1 feeds at the bottom. Tapping a headline sends it through the Claude API, which writes a comic scenario in one of 15 styles; an image model renders it, and the result is posted to Mastodon and shown on the mirror. Instant satire from the morning news.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/20.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/20.1.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h3>Claude assistant page</h3>
<p dir="auto">A self-written chat module with an inline DE/CH keyboard, Markdown rendering and optional web search – the family can ask anything directly on the mirror. The comic generation can be triggered from here as well.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/18.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h3>More pages</h3>
<p dir="auto">Weather (OpenWeather one-call), Pi-hole statistics, live football scores, F1 dashboard, a math clock (AlbertClock), a German word clock, YouTube playlists, Sonos control, Mastodon timeline, Home Assistant sensors (dishwasher status and even the car’s fuel level on the main page), and a thermal dashboard (see below).</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/1.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/6.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/7.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/8.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/9.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/10.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/11.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/12.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/13.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/14.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/15.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/soldatino13/magicmirror-setup/main/screenshots/19.png" alt="alt text" class=" img-fluid img-markdown" /></p>
<h2>Presence detection &amp; power management</h2>
<p dir="auto">A Python script reads the mmWave sensor via GPIO and controls the display: DPMS + HDMI-CEC off after 1h without presence during the day, 15 min at night. When the screen turns off, the script also calls the MMM-Remote-Control API to switch the mirror to an empty hidden page.</p>
<p dir="auto">Why that last step matters: I rewrote MMM-Webview so that embedded web pages <strong>unload their Electron renderer process when hidden</strong> and reload when shown. Combined with the presence script, all heavy web content dies as soon as nobody is around – a big win for RAM, CPU and temperature on a passively cooled Pi.</p>
<h2>Heat management (passive case, no fan)</h2>
<p dir="auto">With several Electron webviews the Pi used to sit at 55–75 °C. To understand what was going on I built <strong>MMM-ThermalWatch</strong>: current temperature/clock/load, a 24h/7-day max-temperature bar chart (touch to switch views, tap a bar for details), throttle-flag decoding, and a peak log that captures <em>which processes were actually busy</em> whenever a temperature threshold is crossed – measured as instantaneous CPU from /proc snapshots, with proper labels for Electron child processes.</p>
<p dir="auto">The verdict: the peaks were exactly the parallel webview renderers. Since the suspend/resume rewrite and the presence integration, evenings run noticeably cooler – all of it without a fan.</p>
<p dir="auto"><code>[SCREENSHOT: ThermalWatch page]</code></p>
<h2>Complete module list</h2>
<p dir="auto"><strong>Navigation, layout &amp; system</strong></p>
<ul>
<li>MMM-pages – 19 pages plus hidden pages (screensaver, admin)</li>
<li>MMM-Touch – swipe gestures for page navigation</li>
<li>MMM-page-indicator – with custom FontAwesome icons per page via CSS</li>
<li>MMM-TouchButton – shutdown / reboot / stop buttons on the mirror</li>
<li>MMM-ModuleScheduler – automatic day/night layout switching</li>
<li>MMM-Remote-Control (+ MMM-Remote-Control-Repository) – admin UI and REST API (also used by my presence script)</li>
<li>MMM-Keyboard – on-screen keyboard, used by Bring!</li>
<li>alert, updatenotification – MagicMirror core</li>
</ul>
<p dir="auto"><strong>Always visible</strong></p>
<ul>
<li>MMM-FlipClock – flip-style clock</li>
<li>MMM-DateOnly – date display</li>
<li>MMM-Sonos – now-playing cards for all Sonos groups (mini mode, album-art colors, progress and source icons)</li>
</ul>
<p dir="auto"><strong>Calendars &amp; family</strong></p>
<ul>
<li>MMM-CalendarExt3 – merged family week view</li>
<li>MMM-CalendarExt3Journal – 3× weekly timetable grid (one per child)</li>
<li>calendar (core module) – ICS feed provider for all of the above: iCloud family calendars, exam calendar, school holidays, two football club match calendars, Juventus fixtures, F1 calendar, and both schools’ timetable exports</li>
<li>MMM-homeassistant-sensors – 2× on the main page: dishwasher status (elapsed/remaining time, salt, rinse aid) and the car’s fuel level + mileage from Home Assistant</li>
</ul>
<p dir="auto"><strong>Content pages</strong></p>
<ul>
<li>MMM-OpenWeatherForecast – current conditions, hourly and daily forecast</li>
<li>MMM-pihole-stats – Pi-hole DNS statistics</li>
<li>MMM-Webview – 5× (own rewrite, see below): Home Assistant dashboard, football live scores, betting-pool rankings, F1 dashboard, Sonos web app</li>
<li>MMM-HTMLSnippet – AlbertClock (math clock, hosted locally on the Pi-hole)</li>
<li>MMM-germanwordclock – word clock</li>
<li>MMM-RemoteYoutube – YouTube playlists with time-based switching</li>
<li>MMM-Mastodon – Mastodon timeline (shows the generated comics, among other things)</li>
<li>MMM-Bring – Bring! shopping lists with touch add/check-off</li>
<li>MMM-Tandoor – meal plan / recipe of the day (self-written)</li>
<li>MMM-NewsComicFeed – 2× news ticker, top (Swiss news) and bottom (Juventus + F1), with tap-to-comic (self-written)</li>
<li>MMM-ComicButton – comic generation pipeline (self-written)</li>
<li>MMM-Claude – AI assistant page (self-written)</li>
<li>MMM-ThermalWatch – thermal dashboard (self-written)</li>
</ul>
<h2>Self-written modules in this build</h2>
<ul>
<li><strong>MMM-NewsComicFeed</strong> – RSS ticker with tap-to-comic function</li>
<li><strong>MMM-ComicButton</strong> – Claude → image model → Mastodon pipeline, 15 comic styles</li>
<li><strong>MMM-Claude</strong> – chat assistant with on-screen keyboard and web search</li>
<li><strong>MMM-Tandoor</strong> – meal plan / recipe display from a self-hosted Tandoor instance</li>
<li><strong>MMM-Webview</strong> (rewrite) – webview embedding with suspend/resume of hidden pages</li>
<li><strong>MMM-ThermalWatch</strong> – thermal dashboard with process-level peak diagnosis</li>
</ul>
]]></description><link>https://forum.magicmirror.builders/topic/20296/family-command-center-pi-5-touch-mirror-with-19-pages-ai-comics-presence-control</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Jul 2026 21:26:49 GMT</lastBuildDate><atom:link href="https://forum.magicmirror.builders/topic/20296.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Jul 2026 13:54:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Family Command Center – Pi 5 Touch Mirror with 19 Pages, AI Comics &amp; Presence Control on Mon, 06 Jul 2026 15:30:15 GMT]]></title><description><![CDATA[<p dir="auto">Awesome! 👏</p>
<p dir="auto">One nitpick: <code>MMM-Remote-Control</code> doesn’t need <code>MMM-Remote-Control-Repository</code> anymore.</p>
]]></description><link>https://forum.magicmirror.builders/post/131521</link><guid isPermaLink="true">https://forum.magicmirror.builders/post/131521</guid><dc:creator><![CDATA[KristjanESPERANTO]]></dc:creator><pubDate>Mon, 06 Jul 2026 15:30:15 GMT</pubDate></item></channel></rss>